3.FPGA位宽
举例:在Verilog中,assign test=16'd2581; 里的位宽及数值表示含义如下:
1. 位宽的含义
16:指定了信号test的位宽为16位,即该信号在硬件中由16个二进制位表示。d:表示数值采用十进制(Decimal)格式书写。
2. 数值的解析
2581:是十进制数值,但需注意:
- 实际存储形式:在硬件中,2581会被转换为16位二进制补码。
- 范围检查:16位二进制能表示的无符号数范围是 0 ~ 65535(2¹⁶-1),2581在此范围内,因此直接转换为二进制:
2581₁₀ = 0000 1010 0001 0101₂(高位补零至16位)。
3. 常见误解澄清
- 不是“16位十进制数”:位宽指二进制位数,与数值的书写格式(十进制/二进制/十六进制)无关。
例如:
assign test = 16'd2581; // 十进制写法,等价于:
assign test = 16'b0000101000010101; // 二进制写法
assign test = 16'ha15; // 十六进制写法- 位宽决定存储上限:
- 若数值超过位宽限制(如
16'd65536),会发生截断。 - 例如:
16'd65536实际存储为0(因65536的二进制是1_0000_0000_0000_0000,截断后只剩低16位的0)。
- 若数值超过位宽限制(如
4. 应用场景
- 硬件资源控制:明确指定位宽可避免隐式位宽扩展,节省FPGA/ASIC资源。
例如:
reg [15:0] test; // 显式声明16位寄存器
assign test = 16'd2581; // 匹配位宽,避免警告- 数值范围设计:
- 若需表示更大数值(如超过65535),则需增加位宽(如
32'd2581)。
- 若需表示更大数值(如超过65535),则需增加位宽(如
总结
16'd2581表示:
- 使用16位二进制存储数值,
- 该数值的十进制形式为2581,
- 二进制值为
0000_1010_0001_0101。
