阻塞时钟信号

问题描述 投票:0回答:1

假设我需要找出 BLOCK 信号早于 5 clk 信号。这些信号彼此异步,因此我无法使用如下所示的经典结构。

always(posedge clk)
if(cnt==4 && !BLOCK)
flag<=1;
else 
flag<=0;
//The flag will be set to 1 only if the BLOCK signal does not arrive before 5 clk.

always(posedge clk)
cnt <= cnt + 1;

但是我可以在 BLOCK 信号到达时阻止 clk,以便它停止对标志进行计时,并且该标志不会设置为 1。

wire clk_flag = clk & !BLOCK;

always(posedge clk_flag)
if(cnt==4)
flag<=1;
else 
flag<=0;

//The flag will be set to 1 only if the BLOCK signal does not arrive before 5 clk

always(posedge clk)
cnt <= cnt + 1;

设计中clk通过“与”混合信号可以接受吗?

我还没有看到这样的解决方案,但我没有看到这里的设计有任何危险,我不知道如何以另一种方式解决信号问题。 或者也许有人知道如何解决确定两个信号中哪一个信号较早出现(第五个 clk 或 BLOCK)的问题(如果它们是异步的)? 谢谢。

verilog fpga clock
1个回答
0
投票

由于BLOCK与clk异步,因此cnt信号需要使用CDC。 或者将 BLOCK 重新同步到 clk 时钟域以进行第一个代码构建。

© www.soinside.com 2019 - 2024. All rights reserved.