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

上传人:doc321 文档编号:12908786 上传时间:2021-12-07 格式:DOC 页数:20 大小:1.28MB
返回 下载 相关 举报
简单微处理器设计实验报告.doc_第1页
第1页 / 共20页
简单微处理器设计实验报告.doc_第2页
第2页 / 共20页
简单微处理器设计实验报告.doc_第3页
第3页 / 共20页
简单微处理器设计实验报告.doc_第4页
第4页 / 共20页
简单微处理器设计实验报告.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

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

1、目录目录1表目录2图目录31文档说明(Introduction)42描述习惯(Conventions)53微处理器各功能模块63.1概述63.2结构框图63.2.1ALUpart63.2.2controlpart93.2.3CPU113.3功能列表123.3.1ALUpart123.3.2controlpart133.3.2.1状态转移图133.4工作环境介绍143.4.1设计代码143.4.2测试平台143.4.3电路综合环境163.4.4后仿真环境163.5功能验证结果173.5.1前仿真结果173.5.2后仿真结果193.6综合结果20表目录表1ALU8模块I/O接口表2通用寄存器堆模块

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 执

3、行跳转指令的状态机波形图14ALUpart执行一条指令的波形图图15ALUpart执行指令状态机的波形图16综合的Timing report图17综合的Area report图18 门级仿真5!的波形结果图19 门级仿真产生的延时20 / 20文档可自由编辑打印1文档说明(Introduction)本文档描述了简单微处理器的总体设计,如功能、模块结构、关键时序等等。本设计参照了课程设计文档的系统原理框图和功能列表,根据需求作了一些改动,将累加器A合并到ALU单元中,将寄存器Rn合并到通用寄存器RAM(8*8)中;将程序计数器和指令寄存器合并到控制模块controller中等。指令方面,添加了A

4、cc非零时跳转指令JNZ。2描述习惯(Conventions)在文档写作中黑色字体表明已经确定的内容,尚未完全确定的内容以蓝色字体表示,有疑问或需要醒目标示的内容则以红色字体表示。代码方面,使能信号习惯采用低电平有效。3微处理器各功能模块3.1概述8位微处理器的硬件系统主要包括运算器ALU、控制器CON、指令存储器IRRAM(64*8)、通用寄存器堆RAM(8*8)等逻辑部件。能够通过控制器读取指令集,对8位数据进行运算和操作。本次设计有独立的控制模块和运算模块,通用寄存器堆合并到ALU模块中,IRRAM合并到CON控制模块中。仿真周期采用10ns。微处理器的指令系统通过指令码实现,根据其格式

5、的不同,可分为算术、逻辑、数据转移、跳转指令等。在功能列表部分将做详细介绍。本次课程设计实现了阶乘5!以验证处理器的运算类指令。已成功实现RTL级设计、功能仿真、综合、门及仿真。3.2结构框图3.2.1ALUpart图1ALU8模块框图ALU模块是运算模块,有3个状态,从controller中读取数据和使能信号等,根据选通信号op判断当前要进行的指令操作。先读取Rn_rd和reg_add,状态并不跳转,等待直到data_le低有效,读取到立即数data时,状态跳转到运算状态,再通过case语句进行相应运算操作。表1ALU8模块I/O接口SIGNALBITSI/OSIGNAL DESCRIPTI

6、ONclk1I时钟信号rst1I复位信号Rn_rd1I读Rn使能信号,低有效Reg_add3IRn在RAM中的地址Rn8I寄存器,暂存中间运算数据Rn_wr1O写使能信号,低有效op4I运算功能选择信号data8I立即数data_le1I读立即数使能信号,低有效busy1OALU8忙,低有效carry1O进位信号,carry=1时JC addrAcc8O运算器结果通用寄存器堆RAM(8*8),储存中间数据Rn,结构框图:图2通用寄存器RAM模块框图下表为输入输出接口:表2通用寄存器堆模块I/O接口SIGNALBITSI/OSIGNAL DESCRIPTIONclk1I时钟信号rst1I复位信号

7、Rn_rd1I读Rn使能信号,低有效Reg_add3I要操作的操作数Rn在RAM中的地址Rn8O寄存器,暂存中间运算数据Rn_wr1I写使能信号,低有效Acc8I运算器运算结果图3ALUpart模块框图Alu8和RAMn_array两个模块组成ALU part部分。两个模块通过Rn_wr信号,Rn和A进行交互。当需要进行读操作时,在外部(相对于alupart模块)使能信号Rn_rd下,alu通过地址Rn_addr读取出需要的Rn;当需要进行写操作时,alu8使信号Rn_wr 低有效,再经过一个周期,将当前中间运算结果A写入到地址Rn_addr对应的Rn中去。ALU8模块中包含了16种运算(不包

8、含跳转),也包含了累加功能块A,从controlpart读取选通信号op和数据data,从RAMn_array读取Rn。RAM(8*8)中存放Rn,通过control的使能Rn_rd,经地址Rn_addr2.0将数据读到ALU8中去,利用ALU8给的Rn_wr信号将A写到RAM(8*8)中去。表3alupart输入输出I/O口列表SIGNALBITSI/OSIGNAL DESCRIPTIONclk1I时钟信号rst1I复位信号Rn_rd1I读Rn使能信号,低有效Reg_add3IRn在RAM中的地址op4I运算功能选择信号data8I立即数data_le1I读立即数使能信号,低有效busy1O

9、ALU8忙,低有效carry1O进位信号,carry=1时JC addrAcc8O运算器结果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等信号。控制器与

10、指令寄存器通过IR_le,IR,IRRAM_add进行交互。用程序计数器counter来计量IRRAM_add,当IR_le低有效时,用IRR暂存读取的IRRAM_add地址上的指令IR,不同时刻IR代表指令op、Rn_reg或者数据data。表4控制器模块I/O接口SIGNALBITSI/OSIGNAL DESCRIPTIONclk1I时钟信号rst1I复位信号IR8I程序输入IR_le1I读入指令使能IRRAM_add6O指令寄存器IRRAM地址Rn_rd1O读Rn使能信号,低有效Reg_add3ORn在RAM中的地址op4O运算功能选择信号data8O立即数data_le1O读立即数使能

11、信号,低有效alu_free1IALU单元空闲,低有效carry1I进位信号,carry=1时JC addrAcc8I运算器结果指令存储器IRRAM(64*8)结构框图:图5IRRAM模块框图在本课程设计中,IRRAM预先存储着要操作的指令代码,也包括数据。将在典型代码分析中详细说明。表5IRRAM模块I/O接口SIGNALBITSI/OSIGNAL DESCRIPTIONclk1I时钟信号rst1I复位信号IR8O程序输入le(IR_le)1O读指令使能add(IRRAM_add)6I指令寄存器IRRAM地址图6Control-part结构框图表6Control-part结构整体I/O接口S

12、IGNALBITSI/OSIGNAL DESCRIPTIONclk1I时钟信号rst1I复位信号Rn_rd1O读Rn使能信号,低有效Reg_add3ORn在RAM中的地址op4O运算功能选择信号data8O立即数data_le1O读立即数使能信号,低有效alu_free1IALU单元空闲,低有效carry1I进位信号,carry=1时JC addrAcc8I运算器结果3.2.3CPUCPU整体结构框图:图7CPU结构框图表7CPU整体模块I/O接口SIGNALBITSI/OSIGNAL DESCRIPTIONclk1I时钟信号rst1I复位信号Acc8O输出结果由于时间仓促,本次课设没有做汇编

13、器和I/O界面输入,程序指令已预先存储到IRRAM中。只需时钟clk和复位信号rst经仿真即可得到运算结果。3.3功能列表3.3.1ALUpart表8ALU 指令集指令op功能描述算术指令ADD A, Rn0001把Rn 的值加到A 上ADD A, #data0010把立即数的值加到A 上ADDC A, Rn0011连同进位一起把Rn 的值加到A 上SUBB A, Rn0100连同借位一起从A 中减去寄存器的值SUBB A, #data0101连同借位一起从A 中减去立即数的值逻辑运算指令ANL A, Rn 0110Rn 对A 进行逻辑与运算ANL A, #data0111立即数对A 进行逻辑

14、与运算ORL A, Rn1000Rn 对A 进行逻辑或操作ORL A, #data1001立即数对A 进行逻辑或操作XRL A, Rn1010Rn 对A 进行逻辑异或操作XRL A, #data1011立即数对A 进行逻辑异或操作CLR A1100清空A 的值CPL A1101对A 的值取反数据传输指令MOV A, Rn1110把Rn 的值传输给AMOV A, #data1111把立即数传输给AMOV Rn, A0000把A 传输给Rn 寄存器指令操作中涉及到Rn的需要对RAMn_array进行读或者写操作,读操作需要提前写好Rn的值,写操作需要经过两个周期(Rn_wr置低到RAMn_arra

15、y在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

16、,因为01中的运算操作在一个周期内即可完成,10存在是给RAMn_array留一个周期进行写操作。由于Acc结果需要即时改变,实现时用到一个中间信号A跟踪Acc。与控制模块握手的busy信号在01状态即赋值为高,因为非阻塞赋值在下一时钟有效沿才实现,即10状态时busy为高,即alu不忙(可能忙的是RAMn_array),控制模块controller可以继续给alu操作信号。3.3.2controlpart3.3.2.1状态转移图Con模块状态转移图如下,可见每个指令,控制部分最短只需4个周期。状态000,为空闲状态,当IR_le='0' and Alu_free='0

17、'时读入指令IR,在根据IR7来判断将要跳转的下一个状态。当IR7='1'时,指令为jump类指令,状态由000跳转到001;当IR7='0'时,指令为数据操作类指令,状态由000跳转到010。并且程序计数器加一,指令存储器中指针也指向下一条指令。由于IRRAM中设定IR_le一直低有效,故跳转状态条件没有写出IR_le=0。状态001和010纯是等待时间,没有操作。这2个状态存在是在等待指令指向下一行,方便在下一个状态中读取指令中的数据或者跳转地址。状态011是jump state,从IR中读取跳转地址,并让程序计数器指向下一条指令。然后跳转到101等

18、待进行下一条指令操作。状态100是读数据data状态,000状态已将reg_add和op读取出来传给ALU,此时在100状态,将立即数data读出,传给ALU。然后跳转到101等待ALU一个周期跳转到000,状态转到000后,若ALU尚未运算完毕(alu_free=1),则继续停留在idle状态。图9controlpart状态转移图下表为本课程设计中涉及到的jump指令,功能已将列出。程序中用IR7来表征指令是否为跳转指令,1表示是跳转指令。表9添加的JUMP指令分支跳转指令IR(7)&opJMP addr10001无条件跳转JC addr10010在进位carry = 1 的情况下跳

19、转到地址JZ addr10011在累加器ACC 等于0 的情况下跳转到地址JNZ addr10100在累加器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/C

20、PUgate/CPU.vhd3.4.2测试平台/home/cas1098/CPUgate/tb.vhd -功能仿真与门级仿真的测试程序测试CPU功能的n!程序预先写进了 IRRAM 之内 指令集程序如下move data=5 to A move A to R0move A to R3A=A-2move A to R2move A to R1move R3 to AA=A+R0;move A to R3move R1 to AA=A-1move A to R1JNZ to 001100move R3 to Amove A to R0A=A-1move A to R1move A to R2JNZ

21、 to 001100move R3 to A-jmp机器指令如下case add iswhen "000000" => IR<="01111000" -move data=5 to A when "000001" => IR<="00000101" when "000010" => IR<="00000000" -move A to R0when "000011" => IR<="00000000&

22、quot;when "000100" => IR<="00000011" -move A to R3when "000101" => IR<="00000000"when "000110" => IR<="00101000" -A=A-2when "000111" => IR<="00000010"when "001000" => IR<="000

23、00010" -move A to R2when "001001" => IR<="00000000" when "001010" => IR<="00000001" -move A to R1when "001011" => IR<="00000000"when "001100" => IR<="01110011" -move R3 to Awhen "001101&

24、quot; => IR<="00000000"when "001110" => IR<="00011000" -A=A+R0;when "001111" => IR<="00000000"when "010000" => IR<="00000011" -move A to R3when "010001" => IR<="00000000" when &quo

25、t;010010" => IR<="01110001" -move R1 to Awhen "010011" => IR<="00000000"when "010100" => IR<="00101000" -A=A-1when "010101" => IR<="00000001" when "010110" => IR<="00000001" -

26、move A to R1when "010111" => IR<="00000000"when "011000" => IR<="10100000" -JNZ to 001100when "011001" => IR<="00110000"when "011010" => IR<="01110011" -move R3 to Awhen "011011" => I

27、R<="00000000"when "011100" => IR<="00000000" -move A to R0when "011101" => IR<="00000000"when "011110" => IR<="01110010" -move R2 to Awhen "011111" => IR<="00000000" when "100000

28、" => IR<="00101000" -A=A-1when "100001" => IR<="00000001"when "100010" => IR<="00000001" -move A to R1when "100011" => IR<="00000000"when "100100" => IR<="00000010" -move A to

29、 R2when "100101" => IR<="00000000"when "100110" => IR<="10100000" -JNZ to 001100 when "100111" => IR<="00110000"when "101000" => IR<="01110011" -move R3 to Awhen "101001" => IR<=&q

30、uot;00000000"when "101010" => IR<="10001000" -jmp to this order stablewhen "101011" => IR<="10101000" when others => IR<=x"ff"end case;3.4.3电路综合环境/home/ic/library/typical.db #综合需要的库文件/home/cas1098/CPUgate/area.txt #综合出的面积报告/hom

31、e/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!的指令。完成了功能仿真。图11

32、controllpart执行一条指令的波形图在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状态(必然跳

33、转)->5状态(必然跳转)->0状态,一条指令工作周期即机器周期一共是5个clk周期。图13control 执行跳转指令的状态机波形状态机从0状态(ALU_free=0跳转)->1状态(必然跳转)->3状态(必然跳转)->5状态(必然跳转)->0状态,一条指令工作周期一共是4个clk周期,因为alu没有工作,不需要等待alu的alu_free。图14ALUpart执行一条指令的波形图出现Rn_rd信号,之后ALU的busy信号变为1,同时op和data信号先后到达到cpu(data信号比op信号晚2个周期),执行的指令时f,通过内部判断为“move data

34、 to A”指令,在data信号使能2个周期之后,A被改写为data的值。赋值的同时,busy的信号变为0.表示ALU处于空闲。图15ALUpart执行指令状态机的波形状态机从0状态(data_le=0时跳转)->1状态(必然跳转)->2状态(必然跳转)->0状态,一个周期一共是5个clk周期。因为alu执行的必然是非跳转指令。3.5.2后仿真结果图16 综合的Timing report图17 综合的Area report图18 门级仿真5!的波形结果后仿真的功能波形和前仿真的一样 ,没有产生时序上的冲突,功能验证通过.图19 门级仿真产生的延时输出的波形和clk波形有3ns的延时。3.6综合结果综合产生的网表文件和report文件都在CPUgate文件夹下/home/cas1098/CPUgate/area.txt #综合出的面积报告/home/cas1098/CPUgate/timing.txt #综合出的时间报告/home/cas1098/CPUgate/cpugate.v #综合后产生的门级网表

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

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1