verilog 如何处理需要在两个always 中赋值的变量(ZT)求解
答案:2 悬赏:0
解决时间 2021-04-09 07:03
- 提问者网友:无悔疯狂
- 2021-04-08 16:58
verilog 如何处理需要在两个always 中赋值的变量(ZT)求解
最佳答案
- 二级知识专家网友:统治我的世界
- 2021-04-08 17:49
在一个以上的always块中对同一个变量赋值容易产生竞争冒险,且不能综合。 但是如果一个变量的值必须与两个always事件相关联,且两个事件不可能放在一个always块中(如同一时钟上升沿与下降沿,或者是两个不同时钟进行触发的),那么应该用什么方法来处理这个变量呢?一旦遇到这个问题。verilog中的解决方法是两个变一个。一个always块只对一个变量赋值。最后将其用组合逻辑将其变为一个信号。 举例: always @ (posedge clk or negedge rst) if (!rst) cnt1 <= #1 3'd0; else if (cnt1==4) cnt1 <= #1 3'd0; else cnt1 <= #1 cnt1+1; //--注意这是两个不同时钟沿触发的always 模块 --zhengjw 2012.7.16 always @ (negedge clk or negedge rst) if (!rst) cnt2 <= #1 4'd0; else if (cnt2==5) cnt2 <= #1 4'd0; else cnt2 <= #1 cnt2 +1; always @ (cnt1 or cnt2 ) //--组合逻辑 if (cnt1==2) ckout = 1'b1;else if (cnt2==4) ckout = 1'b0;else ckout = 1'b1; // logic part to combine the two cnt to one output 你看到了。前两个是定义了两个不同沿触发的时序电路就是计数器。最后一个组合逻辑来将两个做成一个使能信号。 这个做法可以做出不同沿触发的时序使能信号。但是这么做出的一个信号强烈建议不作为高质量时钟输出。由于编写程序风格。所以做为时钟可能延迟以及抖动都不能作为高质量时钟的设计。
全部回答
- 1楼网友:放肆的依賴
- 2021-04-08 17:59
支持一下感觉挺不错的
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯