杭电计算机组成原理课程设计-实验十-取指令与指令译码实验
程序员文章站
2022-07-06 13:19:18
...
实验内容
1)在ISE中使用Memory IP核生成一个只读存储器Inst_ROM,作为指令存储器,并关联一个.coe文件。
2)编程实验取指令模块,调用Inst_ROM指令存储器模块。
3)编写一个实验验证的顶层模块。
实验原理图
.coe文件内容
.coe文件内容由汇编语言翻译而来,详情见MIPS汇编器与模拟器实验
根据.coe文件创建IP核,IP核的创建详情见ISE IP核创建教程
memory_initialization_radix=16;
memory_initialization_vector=00004827,0009502b,012a5822,012b6022,014c6820,01a97004,01ad7804,01eac020,030bc825,01798826,01d89024,02299820,0253a025,01b1a804,02b1b004,016eb820,012af820,00000820,00010fff,20006789,ffff0000,0000ffff,88888888,99999999,aaaaaaaa,bbbbbbbb,12345678,23456789,3456789a,456789ab,56789abc,6789abcd,00000820,00632020,00010fff,20006789,ffff0000,0000ffff,88888888,99999999,aaaaaaaa,bbbbbbbb,12345678,23456789,3456789a,456789ab,56789abc,6789abcd,00000820,00632020,00010fff,20006789,ffff0000,0000ffff,88888888,99999999,aaaaaaaa,bbbbbbbb,12345678,23456789,3456789a,456789ab,56789abc,6789abcd;
逻辑管脚图
模块代码
module Get_Inst(
clk,rst,
Inst_code,PC,PC_new,
opcode,rs,rt,rd,shamt,func,imm,offset,address
);
input clk;//时钟
input rst;//清零
output reg [31:0]PC;//地址
output [31:0]PC_new;
output [31:0]Inst_code;//取出的指令
output [5:0]opcode,func;//指令分段
output [4:0]rs,rt,rd,shamt;//指令分段
output [15:0]imm,offset;//指令分段
output [25:0]address;//指令分段
initial PC = 32'h00000000;
assign PC_new = PC + 4;
Inst_Rom ROM1 (
.clka(clk), // input clka
.addra(PC[7:2]), // input [5 : 0] addra
.douta(Inst_code) // output [31 : 0] douta
);
always @(negedge clk or posedge rst)
begin
if (rst)
PC = 32'h00000000; //PC复位;
else
PC = PC_new; //PC更新为PC+4;
end;
assign opcode = Inst_code[31:26];
assign rs = Inst_code[25:21];
assign rt = Inst_code[20:16];
assign rd= Inst_code[15:11];
assign shamt = Inst_code[10:6];
assign func = Inst_code[5:0];
assign imm= Inst_code[15:0];
assign offset= Inst_code[15:0];
assign address = Inst_code[25:0];
endmodule
仿真代码
always #33 clk = ~clk;
initial begin
clk = 0;
rst = 1;
#2
rst=0;
#500;
rst=1;
#50;
rst=0;
#500 ;
end
endmodule
仿真波形图
上一篇: 惠州踏青去哪里好 惠州踏青的地方
下一篇: 云浮春游去哪里最好 云浮春游好去处