公司动态
组合逻辑反馈环(Combinational Feedback Loop)深度解析
1. 产生原理(为什么会产生?)Verilog/VCS 是基于事件驱动(Event-Driven)的仿真机制。仿真时间被切分为无数个Delta 周期(∆-cycle)——即零仿真时间内的计算片断。组合逻辑反馈环的本质:在同一个 ∆-cycle 内,信号 A 的变化触发了信号 B 的更新,而信号 B 的更新又直接或间接触发了信号 A 的再次更新。这形成了一个不依赖于时钟、不消耗仿真时间的“死循环”。经典代码范例(你大概率会遇到):// 错误范例1:相互驱动的 assign wire a, b; assign a = ~b; assign b = ~a; // b 的变化立刻触发 a 变化,a 变化立刻触发 b 变化 - 无限 ∆-cycle 乒乓 // 错误范例2:always_comb 中的读-修改-写(没有中间变量) reg [3:0] temp; always @(*) begin temp = temp + 1; // 读取 temp,计算新 temp,再赋给 temp,组合环 end // 错误范例3:状态机组合输出直接反馈回组合输入(未打拍) reg state, next_state; always @(*) begin case(state) 0: next_state = condition ? 1 : 0; 1: next_state = condition ? 0 : 1; // 若 next_state 直接驱动 condition 的组合逻辑,形成环 endcase end assign condition = (next_state == 1); // 这条 assign 将环闭合!当仿真器遇到这种情况,它会在0 ns