基于FPGA的CPU设计Word版.doc

上传人:doc321 文档编号:14393544 上传时间:2022-02-05 格式:DOC 页数:32 大小:449.50KB
返回 下载 相关 举报
基于FPGA的CPU设计Word版.doc_第1页
第1页 / 共32页
基于FPGA的CPU设计Word版.doc_第2页
第2页 / 共32页
基于FPGA的CPU设计Word版.doc_第3页
第3页 / 共32页
基于FPGA的CPU设计Word版.doc_第4页
第4页 / 共32页
基于FPGA的CPU设计Word版.doc_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《基于FPGA的CPU设计Word版.doc》由会员分享,可在线阅读,更多相关《基于FPGA的CPU设计Word版.doc(32页珍藏版)》请在三一文库上搜索。

1、编号 毕业设计论文课题名称 基于FPGA的CPU设计 期 别 05 级二零零九年六月摘要:从CPU的总体结构到局部功能的实现采用了自顶向下的设计方法和模块化的设计思想,利用Xilinx公司的Spartan II系列FPGA,设计实现了八位CPU软核。在FPGA内部不仅实现了CPU必需的算术逻辑器、寄存器堆、指令缓冲、跳转计数、指令集,而且针对FPGA内部的结构特点对设计进行了地址和数据的优化。关键字:Verilog HDL RISC_CPU FPGA目 录2 RISC_CPU的结构52.1 引言52.2 RISC_CPU结构52.2.1 时钟发生器52.2.2 指令寄存器62.2.3 累加器7

2、2.2.4 算术运算器72.2.5 数据控制器82.2.6 地址多路器82.2.7 程序计数器92.2.8 状态控制器92.2.9 外围模块103 RISC_CPU操作和时序123.1 系统的复位和启动操作123.2 总线读操作123.3 总线写操作124 RISC_CPU寻址方式和指令系统135 微处理器指令146 汇 编157 RISC_CPU模块的调试167.1 RISC_CPU模块的前仿真167.2 RISC_CPU模块的综合177.3 RISC_CPU模块的优化和布局布线238 总 结25致 谢26参考资料271 引言随着数字通信和工业控制领域的高速发展,要求专用集成电路ASIC(A

3、pplication Specific IC)的功能越来越强,功耗越来越低,生产周期越来越短,这些都对芯片设计提出了巨大的挑战,传统的芯片设计方法已经不能适应复杂的应用需求了。简单来说,SoC是一种将多个独立的VLSI(超大规模集成电路)设计拼合在一起,来成某一应用所需的全部功能的集成电路。SoC(System on a Chip)以其高集成度,低功耗等优点越来越受欢迎。开发人员不必从单个逻辑门开始去设计ASIC,而是应用己有IC芯片的功能模块,称为核(core),或知识产权(IP)宏单元进行快速设计,效率大为提高。CPU 的IP核是SoC技术的核心,开发出具有自主知识产权的CPU IP核对我

4、国在电子技术方面跟上世界先进的步伐,提高信息产业在世界上的核心竟争力有重大意义。通常一个完整的SOC集成了中央处理器核(CPU Core)、数字信号处理器核(DSP Core)、存储器核(Memory Core)、射频处理器核(RF Processor)、数模转换器(DAC)和模数转换器(ADC)等部分。在这其中,中央处理器核即CPU是最重要的组成部分,由它来完成简单的数据处理,内存的调度,中断处理等操作。2 RISC_CPU的结构2.1 引言RISC_CPU是一个复杂的数字逻辑电路,但是它的基本部件的逻辑并不复杂。从第四章我们知道可把它分成八个基本部件:1)时钟发生器2)指令寄存器3)累加器

5、4)RISC_CPU算术逻辑运算单元5)数据控制器6)状态控制器7)程序计数器8)地址多路器其中时钟发生器利用外来时钟信号进行分频生成一系列时钟信号,送往其他部件用作时钟信号。各部件之间的相互操作关系则由状态控制器来控制。各部件的具体结构和逻辑关系在下面的小节里逐一进行介绍。2.2 RISC_CPU结构2.2.1 时钟发生器时钟发生器 clkgen 利用外来时钟信号clk 来生成一系列时钟信号clk1、fetch、alu_clk 送往CPU的其他部件。其中fetch是外来时钟 clk 的八分频信号。利用fetch的上升沿来触发CPU控制器开始执行一条指令,同时fetch信号还将控制地址多路器输

6、出指令地址和数据地址。clk1信号用作指令寄存器、累加器、状态控制器的时钟信号。alu_clk 则用于触发算术逻辑运算单元。时钟发生器clkgen的波形见下图2.2.1所示:其Verilog HDL程序见下面的模块: clkclk1clk2clk4fetchalu_clk图2.2.1 时钟发生器clkgen的波形2.2.2 指令寄存器顾名思义,指令寄存器用于寄存指令。指令寄存器的触发时钟是clk1,在clk1的正沿触发下,寄存器将数据总线送来的指令存入高8位或低8位寄存器中。但并不是每个clk1的上升沿都寄存数据总线的数据,因为数据总线上有时传输指令,有时传输数据。什么时候寄存,什么时候不寄存

7、由CPU状态控制器的load_ir信号控制。load_ir信号通过ena 口输入到指令寄存器。复位后,指令寄存器被清为零。每条指令为2个字节,即16位。高3位是操作码,低13位是地址。(CPU的地址总线为13位,寻址空间为8K字节。)本设计的数据总线为8位,所以每条指令需取两次。先取高8位,后取低8位。而当前取的是高8位还是低8位,由变量state记录。state为零表示取的高8位,存入高8位寄存器,同时将变量state置为1。下次再寄存时,由于state为1,可知取的是低8位,存入低8位寄存器中。2.2.3 累加器累加器用于存放当前的结果,它也是双目运算其中一个数据来源。复位后,累加器的值是

8、零。当累加器通过ena口收到来自CPU状态控制器load_acc信号时,在clk1时钟正跳沿时就收到来自于数据总线的数据。2.2.4 算术运算器算术逻辑运算单元 根据输入的8种不同操作码分别实现相应的加、与、异或、跳转等8种基本操作运算。利用这几种基本运算可以实现很多种其它运算以及逻辑判断等操作。2.2.5 数据控制器数据控制器的作用是控制累加器数据输出,由于数据总线是各种操作时传送数据的公共通道,不同的情况下传送不同的内容。有时要传输指令,有时要传送RAM区或接口的数据。累加器的数据只有在需要往RAM区或端口写时才允许输出,否则应呈现高阻态,以允许其它部件使用数据总线。 所以任何部件往总线上

9、输出数据时,都需要一控制信号。而此控制信号的启、停,则由CPU状态控制器输出的各信号控制决定。数据控制器何时输出累加器的数据则由状态控制器输出的控制信号datactl_ena决定。2.2.6 地址多路器地址多路器用于选择输出的地址是PC(程序计数)地址还是数据/端口地址。每个指令周期的前4个时钟周期用于从ROM中读取指令,输出的应是PC地址。后4个时钟周期用于对RAM或端口的读写,该地址由指令中给出。地址的选择输出信号由时钟信号的8分频信号fetch提供。2.2.7 程序计数器程序计数器用于提供指令地址。以便读取指令,指令按地址顺序存放在存储器中。有两种途径可形成指令地址:其一是顺序执行的情况

10、,其二是遇到要改变顺序执行程序的情况,例如执行JMP指令后,需要形成新的指令地址。下面就来详细说明PC地址是如何建立的。复位后,指令指针为零,即每次CPU重新启动将从ROM的零地址开始读取指令并执行。每条指令执行完需2个时钟,这时pc_addr已被增2,指向下一条指令。(因为每条指令占两个字节。)如果正执行的指令是跳转语句,这时CPU状态控制器将会输出load_pc信号,通过load口进入程序计数器。程序计数器(pc_addr)将装入目标地址(ir_addr),而不是增2。2.2.8 状态控制器状态控制器由两部分组成:状态机(上图中的MACHINE部分)状态控制器(上图中的MACHINECTL

11、部分)状态机控制器接受复位信号RST,当RST有效时通过信号ena使其为0,输入到状态机中停止状态机的工作。状态控制器的VerilogHDL程序见下面模块:/-/module machinectl( ena, fetch, rst);output ena;input fetch, rst;reg ena;always (posedge fetch or posedge rst)beginif(rst)ena=0;elseena=1;endendmodule/-/状态机是CPU的控制核心,用于产生一系列的控制信号,启动或停止某些部件。CPU何时进行读指令读写I/O端口,RAM区等操作,都是由状态

12、机来控制的。状态机的当前状态,由变量state记录,state的值就是当前这个指令周期中已经过的时钟数(从零计起)。 指令周期是由8个时钟周期组成,每个时钟周期都要完成固定的操作。1) 第0个时钟,因为CPU状态控制器的输出:rd和load_ir为高电平,其余均为低电平。指令寄存器寄存由ROM送来的高8位指令代码。2) 第1个时钟,与上一时钟相比只是inc_pc从0变为1故PC增1,ROM送来低8位指令代码,指令寄存器寄存该8位代码。3) 第2个时钟,空操作。4) 第3个时钟,PC增1,指向下一条指令。若操作符为HLT,则输出信号HLT为高。如果操作符不为HLT,除了PC增一外(指向下一条指令

13、),其它各控制线输出为零。5) 第4个时钟,若操作符为AND、ADD、XOR或LDA,读相应地址的数据;若为JMP,将目的地址送给程序计数器;若为STO,输出累加器数据。6) 第5个时钟,若操作符为ANDD、ADD或XORR,算术运算器就进行相应的运算;若为LDA,就把数据通过算术运算器送给累加器;若为SKZ,先判断累加器的值是否为0,如果为0,PC就增1,否则保持原值;若为JMP,锁存目的地址;若为STO,将数据写入地址处。7) 第6个时钟,空操作。8) 第7个时钟,若操作符为SKZ且累加器值为0,则PC值再增1,跳过一条指令,否则PC无变化。2.2.9 外围模块为了对RISC_CPU进行测

14、试,需要有存储测试程序的ROM和装载数据的RAM、地址译码器。下面来简单介绍一下:1.地址译码器module addr_decode( addr, rom_sel, ram_sel);output rom_sel, ram_sel;input 12:0 addr;reg rom_sel, ram_sel;always ( addr )begincasex(addr)13b1_1xxx_xxxx_xxxx:rom_sel,ram_sel=2b01;13b0_xxxx_xxxx_xxxx:rom_sel,ram_sel=2b10;13b1_0xxx_xxxx_xxxx:rom_sel,ram_se

15、l=2b10;default:rom_sel,ram_sel=2b00;endcaseendendmodule地址译码器用于产生选通信号,选通ROM或RAM。FFFFH-1800H RAM1800H-0000H ROM2.RAM和ROMmodule ram( data, addr, ena, read, write );inout 7:0 data;input 9:0 addr;input ena;input read, write;reg 7:0 ram 10h3ff:0;assign data = ( read & ena )? ramaddr : 8hzz;always (posedge

16、 write)beginramaddrnew code00000000-00000000000000001-000000011Encoding state machine work.machine_synplcty(verilog)-state7:0Original code-new code000-00000000001-00000011Writing Analyst data base C:vlogexeex17_2rev_1cpu.srmWriting Verilog Netlist and constraint filesWriting.vqm output for QuartusWr

17、iting Cross reference file for Quartus to C:vlogexeex17_2rev_1cpu.xrfWriting Verilog Simulation filesFound clock cpuclk with period 12.50nsFound clock machineinc_pc_derived_clock with period 12.50ns#START OF TIMING REPORT#Timing Report written on Fri Jul 01 10:11:03 2009Top view: cpuRequested Freque

18、ncy: 80.0MHzWire load mode: topPaths requested: 5Constraint File(s):N:MT195This timing report estimates place and route data.Please look at the place and route timing report for final timing.N:MT197Clock constraints cover only FF-to-FF paths associated with the clock.Performance Summary*Worst slack

19、in design:10.158 Requested Estimated Requested Estimate Clock ClockStarting Clock Frequency Frequency Period Period Slack Type Group.cpuclk 80.0MHz 427.0MHz 12.500 2.342 10.158 inferred Inferrd_clkgroup_0machineinc_pc_derived_clock 80.0MHz 427.0MHz 12.500 2.342 10.158 derived Inferrd_clkgroup_0 Cloc

20、k Relationships* Detailed Report for Clock:cpuclk Starting Points with Worst Slack* Starting ArrivalInstance Reference Type Pin Net Time Slack Clockm_accum.accum0 cpuclk stratixii_lcell_ff regout accum_0 0.095 10.158m_accum.accum1 cpuclk stratixii_lcell_ff regout accum_1 0.095 10.194 Ending Points with Worst Slack*Worst Path Information*Path information for path number 1:Requested Period: 12.500-Setup time: 0.403=Required time: 12.097-Propagation time: 1.939=Slack (critical): 10.158Number of logic level(s): 9Star

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

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


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