如果系统验证中的其他和大小写



我试图编写一个ALU组件。

wire[4:0] OP = Instruction[8:4];
wire[3:0] temp = Instruction[8:5];
always_comb begin
if( temp == 4'b1000)  begin
Halt   = 0;
branch_en = 1;
lookup_en = 0;
reg_wr_en = 0;
ALU_src =   0;
MEM_WRITE = 0;
Acc_wrt  =  0;
Mem_Acc =   0;
Acc_src =   2'b00;
end 
else if(temp == 4'b1111) begin
Halt   = 0;
branch_en = 1;
lookup_en = 0;
reg_wr_en = 0;
ALU_src =   0;
MEM_WRITE = 0;
Acc_wrt  =  0;
Mem_Acc =   0;
Acc_src =   2'b00;
end
else begin
case(OP)
0:  begin
Halt   = 0;
branch_en = 0;
lookup_en = 0;
reg_wr_en = 1;
ALU_src =   0;
MEM_WRITE = 0;
Acc_wrt  = 0;
Mem_Acc =   0;
Acc_src =   2'b00;       
end
1:  begin
Halt   = 0;
branch_en = 0;
lookup_en = 0;
reg_wr_en = 0;
ALU_src =   0;
MEM_WRITE = 0;
Acc_wrt  =  1;
Mem_Acc =   0;
Acc_src =   2'b00;       
end
....
15:  begin
// Halt inst
Halt   = 1;
branch_en = 0;
lookup_en = 0;
reg_wr_en = 0;
ALU_src =   0;
MEM_WRITE = 0;
Acc_wrt  =  0;
Mem_Acc =   0;
Acc_src =   2'b01;       
end
endcase 
end
end

所以基本上首先我想检查指令[8] 我收到错误Error (10166): SystemVerilog RTL Coding error at Ctrl.sv(23): always_comb construct does not infer purely combinational logic.Ctrl.sv(23( 是第一个 if 语句if( temp == 4'b1000) begin。 如果在always_comb中还有什么,我该怎么办?

您正在生成不是组合电路的锁存器。

为了避免这种情况,您必须确保在每个可能的路径中为每个变量分配一个值。有两种方法可以做到这一点:

  1. 为每个"如果"都有一个最终的"else"(你有那个,所以这很好(,并为每种情况都有一个默认值(你没有这样做!

  2. 在开始时为每个变量分配一个默认值。

相关内容

最新更新