ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:2.05MB ,
资源ID:5328960      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5328960.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第三次试验报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第三次试验报告.docx

1、第三次试验报告课程名称 数字系统EDA技术 实验题目处理器核心电路的设计及验证一、实验目的 1、进一步掌握Altera DE2-115开发平台的使用; 2、掌握Quartus软件设计流程; 3、掌握一个处理器核心电路的基本结构及设计方法; 4、掌握状态机的设计方法; 5、进一步掌握如何编写testBench,并利用Modelsim进行仿真。二、实验环境 1、预装开发环境Quartus11.0以上的版本和仿真工具软件Modelsim的计算机; 2、DE2-115开发板一套。三、实验内容1、 利用层次化的设计方法使用VHDL语言设计一个简单的处理器;2、 设计一个应用程序用于验证所设计的处理器的功

2、能。四、实验原理1、一个最基本处理器的主要部件的构成如下图所示,一个最基本的处理器应该包括一些寄存器,一个多路选择器、一个加法/减法单元、计数器和一个控制单元。其中,寄存器的位宽可以选择8位、16位、32位、64位。以下均以16位为例来说明所设计的处理器的基本结构。处理器所处理的输入数据通过多路复用器加载到不同的寄存器内,寄存器分别定义为R0、R1、R2、R3、R4、R5、R6、R7和A。各个寄存器之间可以相互传递数据。复用器的输出称之为总线。该总线容许数据从一个位置传递到另一个位置。加法/减法单元首先通过多路复用器将一个16位数加载到寄存器A中,寄存器A固定作为加法/减法单元的一个操作数。加

3、法/减法单元的第二个操作数将通过总线传至加法/减法单元的另一个数据输入接口,完成运算操作后的数据存入寄存器G内。寄存器G的值可通过复用器将其搬移到需要的位置。图1 处理器内部结构图 在控制单元的控制下,每个时钟周期可完成不同的操作。这个控制单元决定什么数据放在总线上,并且控制哪个寄存器加载总线上的数据。例如,将寄存器R0的值加载到寄存器A内,可在两个时钟周期内完成,第一个时钟周期是将R0的值放在总线上,第二个周期则将总线上的数据加载到寄存器A内。 2、处理器的操作处理器可通过各种指令来进行所需要的操作。下表列出了本次实验需要完成的4条指令及相应的功能。mv Rx, Ry 表示将Ry寄存器内的数

4、据移到Rx寄存器内。mvi Rx, #D 表示将立即数送到Rx寄存器内。add Rx, Ry 表示将Rx和Ry寄存器内的数据相加,结果存入Rx寄存器内。sub Rx,Ry 表示将Rx和Ry寄存器内的数据相加减,结果存入Rx寄存器内。指令可通过编码后存入IR寄存器内。IR寄存器可以使用9位表示。如IIIXXXYYY。其中III表示指令,XXX代表Rx寄存器,YYY代表Ry寄存器。IR必须连接到16位数据输入脚上(可以是低9位或高9位)。对于mvi指令,YYY域不用,立即数#D在mvi指令存入IR寄存器后由16位数据输入口送入。对于加法和减法指令,由于该类操作需要多次占用总线,因此完成这类操作需要

5、多个时钟周期。为此可增加一个2位的计数器counter。当RUN有效时计数器counter开始计数,即检测到开始执行加法/减法操作,当指令执行完毕后Done有效,此时清空counter计数器,可以进行下一指令的操作。表1处理器操作指令操作所完成的功能mv Rx, RyRx - Rymvi Rx, #DRx - Dadd Rx, RyRx - Rx + Rysub Rx, RyRx Rx, 001: R1 - Rx, . , 111: R7 - Rx-YYY: select Ry value : 000: R0 - Ry, 001: R1 - Ry, . , 111: R7 - Ry-resou

6、rces-8 16-bit registers: R0 R7 -1 16-bit ALU(Add or subtract)-Operation timing- 1 2 3 4 5 6-clk _|-|_|-|_|-|_|-|_|-|_|-|_|-|_|-|_|-|_|-|_|-|_|-|_|-|_-Run _|-|_-DIn =-Done _|-|_ mv or mvi-procBus= Bus valid data-R7:0 = R7:0 valid data(delay a clock period) -Done _|-|_ add or sub-procBus=-R7:0 =R7:0 v

7、alid data(delay a clock period)- : Valid Instruction-: Valid Data-库、程序包的声明library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; -有符号的加减运算-处理器的输入和输出口entity simProc isgeneric (BusWidth : integer :=16);port(DIn : in std_logic_vector(BusWidth-1 downto 0); -16-bit data input portnARst

8、 : in std_logic ; -reset signal, low activeclk : in std_logic ; -clock input, can be obtained through 50 MHZ frequency -divider or through a button of DE2_115 boardRun: in std_logic ; -high active, Keep at least one clock cycleDone: out std_logic; -operation over, high activeprocBus: out std_logic_v

9、ector(BusWidth-1 downto 0); -output processor bus statIndic: out std_logic_vector(2 downto 0) -state indicators);end simProc ;architecture arch of simProc issignal highLevel : std_logic ;signal upCntClr: std_logic ;signal cntRst: std_logic ;signal procBusReg: std_logic_vector(BusWidth-1 downto 0); -

10、register procBus -IR(2 downto 0): RY register-IR(5 downto 3): RX register-IR(8 downto 6): resprents Instruction signal IR: std_logic_vector(8 downto 0) ; -9-bit Instruction-mv: I=0 -mvi: I=1-add: I=2-sub: I=3signal I : std_logic_vector(2 downto 0); -Instruction registersignal Xreg, Yreg: std_logic_v

11、ector(7 downto 0) ;-Indicate which registers(R0 R7) -R0 R7 registerssignal R0, R1, R2, R3, R4, R5, R6, R7: std_logic_vector(BusWidth-1 downto 0) ;-write enable signals of R0 R7 registerssignal Rin: std_logic_vector(7 downto 0) ;- operand Rx and Rysignal Rx, Ry: std_logic_vector(BusWidth-1 downto 0)

12、;-A register which is used to save Rx operand when to add or subtract operationsignal A: std_logic_vector(BusWidth-1 downto 0) ;-write enable signal of A register-signal A_En: std_logic ; -Hidden in the program-save add/subtract result signal G: std_logic_vector(BusWidth-1 downto 0) ;-operation step

13、s-signal Tstep_Q :std_logic_vector(1 downto 0) ;type Tstep is (Tstep_Q0, Tstep_Q1, Tstep_Q2, Tstep_Q3) ;signal currentOpState : std_logic_vector(1 downto 0) ;signal nextOpState : Tstep ;component dec3to8 isport(w: in std_logic_vector(2 downto 0); En: in std_logic; Y: out std_logic_vector(7 downto 0)

14、;end component ;component regn isgeneric (regWidth: integer:=16);port(R: in std_logic_vector(regWidth-1 downto 0); nRst: in std_logic ; Rin, clk: in std_logic ; Q: out std_logic_vector(regWidth-1 downto 0);end component ;begin-highLevel = 1 ;procBus = procBusReg ;-decode IR registerI BusWidth)port m

15、ap(procBusReg, nARst, Rin(0), clk, R0);reg_1: regn generic map(regWidth = BusWidth)port map(procBusReg, nARst, Rin(1), clk, R1);reg_2: regn generic map(regWidth = BusWidth)port map(procBusReg, nARst, Rin(2), clk, R2);reg_3: regn generic map(regWidth = BusWidth)port map(procBusReg, nARst, Rin(3), clk

16、, R3);reg_4: regn generic map(regWidth = BusWidth)port map(procBusReg, nARst, Rin(4), clk, R4);reg_5: regn generic map(regWidth = BusWidth)port map(procBusReg, nARst, Rin(5), clk, R5);reg_6: regn generic map(regWidth = BusWidth)port map(procBusReg, nARst, Rin(6), clk, R6);reg_7: regn generic map(reg

17、Width = BusWidth)port map(procBusReg, nARst, Rin(7), clk, R7);-Determine which registers are used according to IR instructiuon-RxRx = R0 when IR(5 downto 3) = 000 else R1 when IR(5 downto 3) = 001 else R2 when IR(5 downto 3) = 010 else R3 when IR(5 downto 3) = 011 else R4 when IR(5 downto 3) = 100 e

18、lse R5 when IR(5 downto 3) = 101 else R6 when IR(5 downto 3) = 110 else R7 ;-RyRy = R0 when IR(2 downto 0) = 000 else R1 when IR(2 downto 0) = 001 else R2 when IR(2 downto 0) = 010 else R3 when IR(2 downto 0) = 011 else R4 when IR(2 downto 0) = 100 else R5 when IR(2 downto 0) = 101 else R6 when IR(2

19、 downto 0) = 110 else R7 ;-instruction operation state machineprocess(clk, nARst)beginif (nARst = 0) then currentOpState = 00 ;elsif clkevent and clk = 1 then- currentOpState -Tstep_Q :T0 if (Run = 1) then currentOpState -Tstep_Q :T1 if (I = 010) or (I = 011) then currentOpState = 10 ; else currentO

20、pState -Tstep_Q : T2 if (I = 010) or (I = 011) then currentOpState = 11 ; else currentOpState - nextOpState -Tstep_Q :T3 currentOpState = 00 ;end case ;end if ;end process; -operationprocess(clk, nARst)beginif (nARst = 0) then Done = 0 ; Rin 0) ; statIndic(0) = 0 ; procBusReg 0) ; IR 0) ; G 0) ; els

21、if clkevent and clk = 1 thencase currentOpState is-load instructionwhen 00 = -Tstep_Q :T0 Done = 0 ; Rin 0) ; statIndic(0) = 0 ; if (Run = 1) then IR -Tstep_Q :T1 case I is when 000 = -mv Rx, Ry procBusReg = Ry ; Rin = Xreg ; Done -mvi Rx, #D procBusReg = DIn ; Rin = Xreg ; Done - add Rx, Ry A -inpu

22、t error statIndic(0) -Tstep_Q : T2 case I is when 000 | 001 = statIndic(0) - add Rx, Ry G - sub Rx, Ry G statIndic(0) -Tstep_Q :T3 case I is when 000 | 001 = statIndic(0) - add Rx, Ry or sub Rx, Ry procBusReg = G ; Rin = Xreg ; Done statIndic(0) statIndic(0) = 1 ;end case ;end if ;end process;statIndic(2 downto 1) Y Y Y Y Y Y Y

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1