假设我需要找出 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)的问题(如果它们是异步的)? 谢谢。
由于BLOCK与clk异步,因此cnt信号需要使用CDC。 或者将 BLOCK 重新同步到 clk 时钟域以进行第一个代码构建。