4.FPGA字符格式

在Verilog中,数值的表示方法灵活多样,主要分为常量表示变量声明两部分。以下是详细介绍:

一、常量数值表示法

Verilog的常量格式为:

复制代码
[位宽]'[进制标识][数值]
1. 位宽(可选)
  • 指定数值的二进制位数,若省略则由编译器隐式决定(通常为32位)。

  • 示例:

    8'd255 // 8位十进制数255(二进制:1111_1111)
    16'hA15 // 16位十六进制数A15(二进制:0000_1010_0001_0101)
    4'b1010 // 4位二进制数1010(十进制:10)

2. 进制标识
  • bB:二进制(Binary)

  • oO:八进制(Octal)

  • dD:十进制(Decimal,默认)

  • hH:十六进制(Hexadecimal)

  • 示例:

    8'b1010_1010 // 二进制(下划线仅为可读性,无实际意义)
    3'o7 // 八进制(7 → 二进制:111)
    16'd65535 // 十进制(默认进制)
    4'hF // 十六进制(F → 二进制:1111)

3. 特殊符号
  • x X:表示不确定值(高阻态)

  • z Z:表示高阻态(等同于 ?

  • 示例:

    4'b10xz // 4位二进制,第3位不确定,第4位高阻
    8'hFF // 8位全1(高电平)
    8'bzzzz_zzzz // 8位全高阻

二、变量声明与赋值

变量需先声明位宽,再赋值。常见数据类型包括 regwireinteger 等。

1. 固定位宽变量
  • 使用 [MSB:LSB] 语法声明位宽:

    reg [7:0] data; // 8位寄存器变量(MSB=7,LSB=0)
    wire [15:0] address; // 16位连线型变量

  • 赋值时需匹配位宽:

    data = 8'd255; // 正确:8位赋值
    data = 16'd65535; // 错误:截断为低8位(实际值为255)

2. 默认位宽变量
  • 若未显式声明位宽,默认为32位:

    integer count; // 32位有符号整数
    count = 32'd100; // 正确赋值

三、数值截断与扩展

1. 截断(Truncation)
  • 当赋值的数值超过目标位宽时,只保留低N位:

    reg [3:0] low4bits;
    low4bits = 8'd255; // 255的二进制为1111_1111,截断后为1111(十进制15)

2. 符号扩展(Signed Extension)
  • 有符号数赋值到更大位宽时,高位补符号位:

    reg [3:0] signed_num = 4'b1000; // 有符号数-8(补码表示)
    reg [7:0] extended;
    extended = signed_num; // 扩展为8'b1111_1000(十进制-8)

3. 零扩展(Zero Extension)
  • 无符号数赋值到更大位宽时,高位补零:

    reg [3:0] unsigned_num = 4'b1000; // 无符号数8
    reg [7:0] extended;
    extended = unsigned_num; // 扩展为8'b0000_1000(十进制8)

四、常见误区

  1. 省略位宽的风险

    assign data = 'd255; // 隐式为32位,可能导致位宽不匹配

  2. 进制混淆

    8'd255 // 正确:十进制255(二进制1111_1111)
    8'h255 // 错误:十六进制255 → 十进制597(超过8位,截断为低8位=93)

  3. 符号位处理

    reg [3:0] num = -4; // 实际存储为4'b1100(补码表示)

五、系统任务中的数值表示

  • $display格式化输出

    $display("Dec: %d, Hex: %h, Bin: %b", num, num, num);

  • 参数化位宽

    parameter WIDTH = 8;
    reg [WIDTH-1:0] data; // 动态位宽

总结

|------|--------------------|------------|
| 特性 | 示例 | 说明 |
| 二进制 | 8'b1010_1010 | 8位二进制数 |
| 十进制 | 16'd65535 | 16位十进制数 |
| 十六进制 | 4'hF | 4位十六进制数 |
| 不确定值 | 2'b1x | 第2位为不确定值 |
| 高阻态 | 8'bzzzz_zzzz | 8位全高阻 |
| 符号扩展 | $signed(4'b1000) | 扩展为32位有符号数 |

合理使用位宽和进制表示,可避免硬件设计中的潜在错误,提高代码可靠性。

相关推荐
南檐巷上学1 小时前
基于FPGA的正弦信号发生器、滤波器的设计(DAC输出点数受限条件下的完整正弦波产生器)
fpga开发·数字信号处理·dsp·dds
嵌入式-老费6 小时前
Linux Camera驱动开发(fpga + csi rx/csi tx)
fpga开发
ALINX技术博客18 小时前
【202601芯动态】全球 FPGA 异构热潮,ALINX 高性能异构新品预告
人工智能·fpga开发·gpu算力·fpga
JJRainbow1 天前
SN75176 芯片设计RS-232 转 RS-485 通信模块设计原理图
stm32·单片机·嵌入式硬件·fpga开发·硬件工程
s9123601011 天前
FPGA眼图
fpga开发
北京青翼科技1 天前
【PCIe732】青翼PCIe采集卡-优质光纤卡- PCIe接口-万兆光纤卡
图像处理·人工智能·fpga开发·智能硬件·嵌入式实时数据库
minglie11 天前
verilog信号命名规范
fpga开发
XINVRY-FPGA1 天前
中阶FPGA效能红线重新划定! AMD第2代Kintex UltraScale+登场,记忆体频宽跃升5倍
嵌入式硬件·fpga开发·硬件工程·dsp开发·fpga
南檐巷上学1 天前
基于FPGA的音频信号监测识别系统
fpga开发·音频·verilog·fpga·傅立叶分析·fft·快速傅里叶变换
Aaron15882 天前
基于RFSOC的数字射频存储技术应用分析
c语言·人工智能·驱动开发·算法·fpga开发·硬件工程·信号处理