Verilog中的连接似乎未使用全宽

Verilog中的连接似乎未使用全宽,verilog,Verilog,源代码: 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 1xxxxxxx

源代码:

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

我不明白为什么一个人的所有部分都没有分配。我不明白内联连接和在接线声明中连接有什么区别。

在modelsim SE-64 10.1d上,我有:

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


因此:这是一个工具问题,而不是语言问题。

在modelsim SE-64 10.1d上,我有:

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


因此:这是一个工具问题,而不是语言问题。

根据经验,您将学会在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

根据经验,您将学会在时间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

试试$Max,而不是显示器,可能是一个调度的事情。试试$Max,而不是$显示可能是一个日程安排。我能认为这是ICAUS Verilog中的一个bug吗?你在时间0显示这是非常不可靠的。根据@ Munkymorgy的答案,这不是一个工具问题,它是一个零时间初始化/调度问题。在显示之前加上一些延迟,看看你得到了什么。我能认为这是ICAUS Verilog中的一个bug吗?你在0显示时间,这是非常不可靠的。根据@ Munkymorgy的答案,这不是一个工具问题,它是一个零时间初始化/调度问题。在$display之前延迟一段时间,看看会得到什么。