FPGA基础 -- Verilog语言要素之整型数、实数、字符串

发布于:2025-06-20 ⋅ 阅读:(21) ⋅ 点赞:(0)

✅ 一、整型数(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)
  • 数值:可带 xz 作为未定义或高阻位

    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 更高精度仿真表达,但不能综合
测试台信息输出 字符串模拟 便于打印调试

网站公告

今日签到

点亮在社区的每一天
去签到