FPGA基础 -- Verilog语言要素之整型数、实数、字符串
✅ 一、整型数(Integer)
Verilog 中的整型值支持如下几种方式表达:
1. 常规整数格式(literal)
10 // 默认十进制
8'd10 // 8位的十进制 10
8'b1010 // 8位的二进制
8'o12 // 8位的八进制(12=10)
8'hA // 8位的十六进制(A=10)
2. 语法结构说明
[位宽]'[进制][数值]
-
位宽:指明宽度,如
8'd10
是 8 位 -
进制:
b
:二进制(binary)o
:八进制(octal)d
:十进制(decimal)h
:十六进制(hex)
-
数值:可带
x
或z
作为未定义或高阻位8'b1x0z_1101 // 中间含未知和高阻位
3. 有符号数与无符号数
- 默认所有数字都是 无符号(unsigned)
- 使用
signed
关键字声明符号变量:
reg signed [7:0] s_value;
- 补码规则适用,仿真时注意符号扩展:
assign result = $signed(a) + $signed(b);
4. 特殊整数类型
类型 | 用途 | 说明 |
---|---|---|
integer | 32位整数 | 默认 signed,有符号 |
time | 64位整数 | 表示时间单位 |
parameter | 常量 | 合成后不可修改 |
localparam | 局部常量 | 不可被覆盖(e.g. for generate) |
✅ 二、实数(Real)
1. 实数的表示方式
real r;
r = 3.1415;
r = -0.5e+3; // 科学记数法
real
是 IEEE 754 double precision(64 位)浮点数- 也支持
realtime
类型(语义更强调时间值)
2. 注意事项
项目 | 描述 | |
---|---|---|
实数不可综合 | 仅在仿真中使用,不可用于综合生成电路 | |
不支持位运算 | 实数不能进行 & , ` | , ^` 等按位操作 |
可用于函数/计算表达式 | 用于仿真场景下的精确运算,如 $sin() , $exp() 等数学函数 |
3. 强制类型转换
real pi = 3.14;
int_part = $rtoi(pi); // 转为整数
✅ 三、字符串(String)
1. 字符串定义方式
Verilog 没有 string
类型(SystemVerilog 才有),但可以用 reg [8*n-1:0]
形式来模拟字符串,每个字符一个字节:
reg [8*10-1:0] my_string;
initial my_string = "Hello_FPGA";
2. 字符串相关运用
-
写入文件/显示信息
$display("The result is: %s", my_string); $fwrite(file, "%s\n", my_string);
-
字符串比较
只能自己写逻辑或用$strcmp()
(SystemVerilog 支持) -
传递给任务/函数参数
实际作为位向量处理(如input [127:0] str
)
3. 特殊字符与转义符
转义符 | 含义 |
---|---|
\n | 换行 |
\t | 制表符 |
\" | 双引号 |
\\ | 反斜杠 |
✅ 四、整型、实数与字符串的对比
特性 | 整型数(integer) | 实数(real) | 字符串(string模拟) |
---|---|---|---|
表达精度 | 精确 | 有小数精度 | 文本表示,不用于运算 |
可综合性 | ✔(除 integer 类型) | ❌(仿真专用) | ❌(用于仿真显示与测试) |
应用场景 | 寄存器、电路计算 | 模拟模型、延迟计算 | 打印、日志、文件接口 |
内存结构 | 固定位宽向量 | 64 位浮点 | 多字节字符拼接 |
✅ 五、综合建议
使用目的 | 推荐类型 | 原因 |
---|---|---|
建立有限状态机、加法器 | 整型位宽明确的向量 | 便于综合与门控 |
模型计算/温度仿真等 | real | 更高精度仿真表达,但不能综合 |
测试台信息输出 | 字符串模拟 | 便于打印调试 |