verilog中一个信号在不同的always中的赋值问题

verilog语法不允许同一个信号在不同的always中的赋值,一旦你写了就报错,Error (10028): Can't resolve multiple constant drivers for net "ASRAM_CE1" at ASRAM.v(66)我就不明白了,为什么不允许,但是如果功能上有这个要求,你们怎么实现啊?

你想啊,always块实际综合出来的就是DFF,当时钟上升沿或者下降沿到了,才能把值打过去。如果你在不同的always中对同一个信号赋值,怎么综合?没见过这种DFF吧?呵呵~!~~~
如果有实现,你就在一个always中设一个flag,另一个always中,通过判断这个flag来进行赋值,间接进行赋值就行了~~~~~不过得设计好你的时序
有问题在联系哈~~~~~
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-06-22
我也是在学习中,你仔细看看夏老师的书,有专门讲解有关赋值方面的讲解。(中级篇的第六讲)
两个always中本身是同时进行的,所以输出时会产生竞争冒险现象。这是我理解到的。至于怎么解决我现在还没那道行。
第2个回答  2009-06-22
学习中

verilog中一个信号在不同的always中的赋值问题
你想啊,always块实际综合出来的就是DFF,当时钟上升沿或者下降沿到了,才能把值打过去。如果你在不同的always中对同一个信号赋值,怎么综合?没见过这种DFF吧?呵呵~!~~~如果有实现,你就在一个always中设一个flag,另一个always中,通过判断这个flag来进行赋值,间接进行赋值就行了~~~不过得设计...

verilog的两个always的问题
稳定的,你在第一个always里给那个变量赋值,这个变量从时钟上升沿到真正值的变化会有一个Tco的时间,这个你应该懂的吧,这个Tco加上布线延时的时间会比保持时间Th长,所以你在第二个always里用if来判断变量的值做不同的处理是没有问题的。

verilog 中为什么不能再两个always中同时赋值同一参数
因为那样是电路不可以实现的,一个always中要进行赋值必须是reg变量,一个reg变量对应在时序逻辑电路里是一个触发器的输出,你两个always模块中对同一个reg变量赋值是综合不出来的。。。我的理解是这样。所以写到一个模块里吧。如果还解决不了可以附代码出来,我帮你改改。本人菜鸟,多交流。

verilog 如何处理需要在两个always 中赋值的变量?
一旦遇到这个问题。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 o...

verilog中多个always的困惑
其实很简单,是由于你没有弄明白,并行的真正含义,是并行的 你要注意他们是出于不同的时钟上升沿下,两个always是同时起作用的,第一个计算tempa、tempb,而此时第二个always中tempa、tempb还是上一周期算出的tempa、tempb;也就是说第一次需要两个周期才能出一个结果的,以后每周期出一个结果的...

verilog 一个module中不同always块之间数据可以传递么
要做成可综合的RTL code,一个数据只能在一个always块中赋值,但是可以直接在其他always块中引用

verilog编程中当多个always出现时 先运行那个?例如下面的例子是一个...
always 都是同时执行的,即在同一时间,两个always都在运行。其实就相当于两个电路,同时上电,那么以电子的光速来说,在我们看来是同时执行的。所以这样你就不能给一个信号在两个always中赋值,会产生下面这样的问题 a--- ---C b--- a和b同时给C赋值,C就不知道是什么了。所以我们应该避免这种...

为什么always总是出现问题?
出现这个错误的原因在于,在不同的always逻辑块中,对同一个reg变量进行了赋值,在多个alwasy逻辑块同时并行工作的时候,会出现冲突。解决的办法:对于一个变量,只在一个always块中,进行赋值,内部分别对同一个变量进行的赋值smp_cnt,txd_cnt,txd_state;...

verilog中在同一模块下 一个always块中计数得到的值 可以在另一个always...
假设,下降沿也可以的),是之前的寄存的数据,当然是可以用的,尽管,在该时钟周期,计数器的值可能会改变,加或减1,但是不影响你控制其他always块,或assign语句也可以的,但是这是实时的,与计数器值变化有关的 如:assign over=(cnt==4‘b0010)?1:0;此时cnt为2 ...

verilog hdl定义一个内存reg[7:0] mem[10:0] 对于其中的一个内存单元...
不能,如果仅仅是用于仿真,两个always块里同时赋值同一个reg参数,仿真器可能不会报error。但是在硬件实现上会产生冲突,综合器是肯定会报错。所以基于可综合风格的要求,一个reg变量只能在一个always块里被赋值。

相似回答