You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Verilog中4位变量首位反转问题:输入与输出值不符求解

Verilog 4位变量输出异常的原因

你遇到的不是“首位反转”,核心问题是没有给赋值的数字指定二进制基数,导致Verilog对数字的解析逻辑和你的预期完全不符。

问题根源:Verilog的数字解析规则

Verilog中直接写数字(比如0111)时,默认解析规则是:

  • 数字以0开头时,标准Verilog会将其视为八进制数;
  • 部分旧模拟器或兼容模式下,会把开头带0的数字仍按十进制解析;
  • 只有加上'b(或指定位宽如4'b)前缀,才会被解析为二进制数,这才是你实际想要的赋值方式。

对应你的代码和输出分析

  1. 前两行赋值0000、0001:
    不管是八进制还是十进制,数值都是0和1,对应二进制0000、0001,所以输出符合预期。
  2. 第三行赋值0111:
    你的模拟器将其解析为十进制111,二进制为1101111,由于A、B是4位变量,会自动截断取低4位1111,所以输出全1。
  3. 第四行赋值A=0011; B=1011;:
    • 0011被解析为十进制11,二进制是1011,赋值给A后输出1011;
    • 1011是十进制1011,二进制为1111110011,截断取低4位是0011,赋值给B后输出0011;
      这就造成了“输出反转”的假象。

解决方法

所有二进制赋值必须明确加上二进制基数标识,修改后的代码如下:

module test;
reg [3:0] A;
reg [3:0] B;
initial
     begin
       $monitor("%b %b",A,B);
       $display("A    B");
          A=4'b0000; B=4'b0000; 
       #1 A=4'b0001; B=4'b0001; 
       #1 A=4'b0111; B=4'b0111;
       #1 A=4'b0011; B=4'b1011; 
     end
endmodule

修改后输出会完全符合预期:

A B
0000 0000
0001 0001
0111 0111
0011 1011

内容的提问来源于stack exchange,提问作者user17197333

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 01:18:12