Joint模块的输出信号:imm12、imm16、imm20、imm26分别对应不同指令对输入的立即数DataIn(即:32位的指令字)进行扩展拼接的结果。 Joint模块的参考Verilog 代码如下: //对ADDI.w, LD.W, ST.W指令中的12位立即数进行符号位扩展 assign imm12= {{20{DataIn[21]}},DataIn[21:10]} //对BEQ,BLT指令中的立即数进行符号位扩展及其他部分的拼接 assign imm16={{14{DataIn[25]}} , {DataIn[25:10], 2’b0}} // 对lui12i.w指令中的20位立即数,低12位补0 assign imm20={DataIn[24:5], 12’b0} //对B指令中的立即数进行符号位扩展及其他部分的拼接 assign imm26={{4{DataIn[25]}}, DataIn[9:0] , {DataIn[25:10] , 2’b0}}请设计其激励文件
时间: 2024-02-23 19:58:14 浏览: 143
以下是Joint模块的Verilog代码及其激励文件:
```
module Joint(
input [31:0] DataIn,
output [31:0] imm12,
output [31:0] imm16,
output [31:0] imm20,
output [31:0] imm26
);
//对ADDI.w, LD.W, ST.W指令中的12位立即数进行符号位扩展
assign imm12 = {{20{DataIn[21]}}, DataIn[21:10]};
//对BEQ,BLT指令中的立即数进行符号位扩展及其他部分的拼接
assign imm16 = {{14{DataIn[25]}}, {DataIn[25:10], 2'b0}};
//对lui12i.w指令中的20位立即数,低12位补0
assign imm20 = {DataIn[24:5], 12'b0};
//对B指令中的立即数进行符号位扩展及其他部分的拼接
assign imm26 = {{4{DataIn[25]}}, DataIn[9:0], {DataIn[25:10], 2'b0}};
endmodule
```
激励文件如下:
```
module Joint_tb;
reg [31:0] DataIn;
wire [31:0] imm12;
wire [31:0] imm16;
wire [31:0] imm20;
wire [31:0] imm26;
Joint joint(
.DataIn(DataIn),
.imm12(imm12),
.imm16(imm16),
.imm20(imm20),
.imm26(imm26)
);
initial begin
DataIn = 32'h00123456;
#10;
$display("DataIn = 0x%h, imm12 = 0x%h, imm16 = 0x%h, imm20 = 0x%h, imm26 = 0x%h", DataIn, imm12, imm16, imm20, imm26);
DataIn = 32'h000A0000;
#10;
$display("DataIn = 0x%h, imm12 = 0x%h, imm16 = 0x%h, imm20 = 0x%h, imm26 = 0x%h", DataIn, imm12, imm16, imm20, imm26);
DataIn = 32'h0F0F0F0F;
#10;
$display("DataIn = 0x%h, imm12 = 0x%h, imm16 = 0x%h, imm20 = 0x%h, imm26 = 0x%h", DataIn, imm12, imm16, imm20, imm26);
DataIn = 32'h0FFFFFED;
#10;
$display("DataIn = 0x%h, imm12 = 0x%h, imm16 = 0x%h, imm20 = 0x%h, imm26 = 0x%h", DataIn, imm12, imm16, imm20, imm26);
$finish;
end
endmodule
```
以上激励文件中,我们通过修改`DataIn`的值,测试了不同类型指令对应的输出结果。在仿真过程中,我们通过`$display`函数输出了输入值和输出结果。
阅读全文