最新Verilog数字系统设计-课程设计报告-图文..doc
《最新Verilog数字系统设计-课程设计报告-图文..doc》由会员分享,可在线阅读,更多相关《最新Verilog数字系统设计-课程设计报告-图文..doc(152页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateVerilog数字系统设计-课程设计报告-图文.Verilog数字系统设计-课程设计报告-图文.Verilog HDL 数字系统设计课程设计课题:RISC_CPU设计与验证第一章:RISC_CPU概述 (51.1课题的由来和设计环境介绍 (51.2什么是CPU (5第二章:RISC_CPU结构 (62.1 RISC_CPU整体结构 (62.2 时钟发生器 (72.2.
2、1 时钟发生器的介绍 (72.2.2 时钟发生器symbol (82.2.3 时钟发生器RTL (82.2.4 时钟发生器源代码 (82.2.5 时钟发生器测试代码 (92.2.6 时钟发生器仿真波形 (102.3指令寄存器 (102.3.1 指令寄存器介绍 (102.3.2 指令寄存器symbol (112.3.3 指令寄存器RTL (112.3.4 指令寄存器源代码 (112.3.5 指令寄存器测试代码 (122.3.6指令寄存器仿真波形 (132.4 累加器 (132.4.1 累加器介绍 (132.4.2 累加器symbol (132.4.3 累加器RTL (142.4.4 累加器源代码
3、 (142.4.5 累加器仿真代码 (142.4.6 累加器仿真波形 (152.5 算术运算器 (152.5.1 算术运算器介绍 (152.5.2 算术运算器symbol (162.5.3 算术运算器RTL (172.5.4 算术运算器源代码 (182.5.5 算术元算器测试代码 (192.5.6 算术运算器仿真波形 (202.6数据控制器 (202.6.1 数据控制器介绍 (202.6.2 数据控制器smybol (202.6.3 数据控制器RTL (212.6.4 数据控制器源代码 (212.6.5 数据控制器测试代码 (222.6.6 数据控制器仿真波形 (222.7 地址多路器 (22
4、2.7.1地址多路器介绍 (222.7.2 地址多路器smybol (232.7.3 地址多路器RTL (232.7.5 地址多路器测试代码 (232.7.6 地址多路器仿真波形 (242.8程序计数器 (242.8.1 程序计数器介绍 (242.8.2 程序计数器symbol (252.8.3 程序计数器RTL (252.8.4 程序计数器源代码 (252.8.5 程序计数器测试代码 (262.8.6 程序计数器仿真波形 (262.9 状态控制器 (272.9.1 状态控制器介器 (272.9.2 状态控制器smybol (272.9.3 状态控制器RTL (272.9.4 状态控制器源代码
5、 (272.9.5 状态控制器测试代码 (282.9.6 状态控制器仿真波形 (292.10状态机 (292.10.1状态机的介绍 (292.10.2 状态机symbol (302.10.3 状态机RTL (302.10.4状态机源代码 (312.10.5 状态机测试代码 (352.10.6 状态机仿真波形 (362.11 CPU内核模块的整合 (362.11.1 CPU内核原理图 (362.11.2 CPU内核smybol (37第三章:CPU外围模块的设计 (373.1 地址译码器 (373.1.1 地址译码器介绍 (373.1.2 地址译码器smybol (373.1.3 地址译码器RT
6、L (383.1.4 地址译码器源代码 (383.1.5 地址译码器测试代码 (383.1.6 地址译码器仿真波形 (393.2 RAM (393.2.1 RAM的介绍 (393.2.2 RAM smybol (393.2.3 RAM RTL (403.2.4 RAM 源代码 (403.2.5 RAM 测试代码 (403.2.6 RAM 仿真波形 (423.3 ROM (423.3.1 ROM的介绍 (423.3.3 ROM的高阻化处理 (423.4 I/O模块 (433.4.1 I/O模块源代码 (433.4.2 I/O模块smybol (443.5 CPU外围模块连接电路原理图 (443.
7、6 烧录到FPGA上 (45第四章:CPU功能验证 (454.1 CPU寻址方式和指令系统 (454.2 HLT指令验证 (464.3 SKZ指令验证 (464.4 ADD指令验证 (474.5 AND指令验证 (474.6 LDA、STO、JMP指令验证 (47第五章:总结 (48参考文献: (48第一章:RISC_CPU概述1.1课题的由来和设计环境介绍在本设计课程中,我们通过自己动脑筋,设计出CPU的软核和固核。这个CPU是一个简化的专门为教学目的而设计的RISC_CPU。在设计中我们不但关心CPU 总体设计的合理性,而且还使得构成这个RISC_CPU的每一个模块不仅是可仿真的也都可以综
8、合成门级网表。因而从物理意义上说,这也是一个能真正通过具体电路结构而实现的CPU。为了能在这个虚拟的CPU上运行较为复杂的程序并进行仿真, 我们把寻址空间规定为8K(即13位地址线字节。下面我们就一步一步地来设计这样一个CPU,并进行RTL仿真、经过综合、布局布线后,再次进行一次仿真,从中我们可以体会到这种设计方法的潜力。次课程设计中的V erilogHDL程序都为我们学习目的而编写的,全部程序在CADENCE公司的NC-V erilog 环境、Synopsys VCS、Mentor 公司的ModelSim 6.1 等环境下用V erilog语言进行了仿真。同时我们分别用Synplify、Al
9、tera Quartus II 等工具,针对不同的FPGA进行了综合。顺利地通过RTL级仿真、综合后门级逻辑网表仿真以及布线后的门级结构电路模型仿真。这个CPU 模型只是一个教学模型,设计也不一定很合理,只是从原理上说明了简单的RISC _CPU是如何构成的。本次课程设计的内容是想达到以下四个目的:1学习RISC CPU的基本结构和原理;2了解V erilog HDL仿真和综合工具的潜力;2展示V erilog设计方法对软/硬件联合设计和验证的意义;3学习并掌握一些常用的V erilog语法和验证方法。作者也希望本章的内容能引起对CPU和复杂数字逻辑系统设计有兴趣的电子工程师们的注意,加入我国
10、集成电路的设计队伍,提高我国电子产品的档次。1.2什么是CPUCPU 即中央处理单元的英文缩写,它是计算机的核心部件。计算机进行信息处理可分为两个步骤:1.将数据和程序(即指令序列输入到计算机的存储器中。2.从第一条指令的地址起开始执行该程序,得到所需结果,结束运行。CPU的作用是协调并控制计算机的各个部件执行程序,使其有条不紊地进行。因此它必须具有以下基本功能:取指令:当程序已在存储器中时,首先根据程序入口地址取出一条程序,为此要发出指令地址及控制信号。分析指令:即指令译码。是对当前取得的指令进行分析,指出它要求什么操作,并产生相应的操作命令。执行指令:根据分析指令时产生的操作命令形成相应的
11、操作控制信号序列,通过运算器,存储器及输入/输出设备的执行,实现每条指令的功能,其中包括对运算结果的处理以及下条指令地址的形成。将其功能进一步细化,可概括如下:能对指令进行译码并执行规定的动作;可以进行算术和逻辑运算;能与存储器,外设交换数据;提供整个系统所需要的控制;尽管各种CPU的性能指标和结构细节各不相同,但它们所能完成的基本功能相同。由功能分析,可知任何一种CPU内部结构至少应包含下面这些部件:算术逻辑运算部件(ALU,累加器,程序计数器,指令寄存器,译码器,时序和控制部件。RISC 即精简指令集计算机(Reduced Instruction Set Computer的缩写。它是一种八
12、十年代出现的CPU,与一般的CPU 相比不仅只是简化了指令系统,而且是通过简化指令系统使计算机的结构更加简单合理,从而提高了运算速度。从实现的途径看,RISC_CPU与一般的CPU的不同处在于:它的时序控制信号形成部件是用硬布线逻辑实现的而不是采用微程序控制的方式。所谓硬布线逻辑也就是用触发器和逻辑门直接连线所构成的状态机和组合逻辑,故产生控制序列的速度比用微程序控制方式快得多,因为这样做省去了读取微指令的时间。RISC_CPU也包括上述这些部件,下面就详细介绍一个简化的用于教学目的的RISC_CPU的可综合V erilogHDL模型的设计和仿真过程。第二章:RISC_CPU结构2.1 RIS
13、C_CPU整体结构RISC_CPU是一个复杂的数字逻辑电路,但是它的基本部件的逻辑并不复杂。我们可把它分成八个基本部件来考虑:1时钟发生器2指令寄存器3累加器4算术逻辑运算单元5数据控制器6状态控制器7程序计数器8地址多路器9状态机各部件的相互连接关系见图17.1。其中时钟发生器利用外来时钟信号进行分频生成一系列时钟信号,送往其他部件用作时钟信号。各部件之间的相互操作关系则由状态控制器来控制。各部件的具体结构和逻辑关系在下面的小节里逐一进行介绍。 2.2 时钟发生器2.2.1 时钟发生器的介绍时钟发生器CLK_GEN 利用外来时钟信号clk 来生成一系列时钟和控制信号:clk、fetch、al
14、u_ena 送往CPU的其他部件。其中fetch是控制信号,clk 的八分频信号,当fetch 高电平时,使clk能触发CPU控制器开始执行一条指令,同时fetch信号还将控制地址多路器输出指令地址和数据地址。clk信号用作指令寄存器、累加器、状态控制器的时钟信号。alu_ena 则用于控制算术逻辑运算单元的操作。由于在时钟发生器的设计中采用了同步状态机的设计方法,不但使clk_gen模块的源程序可以被各种综合器综合,也使得由其生成的fetch、alu_ena 在同步性能上有明显的提高,为整个系统的性能提高打下了良好的基础。2.2.2 时钟发生器symbol 2.2.3 时钟发生器RTL 2.
15、2.4 时钟发生器源代码timescale 1ns/1nsmodule CLK_GEN (clk,reset,fetch,alu_ena,clk1; input clk;input reset;output fetch,alu_ena,clk1;reg fetch,alu_ena;reg 7:0 state;assign clk1=clk;parameters1=8b00000001,s2=8b00000010,s3=8b00000100,s4=8b00001000,s5=8b00010000,s6=8b00100000,s7=8b01000000,s8=8b10000000,idle=8b0
16、0000000;always (posedge clk or negedge resetif(resetbeginfetch=0;alu_ena=0;state=idle;endelsebegincase(states1:begin alu_ena=1;state=s2;ends2:begin alu_ena=0;state=s3;ends3:begin fetch=1;state=s4;ends4:begin state=s5;ends5:begin state=s6;ends6:begin state=s7;ends7:begin fetch=0;state=s8;ends8:begin
17、state=s1;endidle: state=s1;default: state=idle;endcaseendendmodule2.2.5 时钟发生器测试代码timescale 1ns/1nsmodule TB(;reg clk;reg reset;wire fetch;wire alu_ena;wire clk1;CLK_GEN u1(.clk(clk,.reset(reset,.fetch(fetch,.alu_ena(alu_ena,.clk1(clk1;initialbeginclk=0;reset=0;endalwaysbegin#50 clk=clk;#400 reset=1;
18、endendmodule2.2.6 时钟发生器仿真波形 2.3指令寄存器2.3.1 指令寄存器介绍指令寄存器,顾名思义,指令寄存器用于寄存指令。指令寄存器的触发时钟是clk,在clk的正沿触发下,寄存器将数据总线送来的指令存入高8位或低8位寄存器中。但并不是每个clk的上升沿都寄存数据总线的数据,因为数据总线上有时传输指令,有时传输数据。什么时候寄存,什么时候不寄存由CPU状态控制器的load_ir信号控制。load_ir信号通过ena 口输入到指令寄存器。复位后,指令寄存器被清为零。每条指令为2个字节,即16位。高3位是操作码,低13位是地址。(CPU的地址总线为13位,寻址空间为8K字节。
19、本设计的数据总线为8位,所以每条指令需取两次。先取高8位,后取低8位。而当前取的是高8位还是低8位,由变量state记录。state为零表示取的高8位,存入高8位寄存器,同时将变量state置为1。下次再寄存时,由于state为1,可知取的是低8位,存入低8位寄存器中。2.3.2 指令寄存器symbol 2.3.3 指令寄存器RTL 2.3.4 指令寄存器源代码timescale 1ns/1nsmodule REGISTER (opcode,ir_addr,data,ena,clk,rst; output2:0opcode;output12:0ir_addr;input7:0data;inpu
20、t ena,clk,rst;reg15:0opc_iraddr;reg state;assign opcode,ir_addr = opc_iraddr;always(posedge clk or negedge rstbeginif(rstopc_iraddr=16b0000_0000_0000_0000;state=1b0;endelsebeginif(enabegincasex(state1b0:beginopc_iraddr15:8=data;state=1;end1b1:beginopc_iraddr7:0=data;state=0;enddefault:beginopc_iradd
21、r15:0=16b0000000000000000;state=1b0;endendcaseendelsestate=1b0;endendendmodule2.3.5 指令寄存器测试代码REGISTER u1 (.data(data,.ena(ena,.clk(clk,.rst(rst,.opcode(opcode,.ir_addr(ir_addr;initialbeginena=1b1;clk=1b0;rst=1b0;data=8b11111100;endbegin#200 rst=1b1;#50 clk=clk;endendmodule2.3.6指令寄存器仿真波形 2.4 累加器2.4.1
22、 累加器介绍累加器用于存放当前的结果,它也是双目运算其中一个数据来源。复位后,累加器的值是零。当累加器通过ena口收到来自CPU状态控制器load_acc信号时,在clk时钟正跳沿时就收到来自于数据总线的数据。2.4.2 累加器symbol 2.4.3 累加器RTL 2.4.4 累加器源代码module ACCUM(accum,data,ena,clk,rst; input 7:0data;input ena,clk,rst;output reg 7:0accum;always (posedge clk or negedge rst beginif(rstaccum=8b00000000;el
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 Verilog 数字 系统 设计 课程设计 报告 图文
限制150内