作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一种设计,该设计应该检测两个不同频率的异步时钟的两个上升沿的第一个匹配。
类似这样的代码可能适用于模拟。
fork
@posedge clkA
begin
a=$time
end
@posedge clkB
begin
b=$time
end
join
if (a=b) then some code.
这段代码可能适用于模拟,但如果我想要一些可综合的硬件逻辑我还能用什么?
最佳答案
这个有点棘手,但如果您可以获得第三个时钟,其速度是您需要检测的两个时钟之间最快时钟的两倍,并且可以接受一个周期的检测延迟(一个周期是引用值)到第三个时钟域)那么这是可能的。
您需要做的是设置每个 clk 域的寄存器,如下所示:
input clk1, clk2'
...
reg clk1_in, clk1_out;
reg clk2_in, clk2_out;
wire clk1_posedge, clk2_posedge;
//take in the clock value, you should register this so that way jitter on the line does not mess with it
always@(posedge clk3)begin
clk1_in <= clk1;
clk2_in <= clk2;
end
always@(posedge clk3)begin
clk1_out <= clk1_in;
clk2_out <= clk2_in;
end
//now you need to detect the posedge for each signal independently, you can use and and gate for this
assign clk1_posedge = (~clk1_out && clk1_in);
assign clk2_posedge = (~clk2_out && clk2_in);
// now just and the two together
assign pulse_detected = clk1_posedge && clk2_posedge
您需要 clk 3 的速度是原来的两倍,否则会出现混叠(查找奈奎斯特频率)
所以发生的情况是时钟域的第一个寄存器将处于高电平,如果它刚刚变高,那么第二个寄存器在该周期中仍将处于低电平。
关于verilog - 如何在verilog中同时检测两个时钟(彼此异步)的posege?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17102701/
我是一名优秀的程序员,十分优秀!