中易网

verilog 如何处理需要在两个always 中赋值的变量?

答案:1  悬赏:50  
解决时间 2021-01-14 05:49
  • 提问者网友:黑米和小志
  • 2021-01-13 17:17
verilog 如何处理需要在两个always 中赋值的变量?
最佳答案
  • 二级知识专家网友:执傲
  • 2021-01-13 18:07
一旦遇到这个问题。verilog中的解决方法是两个变一个。一个always块只对一个变量赋值。最后将其用组合逻辑将其变为一个信号。
举例:always @ (posedge clk or negedge rst)if (!rst)cnt1 <= #1 3'd0;
else if (cnt==4)
cnt1 <= #1 3'd0;elsecnt <= #1 cnt+1;
always @ (negedge clk or negedge rst)if (!rst)cnt2 <= #1 4'd0;
else if (cnt==5)
cnt2 <= #1 4'd0;elsecnt2 <= #1 cnt2 +1;
always @ (cnt1 or cnt2 )
if (cnt1==2)
ckout = 1'b1;
else if (cnt2==4)
ckout = 1'b0;elseckout = 1'b1; // logic part to combine the two cnt to one output
你看到了。前两个是定义了两个不同沿触发的时序电路就是计数器。最后一个组合逻辑来将两个做成一个使能信号。
这个做法可以做出不同沿触发的时序使能信号。但是这么做出的一个信号强烈建议不作为高质量时钟输出。由于编写程序风格。所以做为时钟可能延迟以及抖动都不能作为高质量时钟的设计。7
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息