东北大学秦皇岛分校
计算机与通信工程学院
计算机组成原理课程设计
指令系统及数据总线设计
东北大学秦皇岛分校课程设计任务书
专业:计算机科学与技术 学号: 学生姓名:
设计题目:指令系统及数据总线设计
一、 设计实验条件
综合楼试验室808
硬件:PC机
软件:Xilinx ISE ModelSim
编程语言:VHDL
二、设计任务及要求
1. 10号指令;
2. 27号指令;
3. 35号指令;
4. 37号指令;
5. 数据总线DBUS;
6. 6. 74LS138译码器。
三、设计报告的内容
1.设计题目与设计任务
题目:指令系统及数据总线设计
1、16位模型机设计-指令系统及计数器设计
表1.指令系统设计
2、模型机硬件设计: 数据总线DBUS
3、逻辑电路设计: 74LS138译码器
2.前言
1.融会贯通计算机组成原理课程的内容,通过知识的综合运用,加深对计算机系统各个模块的工作原理及相互联系的认识;
2.学习运用VHDL进行FPGA/CPLD设计的基本步骤和方法,熟悉EDA的设计、模拟调试工具的使用,体会FPGA/CPLD技术相对于传统开发技术的优点;
3.培养科学研究的独立工作能力,取得工程设计与组装调试的实践经验。
3.设计主体
【模型机设计】
1. 指令系统设计:
第10号指令: 助记符:ADDC A, @R?
格式:操作码和地址码
操作码:ADDC
地址码:A, @R?
功能:将间址存储器的值加入累加器A中,带进位
寻址方式:直接寻址
第27号指令: 助记符:OR A, MM
格式:操作码和地址码
操作码:OR
地址码:A,MM
功能:累加器A“或”存储器MM地址的值
寻址方式:直接寻址
第35号指令: 助记符:MOV MM, A
格式:操作码和地址码
操作码:MOV
地址码:MM,A
功能:将A中的值送入存储器MM地址中
寻址方式:直接寻址
第37号指令: 助记符:READ MM
格式:操作码和地址码
操作码:READ
地址码:MM
功能:从外部地址MM读入数据,存入累加器A中
寻址方式:直接寻址
【系统设计】
1. 模型机逻辑框图
图1 整机逻辑框图
图2 芯片引脚逻辑框图
图3 CPU逻辑框图
【设计指令系统】
1、 指令系统设计
表2
2、微操作控制信号
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做何种运算。
3、指令执行流程
表3
以流程图表示如下:
T2 PCOE, MARIEN
Add mov or read
(二) 硬件测试(三态双向数据总线DBUS)
(1)模型机实现
1.逻辑电路设计
图4三态双向数据总线DBUS
2.VDHLM描述如下
l;LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY tri_bibus IS
PORT(
EN : IN STD_LOGIC;
DIR : IN STD_LOGIC;
A,B : INOUT STD_LOGIC_VECTOR(7 DOWNTO 0)
);
END tri_bibus;
ARCHITECTURE tri_bibus_arch OF tri_bibus IS
SIGNAL aout,bout :STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
PROCESS (A,EN,DIR)
BEGIN
IF((EN='0')AND(DIR='1')) THEN
bout<=A;
ELSE
bout<="ZZZZZZZZ";
END IF;
B<=bout;
END PROCESS;
PROCESS (B,EN,DIR)
BEGIN
IF((EN='0')AND(DIR='0')) THEN
aout<=B;
ELSE
aout<="ZZZZZZZZ";
END IF;
A<=aout;
END PROCESS;
END tri_bibus_arch;
(2)系统实现
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity ls139 is
port(
G1,A1,B1,G2,A2,B2 :STD_LOGIC;
Y1 :OUT STD_LOGIC_VECTOR(0 TO 3);
Y2 :OUT STD_LOGIC_VECTOR(0 TO 3)
);
end ls139;
architecture Behavioral of ls139 is
SIGNAL IN1 :STD_LOGIC_VECTOR(1 DOWNTO 0);
SIGNAL IN2 :STD_LOGIC_VECTOR(1 DOWNTO 0);
begin
IN1 <= B1&A1;
IN2 <= B2&A2;
P1:PROCESS(G1,IN1)
BEGIN
IF(G1='0')THEN
CASE IN1 IS
WHEN "00" => Y1 <="0111";
WHEN "01" => Y1 <="1011";
WHEN "10" => Y1 <="1101";
WHEN "11" => Y1 <="1110";
WHEN OTHERS => Y1 <="XXXX";
END CASE;
ELSE
Y1 <="XXXX";
END IF;
END PROCESS;
P2:PROCESS(G2,IN2)
BEGIN
IF(G2='0')THEN
CASE IN2 IS
WHEN "00" => Y2 <="0111";
WHEN "01" => Y2 <="1011";
WHEN "10" => Y2 <="1101";
WHEN "11" => Y2 <="1110";
WHEN OTHERS => Y2 <="XXXX";
END CASE;
ELSE
Y2 <="XXXX";
END IF;
END PROCESS;
end Behavioral;
【模型机测试(三态双向数据总线DBUS)】
功能仿真
仿真过程如下:
● 在sources窗口处右击,加入新的源文件
● 创建波形仿真激励文件.tbw:选Test Bench Waveform,并输入文件名test_alu
● 初始化时钟周期及相关参数→finash
● 右侧会出现 .tbw文件窗口,设置输入引脚的值,存盘
● 左侧sources窗口选择“behavioral simulation”,下面processes窗口会自动出现"Modelsim Simulator"
● 双击其中的“Simulate behavioral model”会自动调用“Modelsim ”进行仿真,观察波形窗口,观察是否正确
图5三态双向数据总线DBUS时序图
通过仿真证实:上述程序能够实现三态双向数据总线DBU的设计。
RTL级逻辑电路
图6 RTL级逻辑电路
(三)硬件测试(74LS138译码器)
1、设计构思
引脚:
一个输出端口
时钟信号控制引脚 时钟信号禁止端 移位装载控制 复位
功能:数据并行的输入,串行的输出 实现所谓的并串变化
输入引脚 :a,b,c,d,e,f,g,h 8位并行输入信号
se 串行输入信号
输出引脚:q 串行输出信号
控制引脚: clk 时钟信号
fe 时钟信号禁止端
s1 移位装载控制端
reset 复位信号
表4 控制信号功能表
2、VHDL源程序设计过程
包括三个部分,即库和程序包调用、实体部分、结构体部分
程序包调用:LIBRARY ieee;
use ieee.std_logic_1164.all;
实体部分一般格式:
entity 实体名is
类型参数说明
端口说明
end 实体名
注意:实体名与保存的源文件名相同
结构体部分一般格式:
Architecture 结构体名 of 实体名 is
定义语句
Begin
并行处理语句
End结构体名
3.VDHLM描述如下
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity decoder_d is
PORT ( en : in std_logic;
a : in std_logic_vector(2 downto 0);
y : out std_logic_vector(7 downto 0)
);
end decoder_d;
architecture Behavioral of decoder_d is
begin
process (a,en)
begin
if(en='1')
then
case a is
when "000" =>y<="00000001";
when "001" =>y<="00000010";
when "010" =>y<="00000100";
when "011" =>y<="00001000";
when "100" =>y<="00010000";
when "101" =>y<="00100000";
when "110" =>y<="01000000";
when "111" =>y<="10000000";
when others =>y<="00000000";
end case;
else y<="00000000";
end if;
end process;
end Behavioral;
仿真测试
仿真过程如下:
● 在sources窗口处右击,加入新的源文件
● 创建波形仿真激励文件.tbw:选Test Bench Waveform,并输入文件名 test_74ls
● 初始化时钟周期及相关参数→finash
● 右侧会出现 .tbw文件窗口,设置输入引脚的值,存盘
● 左侧sources窗口选择“behavioral simulation”,下面processes窗口会自动 出现"Modelsim Simulator"
● 双击其中的“Simulate behavioral model”会自动调用“Modelsim ”进行仿真,观察波形窗口,观察是否正确
图7 74LS138译码器三输入三态门时序图
4.逻辑电路图
图8 RTL级逻辑电路
图9 RTL级逻辑电路局部
四、结束语
这次课程设计是在已学计算机组成原理基础上进行的一次大型实验,也是对该课程所学理论知识的深化和提高。因此,要求我们学生能综合应用LIBRARY ieee;
所学知识,设计与制造出具有较复杂功能的应用系统,并且在实验的基本技能方面上进行一次全面的训练。
但是在此过程中也遇到了很多困难,比如在设计开始的阶段对于XILINX ISE 和Modelsim SE这两个软件就不会用,通过和同学交流我大概了解了软件的用法,在进行ALU仿真时,总是运行不了,经过仔细分析,才发现可能是我的Modelsim SE版本的问题。
在本次设计中,遇到了很多问题,开始有些迷茫,在老师的分析以及同学的帮助下,相关资料的查阅,先了解了整个设计的总体设计思路,然后查了很多关于输出寄存器以及计数器的资料,从它的根本设计原理出发,比如计数器的过程为减的过程等等。
经过努力调试修改把这个设计大部分完成,虽然里面还存在很多问题,但感觉自己在计算机组成原理的知识海洋里懂的是那么的少,还需要多学点。
总之,这次的课程设计不仅让我有动手实践的机会,也让我对之前的知识进行加深学习,使我对完成一个项目有个比较具体的认识,对以后完成这方面的事情打下基础。再次感谢老师同学的帮忙!
五、参考资料
[1] [美]克莱茨 著,李慧军 译 VHDL数字电子学
[2] 袁静波,丁顺利,宋欣,王和兴 计算机组成与结构 机械工业出版社,2011
[3]陈耀和.VHDL语言设计技术[M]. 北京:电子工业出版社,2004.
[4]李云松,宋锐.Xilinx FPGA 数据基础(VHDL)版[M] .陕西:西安电子科技大学出版社,2008.
[5] 百度文库
六、设计时间与安排
1、设计时间: 2周
2、设计时间安排:
熟悉实验设备、收集资料: 3天
设计图纸、实验、计算、程序编写调试: 5天
编写课程设计报告: 2天
答辩: 1天
本文来源:https://www.2haoxitong.net/k/doc/a7ee4204f46527d3240ce071.html
文档为doc格式