问个设计方案
时间:10-02
整理:3721RD
点击:
输入ck_in, 有效时是一个 240MHz(+/-120KHz) 的时钟,无效时保持0或1。 本地有 480MHz(+/-240KHz) 的时钟。
要用 480M 的时钟检测 ck_in , 当连续两个480M 周期ck_in都保持不变时,输出为高。
而当ck_in 有效时, 输出为低。
要尽可能早的使输出指示输入是否有效。 比如输入从无效变有效,输出尽可能早变为0。
是不是需要用 480M 时钟 上升、下降沿都采? 然后比较?
但是这样有可能有 亚稳态的问题
我觉得是,拿480M的时钟的上升沿和下降沿同时去采240M的时钟,检查连续4次的结果,如果结果完全相同,则认定240M时钟已经处于保持不变的状态了,否则则是处于变化的状态。
采4个值是因为这两个时钟有上下偏差,考虑到最worst的情况时,480M+240K可能会有3个沿都采到240M-120K的high或者low,因此要检测4个结果。
input a; // ck_in
output b;
always @ ( posedge clk_480M ) begin
a_reg1 <= a;
a_reg2 <= a_reg1;
a_reg3 <= a_reg2;
b<=( (a_reg2&&a_reg3) || ( (!a_reg2)&&(!a_reg3)) );
end
怕亚稳态就打两拍,但是clk_in太快可能会误采,所以可以先把clk_in自己分频下,把clk_in降到120M,60M或者更低也行,然后再去做同步检测上下沿
clk_in不知道可不可以转成差分,如果能转成相差180度相位的两个时钟
这样每个时钟都采集,他们应该是同时不变化。
