2016-08-10 12 views
1

システムのVerilogで 'logic [2:0]'型を整数にキャストしようとしています。私のテストが期待どおりに動いていなかったことが、これが問題だったことを実感するのにしばらくかかった。システムVerilog:ロジックからインキャストへ

私はこのようにそれをキャストしようとしていた:信号が論理である

int a = int '(signal); 

[2: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 

作品を、私は本当にこのタイプにキャストできるようにしたいと思います。しかし、これは常に0

現在、このコードとして割り当てました。

私は本当に誰かが重複を見つけた場合、私はあなたがlogicからintに行くためにキャストを必要はありません

答えて

3

徹底的に恥ずかしくなりますので、これはすべてのサイト、書籍、またはstackoverflowのスレッドで対処見つけることができませんでした。 SystemVerilogはすべての整数型を暗黙にキャストします。唯一の問題は、signalのビットがXまたはZに設定されている場合に値が0に変換される場合です。

assert (!$isunknown(signal)) 
     a = signal; 
else 
    $error("signal is unknown"); 
関連する問題