IC大作业.docx
- 文档编号:11358883
- 上传时间:2023-05-31
- 格式:DOCX
- 页数:18
- 大小:393.30KB
IC大作业.docx
《IC大作业.docx》由会员分享,可在线阅读,更多相关《IC大作业.docx(18页珍藏版)》请在冰点文库上搜索。
IC大作业
目录
1文档说明(Introduction)3
2微处理器3
2.1概述3
2.2结构框图4
3各个模块介绍6
3.1累加器accum6
3.2地址多路器addr6
3.3算术逻辑单元ALU6
3.4数据选择器choose7
3.5时钟发生器clk_gen7
3.6中央控制器contrl8
3.7程序计数器counter9
3.8输入数据选择器data_choose9
3.9指令寄存器IR10
3.10可读写存储器RAM11
3.11输出数据选择器outchoose11
4功能仿真结果12
4.1汇编指令12
4.2功能仿真结果12
5综合结果13
6门及仿真结果13
6.1仿真结果113
6.2仿真结果214
6.3仿真结果315
6.4仿真结果415
6.5仿真结果516
6.6仿真结果616
6.7仿真结果717
1文档说明(Introduction)
本文档描述微处理器的总体设计,如功能、结构、关键时序等。
该处理器的设计参考夏宇闻著《Verilog数字系统设计教程》中简化的RISC_CPU设计,根据实际作了一些改动。
2微处理器
2.1概述
该处理器实现以下全部20条指令,且每个指令周期为4个时钟周期。
指令
功能
指令码
ADDA,Rn
把Rn的值加到A上
00000XXX
ADDA,#data
把立即数的值加到A上
00001000
ADDCA,Rn
连同进位一起把Rn的值加到A上
00010XXX
SUBBA,Rn
连同借位一起从A中减去寄存器的值
00100XXX
SUBBA,#data
连同借位一起从A中减去立即数的值
00101000
ANLA,Rn
Rn对A进行逻辑与运算
00110XXX
ANLA,#data
立即数对A进行逻辑与运算
00111000
ORLA,Rn
Rn对A进行逻辑或操作
01000XXX
ORLA,#data
立即数对A进行逻辑或操作
01001000
XRLA,Rn
Rn对A进行逻辑异或操作
01010XXX
XRLA,#data
立即数对A进行逻辑异或操作
01011000
MOVA,Rn
把Rn的值传输给A
01100XXX
MOVA,#data
把立即数传输给A
01101000
MOVRn,A
把A传输给Rn寄存器
01110XXX
JMPaddr
无条件跳转
10000000
JCaddr
在进位carry=1的情况下跳转到地址
10010000
JZaddr
在累加器ACC等于0的情况下跳转到地址
10100000
CLRA
清空A的值
10110000
CPLA
对A的值取反
11000000
STO
结束指令,将上一条指令计算结果输出
11110000
每条指令为两个字节,即16位。
第1个字节的高5位为操作码,如果Rn为操作码的1个操作数,则第1个字节的低3位为R0-R7的地址(即RAM数据区7位地址的低3位),如果Rn不是操作码的1个操作数,则第1个字节的低三位为000;
第2个字节,如果操作码为立即数操作,则第2个字节的8位为立即数数据,如果操作码为跳转指令,则第2个字节的低7位为要跳转到的指令的地址,最高位为0,若为其他操作则第2个字节的8位为00000000。
2.2结构框图
CPU的输入输出如图所示,该处理器共包括11个子模块,分别为
1.累加器accum
2.地址多路器addr
3.算术逻辑单元ALU
4.数据选择器choose
5.时钟发生器clk_gen
6.中央控制器contrl
7.程序计数器counter
8.输入数据选择器data_choose
9.指令寄存器IR
10.可读写存储器RAM
11.输出数据选择器outchoose
具体各个模块之间的相互连接关系见下图。
3各个模块介绍
3.1累加器accum
累加器accum如图所示,累加器用于存放当前的结果,是双目运算符中的一个数据来源。
复位后,累加器的值是零。
当累加器通过ena接口收到来自中央控制器load_acc信号时,在clk时钟上升沿接受来自数据总线的数据。
3.2地址多路器addr
地址多路器addr如图所示,地址多路器用于选择输出的地址是指令地址还是指令中携带的地址。
每个指令周期前两个时钟周期从RAM程序存储区读取指令,输出的是存储指令地址;后两个周期用于对RAM或端口的读写,输出的是指令中携带的地址。
地址的选择输出信号是由时钟信号四分频信号fetch提供。
3.3算术逻辑单元ALU
算术逻辑单元ALU如图所示,算术逻辑单元根据输入的13种不同操作码分别实现相应的加、减、与、或、异或、传输、跳转、清零、取反等基本操作运算,且实现了带进位的运算,利用这几种基本运算可以实现很多其他运算以及逻辑判断等操作。
3.4数据选择器choose
数据选择器choose如图所示,数据选择器用于选择进入算术逻辑单元的数据是来自RAM数据区的数据还是指令中携带的立即数数据。
数据选择信号是来自中央控制器的outctl信号。
3.5时钟发生器clk_gen
时钟发生器clk_gen如图所示,时钟发生器利用外来信号clk生成一系列时钟信号clk1,fetch,alu_clk,RAM并送往CPU的其他部件。
其中fetch的上升沿用来触发CPU中央控制器开始执行一条指令,同时fetch信号还将控制地址多路器输出指令地址还是指令中携带的地址。
Clk1则用作触发指令寄存器的的时钟信号。
alu_clk用于触发算术逻辑单元。
时钟发生器时序图如下
3.6中央控制器contrl
中央控制器contrl如图所示,中央控制器是CPU的核心,用于产生一系列的控制信号,启动或停止某些部件。
中央控制器主要有主要是一个状态机实现,CPU何时进行读指令来读I/O端口及RAM区等操作,都是由状态机来控制,状态机的当前状态,由state记录。
中央控制器contrl接受复位信号rst,当rst有效时,停止状态机的工作。
指令周期由4个时钟组成,每个时钟都要完成固定的操作。
●第1个时钟,因为中央控制器的输出rd和load_ir为1,其余为0。
指令寄存器寄存由RAM送来的高8位指令代码。
状态1结束后进入状态2。
●第2个时钟,inc_pc由0变1,PC加1,指向下一条指令,且输出rd和load_ir为1,其余为低电平,指令寄存器寄存由RAM送来的低8位指令代码。
状态2结束后进入状态3。
●第3个时钟,主要执行译码的功能,inc_pc由1变0。
状态3结束后进入状态4。
Ø若操作符为ADD,ADDC,SUBB,ANL,ORL,XRL,且操作符中不涉及立即数操作,或者为MOVARn,CLR,CPL指令时,rd为1,load_ir为0,去RAM中寻找相应地址上的Rn,其余为0。
(此时fetch为0,地址多路器addr接收IR寄存器中第1个字节的低3位,并在高位拼接上1000组成形式为1000XXX的地址,即Rn的地址)
Ø若操作符为ADD,ADDC,SUBB,ANL,ORL,XRL且涉及到立即数操作时,rd为1,load_ir为1,去IR寄存器的低8位读取数据。
Ø若操作符为MOVRnA或者STO则所有输出都为0。
Ø若操作符为jump,load_pc为1,其余为0,(此时间并没有装载地址,只是让程序计数器counter使能),
Ø若操作符为jc,需要判断上一条指令的进位信号co是否为1,如果co为1,则load_pc为1
操作与jump相同,如果co为0,则不跳转,load_pc为0。
其余输出都为0,且产生1个co的跟踪信号co_temp,用于下1个状态进行判断。
Ø若操作符为jz,需要判断上一条指令计算结果是否为0(信号zero表示),如果计算结果为0则load_pc为1,操作与jump相同,如果计算结果不为0,则不跳转,load_pc为0。
其余输出都为0,且产生1个zero的跟踪信号zero_temp,用于下1个状态进行判断。
●第4个时钟
⏹若操作符为ADD,ADDC,SUBB,ANL,ORL,XRL,或者为MOVARn,CLR,CPL指令时,inc_pc由0变1,PC加1,指向下一条指令,Load_acc由0变1,向累加器accum装载计算的结果,状态4结束后进入状态1。
⏹若操作符为jump,load_pc为1,并且此时由于inc_pc由0变1,触发控制程序计数器counter装载IR寄存器中第2个字节的低6位(在地址多路器addr中拼接上第7位0)。
⏹若操作符为jc,load_pc为1,并且此时由于inc_pc由0变1,需判断上一个状态产生的co的跟踪信号co_temp,如果co_temp为1,则执行操作与jump相同,如果co_temp为0,则load_acc为0,不装载地址。
状态4结束后进入状态1。
⏹若操作符为jz,执行的操作与jc完全相同,只是判断信号为zero的跟踪信号zero_temp。
状态4结束后进入状态1。
⏹若操作符为MOVRnA,inc_pc由0变1,load_acc为1,wr为1,此时向RAM里写数据。
⏹若操作符为STO,此时让out_choose为1,打开输出数据选择器outchoose,输出上一条指令计算得到的数据。
状态4结束后进入状态5。
●第5个时钟,只有在每段程序的最后一条指令为STO时,才会进入这一状态,此状态保持out_choose为1,打开输出数据选择器outchoose,让输出数据保持。
3.7程序计数器counter
程序计数器counter如图所示,它用于提供指令地址,以便读取指令。
指令按顺序存放在存储器RAM中,有两种途径可以形成指令地址:
其一是顺序执行的情况。
其二是遇到改变顺序执行程序的情况,例如执行jmp,jz,jc指令后,可能形成新的指令地址。
复位后,指令指针为零,即每次CPU重新启动将从RAM的零地址开始读取指令并执行。
每条指令执行需要两个时钟,这时pc_addr已被加2,指向下一条指令(因为每条指令占两个字节)。
如果正在执行的指令是跳转指令。
这时CPU中央控制器将会输出load_pc信号,通过load口进入程序计数器。
程序计数器pc_addr将装入目标地址ir_addr,而不是加2.
3.8输入数据选择器data_choose
输入数据选择器data_choose如图所示,输入数据选择器主要控制向RAM写的数据是CPU外部写入的数据(指令及数据)还是CPU内部需要存储的数据(ALU运算结果或者accum存储的数据),控制信号为CPU的写信号cpu_write控制。
3.9指令寄存器IR
指令寄存器IR指令如图所示,寄存器用于寄存指令,指令寄存器触发时钟是clk1,在clk1的上升沿触发下,寄存器将数据总线送来的指令存入高8位或低8位寄存器中,但并不是每个clk1的上升沿都寄存数据总线的数据,因为数据总线有时传输指令,有时传输数据。
什么时候寄存,什么时候不寄存由CPU中央控制器的load_ir信号控制。
Load_ir信号通过ena输入到指令寄存器复位后,指令寄存器被清零。
每条指令为两个字节,即16位。
本设计的数据总线为8位,所以每条指令需取两次,先取高8位,后取低8位,而当前去的是高8位还是低8位,由state记录,state为0表示取的是高8位,存入高8位寄存器,同时将state置为1。
下次再寄存时,由于state为1,可知取的是低8位,存入低8位寄存器中。
3.10可读写存储器RAM
可读写存储器RAM如图所示,存储器容量为72字节,其中1-64字节为程序区,用于存储指令,寻址范围为0000000-1111111;65-72字节为数据区用于存储Rn的数据,寻址范围为1000000-1000111。
向RAM里写入数据,为时序逻辑电路,时钟为clk1,控制信号out_write优先级最高,当out_write为1时,由CPU外部向RAM写入所有指令及数据,地址为CPU外部输入的地址;当out_write为0且in_write为1时,CPU内部数据写入RAM数据区写入数据,地址由地址多路器addr输入。
从RAM读取数据为组合逻辑电路,在out_write为0且in_write为0且rd为1时,根据地址多路器addr输入的地址读取相应地址中的数据。
3.11输出数据选择器outchoose
输出数据选择器outchoose如图所示,输出数据选择器的作用是控制什么时间输出结果,控制信号data_ena连接到中央控制器out_choose端口,只在每段程序指令运算完成后最后1条指令STO运算时将结果输出。
4功能仿真结果
4.1汇编指令
测试文件见tb_jiecheng.v
实现5的阶乘,汇编指令为
CLRA
MOVA5
ADDA5
ADDA5
ADDA5
MOVR1A
ADDAR1
ADDAR1
MOVR1A
ADDAR1
MOVRA
STO
4.2功能仿真结果
5!
为120,即78H,该汇编指令的结果是,计算出的结果先写入RAM中R1中(RAM中地址为65),然后将结果输出到数据总线。
仿真结果见下图
5综合结果
可见综合之后实现该处理器所需面积为54.5万平方微米。
数据到达时间为1.3ns。
可见工作最小时钟周期为2.6ns,最高工作频率为384MHz。
6门及仿真结果
6.1仿真结果1
验证5的!
,测试文件见tb_jiecheng.v,汇编指令与功能仿真时实现5!
相同。
图1可以看出门及仿真结果正确,图2是将图1放大得到的,可以具体看出在CPU执行该段指令时累加器accum的输出的变化。
可以看出实现了7种指令
movARn,
movA#data,
movRnA,
ADDARn,
ADDA#data,
CLRA,
STO
6.2仿真结果2
验证逻辑指令,测试文件见tb_logic.v
汇编指令中R0为1AH,R1为F0H,由tb_logic.v文件存入。
汇编指令为
CLRA
MOVAR1
ANLAR0
ANLA47H
ORLAR0
ORLA47H
XRLAR0
XRLA47H
CPL
STO
由图中可也看出累加器依次输出为F0H,10H,1AH,5FH,45H,02H,FDH,该汇编指令执行过程完全正确。
可以看出实现的7种指令
ANLARX
ANLA#data
ORLARX
ORLA#data
XRLARX
XRLA#data
CPL
6.3仿真结果3
验证带进位加减法指令,测试文件见tb_jiajianjinwei.v
汇编指令中R0为FFH,由tb_jiajianjinwei.v文件存入
汇编指令为:
CLRA
MOVA5
ADDAR0
ADCAR0
MOVA5
SUBBAR0
SUBBAR0
SUBBAFEH
STO
由图中可也看出累加器依次输出为05H,04H,04H,05H,06H,06H,07H。
该汇编指令执行过程完全正确。
可以看出实现的3种指令。
ADCARn
SUBBARn
SUBBA#data
6.4仿真结果4
验证无条件跳转JMP指令,测试文件见tb_jmp.v
汇编指令为:
CLRA
MOVAFFH
ADDA2
JMP0AH
MOVA5
STO
由图中可也看出累加器依次输出FFH,01H,,跳过加5的指令。
该汇编指令执行过程完全正确。
6.5仿真结果5
验证指令JZ,测试文件见tb_jz.v
汇编指令为:
CLRA
MOVAFFH
ADDA1
JZ0AH
MOVA5
STO
JZ指令为累加器为0时跳转,即跳过加5指令,累加器输出为FFH,00H。
该汇编指令执行过程完全正确。
6.6仿真结果6
验证指令JC,测试文件见tb_jc.v
汇编指令为:
CLRA
MOVAFFH
ADDA2
JC0AH
MOVA5
STO
JC指令为上一条指令有进位时跳转,即跳过加5指令。
累加器输出为FFH,00H。
该汇编指令执行过程完全正确。
6.7仿真结果7
比较功能仿真与门及仿真区别
图1为实现5!
时功能仿真时的结果,图2为门级仿真时的结果。
可以看出门及仿真相对于功能仿真出现了2ns延时。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- IC 作业