东北大学秦皇岛分校
计算机与通信工程学院
计算机组成原理课程设计
专业名称 班级学号 学生姓名 指导教师 设计时间
计算机科学与技术
2014.12.20-2015.1.9
课程设计任务书
专业:计算机科学与技术 学号: 学生姓名(签名):
设计题目:指令系统及程序计数器设计
一、设计实验条件
综合实验楼808
二、设计任务及要求
1. 8号指令; 2. 26号指令; 3. 38号指令; 4. 程序计数器; 5. 三选一MUX;
三、设计报告的内容
1. 设计题目与设计任务(设计任务书)
题目:指令系统及程序计数器设计 1. 8号,26号,38号指令设计; 2. 程序计数器; 3. 三选一MUX。
2. 前言(绪论)
融会贯通计算机组成原理课程的内容,通过知识的综合运用,加深对计算机系统各个模块的工作原理及相互联系的认识;
学习运用VHDL进行FPGA/CPLD设计的基本步骤和方法,熟悉EDA的设计、模拟调试工具的使用,体会FPGA/CPLD技术相对于传统开发技术的优点;
培养科学研究的工作能力,取得工程设计与组装调试的实践经验。
3. 设计主体
1. 指令系统设计:
第8号指令: 助记符:ADD A, #II 操作码:ADD
指令类型:算术运算指令 寻址方式:立即数寻址
功能:将存储器EM地址的值加入累加器A中 第26号指令: 助记符:OR A, @R? 操作码:OR
寻址方式:寄存器间接寻址
功能:累加器A“或”间址存储器的值 第38号指令: 助记符:WRITE EM 操作码:WRITE
寻址方式:寄存器直接寻址
功能:将累加器A中数据写到外部地址EM中
2. 模型机硬件设计: 题目:程序计数器PC
功能:一个16位的程序地址寄存器,用来存放下一条指令的地址。 提供读取指令的地址或以PC内容为基准计算操作的地址。 3. 其他设计:
题目:三选一MUX
功能:输入两个电平,可以实现高电平状态、低电平状态、高祖态三种状态的输出。
【系统设计】 1. 模型机逻辑框图
图1 整机逻辑框图
图2 芯片引脚逻辑框图
图3 CPU逻辑框图
2. 指令系统设计
表1 指令简介
周期编助记符 号 数CT T5 将立即EM→W 数II加8 ADD A, #II 入累加器A中 XX A+W→A T3 累加器A“或”01100126 OR A,@R? 间址存XX 储器的值 将累加器A中数据写38 WRITE EM 到外部地址EM中 XX T4 W→MAR MAREN W,A,ALU,F T3 A→ALU→DBUS→EM S=111,EMEN,EMRD 100101 110 T5 T3 A+W->A PC→MAR, T6 PC+1 EM→W EMEN,EMRD,WEN PCOE,MAREN PC,S=010 101 T4 T5 R->DBUS->MAR EM→W EMEN,EMRD,WEN POCE,MAREN R,MAR,EM,W,A,ALU,DBUS S=000 000111101 T4 PC+1 EMEN,EMRD,WEN,ARE A,ALU,F PC→MAR PCOE,MAREN PC, MAR, W,数 功能 机器码 总拍微操作 控制信号 硬件 节涉及的MAR,EM,
3. 微操作控制信号
1、XRD :外部设备读信号,当给出了外设的地址后,输出此信号,从指定外设读数据。 2、EMWR:程序存储器EM写信号。 3、EMRD:程序存储器EM读信号。
4、PCOE:将程序计数器PC的值送到地址总线ABUS上(MAR)。 5、EMEN:将程序存储器EM与数据总线DBUS接通,由EMWR和EMRD 决 是将DBUS数据写到EM中,还是从EM读出数据送到DBUS。 6、IREN:将程序存储器EM读出的数据打入指令寄存器IR。
7、EINT:中断返回时清除中断响应和中断请求标志,便于下次中断。 8、ELP:PC打入允许,与指令寄存器IR3、IR2位结合,控制程序跳转。 9、FSTC:进位置1,CY=1 10、FCLC:进位置0,CY=0
11、MAREN:将地址总线ABUS上的地址打入地址寄存器MAR。 12、MAROE:将地址寄存器MAR的值送到地址总线ABUS上。 13、OUTEN:将数据总线DBUS上数据送到输出端口寄存器OUT里。 14、STEN:将数据总线DBUS上数据存入堆栈寄存器ST中。
15、RRD:读寄存器组R0-R3,寄存器R?的选择由指令的最低两位决定。 16、RWR:写寄存器组R0-R3,寄存器R?的选择由指令的最低两位决定。 17、CN:决定运算器是否带进位移位,CN=1带进位,CN=0不带进位。 18、FEN:将标志位存入ALU内部的标志寄存器。 19、WEN:将数据总线DBUS的值打入工作寄存器W中。 20、AEN:将数据总线DBUS的值打入累加器A中。
21-23: X2~ X0 : X2、X1、X0三位组合来译码选择将数据送到DBUS上的寄存器。 24-26: S2~ S0 : S2、S1、S0三位组合决定ALU做何种运算。
4. 指令执行流程
从左至右依次是8号,26号,38号指令流程图:
图4
【系统实现】 1、 模型机实现
(1)逻辑电路的图形符号表示、功能
图5 机器周期产生电路
(2)系统实现 library IEEE;
use IEEE.STD_LOGIC_11.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code. --library UNISIM;
--use UNISIM.VComponents.all;
entity PC is
Port ( ELP : in STD_LOGIC; IR3 : in STD_LOGIC; IR2 : in STD_LOGIC; C : in STD_LOGIC; Z : in STD_LOGIC; LDPC : out STD_LOGIC); end PC;
architecture Behavioral of PC is begin
process(ELP,IR3,IR2,C,Z) is begin
if(ELP = '1') then LDPC <= '1'; else if(IR3 = '0') then if(IR2 = '0') then
if(C = '1') then LDPC <= '0'; else
LDPC <= '1'; end if; else if(Z = '1') then LDPC <= '0'; else
LDPC <= '1'; end if; end if; else
LDPC <= '0'; end if; end if;
end process; end Behavioral;
2、 逻辑电路设计
(1)逻辑电路的图形符号表示、功能
图6 三选一MUX
(2)系统实现 library IEEE;
use IEEE.STD_LOGIC_11.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity MUX is
port( a:in STD_LOGIC; b:in STD_LOGIC; c:in STD_LOGIC; e1:in STD_LOGIC; e2:in STD_LOGIC; en:in STD_LOGIC; fout:out STD_LOGIC;) end MUX
architecture Behavioral of MUX is begin
process(a,b,c,e1,e2,en) begin if(e1='1') then fout<=a; else if(e2='1') then fout<=b; else fout<=c; end if; end if; end process; end Behaviral;
【系统测试】
(一)、模型机测试(机器周期产生电路)
1、 功能仿真
仿真过程如下:
在sources窗口处右击,加入新的源文件
创建波形仿真激励文件.tbw:选Test Bench Waveform,并输入文件名test_alu 初始化时钟周期及相关参数→finash
右侧会出现 .tbw文件窗口,设置输入引脚的值,存盘
左侧sources窗口选择“behavioral simulation”,下面processes窗口会自动出现
\"Modelsim Simulator\"
双击其中的“Simulate behavioral model”会自动调用“Modelsim ”进行仿真,观
察波形窗口,观察是否正确
图7 测试图
即在c=1,IR2=0,IR3=1,Z=1的情况下,仿真图如下:
图8 仿真图
2、RTL级逻辑电路
图9 逻辑电路图
(二)硬件测试
1、功能仿真
仿真过程如下:
在sources窗口处右击,加入新的源文件
创建波形仿真激励文件.tbw:选Test Bench Waveform,并输入文件名 test_74ls
初始化时钟周期及相关参数→finash
右侧会出现 .tbw文件窗口,设置输入引脚的值,存盘
左侧sources窗口选择“behavioral simulation”,下面processes窗口会自
动 出现\"Modelsim Simulator\"
双击其中的“Simulate behavioral model”会自动调用“Modelsim ”进行仿
真,观察波形窗口,观察是否正确
图10 测试图
即在b=1,c=0,e1=1,e2=1,en=1的情况仿真图如下:
图11 仿真图
2、RTL级逻辑电路
图12 逻辑电路图
2.结束语
【总结】
对于本次课程设计,我们小组做好了分工,每一个人都有承担相应的工作,承担自己的设计,然后在汇总以及找出我们各自设计的不好地方。最后我们也依照设计的内容分版块进行了反思,其中各部分就设计及调试过程中出现的问题及解决方法总结如下:
首先就设计阶段而言对于指令部分的设计,所涉及的领域我们生疏,而且理解起来抽象,动起手来耗时间。第一个问题是安装软件也遇到很大的困难,甚好,我们的实验室有安装相关的软件。然后我们就去了实验室,在实验室里氛围更浓烈,一起交流学习,掌握软件的基本用法。第二个问题就是逻辑电路的设计,因为很多数字电路相关的知识,已经被我们淡忘,再一次用到只能对着课本,同时在网上查阅资料,在设计中我们对芯片的引脚的使用、端口的功能以及信号间的传送,都再三确认,因为我们要保证设计是无误的,这样在下一阶段的实施以及仿真测试中才能达到预期效果,实现功能。还有,对于实现程序计数器和三选一MUX,我们选用了VHDL作为实现语言,有了老师的教学讲义,我们很快就入门,不过对于具体的编程实现,我们还是会犯如实体未定义、或是由于信号定义不全而引起的输出错误,看到错误,我们会提起更大的精神,一遍遍检查、调试,直至获得正确的输出。另一个难关就是仿真测试。起初Xilinx ISE软件没法调用仿真软件ModelSim进行仿真,我们先前并不知道,所以走了很多的远路,最后通过问同学解决了这个问题,因为新建文件时没有选用用ModelSim软件仿真选项,建立新文件时将这个选项选上即可;还有建好测试波形进行测试时,Process中没有ModelSim Simulator选项,点一下Sources中的那个波形文件,ModelSim Simulator选项就出来了。还要注意进行测试时要选择合适的波形文件然后调用仿真软件进行仿真,否则得到的波形图是红线,是错误的。
此次我们的课程设计内容较简单,再加上我们查阅了较多的资料,大体上是完成了课程设计的内容,达到了基本的要求。
【心得体会】
回首这一次课设,可以说是收获新知识与巩固过去所学的共存。我们要进行相关的逻辑电路的设计、最底层机器语言的编写、指令系统设计等,需要用到过去所学的数字电路、汇编语言、组成原理各方面的知识,并且,我们要进行仿真、要实现相关寄存器功能,需要用到从未接触过的VHDL语言以及仿真测试软件modelism。
对我们而言,程序计数器,应是相当熟悉的,可是真正实现时,就有很大的问题了,因为只知道判断下一步顺序执行还是转移,可是没有人思考怎么去实现转移?分多少种情况考虑?不同情况下PC的值又是如何变化的?从最开始的指令系统设计,我们将指令一步步分解成周期、节拍,对照CPU逻辑框图将微程序控制指令分配到位,进而了解了指令执行都的每一步都在发生什么。不同情况下PC的值又是如何变化的?很多问题,可能就在实践中不言而喻了。
质的变化需要量的积累,而时间是累积一切进步的源泉,所以一定要告诉自己,任何情况下都要珍惜时间,让自己做到更好。课程设计这段时间,就是让我们增长能力、锻炼自己的一个大好机会。在整个过程中,无论是程序设计、编程实现的能力、思考的能力,还是学习的能力,甚至是与人交流合作的能力,都会有明显的进步。
3.参考资料
[1] 程晓荣,翟学明,王晓霞. 计算机组成与结构[M].北京:中国电力出版社,2007. [2] 袁静波,丁顺利,王和兴,宋欣 . 计算机组成与结构[M] .北京:机械工业出版社,2011. [3] 陈耀和.VHDL语言设计技术[M]. 北京:电子工业出版社,2004. [4] 汉泽西.EDA技术及其应用[M]. 北京:北京航空航天出版社,2004
四、设计时间与安排
1、设计时间: 2周 2、设计时间安排:
熟悉实验设备、收集资料: 2 天
设计图纸、实验、计算、程序编写调试: 7 天
编写课程设计报告: 2 天
答辩: 1 天