1,四状态
reg framing_flag;
状态主开关,它是全局的状态标识。后面几乎所有的逻辑,都要看这个灯的脸色行事------"只有灯亮着,流水线才允许运转" 。
reg [15:0]data_cnt;
计数器,0~2047:发前导码;2048~19455 :发数据 。
reg framing_flag_reg;
它的输入端死死连着 framing_flag,并且受时钟 clk 驱动。在时钟的每一个上升沿时刻,它都会读取 framing_flag 的状态(此时读取的是framing_flag 上一拍 的电平)。这个变量不直接参与业务控制,它是专门为了配合生成下面那个 _rise 脉冲而设立的"工具人"。没有它,就做不出边沿检测电路。
wire framing_flag_rise;
它是整个系统的"起跑发令枪"。
-
framing_flag拉高会持续两万多个周期(持续时间太长了),但系统里的某些部件(比如各种缓存指针、RAM 的读地址)只需要在发车的一瞬间听到一声"砰!",然后把自己归零,准备开始新一轮的工作。 -
根据它的逻辑表达式:
framing_flag && !framing_flag_reg(现在的状态是 1,且上一拍的状态是 0)。 -
这个条件仅仅在发车的第一拍会成立。只要过了这一拍,两者都会变成 1,这个脉冲就会瞬间消失。
-
架构师视角 :极其优美的同步电路设计!有了这根线,你就可以在代码的任何地方写上
if (framing_flag_rise)。这相当于告诉底层的部件:"只要枪声一响,不管你之前在干嘛,立刻给我复位清零,准备迎接新的一帧!"