微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 两个时钟域使能信号的同步,求助

两个时钟域使能信号的同步,求助

时间:10-02 整理:3721RD 点击:
假如时钟域CLK1的使能信号EN1在CLK1的第1,3,4个周期为高电平,如何将其同步到时钟域CLK2,使CLK2控制的一使能信号EN2在CLK2的第1,3,4个周期为高电平?先谢谢各位大侠的解答。

always @(posedge clk2)
if()
begin
   a1 <= 0;
  a2 <= 0;
  end
else begin
   a1 <= en1;
  a2 <= a1;
  end
assign en2 = a1 & ~a2;



    谢谢解答,但小弟不太明白,if()的控制信号是clk1还是?这里clk1和clk2的频率相差很大。

if() 里的是个复位信号,en1是你在CLK1产生的使能信号,en2是en1同步到CLK2的信号。CLK1,CLK2那个是高频?上面的适合于en1的脉冲宽度大于CLK2的周期的情况.

如果CLK1的频率是大于CLK2的话,完全做不了了
上述通过异步采样,然后生成脉冲的方式,至少保证CLK2的频率为CLK1的两倍

这种需求的确比较奇怪,按照2楼的做法确实只能保证高频采到低频的
你可以尝试一下把时钟ck1的数据收集起来,比如8个周期的EN信号寄存寄存到8bit寄存器里面,然后把寄存器同步到CK2时钟,最后用8bit寄存器控制产生EN2信号。
你可以考虑一下这个能否满足你的需求。
从CK1到CK1,由于频率不同,所以肯定无法保证时时的吧EN信号传过来

always @(posedge en1 or negedge reset)
if(reset)
  q1 <= 0;
else q1 <= 1;
assign reset = ~en1 & q3;
assign en2 =q3;
always @(posedge clk2)
begin
   q2 <= q1;
   q3 <= q2;
end
这个适合en1的宽度小于clk2的情况,高频->低频



    谢谢解答,目前也只能想出这样的办法了,一级D FF存储EN1,再经过一级同步到时钟CLK2,通过MUX, DEMUX输入输出时钟。但这样同步延时比较大,也想不出更有效的方法。



    谢谢你耐心解答~  这里CLK1和CLK2频率大小关系不定,所以比较纠结。

CLK1 和 CLK2的关系如何? 没看懂你的问题。如果 CLK1的en 是被同步到 CLK2 的话,肯定是相对 CLK2 要有延迟的



   a1可能出现亚稳态?



   q2可能出现亚稳态?

两个时钟都不定的东西无法做此类的同步吧

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

网站地图

Top