简单微处理器设计实验报告.docx

上传人:b****0 文档编号:16914030 上传时间:2023-07-19 格式:DOCX 页数:24 大小:676.16KB
下载 相关 举报
简单微处理器设计实验报告.docx_第1页
第1页 / 共24页
简单微处理器设计实验报告.docx_第2页
第2页 / 共24页
简单微处理器设计实验报告.docx_第3页
第3页 / 共24页
简单微处理器设计实验报告.docx_第4页
第4页 / 共24页
简单微处理器设计实验报告.docx_第5页
第5页 / 共24页
简单微处理器设计实验报告.docx_第6页
第6页 / 共24页
简单微处理器设计实验报告.docx_第7页
第7页 / 共24页
简单微处理器设计实验报告.docx_第8页
第8页 / 共24页
简单微处理器设计实验报告.docx_第9页
第9页 / 共24页
简单微处理器设计实验报告.docx_第10页
第10页 / 共24页
简单微处理器设计实验报告.docx_第11页
第11页 / 共24页
简单微处理器设计实验报告.docx_第12页
第12页 / 共24页
简单微处理器设计实验报告.docx_第13页
第13页 / 共24页
简单微处理器设计实验报告.docx_第14页
第14页 / 共24页
简单微处理器设计实验报告.docx_第15页
第15页 / 共24页
简单微处理器设计实验报告.docx_第16页
第16页 / 共24页
简单微处理器设计实验报告.docx_第17页
第17页 / 共24页
简单微处理器设计实验报告.docx_第18页
第18页 / 共24页
简单微处理器设计实验报告.docx_第19页
第19页 / 共24页
简单微处理器设计实验报告.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

简单微处理器设计实验报告.docx

《简单微处理器设计实验报告.docx》由会员分享,可在线阅读,更多相关《简单微处理器设计实验报告.docx(24页珍藏版)》请在冰点文库上搜索。

简单微处理器设计实验报告.docx

简单微处理器设计实验报告

目录

目录1

表目录2

图目录3

1文档说明(Introduction)4

2描述习惯(Conventions)5

3微处理器各功能模块6

3.1概述6

3.2结构框图6

3.2.1ALUpart6

3.2.2controlpart9

3.2.3CPU11

3.3功能列表12

3.3.1ALUpart12

3.3.2controlpart13

3.3.2.1状态转移图13

3.4工作环境介绍14

3.4.1设计代码14

3.4.2测试平台14

3.4.3电路综合环境16

3.4.4后仿真环境16

3.5功能验证结果17

3.5.1前仿真结果17

3.5.2后仿真结果19

3.6综合结果20

表目录

表1ALU8模块I/O接口

表2通用寄存器堆模块I/O接口

表3alupart输入输出I/O口列表

表4控制器模块I/O接口

表5IRRAM模块I/O接口

表6Control-part结构整体I/O接口

表7CPU整体模块I/O接口

表8ALU指令集

表9添加的JUMP指令

图目录

图1ALU8模块框图

图2通用寄存器RAM模块框图

图3ALUpart模块框图

图4控制器模块框图

图5IRRAM模块框图

图6Control-part结构框图

图7CPU结构框图

图8ALUpart状态转移图

图9controlpart状态转移图

图10CPU计算5!

的全图

图11controllpart执行一条指令的波形图

图12control执行非跳转指令的状态机波形

图13control执行跳转指令的状态机波形

图14ALUpart执行一条指令的波形图

图15ALUpart执行指令状态机的波形

图16综合的Timingreport

图17综合的Areareport

图18门级仿真5!

的波形结果

图19门级仿真产生的延时

1文档说明(Introduction)

本文档描述了简单微处理器的总体设计,如功能、模块结构、关键时序等等。

本设计参照了课程设计文档的系统原理框图和功能列表,根据需求作了一些改动,将累加器A合并到ALU单元中,将寄存器Rn合并到通用寄存器RAM(8*8)中;将程序计数器和指令寄存器合并到控制模块controller中等。

指令方面,添加了Acc非零时跳转指令JNZ。

2描述习惯(Conventions)

在文档写作中黑色字体表明已经确定的内容,尚未完全确定的内容以蓝色字体表示,有疑问或需要醒目标示的内容则以红色字体表示。

代码方面,使能信号习惯采用低电平有效。

3微处理器各功能模块

3.1概述

8位微处理器的硬件系统主要包括运算器ALU、控制器CON、指令存储器IRRAM(64*8)、通用寄存器堆RAM(8*8)等逻辑部件。

能够通过控制器读取指令集,对8位数据进行运算和操作。

本次设计有独立的控制模块和运算模块,通用寄存器堆合并到ALU模块中,IRRAM合并到CON控制模块中。

仿真周期采用10ns。

微处理器的指令系统通过指令码实现,根据其格式的不同,可分为算术、逻辑、数据转移、跳转指令等。

在功能列表部分将做详细介绍。

本次课程设计实现了阶乘5!

以验证处理器的运算类指令。

已成功实现RTL级设计、功能仿真、综合、门及仿真。

3.2结构框图

3.2.1ALUpart

图1ALU8模块框图

ALU模块是运算模块,有3个状态,从controller中读取数据和使能信号等,根据选通信号op判断当前要进行的指令操作。

先读取Rn_rd和reg_add,状态并不跳转,等待直到data_le低有效,读取到立即数data时,状态跳转到运算状态,再通过case语句进行相应运算操作。

 

表1ALU8模块I/O接口

SIGNAL

BITS

I/O

SIGNALDESCRIPTION

clk

1

I

时钟信号

rst

1

I

复位信号

Rn_rd

1

I

读Rn使能信号,低有效

Reg_add

3

I

Rn在RAM中的地址

Rn

8

I

寄存器,暂存中间运算数据

Rn_wr

1

O

写使能信号,低有效

op

4

I

运算功能选择信号

data

8

I

立即数

data_le

1

I

读立即数使能信号,低有效

busy

1

O

ALU8忙,低有效

carry

1

O

进位信号,carry=1时JCaddr

Acc

8

O

运算器结果

通用寄存器堆RAM(8*8),储存中间数据Rn,结构框图:

图2通用寄存器RAM模块框图

下表为输入输出接口:

表2通用寄存器堆模块I/O接口

SIGNAL

BITS

I/O

SIGNALDESCRIPTION

clk

1

I

时钟信号

rst

1

I

复位信号

Rn_rd

1

I

读Rn使能信号,低有效

Reg_add

3

I

要操作的操作数Rn在RAM中的地址

Rn

8

O

寄存器,暂存中间运算数据

Rn_wr

1

I

写使能信号,低有效

Acc

8

I

运算器运算结果

图3ALUpart模块框图

Alu8和RAMn_array两个模块组成ALUpart部分。

两个模块通过Rn_wr信号,Rn和A进行交互。

当需要进行读操作时,在外部(相对于alupart模块)使能信号Rn_rd下,alu通过地址Rn_addr读取出需要的Rn;当需要进行写操作时,alu8使信号Rn_wr低有效,再经过一个周期,将当前中间运算结果A写入到地址Rn_addr对应的Rn中去。

ALU8模块中包含了16种运算(不包含跳转),也包含了累加功能块A,从controlpart读取选通信号op和数据data,从RAMn_array读取Rn。

RAM(8*8)中存放Rn,通过control的使能Rn_rd,经地址Rn_addr[2..0]将数据读到ALU8中去,利用ALU8给的Rn_wr信号将A写到RAM(8*8)中去。

表3alupart输入输出I/O口列表

SIGNAL

BITS

I/O

SIGNALDESCRIPTION

clk

1

I

时钟信号

rst

1

I

复位信号

Rn_rd

1

I

读Rn使能信号,低有效

Reg_add

3

I

Rn在RAM中的地址

op

4

I

运算功能选择信号

data

8

I

立即数

data_le

1

I

读立即数使能信号,低有效

busy

1

O

ALU8忙,低有效

carry

1

O

进位信号,carry=1时JCaddr

Acc

8

O

运算器结果

3.2.2controlpart

控制器controller结构框图:

图4控制器模块框图

控制器是整个设计中关键的模块,本课程设计中控制器包含了用信号形式表示的IR寄存器和程序计数器。

控制器从ALU模块中读取Acc用于判断零跳转JZ和非零跳转JNZ,读取carry用于判断进位跳转JC,读取busy即alu_free用于判断alu正处于空闲状态,握手信号使时序正确。

同时,控制器给ALUpart提供data,data_le,reg_add(Rn_add),reg_add_le(Rn_le),op等信号。

控制器与指令寄存器通过IR_le,IR,IRRAM_add进行交互。

用程序计数器counter来计量IRRAM_add,当IR_le低有效时,用IRR暂存读取的IRRAM_add地址上的指令IR,不同时刻IR代表指令op、Rn_reg或者数据data。

表4控制器模块I/O接口

SIGNAL

BITS

I/O

SIGNALDESCRIPTION

clk

1

I

时钟信号

rst

1

I

复位信号

IR

8

I

程序输入

IR_le

1

I

读入指令使能

IRRAM_add

6

O

指令寄存器IRRAM地址

Rn_rd

1

O

读Rn使能信号,低有效

Reg_add

3

O

Rn在RAM中的地址

op

4

O

运算功能选择信号

data

8

O

立即数

data_le

1

O

读立即数使能信号,低有效

alu_free

1

I

ALU单元空闲,低有效

carry

1

I

进位信号,carry=1时JCaddr

Acc

8

I

运算器结果

指令存储器IRRAM(64*8)结构框图:

图5IRRAM模块框图

在本课程设计中,IRRAM预先存储着要操作的指令代码,也包括数据。

将在典型代码分析中详细说明。

表5IRRAM模块I/O接口

SIGNAL

BITS

I/O

SIGNALDESCRIPTION

clk

1

I

时钟信号

rst

1

I

复位信号

IR

8

O

程序输入

le(IR_le)

1

O

读指令使能

add(IRRAM_add)

6

I

指令寄存器IRRAM地址

图6Control-part结构框图

 

表6Control-part结构整体I/O接口

SIGNAL

BITS

I/O

SIGNALDESCRIPTION

clk

1

I

时钟信号

rst

1

I

复位信号

Rn_rd

1

O

读Rn使能信号,低有效

Reg_add

3

O

Rn在RAM中的地址

op

4

O

运算功能选择信号

data

8

O

立即数

data_le

1

O

读立即数使能信号,低有效

alu_free

1

I

ALU单元空闲,低有效

carry

1

I

进位信号,carry=1时JCaddr

Acc

8

I

运算器结果

3.2.3CPU

CPU整体结构框图:

图7CPU结构框图

表7CPU整体模块I/O接口

SIGNAL

BITS

I/O

SIGNALDESCRIPTION

clk

1

I

时钟信号

rst

1

I

复位信号

Acc

8

O

输出结果

由于时间仓促,本次课设没有做汇编器和I/O界面输入,程序指令已预先存储到IRRAM中。

只需时钟clk和复位信号rst经仿真即可得到运算结果。

3.3功能列表

3.3.1ALUpart

表8ALU指令集

指令

op

功能描述

算术指令

 

 

ADDA,Rn

0001

把Rn的值加到A上

ADDA,#data

0010

把立即数的值加到A上

ADDCA,Rn

0011

连同进位一起把Rn的值加到A上

SUBBA,Rn

0100

连同借位一起从A中减去寄存器的值

SUBBA,#data

0101

连同借位一起从A中减去立即数的值

逻辑运算指令

 

 

ANLA,Rn

0110

Rn对A进行逻辑与运算

ANLA,#data

0111

立即数对A进行逻辑与运算

ORLA,Rn

1000

Rn对A进行逻辑或操作

ORLA,#data

1001

立即数对A进行逻辑或操作

XRLA,Rn

1010

Rn对A进行逻辑异或操作

XRLA,#data

1011

立即数对A进行逻辑异或操作

CLRA

1100

清空A的值

CPLA

1101

对A的值取反

数据传输指令

 

 

MOVA,Rn

1110

把Rn的值传输给A

MOVA,#data

1111

把立即数传输给A

MOVRn,A

0000

把A传输给Rn寄存器

指令操作中涉及到Rn的需要对RAMn_array进行读或者写操作,读操作需要提前写好Rn的值,写操作需要经过两个周期(Rn_wr置低到RAMn_array在Rn_wr使能下读入A进行写操作各需一个周期)的才能实现。

涉及data的可直接在本周期完成。

正常情况下指令的顺序是,控制器在第一个周期先给ALU模块op和Rn_addr,第二个周期等待ALU接受数据,第三个周期给出data和data_le,因此Rn有足够的时间提前准备好。

图8ALUpart状态转移图

Alu模块设定了3个状态:

空闲状态00,用于接收数据,当Rn_le低有效时读入Rn_add,不跳转,当data_le低有效时状态跳转到01。

状态01为运算状态,根据op判断将要进行的运算,从RAMn_array中读取数据,或者写入A,或者用输入的data对A进行操作。

状态01无条件跳转到状态10,因为01中的运算操作在一个周期内即可完成,10存在是给RAMn_array留一个周期进行写操作。

由于Acc结果需要即时改变,实现时用到一个中间信号A跟踪Acc。

与控制模块握手的busy信号在01状态即赋值为高,因为非阻塞赋值在下一时钟有效沿才实现,即10状态时busy为高,即alu不忙(可能忙的是RAMn_array),控制模块controller可以继续给alu操作信号。

3.3.2controlpart

3.3.2.1状态转移图

Con模块状态转移图如下,可见每个指令,控制部分最短只需4个周期。

状态000,为空闲状态,当IR_le='0'andAlu_free='0'时读入指令IR,在根据IR[7]来判断将要跳转的下一个状态。

当IR[7]='1'时,指令为jump类指令,状态由000跳转到001;当IR[7]='0'时,指令为数据操作类指令,状态由000跳转到010。

并且程序计数器加一,指令存储器中指针也指向下一条指令。

由于IRRAM中设定IR_le一直低有效,故跳转状态条件没有写出IR_le=’0’。

状态001和010纯是等待时间,没有操作。

这2个状态存在是在等待指令指向下一行,方便在下一个状态中读取指令中的数据或者跳转地址。

状态011是jumpstate,从IR中读取跳转地址,并让程序计数器指向下一条指令。

然后跳转到101等待进行下一条指令操作。

状态100是读数据data状态,000状态已将reg_add和op读取出来传给ALU,此时在100状态,将立即数data读出,传给ALU。

然后跳转到101等待ALU一个周期跳转到000,状态转到000后,若ALU尚未运算完毕(alu_free=’1’),则继续停留在idle状态。

图9controlpart状态转移图

下表为本课程设计中涉及到的jump指令,功能已将列出。

程序中用IR[7]来表征指令是否为跳转指令,1表示是跳转指令。

表9添加的JUMP指令

分支跳转指令

IR(7)&op

 

JMPaddr

10001

无条件跳转

JCaddr

10010

在进位carry=1的情况下跳转到地址

JZaddr

10011

在累加器ACC等于0的情况下跳转到地址

JNZaddr

10100

在累加器ACC不等于0的情况下跳转到地址

3.4工作环境介绍

3.4.1设计代码

/home/cas1098/CPUgate/controll.vhd

/home/cas1098/CPUgate/IRRAM.vhd

/home/cas1098/CPUgate/ControlPart.vhd

/home/cas1098/CPUgate/alu8.vhd

/home/cas1098/CPUgate/RAMn.vhd

/home/cas1098/CPUgate/alupart.vhd

/home/cas1098/CPUgate/CPU.vhd

3.4.2测试平台

/home/cas1098/CPUgate/tb.vhd--功能仿真与门级仿真的测试程序

测试CPU功能的n!

程序预先写进了IRRAM之内指令集程序如下

movedata=5toA

moveAtoR0

moveAtoR3

A=A-2

moveAtoR2

moveAtoR1

moveR3toA

A=A+R0;

moveAtoR3

moveR1toA

A=A-1

moveAtoR1

JNZto001100

moveR3toA

moveAtoR0

A=A-1

moveAtoR1

moveAtoR2

JNZto001100

moveR3toA

-jmp

机器指令如下

caseaddis

when"000000"=>IR<="01111000";--movedata=5toA

when"000001"=>IR<="00000101";

when"000010"=>IR<="00000000";--moveAtoR0

when"000011"=>IR<="00000000";

when"000100"=>IR<="00000011";--moveAtoR3

when"000101"=>IR<="00000000";

when"000110"=>IR<="00101000";--A=A-2

when"000111"=>IR<="00000010";

when"001000"=>IR<="00000010";--moveAtoR2

when"001001"=>IR<="00000000";

when"001010"=>IR<="00000001";--moveAtoR1

when"001011"=>IR<="00000000";

when"001100"=>IR<="01110011";--moveR3toA

when"001101"=>IR<="00000000";

when"001110"=>IR<="00011000";--A=A+R0;

when"001111"=>IR<="00000000";

when"010000"=>IR<="00000011";--moveAtoR3

when"010001"=>IR<="00000000";

when"010010"=>IR<="01110001";--moveR1toA

when"010011"=>IR<="00000000";

when"010100"=>IR<="00101000";--A=A-1

when"010101"=>IR<="00000001";

when"010110"=>IR<="00000001";--moveAtoR1

when"010111"=>IR<="00000000";

when"011000"=>IR<="10100000";--JNZto001100

when"011001"=>IR<="00110000";

when"011010"=>IR<="01110011";--moveR3toA

when"011011"=>IR<="00000000";

when"011100"=>IR<="00000000";--moveAtoR0

when"011101"=>IR<="00000000";

when"011110"=>IR<="01110010";--moveR2toA

when"011111"=>IR<="00000000";

when"100000"=>IR<="00101000";--A=A-1

when"100001"=>IR<="00000001";

when"100010"=>IR<="00000001";--moveAtoR1

when"100011"=>IR<="00000000";

when"100100"=>IR<="00000010";--moveAtoR2

when"100101"=>IR<="00000000";

when"100110"=>IR<="10100000";--JNZto001100

when"100111"=>IR<="00110000";

when"101000"=>IR<="01110011";--moveR3toA

when"101001"=>IR<="00000000";

when"101010"=>IR<="10001000";--jmptothisorderstable

when"101011"=>IR<="10101000";

whenothers=>IR<=x"ff";

endcase;

3.4.3电路综合环境

/home/ic/library/typical.db#综合需要的库文件

/home/cas1098/CPUgate/area.txt#综合出的面积报告

/home/cas1098/CPUgate/timing.txt#综合出的时间报告

/home/cas1098/CPUgate/cpugate.v#综合后产生的门级网表

/home/cas1098/CPUgate/cpupost.sdf#综合产生的sdf文件

/home/cas1098/CPUgate/CPU.db#综合产生的db文件

3.4.4后仿真环境

/home/cas1098/CPUgate/umc18/umc18.v#门级仿真需要的库文件

3.5功能验证结果

3.5.1前仿真结果

图10CPU计算5!

的全图

可以看到最后的输出的结果为ox78=120,正确的执行了5!

的指令。

完成了功能仿真。

图11controllpart执行一条指令的波形图

在controlpart模块执行指令时,在判断了ALU_free(即busy信号)变为低电平后,controlpart模块开始译码指令IR(实际是内部寄存器IRR),op信号从E改为了5,reg_add_le(即Rn_rd信号)拉低到低电平表示使能。

Reg_add(即Rn_addr信号)改变为0,空闲一周期后(等待指令计数器变化),通过IR,再读出data信号,将data_le拉低到低电平使能。

完成了译码工作。

图12control执行非跳转指令的状态机波形

状态机从0状态(ALU_free=’0’跳转)->2状态(必然跳转)->4状态(必然跳转)->5状态(必然跳转)->0状态,一条指令工作周期即机器周期一共是5个clk周期。

图13control执行跳转指令的状态机波形

状态机从0状态(ALU_free=’0’跳转)->1状态(必然跳

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2