のように、引数の型は、あなたが持っている問題ではありません、integer
タイプの信号を宣言し、それに割り当てることができ整数に変換さ
。問題は、常時ブロックが実行されていないことです。 A
とn
の値は変更されていないため、always @
は実行されません。これが実際のプログラムであれば、これらの信号はどこかから駆逐されてこのブロックに伝播するので、問題はありません。いずれにしても、積分値はn
で問題ありません。シミュレーション中に変更する必要があります。実行されたことがないことを確認するには、alwaysブロック内に$display
を使用して、実行時を確認します。
私は次のように実行すると:
module test;
reg signed [7:0] A = 'h17;
reg [2:0] n = 3'b010;
reg signed [7:0] w;
always @(A, n) begin
w = A >> n;
$display("%0t: always has been run", $time);
end
initial $monitor("%X %d %X", A, n, w);
endmodule
出力:代わりに、私は次のコードを使用している場合
17 2 xx
を、そして私が期待される応答を取得:
module test;
reg signed [7:0] A;
reg [2:0] n;
reg signed [7:0] w;
initial begin
#10;
A = 'h17;
n = 3'b010;
end
always @(A, n) begin
w = A >> n;
$display("%0t: always has been run", $time);
end
initial $monitor("%X %d %X", A, n, w);
endmodule
出力:
xx x xx
10: always has been run
17 2 05
他のオプションは、SystemVerilogのシミュレータを持っている場合は、あなただけalways @
とは異なり、それは時に入力に変更することなく実行されalways_comb
を使用することができるということです0