指令系统和寄存器组.docx

上传人:b****5 文档编号:8228198 上传时间:2023-01-30 格式:DOCX 页数:22 大小:493.72KB
下载 相关 举报
指令系统和寄存器组.docx_第1页
第1页 / 共22页
指令系统和寄存器组.docx_第2页
第2页 / 共22页
指令系统和寄存器组.docx_第3页
第3页 / 共22页
指令系统和寄存器组.docx_第4页
第4页 / 共22页
指令系统和寄存器组.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

指令系统和寄存器组.docx

《指令系统和寄存器组.docx》由会员分享,可在线阅读,更多相关《指令系统和寄存器组.docx(22页珍藏版)》请在冰豆网上搜索。

指令系统和寄存器组.docx

指令系统和寄存器组

东北大学秦皇岛分校

计算机与通信工程学院

组成原理课程设计

 

设计题目

指令系统及寄存器组设计

 

专业名称

计算机科学与技术

班级学号

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版).清华大学出版社.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 冶金矿山地质

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1