risc-cpu毕业设计内容摘要:

MegaFunction 宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。 对第三方 EDA 工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三放 EDA 工具。 此外, Quartus II 通过和 DSP Builder 工具与 Matlab/Simulink 相结合,可以方便地 实现各种 DSP 应用系统;支持 Altera 的片上可编程系统( SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。 Maxplus II 作为 Altera 的上一代 PLD 设计软件,由于其出色的易用性而得到了广泛的应用。 目前 Altera 已经停止了对 Maxplus II 的更新支持, Quartus II 与之相比不仅仅是支持器件类型的丰富和图形界面的改变。 Altera 在Quartus II 中包含了许多诸如 SignalTap II、 Chip Editor 和 RTL Viewer 的 设计辅助工具,集成了 SOPC 和 HardCopy 设计流程,并且继承了 Maxplus II 友好的图形界面及简便的使用方法。 Altera Quartus II 作为一种可编程逻辑的设计环境 , 由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。 Altera 的 Quartus II 可编程逻辑软件属于第四代 PLD 开发平台。 该平台支持一个工作组环境下的设计要求,其中包括支持基于 Inter 的协作设计。 Quartus 平台与 Cadence、 ExemplarLogic、 MentorGraphics、 Synopsys 和Synplicity 等 EDA 供应商的开发工具相兼容。 改进了软件的 LogicLock 模块设计功能,增添 了 FastFit 编译选项,推进了网络编辑性能,而且提升了调试能力。 支持 MAX7000/MAX3000 等乘积项器件。 下图中所示的上排是 QuartusII 编译设计主控界面,它显示了 QuartusII 自动设计 的各主要处理环节和设计流程,包括设计输入编辑、设计分析和综合、适电子信息工程 053 李寿春 16 配、编程文件汇编、时序参数提取以及编程下载几个步骤。 下排的流程框图,是与上面的 QuartusII 设计流程相对照的标准的 DEA 开发流程。 这里以第四节中的或门为例 介绍 QuartusII 的使用方法: ( 1) 建立工作目录。 在 D 盘根目录建立文件夹 shiyan1。 ( 2) 输入源程序。 打开 QuartusII,选择 file→ new→device design files→ VHDL file, 在弹出的文本框中输入源程序 ,输入完毕存盘 file→ save as,保存到上面建立的文件夹D:/shiyan1 中,文件名与实体名一致,即。 当出现“ Do you want to „ ”时 点“是”进入创建工程流程,若点否则按以下方法进入。 ( 3) 创建工程。 File→ new project wizard,弹出“工程设置”对话框 ,点最右上角的“„”按钮找到 D:/shiyan1 文件夹并选中。 第二行为工程名,可以随意取。 第三行为实体名,必须与源程序中实体名一致。 设置完点“ next”。 ( 4) 将设计文件加入工程中。 单机“ Add„ ”按钮加入相关的 vhdl 文件,这里加入。 设置完点“ next”。 ( 5) 选择仿真器和综合器的类型。 此处用默认项 none,点“ next”进入下一项。 ( 6) 选择 目标芯片。 选择 Cyclone 系列的 EP1C3T144C8。 点“ next”弹出“工程设置统计”窗口,点“ finish”完成工程图形或 HDL编辑 分析与综合 适配器 编程文件汇编 时序分析器 设计输入 综合或编译 适配器件 下载 仿真 编 程器 电子信息工程 053 李寿春 17 的创建。 ( 7) 编译前设置及编译。 菜单 assignments→ settings→ category→ device,选中 EP1C3T144C8 再点击 deviceamp。 pin options,再切换到 configuration 将 use configuration device 设置为 EPCS1。 设置完毕关闭各页面,点 processing→ start pilation 开始全程编译。 ( 8) 时序仿真 ,创建 波形文件。 选择菜单 file→ new→other files→ vector waveform file 建立空白的波形编辑器 ,然后点菜单 edit→ end time 设置整个仿真域的时间为 50us,保存波形文件 file→ save as,同 保存在一起,默认名为。 ( 9) 编辑输入波形。 菜单 view→ utility windows→ node finder,在弹出的对话框中, filter 选择 pins: all,然后单击list 将在下放的 nodes found 窗口中列出 shiyan1 工程的 所有端口引脚名,这里将列出 a、 b、 c, 将它们拖入波形编辑器中 用左侧的按键设置成如下波形: ( 10) 仿真参数设置。 菜单 assignment→ settings→category→ fitter settings→ simulator,选中 simulation coveragereporting,毛刺检测 glitch detection 为 1ns,选中run simulation until all vector stimuli 全程仿真,选择 power estimation 将 end time 设为 40ms。 ( 11) 启动仿真器并观察 结果。 选择菜单 processing→start simulation,等待仿真结束出现结果,本例结果如下: 电子信息工程 053 李寿春 18 电子信息工程 053 李寿春 19 5 电路设计实现 risc cpu 的硬件结构 寄存器构成 ( 1) 通用寄存器 GR0, GR1, GR2, GR3。 ( 2) 变址寄存器 GR1, GR2。 ( 3) 堆栈指示器 GR3 ( 4) 程序计数器 PC ( 1) 内部寄存器 a. 指令寄存器 IR b. 地址寄存器 P0 c. 数据寄存器 P1 ( 2) 运算器 ALU ( 3) 控制器 CU TMP ALUU GR CU BCU P0 P1 PC_ROM IR ADD 电子信息工程 053 李寿春 20 指令编码 指令 助记符 操作码 暂停 HLT 000 算术加 ADD 001 ALU 的结果输给累加器 LDA 010 逻辑与 ANDD 011 逻辑异或 XORR 100 输出累加器数据 STO 101 无条件转移 JMP 110 零转移 JZ 111 控制单元的设计 状态机控 制器 状态机控制器接受复位信号 RST,当 RST 有效时通过信号 ena 使其为 0,输入到状态机中停止状态机的工作。 下图为状态机控制器的电路图: library ieee。 use。 entity machinectl is port(rst,fetch:in std_logic。 ena:out std_logic)。 end entity。 architecture behave of machinectl is begin process(rst,fetch) begin if(rst=39。 139。 )then ena=39。 039。 else ena=39。 139。 end if。 end process。 end behave。 电子信息工程 053 李寿春 21 状态机 状态机是 CPU 的控制核心,用于产生一系列的控制信号,启动或停止某些部件。 CPU 何时进行读指令读写 I/O 端口、 RAM 区等操作,都是由状态机来控制的。 状态机的当前状态,由变量 state 记录, state 的值就是当前这个指令周期中经过的时钟数(从零记起)。 指令周期由 8 个时钟周期 组成,每个时钟周期都要完成 固定的操作。 第 0 个时钟,因为 CPU 状态控制器的输出 rd 和 load_ir 为高电平,其余均为低电平。 指令寄存器寄存由 ROM 送来的高 8 位指令代码。 第 1 个时钟,与上一时钟相比只是 inc_pc 从 0 变为 1,故 PC 增 1, ROM 送来低 8 位指令代码,指令寄存器寄存该 8 位代码。 第 2 个时钟,空操作。 第 3 个时钟, PC 增 1,指向下一条指令。 若操作符为 HALT,则输出信号HALT 为高;,如果操作符不为 HALT,除了 PC 增 1 外(指向下一条指令),其它各控制线输出为零。 第 4 个时钟,若操作符为 ANDD, ADD, XORR 或 LDA,读 相应地址的数据;若为 JMP,将目的地址送给程序计数器 ,若为 STO,输出累加器数据。 第 5 个时钟 , 若操作符为 ANDD, ADD, XORR 或 LDA,算术 运算器就进行相应的运算;若为 JZ,先判断累加器的值是否为 0,如果为 0, 将目的地址送给程序计数器,否则 空操作 ;若为 JMP,锁存目的地址 ;若为 STO,将数据 写入地址处;若为 LDA,就把数据通过算术运算器送给累加器。 第 6 个时钟,空操作。 第 7 个时钟,若操作符为 JZ 且累加器值为 零 ,则 锁存目的地址 ,否则 空操作。 电子信息工程 053 李寿春 22 程序: library ieee。 use。 entity machine is port(clk1,zero,ena:in std_logic。 code:in std_logic_vector(2 downto 0)。 inc_pc,load_acc,load_pc,rd,wr:out std_logic。 load_ir,datactl_ena,halt:out std_logic)。 constant HLT: std_logic_vector(2 downto 0):=000。 constant ADD: std_logic_vector(2 downto 0):=001。 constant LDA: std_logic_vector(2 downto 0):=010。 constant ANDD: std_logic_vector(2 downto 0):=011。 constant XORR: std_logic_vector(2 downto 0):=100。 constant STO: std_logic_vector(2 downto 0):=101。 constant JMP: std_logic_vector(2 downto 0):=110。 constant JZ: std_logic_vector(2 downto 0):=111。 end machine。 architecture behave of machine is 电子信息工程 053 李寿春 23 begin process(clk1) variable state: integer range 0 to 7。 begin 初始化,全部清零 if(clk1=39。 139。 and clk139。 event)then if(ena=39。 039。 )then 接到 machinectl的 rst 信号,进行复位 state:=0。 inc_pc=39。 039。 load_acc=39。 039。 load_pc=39。 039。 rd=39。 039。 wr=39。 039。 load_ir=39。 039。 datactl_ena=39。 039。 halt=39。 039。 初始化完成,开始时钟周期 第零个时钟,读取指令高八位 if(clk1=39。 139。 and clk139。 event)then elsif(state=0) then inc_pc=39。 039。 load_acc=39。 039。 load_pc=39。 039。 rd=39。 139。 wr=39。 039。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。