完整版类MIPS单周期处理器.doc

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一、 实验目的 1. 了解微处理器的基本结构。 2. 掌握哈佛结构的计算机工作原理。 3. 学会设计简单的微处理器。 4. 了解软件控制硬件工作的基本原理。 二、 实验任务 利用HDL语言,基于Xilinx FPGA nexys4实验平台,设计一个能够执行以下MIPS指令集的单周期类MIPS处理器,要求完成所有支持指令的功能仿真,验证指令执行的正确性,要求编写汇编程序将本人学号的ASCII码存入RAM的连续内存区域。 (1)支持基本的算术逻辑运算如add,sub,and,or,slt,andi指令 (2)支持基本的内存操作如lw,sw指令 (3)支持基本的程序控制如beq,j指令 三、 实验过程 1、建立工程 在ISE 14.7软件中建立名为Lab1 的工程文件。芯片系列选择Artix7,具体芯片型号选择XC7A100T,封装类型选择CSG324,速度信息选择-1。 1 2、分模块设计 1) 指令存储器ROM设计 新建IP core Generator,命名为irom。设定的指令存储器大小为128字,指令存储器模块在顶层模块中被调用。输入为指令指针(PC)与时钟信号(clkin),输出为32位的机器指令,并将输出的机器指令送到后续的寄存器组模块、控制 器模块、立即数符号扩展模块进行相应的处理。然后制作COE文件。先使用UltraEdit编辑代码,代码如下 main: addi $2,$0,85 sw $2,0($3) addi $2,$0,50 sw $2,4($3) addi $2,$0,48 sw $2,8($3) addi $2,$0,49 sw $2,12($3) addi $2,$0,53 # sw $2,16($3) addi $2,$0,49 # sw $2,20($3) addi $2,$0,51 # sw $2,24($3) addi $2,$0,52 # sw $2,28($3) addi $2,$0,54 # sw $2,32($3) addi $2,$0,52 # sw $2,36($3) j main 2 将其导入QtSpim中,选中机器码,加上前缀并将最后一行0改为0代码如下 MEMORY_INITIALIZATION_RADIX=16; MEMORY_INITIALIZATION_VECTOR= ac620000, ac620004, ac620008, ac62000c, ac620010, ac620014, ac620018, ac62001c, ac620020, ac620024, 保存为.coe文件,在ROM模块里调用。 2) 数据存储器RAM设计 新建IP core Generator,命名为dram。数据存储器为RAM类型的存储器,并且需要独立的读写信号控制。因此其对外的接口为clk、we、datain、addr;输3 出信号为dataout。当时钟上升沿到来时,如果写信号(we)为真,根据addr所表示的地址找到对应的存储单元,并将输入的数据(datain)写到对应的存储单元中;如果写信号为假,则根据addr所表示的地址,将对应存储单元的数据送到输出端(dataout)。在本实验中调用ISE提供的IP核进行设计,设定的数据存储器大小为64字。 数据存储器模块在顶层模块中被调用。输入的时钟信号来自于顶层模块的clkin,addr信号来自于ALU单元的输出端(对基地址与偏移量执行加操作),datain来自于寄存器组的第二个数据输出端(Rtdata),而控制信号we则来自于控制器对指令的译码。输出数据dataout通过一个选择器(MUX3)决定是否写入到相应的寄存器。 初始化dram值:0在以后的仿真过程中可以用于验证是否正确调用 3) 立即数符号扩展模块设计 对于I型指令,将指令的低十六位作为立即数符号扩展模块的输入inst[15:0],如果十六位立即数的最高位(即符号位)为1,则在inst[15:15]前面补16个1,如果为0,则在前面补16个0。然后将符号扩展之后的data[31:0]通过一个选择器(即MUX2)输送到ALU单元的第二个源操作数输入端(即input2)。 代码如下: module si

文档评论(0)

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

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

1亿VIP精品文档

相关文档