微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 问个设计方案

问个设计方案

时间: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度相位的两个时钟
这样每个时钟都采集,他们应该是同时不变化。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top