FPGA RTL 组合逻辑与时序逻辑入门
myfpga.com.cn 编辑部 · 2026-10-05
RTL 描述的是硬件行为。读代码时,先区分两类逻辑:组合逻辑根据当前输入计算结果;时序逻辑在时钟事件发生时保存状态。掌握这一区别,有助于理解综合结果和仿真波形。
组合逻辑:输入变化后重新计算
组合逻辑没有记忆功能。对每一种可能的输入情况,都要为输出指定值;如果某些分支没有赋值,综合工具可能推断出锁存器,让信号保留先前的值。
下面的 SystemVerilog 示例为结果提供默认值,因此所有路径都有定义:
logic [7:0] data_a, data_b, result;
logic enable;
always_comb begin
result = '0;
if (enable)
result = data_a + data_b;
end
在本例中,enable 为低时,result 是零。若设计意图是选择多个输入,应为每个分支及 default 分支指定明确结果,而不是依赖变量“自然保持”。
时序逻辑:在时钟事件中保存状态
触发器在指定时钟边沿更新。非阻塞赋值 <= 常用于这类寄存器描述;当同一时钟沿更新多个寄存器时,各寄存器依据边沿前的值计算下一状态。
logic clk, reset, enable;
logic [7:0] data_d, data_q;
always_ff @(posedge clk) begin
if (reset)
data_q <= '0;
else if (enable)
data_q <= data_d;
end
这里的 enable 为低时,寄存器保持原值,这是触发器的时序行为,并不等于组合逻辑中漏赋值而推断出的锁存器。复位是同步高有效示例;实际项目的复位极性和同步方式应与器件、板级复位电路及系统时序一致。
用代码结构表达设计意图
SystemVerilog 的 always_comb 和 always_ff 能清楚表达组合与时序过程。传统 Verilog 代码常用 always @(*) 和边沿敏感的 always @(posedge clk)。应根据目标综合工具和项目语言设置选择写法,并检查综合报告是否推断了预期的寄存器或锁存器。
一些实用检查:
- 组合过程为所有输出赋默认值,并覆盖完整条件分支;
- 寄存器过程明确时钟边沿、复位和使能行为;
- 仿真时检查复位释放、使能切换和边界输入;
- 综合后核对锁存器、寄存器数量与关键路径报告。
RTL 仿真用于验证行为,最终电路仍需经过综合、时序分析和目标硬件验证。接下来可阅读 FPGA 有限状态机设计入门 和 FPGA 跨时钟域基础,并参考 FPGA 开发流程入门。