quartus,ii,8位cpu设计实验报告.doc

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
quartus,ii,8位cpu设计实验报告

quartus,ii,8位cpu设计实验报告 CPU设计实验报告 数字逻辑与处理器基础实验 32位mips cpu设计 综述: 我们的最后验收结果时钟频率是84.9mhz。本实验报告主要分为实验设计说明与实验收获总结两个部分。 附件中有cpu工程文档与 模块代码。 第一部分 实验设计 一、 alu设计 1、设计思路 实现基本的算术、逻辑、关系、位与移位运算,尽量优化以达到最小的面积延时积。 结 构图如下: 主要设计思想: a. 加法运算实现可以采用逐次进位、超前进位等结构,减法可以通过加法实现(参见见 面理论课讲义或者前面实验);同时输出z(结果为零)、v(结果溢出)、n (结果为 负)等标志位,注意有符号数和无符号数标志产生的不同。b. 比较运算根据减法运算的结果(z/v/n)产生,自行分析比较操作与算术运算之间的 关系。 c. 移位运算可以考虑将移位操作拆分为16 位移位、8 位移位、4 位移位、2 位移位、 1位移位等几个子运算的组合,然后级联形成最后的运算结果。 d. 逻辑运算可以根据要求 直接产生。 功能表 接口说明 2、主要模块 a) 32bit加法器 采用8个4bit超前进位加法器极连的方式,构成32bit加法器。对于逸出位v的处理如 下:由有符号数的性质可知,对最高位32和次高位31位取抑或,输出信号则为是否逸出。 对32位运算结果取反后,再对相邻两位反复取与,最终得到结果是否为零的输出z.如果是 有符号数,则符号位=n。 由于这一方法部分程度上减弱了高位计算对低位计算的依赖程度,因此可以实现延时的 降低。同时,由于其超前进位网络的大量逻辑运算,较大程度上提升了电路的面积,造成最 终的面积延时积特性恶化。 关键代码见附录1 b) 32bit减法器 对加法器按位取反,再加一。 关键代码见附录1 c) 32bit 右移 32bit 左移 32bit 算术右移 将移位操作拆分为16 位移位、8 位移位、4 位移位、2 位移位、1位移位等几个子运算 的组合,然后级联得到最后的运算结果。 关键代码见附录1 d) 32bit 逻辑比较单元 采用行为级语句直实现逻辑比较功能。 关键代码见附录1 e) alu顶层控制模块 用多路选择器实现对输出结果的控制,采用行为级语句实现设计。附加说明:对于无符号运算的结果,由于z,v,n已经将符号的作用考虑进去,因此, 对于需要实现的六个指令,仅有a<b需要特殊处理,而其他指令对于无符号数和有符号数的 结果一致。因此,针对a<b指令,添加针对无符号数的专用比较电路,并使用与超前进位加 法器类似的方式进行并行加速操作。 关键代码见附录1 二、单周期mips处理器设计流程框图:篇二:cpu设计实验报告cpu设计实验报告 姓名: 学号: 邮箱: 一、实验目的: 1、掌握硬件描述语言vhdl和eda工具quartus ii;利用vhdl设计16位串行cpu,实 现算术和逻辑运算指令、转移指令、访存指令、堆栈指令和控制指令; 2、掌握cpu的调试和测试方法。 二、实验内容: 1、运用硬件描述语言vhdl实现寄存器堆和算数逻辑单元设计、指令集和指令格式、时 序设计和整体结构设计、指令译码器的设计、访存单元的设计、调试单元的设计; 2、上机调试。 三、实验步骤: 1、寄存器堆的设计 寄存器堆由16个16位寄存器组成 。其中reset是异步清0端,reset=0时将所有寄存 器清0。dr_sel和sr_sel是目标寄存器和源寄存器编号,dr_out和sr_out输出目标寄存器 和源寄存器的内容。reg_sel指定一个寄存器编号,将该寄存器内容送给reg_out,这两个端 口用于调试时观察每个寄存器的值。reg_en是写允许端。reg_en=“01”时,在clk的上升 沿将from_alu写入dr_sel指定的寄存器;reg_en=“10”时,在clk的上升沿将from_mem 写入dr_sel指定的寄存器。reg_en取其他值时不改变寄存器堆的值。 设计方法: subtype word is std_logic_vector(15 downto 0);typeregisterarray is array ( 0 to 15 ) of word; signal reg_bank: registerarray 则reg_bank就是我们所需要的寄存器堆。写寄存器堆的方法: reg_bank(conv_integer(dr_sel))=from_alu; 读寄存器堆的方法: dr_out = reg_bank(conv_integer(dr_sel)); 其中,conv_integer

文档评论(0)

1045141460 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档