1

ソースコード:

module main();
wire [31:0] a = 32'b0;
wire [25:0] a_man = {1'b1, a[24:0]};
initial begin
$display("%b\n%b\n%b", {1'b1,a[24:0]}, a_man[25:0], a_man);
end
endmodule

実際の出力:

% iverilog dings.v && vvp a.out
10000000000000000000000000
1xxxxxxxxxxxxxxxxxxxxxxxxx
1xxxxxxxxxxxxxxxxxxxxxxxxx

a_manのすべてのビットが割り当てられていない理由がわかりません。連結をインラインで行うことと、ワイヤー宣言で行うことの違いがわかりません。

4

2 に答える 2

5

経験を積むと、時間 0 の Verilog シミュレーターを信頼しないことがわかります。シミュレーターが初期値を割り当てるための最小タイムステップを常に許可してください。

module test;
wire [7:0] a     = 7'b0;
wire [7:0] a_man = {1'b1, a[6:0]};

initial begin
  $display("%b %b %b", {1'b1,a[6:0]}, a_man[7:0], a_man);
  #1fs;
  $display("%b %b %b", {1'b1,a[6:0]}, a_man[7:0], a_man);
  #1ns;
  $display("%b %b %b", {1'b1,a[6:0]}, a_man[7:0], a_man);
end
endmodule

与えます (ncsim):

1xxxxxxx xxxxxxxx xxxxxxxx
10000000 1xxxxxxx 1xxxxxxx
10000000 10000000 10000000
于 2013-01-22T15:01:25.617 に答える
0

modelsim SE-6410.1dで私は持っています:

ModelSim> vsim work.main
# vsim work.main 
# ** Note: (vsim-3812) Design is being optimized...
# Loading work.main(fast)
run
# 10000000000000000000000000
# 10000000000000000000000000
# 10000000000000000000000000

予想通り...

つまり、これはツールの問題であり、言語の問題ではありません。

于 2013-01-22T14:33:18.280 に答える