Verilog-A 数据类型与变量
数值变量
integer(整数型)
integer variable_name[[array_size]];
- 数值范围:-2³¹ ~ 2³¹(可能溢出,表征信号尽量用 real)
- 多用于控制逻辑计算
real(实数/浮点型)
real variable_name[[array_size]];
- 数值范围:10⁻³⁷ ~ 10³⁷
- 更常用于保存中间计算结果
数组
integer i[1:10];
real j[1:10];
注意:与总线声明顺序相反——变量数组是
名字在前、[范围]在后(总线是input [1:12] bus)。
参数 parameter
parameter [integer|real] variable_name [from|exclude];
- 实例化时可修改,带默认值。
- 范围限定:
from限定取值区间,exclude排除特定值。
parameter integer rin from [100K:10M]; // 100K~10M
parameter integer rin from [100K:10M] exclude 200K; // 且不能等于 200K
parameter real inp =100K from[1K:inf] exclude [90K:99K] exclude 12K;
inf只在参数范围限定中使用,表示无穷。- 参数数组:
parameter integer array_size = 4;
parameter real I_gc[1:array_size] = '{4{0.00}};
动态参数 dynamicparam
dynamicparam [integer|real] variable_name [from|exclude];
- 既是参数也是变量:初始值实例化确定,运行时可被代码修改。
- 依赖仿真器:Cadence 支持但不能动态改电路结构(如器件个数),很多仿真器根本不支持。
局部参数 localparam
localparam [integer|real] variable_name [from|exclude];
- 不能用其他参数赋值、不能用
defparam修改——保持模块独立性。 - 使用局部参数最好有特别说明,避免全局修改者困惑。
genvar(总线循环专用)
genvar variable_name;
- 特殊整数变量,编译期预先展开,用于循环访问总线端口。
- 普通 integer 循环访问
V(out[i])是错误的——仿真器不做代码解释,无法展开端口。 - 限制:
- 只能用于模拟事件代码内(analog 块内)
- 赋值/修改的操作数只能是常数或另一个 genvar
genvar i;
for(i=0;i<16;i=i+1) begin
V(out[i]) <+ V(in[i]);
end
⚠️ Verilog-A 不支持
i++,必须写i = i + 1。
网线和节点
内部节点 electrical
electrical net_name;
- 可检测/赋值电压电流,保留中间波形。
- 优点:保留内部计算波形;ddt 等多次操作需要;避免 RF 仿真 Hidden State 错误。
- 代价:增加仿真器计算量(节点越多计算越多)——能用数值变量就用变量。
- Verilog-AMS 数字域内部节点用
wire/reg。
地 ground
ground net_gnd;
- 声明后模块内
V(out)= out 相对 net_gnd 的电压(等效V(out, net_gnd))。 - 声明后不能再写
V(net_gnd),会报错。
wreal
wreal net_name[array_size];
- 实数网络类型,用于 wreal 类代码(高速事件驱动建模)。
- 详见 01 - VerilogA 语言概述#WREAL(了解)。
分支 branch
branch (net_name1, net_name2) branch_name;
- 为并联关系的多个分支命名,简化书写(尤其总线间分支)。
- 声明后可用
V(branch_name)、I(branch_name)访问该分支的电压电流。
branch (p, n) rl, (p, n) cap;
analog begin
V(rl) <+ r*I(rl);
I(cap) <+ c*ddt(V(cap));
end
- 作用主要是代码可读性,与直接写 V(p,n)/I(p,n) 等效。
类型速查表
| 类型 | 关键字 | 赋值 | 说明 |
|---|---|---|---|
| 整数 | integer |
= | 控制逻辑 |
| 实数 | real |
= | 中间结果 |
| 参数 | parameter |
实例化设置 | 可限定范围 |
| 动态参数 | dynamicparam |
运行时也可改 | 仿真器依赖 |
| 局部参数 | localparam |
不可改 | 独立性 |
| 循环变量 | genvar |
编译期 | 总线展开 |
| 模拟节点 | electrical |
<+ |
V/I 访问 |
| 实数网络 | wreal |
事件驱动 | 高速 |
| 分支 | branch |
<+ |
并联命名 |
相关笔记
- 语法基础 → 02 - VerilogA 语法基础
- 运算符 → 04 - VerilogA 运算符
- 模块结构 → 05 - VerilogA 模块定义与实例化