欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

杭电计算机组成原理课程设计-实验十-取指令与指令译码实验

程序员文章站 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

仿真波形图

杭电计算机组成原理课程设计-实验十-取指令与指令译码实验