系统Verilog:从逻辑转换为整数

Bri*_*ton 2 int logic casting system-verilog

我正在尝试在系统Verilog中将“逻辑[2:0]”类型转换为整数。我花了一段时间才意识到这是为什么我的测试无法按预期工作的问题。

我试图像这样铸造它:

int a = int '(signal);
Run Code Online (Sandbox Code Playgroud)

其中信号是逻辑[2:0]。但这总是将a分配为0。

当前此代码:

     int a;
     if(signal=== 3'b000) begin
        a = 0;
     end else if(signal=== 3'b001) begin
        a = 1;
     end else if(signal=== 3'b010) begin
        a = 2;
     end else if(signal=== 3'b011) begin
        a = 3;
     end else begin
        assert(0);
     end
Run Code Online (Sandbox Code Playgroud)

可以,但是我真的很想能够转换这种类型。

我真的在任何站点,书籍或stackoverflow线程中都找不到这个问题,因此,如果有人发现重复的问题,我将感到非常尴尬

dav*_*_59 5

您无需强制转换logic即可int。SystemVerilog隐式转换所有整数类型。唯一的问题是,如果您的某个位signal设置为X或Z,则该值将转换为0。您可能想做的是

assert (!$isunknown(signal))
       a = signal;
else
  $error("signal is unknown");
Run Code Online (Sandbox Code Playgroud)