System verilog 为什么指定的导线是x

System verilog 为什么指定的导线是x,system-verilog,modelsim,circuit,System Verilog,Modelsim,Circuit,我正在实现一个MIPS指令解码器,但在wave中,我看到所有赋值逻辑变量,如jump、immediate_I、regWrite等都是xxx,尽管我已按如下方式初始化它们。即使我假设,例如,在跳跃中,J是X,它不应该还是0而不是X吗 assign immediate_i = (opcode == (ADDI || ANDI || SLTI || XORI || LW || SW )) ? 1'b1 : 1'b0; assign memRead = LW ? 1'b1:1'

我正在实现一个MIPS指令解码器,但在wave中,我看到所有赋值逻辑变量,如jump、immediate_I、regWrite等都是xxx,尽管我已按如下方式初始化它们。即使我假设,例如,在跳跃中,J是X,它不应该还是0而不是X吗

 assign immediate_i = (opcode == (ADDI || ANDI || SLTI || XORI || LW || SW )) ? 1'b1 : 1'b0;
        assign memRead    =  LW ? 1'b1:1'b0;
        assign memtoReg   =  LW ? 1'b1:1'b0 ;
        assign memWrite   =  SW ? 1'b1:1'b0;
        assign jump       =  J ? 1'b1:1'b0;
        assign jumpReg    =  JR ? 1'b1:1'b0;
        assign bgtz       =  BGTZ ? 1'b1:1'b0;


jump
是x,因为
J
是x。
逻辑
信号在时间0时初始化为x。我猜您的
casez
从未激活
J=1
行,因此J仍然是x

module tb;

logic J;
assign jump = J ? 1'b1:1'b0;
initial begin
    #5;
    $display($time, " J=%b jump=%b", J, jump);
end

endmodule
输出:

               5 J=x jump=x

这不是问题的答案,但我不知道为什么需要
assignmemread=LW这样的东西?1'b1:1'b0分配memRead=LW有什么问题
nguthrie我做了memRead=LW,但在这种情况下发生了x初始化问题。我可以这样解释,当LW为1时,memRead=1,但当LW不是1时,memRead得到x,它不应该得到x。
               5 J=x jump=x