微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 用高频时钟检测低频时钟的上升沿,用两个D触发器还是一个D触发器?

用高频时钟检测低频时钟的上升沿,用两个D触发器还是一个D触发器?

时间:10-02 整理:3721RD 点击:
用高频时钟检测低频时钟的上升沿,用两个D触发器还是一个D触发器?
一个D触发器,如下描述
always@(posedge clk_quick)
begin
   clk_buf<=clk_slow;
end
always@(posedge clk_quick)
begin
if({clk_slow,clk_buf}==2'b01)
   rise_flag<=1'b1;
else
   rise_flag<=1'b0;
end
上面的描述实现仅需一个时钟
两个D触发器
always@(posedge clk_quick)
begin
   clk_buf[1:0]<={clk_buf[0],clk_slow};
end

always@(posedge clk_quick)
begin
if(clk_buf[1:0]==2'b01);
   rise_flag<=1'b1;
else
   rise_flag<=1'b0;
end

如上描述也常见,那么大家是如何选择的?
上述两种结构各有什么优缺点?

都不行,得3个触发器...



   这个~你是指需要同步吗?



   如果忽略前面的同步,那么怎么办呢?   感觉第一种方法就足够了,但是第二种又经常见,还找不出来使用的原因~

经典的是2级触发器



   我觉得也是,可是既然一个D触发器就可以完成的任务,为甚么还要用两个呢?

如果时钟相位固定的话,使用一级也是可以的
如果是完全异步的话,至少使用两级,因为存在亚稳态的问题



   说的有道理~

2级已经足够很多应用,3级比较保险。



   能不能详细讲讲亚稳态的消除,求教



    关于亚稳态的讲解,有很多文档说明的,你可以搜索下,并且讲的相对更详细
    总体来讲,就是一句话:如果不满足采样的时序要求,就会出现亚稳态,也就是所保存的数据跟输入数据没有了必然的关系了

如果两个时钟是异步的关系,CDC 就需要两级,生成边沿pulse还需要一个,总起来起码需要3个DFF。
如果两个时钟是同源的, CDC可以省略,则1个DFF

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

网站地图

Top