07电科电子档一稿_第1页
07电科电子档一稿_第2页
07电科电子档一稿_第3页
07电科电子档一稿_第4页
07电科电子档一稿_第5页
免费预览已结束,剩余39页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录摘要IIIAbstractIV第一章 绪论 .11.1课题说明 .11.1.1FPGA 的介绍 .11.1.2RISC 的介绍 .11.1.3基于 FPGA 的 8 位 RISC 微处理器 .11.1.4VerilogHDL 与 HDL .21.2国内微处理器发展情况 .21.3国外微控制器发展情况 .21.4课题意义 .31.5课题研究目标 .31.6RISC 的设计原则 .41.7整体结构说明 .4第二章整体说明 .52.1整体设计思路说明框架图 .52.2设计的流程及所需工具 .62.3该设计的微处理器系统结构图 .72.4小结 .8第三章微处理器系统各个模块的设计 .93.1ALU

2、 模块 .93.1.1ALU 的组成103.1.2ALU 的运算103.1.3ALU 的九种运算中部分功能模块启用的程序113.2寄存器堆143.3译码单元163.4器173.4.1程序器(ROM) .173.4.2数据器(RAM) .183.5取指逻辑 .193.6小结 .20第四章关键模块 .214.1时钟产生器.214.2状态控制器.234.3三级流水线.264.3.1流水线结构 .264.3.2流水线相关问题及解决 .264.3.3流水线各阶段设计与完成 .274.4小结.28第五章仿真与结果 .295.1仿真 .295.1.1ALU 的仿真 .295.1.2流水线的仿真 .305.2

3、基于 FPGA 的仿真与结果 .32总结 .36展望 .37参考文献 .38附录 .39致谢 .40基于 FPGA RISC 结构 8 位微处理器的设计与仿真摘要基于FPGA的8位流水线RISC微处理器的设计以及组建一个仿真的坏境对该处理器进行验证。其中流水线的设计、时钟产生器、ALU的设计等关键模块的设计始终贯穿于RISC的微处理器中,正因为有了他们了8位RISC微处理器才会可能在精简的指令当中运行更复杂的程序,其设计的硬件语言为verilogHDL。通过对以上的关键模块的分析该处理器与普通处理器有不用采用3种寻址方式(立即数寻址、寄存器寻址、寄存器间接寻址),文章重点阐述了因流水线产生的相

4、关性问题, 并采用旁路技术解决。最后该处理器的仿真结果表明了8位RISC处理器达到了设计要求,其最高时钟频率为74.59MHz。:verilogHDL;流水线的设计;3 种寻址方式;ALUFpga Structure Based On Risc 8 Microprosor Design And EmulationAbstractFPGA-based 8-bit pipelined RISC microprosor design and build a simulation of thebadenvironment to verify the prosor. One line of design

5、, the clock generator, ALU design ofkeymodulech as the design runs through the RISC microprosors, is because of the 8-bitRISC microprosort they will streamline the instructions whiay run more complexprogram, the design of the hardware language verilogHDL. Through the aboveysis of thekey modules of t

6、he prosor and general prosor has not - with 3 addressing modes(immediate addressing, register addressing, register indirect addressing), the article focuses onthe correlation generated by line problems and using technology to solve the bypass.Finally, the prosors simulation results showt the 8-bit R

7、ISC prosor to achievethe design requirements, theum clock frequency is 74.59MHz.Keywords : veriloghdl,assembly design ,three for reference ,Alu第一章绪论1.1课题说明1.1.1FPGA 的介绍1.1.2RISC 的介绍世纪 80 年代初兴起的RISC, RISC 微处理器20技术一直是计算机发展的主流的一些基本理论则是计算机领域的重要基础, 但具体实现仍有难度。其中心是简化硬件设计,大部分复杂的指令使用成编译技术,由最简单的指令;把处理器能够执行的指令

8、数目减少到最低,对指令的执行进行优化,使其处理器的工作速度有很大的。1.1.3基于 FPGA 的 8 位 RISC 微处理器利用EDA 技术进行电子系统设计的主要目标是完成集成电路(ASIC)的设计,而现场可编程门阵列(FPGA)是实现这一途径的主流器件。现场可编程通用门阵列(FieldProgram mableGateArray,简称 FPGA)的具有丰富的可编程资源。FPGA 外部连线很少、电路简单、便于控制。本文介绍了一种基于FPGA 技术用 VHDL(VHSICHardw areDescription Language)语言实现的 8 位 RISC 微处理器,并给出了仿真综合结果。FP

9、GA(FieldProgrammable Gate Array),即现场可编程门阵列,它是在 PAL、GAL、CPLD 等可编程器件的基础上进一步发展的产物。它是作为集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的,又克服了原有可编程器件门电路数有限的缺点。采用 FPGA 设计 ASIC 电路(集成电路),用户不需要投片生产,就能得到合用的。 FPGA 可做其它全定制或半定制 ASIC 电路的中试样片。 FPGA有丰富的触发器和 IO 引脚。 FPGA 是 ASIC 电路中设计周期最短、开发费用最低、风险最小的器件之一。 FPGA 可以与 CMOS、TTL 电平兼容。1.

10、1.4VerilogHDL 与 HDL硬件描述语言(HDL)是一种用形式化方法来描述数字电路和设计数字逻辑系统的语言,数字逻辑编者可以利用这种语言来叙述自己的设计,然后利用电子设计自动化的工具(EDA)进行仿真,与门级电路进行综合,再用 FPGA 或 ASIC 实现其功能。目前世界上有 90%以上的 ASIC 和 FPGA 已采用硬件描述语言的方法进行设计。硬件描述语言的发展至今已有二十多年的历史,并成功地应用于设计的各个阶段:、综合等。进入 80 年代后期,硬件描述语言向着标准化的方向发展。最终,VHDL 和 Verilog HDL 语言适应了这种趋势的要求,先后成为IEEE 标准。Veri

11、log HDL 则是硬件描述语言的一种,用于数字电子系统设计。它允许设计者用它来进行各种级别的逻辑设计,可以用它进行数字逻辑系统的、时序分析、逻辑综合。它是目前应用最广泛的一种硬件描述语言。1.2国内微处理器发展情况我国于 1974 年 748 会议后开始研制微型计算机,1976 年山、无线电厂、原电子部 5 所联合研制出DJS-050 机(相当于el8008MPU 组成微机)。直到现在,771 所成功研制RISC MPU,计算机科学系成功研制 JBCORE MPU,(含 8 位 MCU),康佳公司开发成功华大集成电路设计中心完成开发智能卡彩电 MCU。随着1995 年,世界知识组织生效了TR

12、IPS 法案中规定的集成电路步图保,于 1997 年 7 月 1 日实施,其中发达中国家 2000 年 7 月 1 日实施,最小发达国家 2005年 7 月 1 日实施。而 MPU 和 MCU 这些电路,充斥着人类生活和国民经济的各个方面,因此必须开发出国内知识的 MPU 和 MCU。1.3国外微控制器发展情况微控制器的发展是伴随着微处理器的发展进行的。1975 年德州仪器TI 公司推出了TMS-1000,el 公司推出了 4004 4 位 MCU,1976 年el 推出了 8048(MC-48系列)MCU,它属于低档 8 位 MCU,不带串行 I/0 口,寻址范围在 4KB 范围,片内RAM

13、,ROM 容量都较小,只适合于简单的工业控制和早期的智能仪表;1978 年Motorola推出了 6801,Zilog 公司推出了Z80,均属于高档 8 位 MCU,内含串行口,寻址范围64KB,有多个 16 位定时器/计数器、多级中断源、较大容量的 RAM 和 ROM;1980 年el 推出了比 MCS-48 系列功能更为优越的 8 位 MCU-8051(MC5-51 系列);1982 年MSSTEK 公司推出了第一个 16 位微控制器 MCU682000,1983 年el 推出了CMOS 型80C51,,16 位 MCU-8096(MCU-96 系列)。1987 年又推出了带有EPROM

14、的 87C96,16 位MCU,Motorola 公司推出了准 32 位 MCU68300。1991 年el 推出了采用RISC 技术的 16 位 MCU-A80960KA 和 32 位MCU-TA80960KB,1992 年以后,世界众多企业后推出基于 RISC 技术设计的 32 位 MCU,64 位MCU,这表明 RISC 技术在MCU 设计中得到长足的发展。1.4 课题意义精简指令集,是计算机处理器的一种设计模式,也被称为 RISC。RISC 微处理器不仅精简了指令系统,采用量和超流水线结构;它们的指令数目只有几十条,却大大增强了并行处理能力。时钟频率低, 功率消耗少,也少,机器不易发生

15、故障和老化,提高了系统的可靠性。所以 RISC8 位微控制器目前应用数目最大的微控制器,也是目前国内公司致力耕耘的市场;其市场及价格竞争都极为激烈,各种多功能需求以及不同规格的产品推陈出新的速度也很快的。所以通过本课题的设计与制着,我希望能掌握硬件电路的设计制作方法,巩固所学相关知识,增强动手能力,学习已有的先进电路设计理念,另外还想通过这一系列的研究,寻找出一些与众不同的设计思路,试着设计出一些具有自己思路的电子产品。1.5课题研究目标从 CPU 的总体结构到局部功能的实现采用了自顶向下的设计方法和模块化的设计以及三级流水线的思维在FPGA不仅要实现CPU必需的算术逻辑器、寄存器堆、指令缓冲

16、、跳转计数、指令集,而且针对FPGA的结构特点对设计进行了地址和数据的优化。最基本的调试是基于FPGA厂商提供的开发和仿真环境,用硬件描述语言编一个最小运行环境,验证其环境是否能够调试改处理器。写TESTBENCH1.6RISC 的设计原则精简指令集微处理器单周期单指令,器到寄存器的操作,简单化得寻址方式和指令格式等特征,其设计原则为:选择使用频率很高的指令,且能代替大多数功能的指令;采用三级流水线技术,使得微处理器运行的速度更快也容易让在各个模块出问题时候方便查询;优化编译方式,提高执行效率;指令结构简单,所有指令长度相等;使用哈佛结构,将数据和指令分开和运行。1.7整体结构说明本文是基于

17、FPGA 的基础上对 RISC 的微处理器进行设计,本设计主要采用流水线设计,通过对该处理器的关键:ALU、系统时序、指令集等,完成了 8 位精简指令集微处理器的控制。全文分为五章,各章安排如下:第一章 绪论。介绍了课题的来源与背景,国内外微处理器的发展及现状,该题目的设计意义以及目标。第二章 整体说明。该题目的如何设计的流程图、具体的原理图以及所要用到的工具、最后则阐述了该微处理器的结构。第三章 对微处理器的模块逐个进行分析,得出它们在做些什么、如何做的。还有关键模块 ALU 的初步认识。第四章 关键模块的设计,它们的时序图和仿真图,如 ALU、时钟控制器、流水线(三级)等。第五章 对该微处

18、理器中的 ALU 和进行仿真和验证,在基于 FPGA 的环境下微处理器的仿真第二章 整体说明2.1整体设计思路说明,框架图 2.1 所示首先对该处理器的进行验证和分析,得, 寄存器堆 regb译码单元指令器、数据器(指令集)取指逻辑包括程序计数器 PC 和地址加法器。然后作出各个组成结构的电路图进行分析,明白各个结构在系统中处于什么位置、功能、具体在系统做什么的。其次通过对各个模块进行仿真和验证,得出流水线、算术逻辑单元 ALU 的设计、时钟产生器的设计、状态控制器的设计这些是系统的关键模块,并它们的时序图和仿真图。图 2.1 框架图最后总结该设计采用ISE 的开发环境, 各个功能模块均分别在

19、XST和ISE Simulator 进行了逻辑综合和功能仿真。从综合结果可以看出, 该处理器占FPGA可编程逻辑单元不超过10%, 最大工作频率达到74.59MHz, 达到了设计要求。分析出该记过的时序图和仿真图。知该处理器系统由 ALU- 是处理器的2.2设计的流程及所需工具首先先确定设计的思路,按照思路对硬件的语言(VHDL)进行描述,将指令和硬件语言编成代码;其次将上步的内容转到 Quartusll 语言进行仿真和编译,并且按照下图 2.2 的结构来一步步的进行;对编译的程序先进行编译成代码,然后进行验证看是否正确,将这些程序代码汇编成二进制(机器容易识别)最后将程序和指令进行编译成目标

20、文件FPGA 器件,在对它进行仿真和验证,结果检验与设定的结果相差不多,硬件实现。下图 2.2 设计流程:硬件语言实现( VHDL)代码综合(Synplify)编 译 与 仿真(QuartusII)编程硬件实现图 2.2 设计流程结果检验编译(AVR Studio)对目标文件 FPGA 器件编程汇编到二进制验证程序编码(AVR Assembler)设计思路2.3 该设计的微处理器结构图由图 2.3 微处理器结构图可以看出,系统由以下部分组成:pipeline_fd(取指模块):也是流水线的第一级,负责中断处理、给出下条指令的地址,同时负责中断或者程序调用时保存程序计数器(PC)的值;pipel

21、ine_ex(执行模块):流水线第二级,负责执行指令,它包含了算术逻辑运算单元;pipeline_wb(回写模块):流水线第三级,负责将执行的结果写入寄存器中,同时负责输出其他模块给出的地址数据,由图可以看出有很多条数据线与其他模块直接连接。T/C(时钟/计数器模块):与传统的 MCS51 的功能和设置完全一样。UART(通行串口模块):与传统的 MCS51 的功能本设置完全一样。WT_DOG(看门狗模块):本模块是系统的复位信号和时钟信号,复位信号由外部复位、复位,时钟信号由外部时钟的倍频;根据事先的需要选取。图 2.3 微处理器结构图:图 2.3 微处理器结构图2.4小结基于 FPGA 的

22、 8 位 RISC 微处理器的设计,让我知道次设计的流程、以及系统大致的结构、此设计的所需的、硬件语言及设计思路;让我明白了设计这种硬件,不仅需要工具,也需要设计的思路和流程,因此我认为本章是设计的基础。第三章 微处理器系统各个模块的设计上图 2-3 中微处理器系统结构由以下几部分组成:ALU运算模块;器分为数据器、指令器;寄存器堆大部分指令通过寄存器来进行,缓存和传输操作数是它的基本作用;译码单元对指令进行译码产生信号;取指逻辑主要完成从指令器指令和计算下一条指令的地址。3.1ALU 模块ALU- 是处理器的,主要完成算术、逻辑、比较和移位等运算。ALU 的、右移、与、换位、循环移位这 9

23、种运算具体如运算主要包括:加、减、或、非、何运算则是根据指令译提供的操作码, 来决定进行何种运算。下图 3.1ALU 模块图:图 3.1 ALU 模块图图中的主要信号的含义如下:Clk3:时钟产生的第三个节拍,在时钟信号上升沿时进行 ALU 的操作。Resetn:复位信号。Sus0:从状态寄存器而来的最低位,是加法器的进位Alua 和alub: ALU 的两个操作数aluclk3 resetnsus0alu_coutaluop3:0aluzaluout7:0alua7:0alub7:0uc_aluAlu_cout:运算输出进位 Aluout:运算结果输出 Aluop:操作控制码以下则分步介绍

24、ALU 模块的加全面的了解 ALU 模块。组成、如何进行运算以及部分模块的的程序,以便更3.1.1ALU 的组成ALU可分为四个功能单元:取指单元、执行单元、跳转判断产生单元和状态产生判断单元。取指单元当微处理器控制单元发现目前执行的指令的目标寄存器与下条指令的操作数寄存器中的数据相同时,就会发出控制操作数寄存器的控制信号,也就是将 ALU 当前的运算结果送到取指寄存器中。执行单元EU 单元是执行指令的单元,一共执行 7 种类型的指令ADD、SUBCP、LOGIC、RUGHT、DIR、位操作类、传送 ORA 类。每一类的信号是代表着不同的操作指令的,微处理器在每个时刻只能执行一种指令类,保证了

25、在执行时不会发生。跳转片段单元跳转指令执行过程:首先通过跳转片段单元来判断跳转条件是否满足,如果满足,则跳转信号就会发出,从而将控制单元跳过下一条指令。跳转单元只接受 4 个控制信号:CPSE,SKIPTEST,BITSEL,SET。状态信号产生单元微处理器中的 ALU 指令及位操作指令都会改变状态寄存器的相关状态位,相关状态位状态寄存器中的低 7 位状态都是由 ALU 单元通过一个 7 位宽的传送标志总线传送的,而 ALU 在计算这 7 个标志位时都是随时变化的,同时这 7 位标志位也是各自独立,即可以独立的几首来自 ALU 的信号。3.1.2ALU 的运算ALU 的运算也分为 3 层数据输

26、入:pipeline_fd 运用于除法,pipeline_ex 来自于控制信号,pipeline_ex 来自于输入的数据;它们经过 3 个步骤就完成 ALU 里的运算:除了pipeline_fd 可以直接在除法模块进行运算外,其他 2 层得数据和信号都要经过译码单元进行译码操作产生信号;将译码过的信号即代码,放入各个运算模块中(如乘法模块、十进制、位操作等)进行运算最后将运算的结果放入pipeline_ex 中,再将数据传至器中进行编译。如下图 3.2 所示则是 ALU 运算的结构图除法使能来自 pipeline_fd控制信号来Pipeline_e传至存储器输入数据来自 pipelinex图

27、3.2 ALU 运算结构图3.1.3ALU的九种运算中部分功能模块启用的程序:加减法模块:由控制信号决定源程序如下:pros(s_opa,s_,s_ cin,s_add_ sub)variable v_a,v_ b:unsigned(11 downto 0); variable v_result:std_logic_vector( I 1 downto 0);beginv_a(4 downto I ):=unsigned(s_opa(3 downto 0);逻辑操 作结果输出选择译码控e制位 操 作十进 制 调整除 法模 块乘 法 模块v_a(8 downto 6):=unsigned(s_o

28、pa(6 downto 4);v_a(I0):=s_opa(7);v_b(4 downto I :=unsigned(s_v_ b(8 downto 6):=unsigned(s(3 downto 0);(6 downto 4);v_b(10)-add:=s_(7);ifs_add_sub= Ithen v_a(0) :=1;v_a(5):=1,v_a(9) : =1v_a( I I ):=0;v_b(0) :=s_cin; v_ b(5) :=0 ;v_b(9) :=0v_b( 11):=0;v_result:=unsigned(v_a)r+unsigned(v_b);-outputS_ad

29、dsub_cy(0)=not v_result(5); S_addsub_cy(1)=v_result( I I );-subb elsev_a(0):=0;v_a(5):=1;v_a(9) := 1;v_a(11):= I;v_ b(0) :=s_cin; v _b(5) := I ;v_b(9):= 1;v_ b(11):=0 ;v_ result:=unsigned(v a)-unsigned(v_b);-outputS_addsub cy(0)=v_result(S); S_addsub_cy(1)=not v_result( I I );end if;-out putS_addsub

30、_ov =(v result(9) and v result( 11) or (not v_result(9) and (not v_result(1 I );s_addsub_rslt(7)=v_result(10);s_addsub_rslt(6 downto 4)=v_result(8 downto 6); s_addsub_rslt(3 downto 0)=dvsor_i v_tmp:=v_rmndr(15 downto 8)-unsigned(dvsor_i); v_rmndr:=v_tmp&v rmndr(7 downto 1)& 0;elsev_rmndr:=v_rmndr(15

31、 dovvnto 1)&0 end if;thenend loop;_o=std_logic_vector(v_rmndr(7 downto 0);qurmndr_o=std_logic_vector(v_rmndr(15 downto 8);end pros;其中dvdsor_ i 表示被除数数,dvdnd_i 表示除数,qu表示商,rmndr 表示余数。除法模块综合后需要的最小时钟周期为:33.600 nsa以上的加减法、除法及乘法的操作数都是无符号数。3.2寄存器堆寄存器堆regb-RISC 处理器的绝大部分指令通过寄存器来进行, 它的基本作用是缓存和传输操作数。 所以寄存器的整体体系结

32、构设计:需要设计总共32 个通用寄存器,这无疑增加了端口数,同时也相对增加了功耗、加大了读写的延时,也限制时钟频率的提高。所以在FPGA 设计中使用微处理器IP核生成双口RAM, 它的宽度为32, 深度为32, 一端支持只读, 另一端支持读写,这样可以最大功效的利用器。寄存器设计包括指令寄存器、指令反馈寄存器、通用寄存器、器地址寄存器等;数据就在这些寄存器中之间传输和接收,把这一过程也可以称作数据迁移:就是一个数据或指令从状态寄存器中读出的状态到通用寄存器中则不需要任务的逻辑处理,如程序计数器通过PROM这个组合逻辑和指令寄存器传输数据时,指令寄存器将通过程序计数器来从PROM中取指令。当然寄

33、存器的控制信号也是很重要的,它是靠时钟的上升沿来触发的,控制信号时序能使寄存器或者计数器的加减信号。寄存器堆由以下图3.3各类寄存器组成的:通用寄存器数据寄存器、变址寄存器、指针寄存器,而三类寄存器又由不同的小寄存器组成;段寄存器代码段寄存器、堆栈段寄存器、数据段寄存器附加段寄存器组成;特殊寄存器标志寄存器、指令指针、状态寄存器。AX累加器BX基址寄存器数据寄存器CX计数器DX数据寄存器通用寄存器源地址寄存器变址寄存器目的地址寄存器基址指针指针寄存器堆栈指针寄存器代码段寄存器指令指针堆栈段寄存器段寄存器状态寄存器数据段寄存器附加段寄存器图3.3 寄存器堆的组成寄存器有很多模块,就挑选与本设计中

34、关的的模块状态寄存器来介绍:状态寄存器(SR)是作为一个特殊功能的寄存器,虽然它只是个8位的寄存器,但是每位都是一个特定的状态标志,状态寄存器用来存放两类信息:一类是体现当前指令执行结果的各种状态信息(条件码)无进位( CY位),有无溢出( OV位),结果正负(SF位),结果是否为零( ZF位),奇偶标志位( P位)等;另一类是存放控制信息(PSW:程序状态字寄存器),如允许中断(IF位),标志(TF位)等。但在本设计中它的主要作用是一些需要状态自以便微处理器在执行指令时做一些ALU运算的进位标志等。例如状态寄存器的低7位通过一条宽度为7BIT(位标志位),它由ALU直接传输过来,此时微处理器

35、的状态控制器发出使能信号来控制来自ALU的状态信号何时写入状态寄存器。由于状态寄存器中的最没有与任何控制线相连,所以由状态控制器来控制,状态寄存器中控制单元在执行中断时不被响应,要在最被重新置位后中断指令才能被执行,因此在状态寄存器中每位标志位都可以被BCLR,BSET这两个位操作来清零或置位。FLAGS标志IPSRCSSSDSESSIDIBPSPAHALBHBLCHCLDHDL3.3 译码单元译码单元-控制着处理器各个的运行, 通过对指令进行译码产生信号, 控制各模块的操作, 包括指令取指操作, 寄存器堆存取操作, ALU 操作, 操作数选择, 数据存储器和数据写回等。在本设计中主要运用的是

36、指令解释单元指令译,它对指令寄存器和指令存储器中的大量指令进行“解释”。负责产生用于其它模块的控制信号,如 ROM 的读信号、RAM 的读写信号等。在指令“解释”过程中,微程序控制器会把它读出来并且执行控制命令程序。现在由于一个硬件实现所需的指令也越来越多,所以在本设计中也采用逻辑门和触发器组成的比较复杂的结构形式对指令实行译码,但同时也会产生的各种控制信号,而微程序的控制显然会让译的速度下降很多,所以本设计采用硬布线逻辑来实现,下图3.4 则是在硬布线逻辑基础上产生译模块图:3.4图中的主要输入输出信号含义如下:译模块图Clk1 和clk4:来自时钟产生模块的时钟信号,在 clk1 时执行译

37、码,在clk4 时寄存指令。Resetn:复位信号,低电平有效。 Insr:来自程序器的指令。DecodeF_we F_re W_weSus_z_weSus_c_we Tris_weskip bdpolclk1f_we_Inskip_oneclk4k7:0fsel4:0resetnaluop3:0 aluua_sel1:0inst11:0alub_sel1:0 b_mux2:0decodeF_we 和f_re:分别为处处file register 的写控制信号和读控制信号。W_we:输出 w 寄存器写控制信号。Sus_z_we 和su_c_we:分别为输出控制状态寄存器的Z 位和 C 位写控制

38、信号。Tris_we:方向寄存器写信号。 Bdpol:控制inst7:5的译码输出 Skip:跳转信号Aluop:指令输出,控制 ALU 执行什么运算。Aluasel 和 alusel:是 ALU 输入端口的选择信号。3.4器器(Memory)是计算机系统中的设备,用来存放程序和数据。计算机中的全部信息,包括输入的原始数据、计算机程序、中间运行结果和最终运行结果都保存在器中。它根据控制器指定的位置存入和取出信息。但是本设计中的微处理器属于精简指令集(RISC),所以它还是与一般 C 处理器中的设计有着很多地方的不同,它的器的结构采用的是将程序器(ROM)和数据存储器(RAM)分开的哈佛结构。使

39、用哈佛结构有几点好处:哈佛结构是 一种并行体系结构,它的主要特点是将程序和数据在不同的空间中,即程序器和数据器是两个独立的器,每个器独立编址、独立。使用他有两大优势:1、哈佛结构的微处理器通常具有较高的执行效率。其程序指令和数据指令分开组织和的,执行时可以预先下一条指令,这也符合本设计中的指令精简且效率;2、哈佛结构是指程序和数据空间独立的体系结构, 目的是为了减轻程序运行时的访存瓶颈。我着重介绍在器设计中比较重要的两个模块:程序器(ROM)和数据器(RAM)3.4.1 程序器(ROM)程序器存放了程序指令的集合,它是以只读器( ROM)的形式出现系统里的。在设计本模块时,由于基于 FPGA

40、的技术,所以在 FPGA 中有丰富的LPM_ROM 模块,这些模块是由已经设计好的“软核”,在它的外面封装好外部接口,再调用它们的时候只需指明所要模块的位宽和深度,再给出地址3.4.2数据器(RAM)是在本设计中通用寄存器寄存器(I/O 寄存器)并没有到数据器的地址空间,数据器是即仅存放程序中用到的数据,地址是从 60H 到 DFH。这是因为本设计的器架构与一般的器架构不同,如图 3.6 所示:DataBus器图 3.6 数据器架构在上图中数据器有两个寄存器 MAR(器地址寄存器)和 MBR(器数据缓冲寄存器), MAR用来来自地址线的输入器的地址,这个地址是读写器的地址;MBR用来缓存从数据

41、总线上送到由 MAR 指示的地址的单元的数据,这是在对器执行写操作的时用的。M A RMBR的寄存器和通用的寄存器放在同一片内 RAM编址,以利于运行速度的提高。但数据、中间结果、缓冲和标志位等,所以才称为数据器。一般微处理器内还把在微处理器中,用随机存取的器(RAM)来数据,暂存运行期间的信号就可。下图 3.5 即是程序器被封装好后大致的外部接口信号:其中地址来自于 PC 模块,进入程序器后直接送往指令寄存器模块。V_romPc8:0ction15:0Pc8.0instruction15.0Inst3图 3.5 程序器外部接口信号3.5 取指逻辑取指逻辑包括程序计数器PC 和地址加法器,-主

42、要完成从指令器指令和计算下一条指令的地址。除了以上关键外, 处理器还包括其它, 如操作数选择单元, 写回逻辑单元等。程序计数器(PC):在执行大部分指令时,PC都是按照时钟周期依次加1,但在有些情况下会加载新的数据而不是加1仅此。而又3种情况PC需要载入新的值而不是加1:处理分支转移程序处理中断服务程序从子程序或者中断程序返回时示则是PC 外部接口信号:V_rom如图PC【8:0】instruction15.0Inst3图 3.8PC 外部接口信号其中输出的PC,及的寄存器PCB, 4 级硬件中断都是 9Bits 宽的。因此 PC 模块可以寻址独立的 512 个单元。Pc8: 0这个输出信号是

43、直接与程序器相连的。相关的转移偏移量是来自控制单元的。其它的控制信号也是来自控制单元。EN 信号是所有的寄存器包括 PC,PCB,STACK 的使能控制信号,只有当该信号有效时 PC 的相应才能操作才能执行这个信号只有在 CPU 执行双字节指令时才是无效的,其它情况都是有效的。addoffset 信号是装载PC 分支转移地址的信号,即PCB+offset; vec2 是装载PC 中断向量 2(VECTOR2 一外部中断)地址的;vec4 是装载 PC 中断向量 4(VECTOR4 一定时/计数器溢出中断)地址的;push 信号负责执行入栈操作,pull 负责出栈操作,它们是由 PUSH和 PU

44、LL 这两条指令来控制的信号。如果上面这些所有的信号都无效,PC 将执行加 1操作。PC【8.0】instruction【15.0】3.6小结本章讲述了微处理器系统的各个模块的基本定义、设计及结构,各个模块在在系统中处于什么位置,做了些什么事情。知道了该系统的基本结构,让我对这个设计有了基本的认识。第四章 关键模块上述所讲的模块是微处理器的基本模块,但是有一些模块也很重要,他们的让8 位RISC 类型的微处理器可以实现硬件语言更加容易。它们分别是:时钟产生器微处理器各个模块运行时,让各个模块能够协调工作,不会让其发生而导致的,也不会浪费资源和数据,然而一个时钟产生器是不能够对数据和程序进行全部

45、控制,所以就加了个设计状态控制器;状态控制器对各个模块产生的时序进行严格控制和分配,所以原来的微程序控制的设计显然不能满足现在的模块要求,按照要求它采用的硬布线逻辑,所以在设计上更复杂和更精确,当然所需的指令、数据、数据也更复杂;为了方便和效率所以也提出了一种设计三级流水线;三级流水线它是提高CPU 处理速度的,有 3 级流水线分别是pipeline_fd、pipeline_ex、pipeline_wb,它们负责把执行过程系统进行划分,但是在处理数据和程序时却是同一时间完成,既节约了时间,也保证了程序在执行时不会发生而导致的结果出错。4.1 时钟产生器计算机的协调动作需要时间标志,它用时序信号

46、体现,而时钟产生器正式产生这些时序信号的器件。而时序的指令周期T被时钟分成4个分频执行阶段:指令译码(K1)、读操作数(K2)、执行操作(K3)、操作结果写回(K4)。现有两种方法可以完成时钟的分频设计:对一个时钟上升沿计数的两位计数器来实现,不过这种方法耗时太长,且占用资源也太大,不符合本设计精简指令,优化操作的原则,虽然会精确很多,但是对于现实中生产不适用。这第二种方法则是采用一个比较简单的同步状态机来完成时钟生产器的设计,这种方法则比第法好的多,而且也会让时钟产生器利用时钟信号而产生一系列的时钟信号(clkl,fetch,_clk等如图4.1时钟模块所示)在跳变时间上同步,有利于性能的,

47、也符合设计的原则。Pulse图 4.1 时钟模块由K1、K2、K3、K4组成的状态转换图,含义如下: Idel位空闲状态,也是初始状态,随后转到K1状态;在a1状态时,输出A1时钟,然后转到A1状态;在a2状态时,输出A2时钟,然后转到a3状态;在a3状态时,输出A3时钟,然后转到a4状态;在a4状态时,输出A4时钟,然后转到a1状态;这样循环往复,就会产生所需的A时钟,如下图4.2电路模块所示更能很好说明这个过程:A1A2Clkclk 1RstfetchAlu_clkInstResetA2idlea1A4A3A4图 4.2 电路模块状态A34.2状态控制器从实现的途径看,RISC微处理器与一

48、般微处理器不同之处在于它的时序控制信号的形成是用硬布线逻辑实现而不是采用微程序控制,由于该器件比较复杂,且对各个控制信号的时序有严格控制,所以要用其VHDL程序有限状态机FSM来实现。有限状态机FSM为了避免以前状态机的缺陷:1、在不同状态间因为输出而产生的现象;以前用的是组合逻辑,给FSM驱动逻辑留下的预留时间很少。所以本设计采用同步状态机控制,状态控制器的结构如图4.3所示:输入下个输出状态输出图4.3状态控制器结构在这个状态机中有两个组合逻辑单元,一个是根据输入信号和以当前状态位基准判断下一个状态;另一个是根据输入和当前状态判断状态输出。以前的状态机由于不同数D触发器输出组合逻辑下个状态

49、D触发器当前状态下个状态组合逻辑据通路时的延时或者分时而引起的数据竞争将使系统不稳定,但在上图中的同步状态机解决了这个问题,图中虽然输入和输出都经过了组合逻辑,但是它们却同时也被送到了D触发器中。在下个时钟沿时,输出信号会立刻有效,这样数据在自身时钟上升沿几乎是同步收到控制信号,这样它的执行速度就变快了。同步有限状态机需要特定的程序才能应用在状态控制器中,程序如下:Architecture rtl of sctl isType myse is(sto,st1,st2,st3,st4,st5,st6,st7); Signal cur_se:myse;BeginProBegins(clk1,ena

50、)iffaling_edge(clk1) if(ena=0)thencur_se=st0;theninc_pc=0;load_acc =0;load_pc=0;rd=0;wr=0;load_ir,=0;dtl_ena=0; elsecasecur_shalt.=.=.=cur-secur_secur_secur_sthen.then.ecur_se.end case; end if;end if;end proend rtl;s;4.3三级流水线4.3.1流水线结构流水线是提高CPU 处理速度的, 为了提高指令执行速度, 将整个执行过程划分为几个单元, 各个单元完成固定部分工作, 就像工厂的流

51、水线作业一样。流水线分为3个模块:pipeline_fd(简写FD)根据ROM送来的指令与辅助功能单元的数据决定下一条令的地址,还负责检测中断。pipeline_ex(简写EX):执行,也决定着写入寄存器或RAM的数据及地址pipeline_wb(简写WB):把执行级得结果数据根据写使能信号写入特定寄存器或执行级给出的相应的地址寄存器中各个中断源数据;最后给出所需的数据。由于采用流水线, ALU 源操作数据有多个选择,所以如果以ALU 和数据选择器作为一个流水段, 其他流水段的组合时延不超过这一阶段即可。下图4.4各个阶段的过程中在同一周期内,阶段K把结果写入了寄存器,阶段K+1正在执行操作,

52、阶段K+2在取指;这3个阶段在不同的时序、信号上同一时间执行者不同的内容,这极大的节约了时间,提高了微处理器处理数据的能力。阶段K+2阶段K+1阶段 K时间图 4.4 各个阶段的过程4.3.2流水线相关问题及解决流水线相关包括:结构相关、数据相关、控制相关。结构相关不同流水线使用同一结构,这是使得程序发生,并且效率低下。如果指令包含了立即数或者寄存器寻址等其他方式的数,则通过一个组合逻辑电路给的数据地址发送至流水线回写阶段。FDEXWBFDEXWBFDEXWB数据相关:后一条指令依赖于前一条未执行完得指令时,这时二者将发生数据相关。有两种解决办法,一、发生时,后一条的指令分析推相关的数据写入寄

53、存器堆中;二、不必要等到所要的数据斜土寄存器堆中,而是直接通过该专门设置的数据通路。这两种方法各有千秋,第法因为等待相关数据源写入寄存器堆中,而会引起流水线不连续;第二种方法虽然消除流水线断流,加快了速度,但是占用了一定的资源。但是如果资源够的话,第二种方法也不错。控制相关, 是指当执行到分支跳转指令时, 因无条件分支目标地址还因缺少某种条件而计算出来, 条件分支因未知条件是否成立等原因, 而与后面的指令发生相关。有两种解决方法,一、尽早通过判断分支条件是否成立和尽早计算出分支转移的PC 值来解决,这样比在执行阶段进行条件判断和地址计算流水线可以减少断流;二、另一方面通过转移技术的硬件“猜测法

54、”来解决, 指在当前还无法确定分支跳转指令的执行情况,无法确定下一条指令时, 依据指令过去的行为来将来的行为。本设计中采用第一种方法,因为第二中方法不基于验证,出现的误差可能较大。4.3.3流水线各阶段设计与完成取指阶段, 主要完成两个任务, 一是根据程序计数器PC 里的指令地址从指令器I_mem 里指。另一个任务主要完成PC+1计算和下一条指令地址的猜测。对下一条指令的猜测主要是假设分支条件不成立, 猜测下一条指令地址是本指令地址的下一地址, 除了对下一条指令的猜测, 还完成对上一次的猜测的确认。本指令地址的确认主要是完成如果上一条指令是分支指令时, 如果分支条件不成立, 本指令地址猜测是正

55、确, 指令有效, 继续执行, 否则本指令无效, 重新再取指。译码阶段, 是整个系统中的关键控制阶段, 不但进行指令译码, 从寄存器堆中操作数, 而且判断分支指令的跳转条件, 计算跳转地址和处理数据相关性问题。这一阶段主要器件有译码单元, 寄存器堆, 加法器, 比较器和地址选择器等。译码单元, 因采用旁路技术来解决数据相关性问题, 因此在译码单元中参照前两条指令的目的寄存器号来确定是否发生数据相关性, 如果发生数据相关, 产生delay 信号,使下一条指令重新取指。译码单元主要控制信号如下:op_alu4:0:ALU 操作控制信号, 控制ALU 执行相应的算术逻辑运算。delay:延迟控制信号a

56、lua1:0, alub1:0:ALU 操作数选择控制信号, ALU 源操作数一般来自寄存器或立即数。执行阶段主要完成指令的逻辑运算工作, ALU 根据操作控制码对所提供的操作数进行相应的操作。读/写器中数据的和写入, 是微处理器系统阶段主要完成中比较复杂的功能, 在这主要完成微处理器数据器的读写。写回阶段是流水线的最后一个阶段,它将运行结果写回目的寄存器中。4.4小结本章介绍了该微处理器中很重要的模块流水线、状态控制器、时钟产生器;阐述了他们各自的不同,以及相互之间的联系,让我知道其实没重要和不重要的模块,在系统每个模块都很重要,谁缺了谁都不能够完成硬件实现。第五章 仿真与结果5.1仿真在本

57、设计中,ALU和时钟产生器是执行流水线的和支持FPGA技术的主要部分,单独出来做验证可以减少执行模块的验证难度,本设计验证思路是逐项进行举证验证。5.1.1 ALU 的仿真ALU 是组合逻辑电路,执行算术、逻辑、BCD码等操作,同时也是执行流水线的主体,其验证的思路是逐项功能验证如乘法指令的测试程序及解释如下: Alu_cmd_i(15 downto 8)=MUL_AB; Alu_cmd_i(7 downto 0)0);For j in 0 to 255 loop Acc_i=conv_std_logic_vector(j,8); For i in 0 to 255 loop Acc_i=co

58、nv_std_logic_vector(i,8)V_rtoduct:=j*i;Wait forPRRIOD_TIME;下图 5.1 是乘法指令前得仿真波形图 5.1乘法指令前仿真波形下图 5.2 则是运行乘法指令后的仿真波形图 5.2 乘法指令后的仿真波形从图中可以看出计算结果有点小延迟,但是还是可以在接受的范围内。5.1.2 流水线的仿真Pipeline_ex(取指模块)的主要功能如下:(1)给出下条指令的地址;(2)中断等级的顺序;(3)在正确中断时段或跳转时段时的地址正确返回。因此在验证次模块仿真的是主要验证(1)(2)功能;图 5.3堆栈指针 sp 在程序调用时的变化 1图5.4 堆栈

59、指针sp在中断返回时的变化2在上图中堆栈指针(sp)在中断、调用或返回时,sp值递增或递减。图5.3和图5.4都很清楚的表示它的变化,在图5.3当指令位acall作为长调用时,所以sp由0递增到1,sp由1递增到2。图5.4中当reti中断指令返回时,堆栈将保存的地址出栈,sp由2递减到1。 pipeline_wb的仿真这个模块的功能是写入数据及输出数据。写入的数据是根据控制信号及输入数据写入到相应的寄存器;而输出数据则是根据输出固定地址来的数据。本模块采用验证法根据写入信号wr_en_i的不同验证值,通过这一步验证所有及存取写入数据下面给出了wr_en i为“0001”时的读写程序,wr e

60、 n i _ 0 001 ”一 只写入direct数据 ex- in s tr i = M OV ADDRN ;-指 令类型 for i i n 0 to 2 5 5 lo o preg d a tc- j = c on vs tde lo g icew ve ctor(i,8);一写入数据逐一读出比较。erg esad dr c一 J = c o nv s t d l og iwa it fo r 1 00 n s ;ve c to r(i,8);一写入地址-er ad d a ta im me di ayreg a d dr i = c onv _s td_ log ic v ec tor

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论