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