FPGA基础 -- Verilog语言要素之数据类型:线网类型
Verilog 数据类型:线网类型(Net Types)
一、什么是 Net(线网类型)?
Net(线网类型)用于表示电路中的**“物理连线”,其值由连接到它的驱动器决定**,自身不能被过程块(如
always
)直接赋值。
它代表“电信号”而非“变量”,例如模块端口连接、逻辑门输出等。
二、常用的线网类型
类型 | 含义 | 说明 |
---|---|---|
wire | 默认线网类型 | 表示由某个驱动器驱动的普通信号线 |
tri | 三态线 | 支持多个驱动器;用于建模三态总线(带 z) |
wand | 有线与(wired-AND) | 多个驱动器同时连接时执行按位 AND |
wor | 有线或(wired-OR) | 多个驱动器同时连接时执行按位 OR |
tri0 | 默认为 0 的三态线 | 未驱动时值为 0 |
tri1 | 默认为 1 的三态线 | 未驱动时值为 1 |
supply0 | 电源 GND 模拟 | 恒为 0,强驱动 |
supply1 | 电源 VDD 模拟 | 恒为 1,强驱动 |
triand | 三态与 | 少用 |
trior | 三态或 | 少用 |
三、重点类型详解
1. wire
类型(最常用)
wire a, b, c;
assign c = a & b;
- 无法在
always
块中赋值; - 必须被
assign
或其他模块驱动; - 用于模块端口连接、逻辑表达式、组合逻辑建模。
2. tri
类型(三态总线建模)
tri [7:0] data_bus;
assign data_bus = (enable) ? data_out : 8'bz;
- 模拟多设备驱动一条总线;
z
表示设备释放总线;- 多个模块使用
tri
同驱时,会使用“分辨函数”判断最终值。
3. wand
和 wor
适用于多个模块并联输出信号时做特殊处理:
wand
示例(有线与):
wand final_signal;
assign final_signal = a; // 模块1
assign final_signal = b; // 模块2
final_signal = a & b;
(Verilog 内部自动按位 AND)
wor
示例(有线或):
wor interrupt;
assign interrupt = int_dev1;
assign interrupt = int_dev2;
interrupt = int_dev1 | int_dev2;
这种方式用于多个源联合控制一个信号的场景,例如:
wand
:多个模块必须都准备好才允许信号通过(协同机制)wor
:任意一个模块产生中断即响应(抢占机制)
四、Net 类型与 reg
的区别
特性 | net 类型(如 wire) | reg 类型 |
---|---|---|
驱动机制 | 必须由连续赋值 assign 驱动 | 只能由过程块(always 、initial )赋值 |
用于建模 | 连线、组合逻辑、模块接口 | 状态保持、寄存器、时序逻辑 |
多驱动支持 | 支持(由强度分辨函数决定) | 不支持(reg 变量只能由一个过程块赋值) |
值变化时间 | 信号线传播延迟决定 | 在时钟边沿或事件触发时更新 |
可综合性 | ✔ | ✔ |
五、线网类型的使用场景举例
1. 模块端口连接
module top;wire clk, rst, data;submodule u1 (.clk(clk), .rst(rst), .data(data));submodule u2 (.clk(clk), .rst(rst), .data(data));
endmodule
2. 三态总线驱动
assign data_bus = (write_enable) ? data_out : 8'bz;
3. 模拟系统电源
supply1 VDD;
supply0 GND;
六、Verilog-2001 补充
Verilog-2001 引入 logic
类型(非线网类型),可用于替代 reg
,表示“自动类型推导”,可用于 SystemVerilog 的信号统一建模。
logic ready;
✅ 总结表:常见线网类型对比
Net 类型 | 用途 | 多驱动支持 | 可驱动方式 |
---|---|---|---|
wire | 最基本的线网类型 | 是 | assign , gate |
tri | 三态总线 | 是 | assign , z |
wand | 有线与(多个驱动取 AND) | 是 | 多个 assign |
wor | 有线或(多个驱动取 OR) | 是 | 多个 assign |
supply0/1 | 电源信号建模 | 是 | 固定为 0 或 1 |