精简指令集cpu毕业设计内容摘要:

ve of shiyan1 is begin process(a,b) begin c=a or b。 end process。 end behave。 其仿真结果: Quartus II Quartus II 是 Altera 提供的 CPLD/FPGA 开发集成环境, Altera 是世界最大可编程逻辑器件提供商之一。 Quartus II 在 21 世纪初推出,是 Altera 前一代CPLD/FPGA 开发集成环境 MAX+plusII 的更新换代产品,其界面友好,使用便捷。 在 QuartusII 上可以完成 EDA 的 整个工程设计流程,它提供了一种与结构无关的设计环境,使设计者能方便地进行输入设计、快速处理和器件编程。 Quartus II 支持原理图、 VHDL、 VerilogHDL 以及 AHDL( Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整 PLD 设计流程。 Quartus II 可以在 windows、 Linux 以及 Unix 上使用,除了可以使用 Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。 具有运行速度快 ,界面统一,功能集中,易学易用等特点。 Quartus II 支持 Altera 的 IP 核,包含了 LPM/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自动设计 的各主要处理环节和设计流程,包括设计输入编辑、设计分析和综合、适配、编程文件汇编、时序参数提取以及编程下载几个步骤。 下排的流程框图,是与上面的 QuartusII 设计流程相对照的标准的 DEA 开发流程。 这里以第四节中的或门为例 介绍 QuartusII 的使用方法: ( 1) 建立工作目录。 在 D 盘根目录建立文件夹 shiyan1。 ( 2) 输入源程序。 打开 QuartusII,选择 file→ new→device design files→ VHDL file, 在弹出的文本框中输入源程序 ,输入完毕存盘 file→ save as,保存到上面建立的文件夹图形或 HDL编辑 分析与综合 适配器 编程文件汇编 时序分析器 设计输入 综合或编译 适配器 件 下载 仿真 编程器 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”完成工程的创建。 ( 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,等待仿真结束出现结果,本例结果如 下: 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 指令编码 指令 助记符 操作码 暂停 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。 .状态机 状态机是 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 且累加器值为 零 ,则 锁存目的地址 ,否则 空操作。 程序: 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(。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。