目录

  1. 数值表示概述
  2. 常见数值表示方式
  3. 二进制数表示
  4. 十六进制数表示
  5. 十进制数表示
  6. 有符号与无符号数
  7. Verilog 数值格式
  8. 参考资料

数值表示概述

在 Verilog 中,数值是硬件描述语言中非常重要的一部分,正确地表示数值对于硬件的实现与仿真至关重要。Verilog 支持多种数值表示形式,包括二进制、十进制、十六进制等,不同的表示形式用于不同的应用场景。

Verilog 提供了对数值的明确位宽描述,支持有符号和无符号数、常见的进制表示法,并且可以方便地在设计中进行数值的转换。


常见数值表示方式

Verilog 中的数值表示通常包括以下几种格式:

  • 二进制表示:用于描述基于 0 和 1 的数值。
  • 十六进制表示:用于较为简洁的表示大数值,适合于硬件设计。
  • 十进制表示:直接用数字表示。

基本表示方式:

  • 二进制:以 bB 后接二进制数字表示。
  • 十六进制:以 hH 后接十六进制数字表示。
  • 十进制:直接写数字,默认是十进制。
  • 八进制:以 oO 后接八进制数字表示。

二进制数表示

在 Verilog 中,二进制数以 bB 为后缀来表示。例如:

4'b1010   // 4 位二进制数,值为 1010(二进制),即十进制的 10

其中,4'b 表示数值的位宽为 4 位,b 表示该数值是二进制数。

示例:

module binary_example;
    reg [3:0] a;
    initial begin
        a = 4'b1101;  // 二进制数 1101
        $display("a = %b", a);  // 输出: a = 1101
    end
endmodule


十六进制数表示

十六进制数在 Verilog 中以 hH 为后缀来表示。例如:

8'h3F   // 8 位十六进制数,值为 3F (十六进制),即十进制的 63

示例:

module hex_example;
    reg [7:0] hex_value;
    initial begin
        hex_value = 8'hA5;  // 十六进制数 A5
        $display("hex_value = %h", hex_value);  // 输出: hex_value = A5
    end
endmodule


十进制数表示

在 Verilog 中,十进制数直接写数字,并且不需要特殊标识。例如:

8'd255   // 8 位十进制数,值为 255

示例:

module decimal_example;
    reg [7:0] decimal_value;
    initial begin
        decimal_value = 8'd150;  // 十进制数 150
        $display("decimal_value = %d", decimal_value);  // 输出: decimal_value = 150
    end
endmodule


有符号与无符号数

Verilog 中的数值可以是有符号数或无符号数。默认情况下,Verilog 中的所有数值都是无符号的。要表示有符号数,可以使用 signed 关键字。

无符号数:

无符号数只表示非负数。可以使用 wirereg 声明。

module unsigned_example;
    reg [7:0] a;  // 无符号 8 位数
    initial begin
        a = 8'd255;  // 十进制的 255
        $display("a = %d", a);  // 输出: a = 255
    end
endmodule

有符号数:

有符号数可以表示负数,通常使用补码表示。在 Verilog 中,可以使用 signed 关键字来声明有符号变量。

module signed_example;
    reg signed [7:0] b;  // 有符号 8 位数
    initial begin
        b = 8'sd-128;  // 十进制的 -128
        $display("b = %d", b);  // 输出: b = -128
    end
endmodule

  • 8'sd 表示 8 位有符号十进制数。
  • 8'b8'h 等用于无符号数。

Verilog 数值格式

Verilog 数值格式包括 位宽进制符号。通常格式为:

<位宽>'<进制类型><数值>

  • <位宽>:表示数字的位数,如 4 位、8 位等。
  • <进制类型>:可以是 b(二进制)、h(十六进制)、d(十进制)、o(八进制)。
  • <数值>:表示具体的数值。

示例:

8'b11001010   // 8 位二进制数,11001010 (二进制),即 202(十进制)
16'hF2A3      // 16 位十六进制数,F2A3 (十六进制),即 62,243(十进制)
8'd255        // 8 位十进制数,255(十进制)
4'o17         // 4 位八进制数,17 (八进制),即 15(十进制)


参考资料