西南交通大学计算机组成原理课程设计报告

上传人:小** 文档编号:92111129 上传时间:2019-07-07 格式:DOC 页数:16 大小:415.50KB
返回 下载 相关 举报
西南交通大学计算机组成原理课程设计报告_第1页
第1页 / 共16页
西南交通大学计算机组成原理课程设计报告_第2页
第2页 / 共16页
西南交通大学计算机组成原理课程设计报告_第3页
第3页 / 共16页
西南交通大学计算机组成原理课程设计报告_第4页
第4页 / 共16页
西南交通大学计算机组成原理课程设计报告_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《西南交通大学计算机组成原理课程设计报告》由会员分享,可在线阅读,更多相关《西南交通大学计算机组成原理课程设计报告(16页珍藏版)》请在金锄头文库上搜索。

1、计算机组成实验 C课程设计适用专业:电子信息类专业 专业:软件工程 班级:软件一班 学号: 姓名:某某某指导教师:陈红梅 实验学期:2014-2015 第 1 学期西南交通大学信息科学与技术学院目录简化计算机系统的设计2一、实验目的2二.、实验内容2三.、预习要求2四、实验报告21. BLOCK图32.程序设计(纸质的版本我用手抄)43.仿真波形图114、仿真中遇到的问题:14五、 实验感想15简化计算机系统的设计一、实验目的通过学习简单的指令系统及其各指令的操作流程,用 VHDL 语言实现简单 的处理器模块,并通过调用存储器模块,将处理器模块和存储器模块连接形成简化的计 算机系统。二.、实验

2、内容1. 用 VHDL 语言实现简单的处理器模块。2. 调用存储器模块设计 648 的存储器模块。3. 将简单的处理器模块和存储器模块连接形成简单的计算机系统。4. 将指令序列存入存储器,然后分析指令执行流程。三.、预习要求1、学习简单指令集。2、学习各指令的操作流程。四、实验报告1. BLOCK图 2.程序设计(纸质的版本我用手抄)CPU的设计:LIBRARY ieee;USE ieee.std_logic_1164.ALL;PACKAGE mypack ISCONSTANT idle : std_logic_vector(3 DOWNTO 0) :=0000;CONSTANT load :

3、 std_logic_vector(3 DOWNTO 0) :=0001;CONSTANT move : std_logic_vector(3 DOWNTO 0) :=0010;CONSTANT addx : std_logic_vector(3 DOWNTO 0) :=0011;CONSTANT subp : std_logic_vector(3 DOWNTO 0) :=0100;CONSTANT andp : std_logic_vector(3 DOWNTO 0) :=0101;CONSTANT orp : std_logic_vector(3 DOWNTO 0) :=0110;CONS

4、TANT xorp : std_logic_vector(3 DOWNTO 0) :=0111;CONSTANT shrp : std_logic_vector(3 DOWNTO 0) :=1000;CONSTANT shlp : std_logic_vector(3 DOWNTO 0) :=1001;CONSTANT swap : std_logic_vector(3 DOWNTO 0) :=1010;CONSTANT jmp : std_logic_vector(3 DOWNTO 0) :=1011;CONSTANT jz : std_logic_vector(3 DOWNTO 0) :=

5、1100;CONSTANT read : std_logic_vector(3 DOWNTO 0) :=1101;CONSTANT write : std_logic_vector(3 DOWNTO 0) :=1110;CONSTANT stop : std_logic_vector(3 DOWNTO 0) :=1111;END mypack;LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;USE WORK.mypack.ALL;-cpu实体声明-ENTITY cpu ISPORT( reset

6、: IN std_logic; -清零信号低有效 clock : IN std_logic; -时钟信号 Write_Read: OUT std_logic; -读写信号,1为写 M_address: OUT std_logic_vector(11 DOWNTO 0); -地址线 M_data_in: IN std_logic_vector(7 DOWNTO 0); -数据输入线 M_data_out: OUT std_logic_vector(7 DOWNTO 0); -数据输出线 overflow: OUT std_logic);-溢出标志END cpu;-cpuRTL级行为描述-ARCH

7、ITECTURE RTL of cpu IS SIGNAL IR: std_logic_vector(15 DOWNTO 0); -指令寄存器 SIGNAL MDR: std_logic_vector(7 DOWNTO 0); -数据寄存器 SIGNAL MAR: std_logic_vector(11 DOWNTO 0); -地址寄存器 SIGNAL status: integer RANGE 0 TO 6; -状态寄存器BEGIN status_change: PROCESS(reset, clock, status ) BEGINIF reset = 0 THEN status stat

8、us IF IR(15 DOWNTO 12) = Stop THEN status = 1; ELSE status CASE IR(15 DOWNTO 12) ISWHEN Read|Write|Jmp|Jz|Swap =status status IF IR(15 DOWNTO 12)= Swap THEN status = 0; ELSE status status CASE IR(15 DOWNTO 12) ISWHEN Read|Write =status status status = 0; END CASE; ELSENULL;END IF; END PROCESS status

9、_change; seq: PROCESS(reset,clock) VARIABLE PC:std_logic_vector(11 DOWNTO 0); -程序计数器 VARIABLE R0,R1,R2,R3: std_logic_vector(7 DOWNTO 0); -通用寄存器 VARIABLE A: std_logic_vector(7 DOWNTO 0); -临时寄存器 VARIABLE temp: std_logic_vector(8 DOWNTO 0); -临时变量 BEGIN IF(reset=0) THEN- 清零 IR 0); PC := (OTHERS=0); R0 :

10、= (OTHERS=0); R1 := (OTHERS=0); R2 := (OTHERS=0); R3 := (OTHERS=0); A := (OTHERS=0); MAR 0); MDR 0); ELSIF(clockevent AND clock=1) THEN overflow -状态0 IR -状态1 IF (IR(15 DOWNTO 12) /= stop) THEN MAR R0:= 0000 & IR(11 DOWNTO 8); WHEN shlp|shrp = CASE IR(11 DOWNTO 10) IS- Rx to A WHEN 00= A:= R0; WHEN 0

11、1= A:= R1; WHEN 10= A:= R2; WHEN OTHERS = A:= R3; END CASE; WHEN Move|addx|subp|andp|orp|xorp|Swap= CASE IR(9 DOWNTO 8) IS- Ry to A WHEN 00= A:=R0; WHEN 01= A:=R1; WHEN 10= A:=R2; WHEN OTHERS= A:=R3; END CASE; WHEN OTHERS = NULL; END CASE; WHEN 2= -状态2 CASE IR(15 DOWNTO 12) IS WHEN addx = - Rx:= Rx

12、+ A; CASE IR(11 DOWNTO 10) IS WHEN 00= temp := (R0(7) & R0(7 DOWNTO 0) + (A(7) & A(7 DOWNTO 0); R0:=temp(7 DOWNTO 0); overflow temp :=(R1(7) & R1(7 DOWNTO 0) + (A(7) & A(7 DOWNTO 0); R1:=temp(7 DOWNTO 0); overflow temp :=(R2(7) & R2(7 DOWNTO 0) + (A(7) & A(7 DOWNTO 0); R2:=temp(7 DOWNTO 0); overflow

13、 temp :=(R3(7) & R3(7 DOWNTO 0) + (A(7) & A(7 DOWNTO 0); R3:=temp(7 DOWNTO 0); overflow - Rx:= Rx - A; CASE IR(11 DOWNTO 10) IS WHEN 00= temp :=(R0(7) & R0(7 DOWNTO 0) + NOT(A(7) & A(7 DOWNTO 0) + 1; R0:=temp(7 DOWNTO 0); overflow temp :=(R1(7) & R1(7 DOWNTO 0) + NOT(A(7) & A(7 DOWNTO 0) + 1; R1:=te

14、mp(7 DOWNTO 0); overflow temp :=(R2(7) & R2(7 DOWNTO 0) + NOT(A(7) & A(7 DOWNTO 0) + 1; R2:=temp(7 DOWNTO 0); overflow temp :=(R3(7) & R3(7 DOWNTO 0) + NOT(A(7) & A(7 DOWNTO 0) + 1; R3:=temp(7 DOWNTO 0); overflow CASE IR(11 DOWNTO 10) IS WHEN 00= R0:= A; WHEN 01= R1:= A; WHEN 10= R2:= A; WHEN OTHERS

15、= R3:= A; END CASE; WHEN shrp = CASE IR(11 DOWNTO 10) IS WHEN 00= R0:= 0 & A( 7 DOWNTO 1 ); WHEN 01= R1:= 0 & A( 7 DOWNTO 1 ); WHEN 10= R2:= 0 & A( 7 DOWNTO 1 ); WHEN OTHERS= R3:= 0 & A( 7 DOWNTO 1 ); END CASE; WHEN shlp = CASE IR(11 DOWNTO 10) IS WHEN 00= R0:= A( 6 DOWNTO 0 ) & 0; WHEN 01= R1:= A(

16、6 DOWNTO 0 ) & 0; WHEN 10= R2:= A( 6 DOWNTO 0 ) & 0; WHEN OTHERS= R3:= A( 6 DOWNTO 0 ) & 0; END CASE; WHEN andp = -Rx:= Rx AND A; CASE IR(11 DOWNTO 10) IS WHEN 00= R0:=R0 AND A; WHEN 01= R1:=R1 AND A; WHEN 10= R2:=R2 AND A; WHEN OTHERS= R3:=R3 AND A; END CASE; WHEN orp = -Rx:= Rx OR A; CASE IR(11 DO

17、WNTO 10) IS WHEN 00= R0:=R0 OR A; WHEN 01= R1:=R1 OR A; WHEN 10= R2:=R2 OR A; WHEN OTHERS= R3:=R3 OR A; END CASE; WHEN xorp = -Rx:= Rx XOR A; CASE IR(11 DOWNTO 10) IS WHEN 00= R0:=R0 XOR A; WHEN 01= R1:=R1 XOR A; WHEN 10= R2:=R2 XOR A; WHEN OTHERS= R3:=R3 XOR A; END CASE; WHEN Swap = -Swap: Rx to Ry

18、; CASE IR(11 DOWNTO 8) IS WHEN 0100= R0:=R1; WHEN 1000= R0:=R2; WHEN 1100= R0:=R3; WHEN 0001= R1:=R0; WHEN 1001= R1:=R2; WHEN 1101= R1:=R3; WHEN 0010= R2:=R0; WHEN 0110= R2:=R1; WHEN 1110= R2:=R3; WHEN 0111= R3:=R1; WHEN 1011= R3:=R2; WHEN 0011= R3:=R0; WHEN OTHERS= NULL; END CASE; WHEN OTHERS = NUL

19、L; END CASE; WHEN 3= -状态3 CASE IR(15 DOWNTO 12) IS WHEN Swap= - Swap: A to Rx CASE IR(11 DOWNTO 10) IS WHEN 00= R0:=A; WHEN 01= R1:=A; WHEN 10= R2:=A; WHEN OTHERS= R3:=A; END CASE; WHEN jmp|Jz|Read|Write = IR(7 DOWNTO 0) NULL; END CASE; WHEN 4= -状态4 CASE IR(15 DOWNTO 12) IS WHEN jmp = - 无条件转移指令 PC :

20、= IR(11 DOWNTO 0); MAR - 条件转移指令 IF(R0=00000000) then PC := IR(11 DOWNTO 0); MAR = IR(11 DOWNTO 0); else MAR MAR MAR = IR(11 DOWNTO 0); MDR NULL; END CASE; WHEN 5 = -状态5 MAR -状态6 CASE IR(15 DOWNTO 12) IS WHEN Read = R0 := M_data_in;WHEN OTHERS= NULL; END CASE; END CASE; END IF; END process seq;comb:

21、PROCESS (reset, status)BEGIN IF (reset = 1 AND status = 5 AND IR(15 DOWNTO 12)= Write ) THEN Write_Read = 1; ELSE Write_Read = 0; END IF;END PROCESS comb;M_address = MAR;M_data_out = MDR; END RTL;3.仿真波形图3.1总体的仿真波形图1、 我们可以看到CPU有6种工作模式,并且在不同的工作模式下实现了不同的功能。2、 我们的仿真波形上的M_q输出的波形为,000、15、24、D0、1F.与我们cpu_m

22、em. Mif文件中所输入的指令一一对应。3、 我们看到PC随着时钟信号的改变在自加1。并且不断的从内存文件中依次读出相应的指令,将其执行。4、 我们看到R0的值在变化,依次为00、05、39、43、9、0A、3B、18、43、00,和所给的实例程序的情况完全吻合。同理也可以看出R1、R2、R3均为正确结果5、 我们可以看到地址寄存器也随着时钟信号在自加1,说明我们的PC和地址寄存器是共同协调工作的,随着PC加1地址也随之加1.6、 在数据寄存器在CPU执行第7、8两条指令后其值也是随之改变为了R0中的值,与我们的预期相同。3.2仿真波形的分析 变化: 我们可以看到执行完上面的的七条指令后R0

23、、R1中的值发生了变化,而R2、R3中的值依然为00 没有发生变化。分析:第一条指令:由于我们程序中设定为00010101即为load指令,转化为十六进制即为第一条指令15H,而我们在CPU中约定load指令为Read 01F R0-(01F) ,即为将立即数5送给R0寄存器,所以当我们执行15H这条指令后CPU会将05送给R0寄存器,我们也可以从波形上看到,当执行完成15H指令后R0中的值变成了05;第二条指令:同样的我们将24H设定为Move R1,R0 R1-(R0) 是一条转移指令,把R0中的值送给R1,从波形图上可看出 执行完成24H后 R1中的值变成了05,与我们的预期相符。第三、

24、四指令:我们将 D0H、1FH设定为 Read 01F,即R0-(01)F 将1F中的值送给R0,操作完后R0的值就为我们在1F单元中存储的39 的数据值了。从波形图上我们也能看出吻合。第五条指令:我们将94H设定为 Shl R1 即将R1中的值左移一位,操作完成后R1的值变成了0A,与波形的情况也吻合。 第六条指令:我们将31H设定为 Add R0,R1 R0-(R0)+(R1) 操作完成后R0的值为R0和R1的和,很明显的看出我们仿真波形上的值是正确的。第七、八两条指令:我们将E0H和1EH设定为 Write 01E 01E-(R0) 我们执行完成后01E单元的值在RAM中显示为43,与实

25、际相符。第九条指令:我们将41H设定为 SUB R0,R1 R0-(R0-R1)指令,即为减法指令, 我们预测执行完41H后R0的值为39,波形图显示正确。第十条指令:我们将A1H设定为 Awap R0,R1 (R0)(R1)指令,即为交换指令 ,我们预期R0=0A R1=39 ,从波形上看出我们执行了 A1H后与我们的R0、R1值与预期结果相同。第十一条指令:61H 设定为 OR R0,R1 R0-(R0) AND (RI) 执行完城后R0=3B 与波形图相同。第十二条指令:84H设定为Shr RI R1-(RI)右移执行完成后R1应为1C 与波形图结果相同指令正确。第十三条指令:51H设定

26、为AND R0,R1 执行相与操作,预计R0中为18 ,波形图上当执行到这条指令后R0中结果确实为38,指令运行正确。第十四条指令:28H设定为Move R2,R0 转移指令,将R0的值送给R2,预计R2中的值将为18,从波形图上看出R2值当运行到28H的时候确实为18,我们的指令运行正确。第十五条指令:2DH设定为Move R3,R1 转移指令 将R1中的值送给R3,我们预期R3中的值将会为1C,但执行完成后我们从波形图上看出R3的值为1CH,指令运行正确。第十六条指令:7BH设定为XOR R2,R3 将R2和R3异或 我们预期 R3中的之将会变为1CH,从波形图上看到我们运行完成7BH后R

27、3 的值为1CH,指令运行正确。第十七、十八条指令:D0H、1EH设定为Read 01E R0-(01E) 将01E地址中的值送给R0寄存器,我们预期R0中的值将会为 43,从波形图上可以看出当运行到此处的时候R0的值变成了43,指令运行正确。第十九、二十条指令:C0H、19H 设定为:JZ019,若(R0)=0转移至019,否则执行下一条指令,我们分析R0中的值并不为0,故不会跳转,我们从波形上也可以看出,R0、R1、R2、R3中的值并没有发生任何变化第二十一、二十二条指令:1DH、D0H设定为Read 01D R0-(01D),即将01D地址中的值取出送给R0,预期R0中的值将为0,从波形

28、图上也可以看出,执行到此处R0的值变成了0 。第二十三、二十四条指令:B0H、13H设定为: JMP 013指令 无条件跳转至013H地址,而013H 为JZ 019 指令 同时这是的R0寄存器中的值为0,满足了跳转条件,此时程序将跳转到019H地质处执行,即是我们的低二十五条指令,为停止指令,程序停止。第二十五条指令:F0H 设定为Stop 指令,执行到此处程序停止。此后的指令均为数据存储的指令 ,在这里我就不一一进行介绍了,详情可以查看下图这个32字节的RAM内情表。4、仿真中遇到的问题:仿真过程中的一些问题首先是PC、R0、R1、R2、R3里面的值的顺序需要将其颠倒。 仿真后还有一个问题

29、是R0、R1、R2、R3的值显示不正确,R0只显示了到了05 后面的值就都不正确了,调试了半天,我发现波形显示M_q在上升沿变化后,与之相连的M_data_in竟然不变,最后经过各种搜索后解决了此问题,原来lpm为输出多做了一次寄存,也就是两个脉冲才会读出MAR的值。与PC的变化不衔接,整整快了两个脉冲。所以把图上红圈处的勾去掉就行了。五、 实验感想经过此次实验 我对CPU的工作原理有了很深刻的认识,发现了其中蕴藏着巨大的乐趣,我完全的搞懂了此次试验的原理,再次基础上,我还能结合此次实验去理解微机接口,计算机组成原理等课程,通过此次实验,我能熟练的使用VHDL来编写大型的程序代码,对于一个学软

30、件的人来说,我的编程能力又上了一个台阶。除此之外,我学习到了很多底层的东西,让我对计算机的工作原理有了更深刻的理解,让我在此后的编程中将受益无穷。可能老师您会看到我这个课程设计的很多拷贝,反正是我做的就是我做的,别人参考也好拷贝也好,我都觉得无所谓,重要的是我能学习到东西,这也让我学习到了很多做人的道理,你说同学问你要课程设计,我能不给么,但是作为同学我只能啰嗦一句,你只能参考啊,不要完全照搬。单是有些人他就要完全照搬你的图和分析,自己也不提出自己的看法和见解,这总是让我很心寒,特别是那些学习成绩还不错的。我真是想不通问什么要人家好心给你的报告参考,你反过来要坑人家,就这样的人品,学习好又能咋样呢,都是转空子的人,以后也不会得到大家的认可。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号