Skip to main content

1 code style guide

basic​

在实际 RTL 可综合设计中,不允许 X 态存在。X 只是仿真器用来表示“未知/未初始化/多驱动/时序违例”的抽象值,真实硬件只有 0 和 1。仿真中出现 X 通常意味着设计存在缺陷,必须定位并修复,不能带到流片或上板。

FSM​

  • 采用三段式状态机:
    • 第一段:时序块,只更新 STATE。
    • 第二段:组合块,计算 next_state。
    • 第三段:组合或时序块,根据 STATE 和输入计算输出。
  • 数据路径独立:将数据路径逻辑拆分成独立的组合逻辑或子模块,用状态作为选择信号,而不是把大量寄存器更新塞进状态机的 case 中。
  • 使用函数/任务:将重复的地址计算、计数器更新封装成函数或任务,减少重复代码。
  • 拆分状态:如果状态过多,可以拆分成多个子状态机或使用层次化状态机。

always_comb​

默认值技巧

// 推荐:开头给默认值,避免锁存器
always_comb begin
y = 1'b0; // 默认值
if (sel)
y = a;
end

// 也推荐:用 case 的 default
always_comb begin
case (sel)
2'b00: y = a;
2'b01: y = b;
2'b10: y = c;
default: y = 1'b0; // 必须有 default
endcase
end