小编Shu*_*ang的帖子

在 MIPS 中,何时使用有符号扩展,何时使用零扩展?

我正在设计 MIPS 处理器作为我的个人项目,现在我遇到了一个非常困惑的问题。我只是无法总结何时在 MIPS 中使用有符号扩展以及何时使用零扩展。

我搜索了很多资源,主要是说:

1) ADDI, ADDIU 都是使用signed-extend。
2) ANDI、ORI、XORI 都使用零扩展。

但是,在这两条指令中,我开始感到困惑:

SLTIU/SLTI

在 Imagination 的“程序员的 MIPS 架构第 II-A 卷:MIPS 指令集手册”第 368 页中说: 图片1

它清楚地提到16位立即数是signed-extend。但我不明白以下语句:

[0, 32767] 或最大 [max_unsigned-32767, max_unsigned] 无符号范围的结尾。

其他一些人说 16 位立即数是零扩展,如下所示:

http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Mips/pseudojump.html

那么,有人可以解释一下 MIPS 中的有符号指令和无符号指令之间究竟有什么区别吗?

assembly mips system-verilog zero-extension immediate-operand

5
推荐指数
1
解决办法
5883
查看次数

关于"case"语法生成的锁存器

我理解在systemverilog中使用case语法时,我们需要完全描述所有组合或添加默认值以避免锁存.

这是我的示例代码,没有生成锁存器:

 module test(
input logic[2:0] op,
output logic a,b,c
);

    always_comb
    begin

    case(op)

     0: {a,b,c} = {1'b1,1'b1,1'b0};
     1: {a,b,c} = {1'b1,1'b0,1'b0};
     2: {a,b,c} = {1'b0,1'b1,1'b0};
     default: {a,b,c} = {1'b0,1'b0,1'b0};
     endcase
     end
     endmodule
Run Code Online (Sandbox Code Playgroud)

正如我在开头所说,如果添加默认值,则不会生成锁存器.请查看第二个代码,这是一个ALU设计:

module ALU(
output logic[31:0] Result,
output logic Zero, Overflow, Negative, Carryout,

input logic [5:0]ALUOp_i,
input logic [31:0] ALU_A_i, ALU_B_i,
input logic [4:0] Shamt
);

logic [31:0] adder_b;

always_comb
begin


  casez(ALUOp_i)

 /*Add_trap*/   0,1: {Carryout,Result} = {ALU_A_i[31],ALU_A_i} + {ALU_B_i[31],ALU_B_i};
 /*Add_notrap*/ 
 /*Subtrap*/    2,3: 
 /*Sub_notrap*/    begin
             adder_b = ALU_B_i ^ …
Run Code Online (Sandbox Code Playgroud)

verilog mips system-verilog

1
推荐指数
1
解决办法
689
查看次数