一个变量在两个always 赋值有没有好的步骤解决

一个变量在两个always 赋值有没有好的方法解决
经常遇到一个变量在两个always?赋值的情况,总是没有很好的方法解决,请大侠分享一下有没有什么好的方法呢?



always?@(posedge??ct)
?????begin
?????????count?<=0;
?????end

always?(posedge?clk)
??????begin
??????????count?<=?count?+1'b1;
?????end
功能:ct上升沿计数复位,否则不停计数


------解决方案--------------------
你上面的代码通不过编译的。实现你要的功能很简单:用系统快速时钟检测出ct上升沿,形成计数器的异步复位脉冲。VHDL如下:
process?(sys_clk)
begin
??if?(sys_clk'event?and?sys_clk?='1')?then
??????ct_s1?<=?ct;
??????ct_s2?<=??ct_s1;
??end?if;
end

ct_rising_edge?<=?not?ct_s2?and?ct_s1;

process?(ct_rising_edge,?clk)
begin
if?(?ct_rising_edge?=?'1')?then
???count?<=?(others?=>?'0');

elsif?(clk'event?and?clk?='1')?then
??count?<=?count?+'1';
?end?if;
end

------解决方案--------------------
你这么写是要产生竞争冒险?的???如果要进行两个敏感信号的触发???可以考虑将两个信号触发一个新的敏感信号????然后通过新的敏感信号触发最终的这个变量
------解决方案--------------------
引用:
经常遇到一个变量在两个always?赋值的情况,总是没有很好的方法解决,请大侠分享一下有没有什么好的方法呢?



always?@(posedge??ct)
?????begin
?????????count?<=0;
?????end

always?(posedge?clk)
??????begin
??????????count?<=?count?+1'b1;
?????end
功能:ct上升沿计数复位,否则不停计数

一个变量肯定能在一个always块里写完的,否则就是设计问题了。你这个就是一个复位一个始终,只不过复位信号是上升沿而已,可以写成

rst<=~ct;
always@?(negedge?rst?or?posedge?clk)
begin
if?(!rst)
count<=0'b0;
else
count<=count+1;
end

verilog很多年没写了,可能有错误

相关内容推荐