指令系统和寄存器组.docx
《指令系统和寄存器组.docx》由会员分享,可在线阅读,更多相关《指令系统和寄存器组.docx(22页珍藏版)》请在冰豆网上搜索。
指令系统和寄存器组
东北大学秦皇岛分校
计算机与通信工程学院
组成原理课程设计
设计题目
指令系统及寄存器组设计
专业名称
计算机科学与技术
班级学号
41002
学生姓名
指导教师
设计时间
2012.12.17~2012.12.29
课程设计任务书
专业:
计算机科学与技术学号:
*******学生姓名(签名):
设计题目:
指令系统及寄存器组设计
一、设计实验条件
硬件:
PC机
软件:
XilinxISEModelSim
编程语言:
VHDL
二、设计任务及要求
设计一个16位的模型机,其组成为:
•总线结构:
单总线,数据总线位数16位、地址总线16位;
•寄存器组设计
逻辑电路设计:
奇偶发生器74LS180
三、设计目的
1、融会贯通计算机组成原理课程的内容,通过知识的综合运用,加深对计算机系统各个模块的工作原理及相互联系的认识.
2、学习运用VHDL进行FPGA/CPLD设计的基本步骤和方法,熟悉EDA的设计、模拟调试工具的使用,体会FPGA/CPLD技术相对于传统开发技术的优点.
课程设计内容
1、设计总要求:
16位模型机设计--指令系统及寄存器组设计
1、指令系统设计:
指令编号
指令助记符
机器码1
机器码2
指令功能
12
ADDCA,#II
001010
II
将立即数II加入累加器A中带进位
30
MOVA,@R?
011101
将间址存储器的值送到累加器A中
41
JCMM
101000
MM
当进位标志R_CY=1时,跳转到MM地址
46
CMPA,R?
101101
比较A与R?
是否相等,即A-R,置标志位Z
2、模型及硬件设计:
名称:
寄存器组R0-R3
2、模型机设计
整机逻辑结构框图
芯片引脚:
cpu逻辑结构框图:
【设计指令系统】
1、设计的指令
第12条指令:
ADDCA,#II
指令类型:
算术运算指令
寻址方式:
立即数寻址
第30条指令:
MOVA,@R?
指令类型:
数据传送指令
寻址方式:
寄存器间接寻址
第41条指令:
JCMM
指令类型:
程序跳转指令
寻址方式:
直接寻址
第46条指令:
CMPA,R?
指令类型:
程序跳转指令
寻址方式:
寄存器直接寻址
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、指令执行流程
取指令为公共流程
编号
助记符
功能
机器码
周期总数CT
节拍数
微操作
控制信号
涉及的硬件
1
_FATCH_
取指令
000000XX
010
T0
PC→MAR
PCOEMAREN
PC,MAR,EM,W,IR
T1
EM→W
EMENEMRDWEN
T2
W→IR
PC+1→PC
IREN
12
ADDCA,#II
将立即数II加入累加器A中带进位
001010
II
101
T3
PC→MAR
PCOEMAREN
PC,MAR,EM,W,A,ALU,F
T4
EM→DBUS→WPC+1→PC
EMRDEMENWEN
T5
A,W→ALU→FALU→A
FENAEN
30
MOVA,@R?
将间址存储器的值送到累加器A中
011101
101
T3
R?
→MAR
PCOEMAREN
PC,MAR,EM,W,DBUS,R
T4
EM→DBUS→WPC+1→PC
EMRDEMENWEN
T5
W→DBUS→A
S()
41
JCMM
当进位标志R_CY=1时,跳转到MM地址
101000MM
110
R_CY=1
PC→MAR
PCOE
MAREN
PC,MAR,EM,,DBUS,W,ST
T3
T4
EM→PC
PC+1→PC
EMEN
EMRD
ELP
R_CY=0
PC+1→PC
T3
46
CMPA,R?
比较A与R?
是否相等,即A-R,置标志位Z
101101
011
T3
R?
→W
RRD,WEN
PC,MAR,EM,W,
T4
A→W
S2S1S0(001),
FEN(R_ZF)
指令执行流程:
1、第12条指令
DI
2、第30条指令
3、第41条指令
4、第46条指令
【模型及实现(寄存器组)】
1、逻辑电路图形符号表示:
通用寄存器的逻辑电路图:
通用寄存器的RTL逻辑电路图:
2、逻辑电路的功能:
暂存和传送数据
3、仿真测试:
波形分析图:
结果分析:
D为数据输入、R为数据输出、CLK为时序控制、EN为读写控制端、RST为复位端、R为数据输出。
因此由于RST为1,虽然D端输入数据为:
1111100010101011,输出端仍为0(从波形可以看出来),EN为0,表示写数据。
3、VDHLM描述如下:
----------------------------------------------------------------------------------
--Company:
--Engineer:
--
--CreateDate:
15:
19:
5812/26/2012
--DesignName:
--ModuleName:
regfile-Behavioral
--ProjectName:
--TargetDevices:
--Toolversions:
--Description:
--
--Dependencies:
--
--Revision:
--Revision0.01-FileCreated
--AdditionalComments:
--
----------------------------------------------------------------------------------
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
----Uncommentthefollowinglibrarydeclarationifinstantiating
----anyXilinxprimitivesinthiscode.
--libraryUNISIM;
--useUNISIM.VComponents.all;
entityregfileis
Port(DR:
instd_logic_vector(1downto0);
SR:
instd_logic_vector(1downto0);
reset:
instd_logic;
DRWr:
instd_logic;
clk:
instd_logic;
d_input:
instd_logic_vector(7downto0);
DR_data:
outstd_logic_vector(7downto0);
SR_data:
outstd_logic_vector(7downto0)
);
endregfile;
architecturestructofregfileis
--components
--8bitRegisterforregisterfile
componentreg
port(
clr:
instd_logic;
D:
instd_logic_vector(7downto0);
clock:
instd_logic;
write:
instd_logic;
sel:
instd_logic;
Q:
outstd_logic_vector(7downto0)
);
endcomponent;
--2to4Decoder
componentdecoder_2_to_4
port(
sel:
instd_logic_vector(1downto0);
sel00:
outstd_logic;
sel01:
outstd_logic;
sel02:
outstd_logic;
sel03:
outstd_logic
);
endcomponent;
--4to1linemultiplexer
componentmux_4_to_1
port(
input0,
input1,
input2,
input3:
instd_logic_vector(7downto0);
sel:
instd_logic_vector(1downto0);
out_put:
outstd_logic_vector(7downto0));
endcomponent;
signalreg00,reg01,reg02,reg03
:
std_logic_vector(7downto0);
signalsel00,sel01,sel02,sel03
:
std_logic;
begin
Areg00:
regportmap(
clr=>reset,
D=>d_input,
clock=>clk,
write=>DRWr,
sel=>sel00,
Q=>reg00
);
Areg01:
regportmap(
clr=>reset,
D=>d_input,
clock=>clk,
write=>DRWr,
sel=>sel01,
Q=>reg01
);
Areg02:
regportmap(
clr=>reset,
D=>d_input,
clock=>clk,
write=>DRWr,
sel=>sel02,
Q=>reg02
);
Areg03:
regportmap(
clr=>reset,
D=>d_input,
clock=>clk,
write=>DRWr,
sel=>sel03,
Q=>reg03
);
--decoder
des_decoder:
decoder_2_to_4portmap
(
sel=>DR,
sel00=>sel00,
sel01=>sel01,
sel02=>sel02,
sel03=>sel03
);
mux1:
mux_4_to_1PORTMAP(
Input0=>reg00,
Input1=>reg01,
Input2=>reg02,
Input3=>reg03,
sel=>DR,
out_put=>DR_data
);
mux2:
mux_4_to_1PORTMAP(
input0=>reg00,
input1=>reg01,
input2=>reg02,
input3=>reg03,
sel=>SR,
out_put=>SR_data
);
endstruct;
--以下内容为reg.vhd
libraryieee;
useieee.std_logic_1164.all;
entityregis
port
(
clr:
instd_logic;
D:
instd_logic_vector(7downto0);
clock:
instd_logic;
write:
instd_logic;
sel:
instd_logic;
Q:
outstd_logic_vector(7downto0)
);
endreg;
architecturebehavofregis
begin
process(clr,clock)
begin
ifclr='0'then
Q<=x"00";
elsif(clock'eventandclock='1')then
ifsel='1'andwrite='1'then
Q<=D;
endif;
endif;
endprocess;
endbehav;
【逻辑功能实现(奇偶发生器)】
1、逻辑电路符号表示:
2、仿真测试:
波形图
3、VHDL描述如下:
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
----Uncommentthefollowinglibrarydeclarationifinstantiating
----anyXilinxprimitivesinthiscode.
--libraryUNISIM;
--useUNISIM.VComponents.all;
entityLSis
Port(a:
inSTD_LOGIC_VECTOR(7downto0);
INodd:
inSTD_LOGIC;
INeven:
inSTD_LOGIC;
OUTodd:
outSTD_LOGIC;
OUTeven:
outSTD_LOGIC);
endLS;
architectureBehavioralofLSis
signalb:
std_logic_vector(2downto0);
begin
process(a,INodd,INeven)
variablenum:
std_logic;
begin
num:
='0';
foriin0to7LOOP
num:
=numXORa(i);
endLOOP;
b<=num&INeven&INodd;
casebis
when"010"=>OUTodd<='0';OUTeven<='1';
when"110"=>OUTodd<='1';OUTeven<='0';
when"001"=>OUTodd<='1';OUTeven<='0';
when"101"=>OUTodd<='0';OUTeven<='1';
when"011"=>OUTodd<='0';OUTeven<='0';
when"000"=>OUTodd<='1';OUTeven<='1';
when"111"=>OUTodd<='0';OUTeven<='0';
when"100"=>OUTodd<='1';OUTeven<='1';
whenothers=>NULL;
endcase;
endprocess;
endBehavioral;
【实验心得和收获】
组成原理课程设计兼容硬件和软件的方面,是一门综合性很强的课设。
其中VHDL语言的运用,XilinxISE,Modelsim软件的使用,对于大多数人来说都十分新鲜。
我只能按照资料一步一步的向下设置,刚开始的时候有好多不懂的地方,不知道怎么做,去阅览室查资料,和同学们讨论,这样的学习增加了我们自我学习的能力,增强了同学们之间的合作能力,为以后学习新的知识,进入新的团队又增加了一份自信。
【参考文献】
[1]姜雪松.VHDL设计实例与仿真.机械工业出版社,2007.
[2]苗丽华 .VHDL数字电路设计教程.人民邮电出版社,2012
[3]邢建平,曾繁泰.VHDL程序设计教程(第3版).清华大学出版社.