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

2020-02-27 其他范文 下载本文

西南交通大学计算机组成原理课程设计报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“西南交通大学课程设计”。

《计算机组成实验 C》

课程设计

适用专业:电子信息类专业

专 班 学 姓

业:软件工程 级:软件一班 号: 名:某某某

指导教师:陈红梅

实验学期:2014-2015 第 1 学期

西 南 交 通 大 学

信息科学与技术学院 目录

简化计算机系统的设计.......................................................................................................................2

一、实验目的...............................................................................................................................2 二.、实验内容...............................................................................................................................2 三.、预习要求...............................................................................................................................2

四、实验报告...............................................................................................................................2 1.BLOCK图...........................................................................................................................3 2.程序设计(纸质的版本我用手抄)...........................................................................4 3.仿真波形图.................................................................................................................114、仿真中遇到的问题:...................................................................................................14

五、实验感想............................................................................................................................15

简化计算机系统的设计

一、实验目的通过学习简单的指令系统及其各指令的操作流程,用 VHDL 语言实现简单 的处理器模块,并通过调用存储器模块,将处理器模块和存储器模块连接形成简化的计 算机系统。

二.、实验内容

1.用 VHDL 语言实现简单的处理器模块。2.调用存储器模块设计 64×8 的存储器模块。

3.将简单的处理器模块和存储器模块连接形成简单的计算机系统。4.将指令序列存入存储器,然后分析指令执行流程。

三.、预习要求

1、学习简单指令集。

2、学习各指令的操作流程。

四、实验报告

1.BLOCK图

2.程序设计(纸质的版本我用手抄)

CPU的设计: LIBRARY ieee;USE ieee.std_logic_1164.ALL;

PACKAGE mypack IS CONSTANT idle : std_logic_vector(3 DOWNTO 0):=“0000”;CONSTANT load : 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”;CONSTANT 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):=“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 IS PORT(reset : IN std_logic;--清零信号低有效

clock : IN std_logic;--时钟信号

Write_Read: OUT std_logic;--读写信号,'1'为写 M_addre: 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级行为描述-

ARCHITECTURE 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)BEGIN IF reset = '0' THEN status

CASE status IS WHEN 0 =>

status IF IR(15 DOWNTO 12)= Stop THEN

status

status CASE IR(15 DOWNTO 12)IS

WHEN Read|Write|Jmp|Jz|Swap =>

status

WHEN OTHERS =>

status

END CASE;WHEN 3 => IF IR(15 DOWNTO 12)= Swap THEN

status

status status CASE IR(15 DOWNTO 12)IS

WHEN Read|Write =>

status

WHEN OTHERS =>

status

END CASE;WHEN OTHERS => status

ELSE

NULL;END IF;END PROCESS status_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 :=(OTHERS=>'0');R1 :=(OTHERS=>'0');R2 :=(OTHERS=>'0');R3 :=(OTHERS=>'0');A :=(OTHERS=>'0');MAR '0');MDR '0');ELSIF(clock'event AND clock='1')THEN overflow

WHEN 0=>--状态0 IR

--取指令

PC := PC+1;

--程序计数器加1

WHEN 1=>--状态1 IF(IR(15 DOWNTO 12)/= stop)THEN MAR

END IF;

CASE IR(15 DOWNTO 12)IS WHEN load => R0:= “0000” & IR(11 DOWNTO 8);WHEN shlp|shrp => CASE IR(11 DOWNTO 10)IS

--Rx to A WHEN “00”=> A:= R0;WHEN “01”=> 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 + 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 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:=temp(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=> 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(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 DOWNTO 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;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 => NULL;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)

WHEN OTHERS => NULL;END CASE;

WHEN 4=>--CASE IR(15 DOWNTO 12)IS WHEN jmp =>

条件转移指令

PC := IR(11 DOWNTO 0);MAR

WHEN Jz =>--令

IF(R0=“00000000”)then PC := IR(11 DOWNTO 0);MAR

WHEN Read => MAR MAR NULL;END CASE;

WHEN 5 =>--MAR--

CASE IR(15 DOWNTO 12)IS WHEN Read => R0 := M_data_in;

WHEN OTHERS=> NULL;END CASE;

取双字节指令的后半部分状态4

--无条件转移指状态5 状态6--

END CASE;END IF;END proce seq;

comb: PROCESS(reset, status)BEGIN IF(reset = '1' AND status = 5 AND IR(15 DOWNTO 12)= Write)THEN

Write_Read

ELSE Write_Read

3.仿真波形图

3.1总体的仿真波形图

1、我们可以看到CPU有6种工作模式,并且在不同的工作模式下实现了不同的功能。

2、我们的仿真波形上的M_q输出的波形为,000、15、24、D0、1F......与我们cpu_mem.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、R1中的值发生了变化,而R2、R3中的值依然为00 没有发生变化。

分析:第一条指令:由于我们程序中设定为00010101即为load指令,转化为十六进制即为第一条指令15H,而我们在CPU中约定load指令为Read 01F R0

第二条指令:同样的我们将24H设定为Move R1,R0 R1

第三、四指令:我们将 D0H、1FH设定为 Read 01F,即R0

第五条指令:我们将94H设定为 Shl R1 即将R1中的值左移一位,操作完成后R1的值变成了0A,与波形的情况也吻合。第六条指令:我们将31H设定为 Add R0,R1 R0

第七、八两条指令:我们将E0H和1EH设定为 Write 01E 01E

第九条指令:我们将41H设定为 SUB R0,R1 R0

第十条指令:我们将A1H设定为 Awap R0,R1(R0)(R1)指令,即为交换指令,我们预期R0=0A R1=39,从波形上看出我们执行了 A1H后与我们的R0、R1值与预期结果相同。

第十一条指令:61H 设定为 OR R0,R1 R0

第十二条指令:84H设定为Shr RI R1

第十三条指令:51H设定为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后R3 的值为1CH,指令运行正确。

第十七、十八条指令:D0H、1EH设定为Read 01E R0

第十九、二十条指令:C0H、19H 设定为:JZ019,若(R0)=0转移至019,否则执行下一条指令,我们分析R0中的值并不为0,故不会跳转,我们从波形上也可以看出,R0、R1、R2、R3中的值并没有发生任何变化

第二十一、二十二条指令:1DH、D0H设定为Read 01D R0

第二十三、二十四条指令:B0H、13H设定为: JMP 013指令 无条件跳转至013H地址,而013H 为JZ 019 指令 同时这是的R0寄存器中的值为0,满足了跳转条件,此时程序将跳转到019H地质处执行,即是我们的低二十五条指令,为停止指令,程序停止。

第二十五条指令:F0H 设定为Stop 指令,执行到此处程序停止。

此后的指令均为数据存储的指令,在这里我就不一一进行介绍了,详情可以查看下图这个32字节的RAM内情表。

4、仿真中遇到的问题:

仿真过程中的一些问题首先是PC、R0、R1、R2、R3里面的值的顺序需要将其颠倒。

仿真后还有一个问题是R0、R1、R2、R3的值显示不正确,R0只显示了到了05 后面的值就都不正确了,调试了半天,我发现波形显示M_q在上升沿变化后,与之相连的M_data_in竟然不变,最后经过各种搜索后解决了此问题,原来lpm为输出多做了一次寄存,也就是两个脉冲才会读出MAR的值。与PC的变化不衔接,整整快了两个脉冲。所以把图上红圈处的勾去掉就行了。

五、实验感想

经过此次实验

我对CPU的工作原理有了很深刻的认识,发现了其中蕴藏着巨大的乐趣,我完全的搞懂了此次试验的原理,再次基础上,我还能结合此次实验去理解微机接口,计算机组成原理等课程,通过此次实验,我能熟练的使用VHDL来编写大型的程序代码,对于一个学软件的人来说,我的编程能力又上了一个台阶。

除此之外,我学习到了很多底层的东西,让我对计算机的工作原理有了更深刻的理解,让我在此后的编程中将受益无穷。

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

《西南交通大学计算机组成原理课程设计报告.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
西南交通大学计算机组成原理课程设计报告
点击下载文档
相关专题 西南交通大学课程设计 报告 课程设计 原理 西南交通大学课程设计 报告 课程设计 原理
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文