作者websterskimo (爱莎妮亚)
看板Electronics
标题Re: [问题] veriog撰写问题
时间Fri Aug 7 01:18:16 2009
※ 引述《felghana (adol)》之铭言:
: : reg incr_d;
: : always @ ( posedge reset or posedge clk )
: : if ( reset ) incr_d <= 1'b0;
: : else incr_d <= incr;
: : wire incr_p = incr & ~incr_d;
: : reg decr_d;
: : always @ ( posedge reset or posedge clk )
: : if ( reset ) decr_d <= 1'b0;
: : else decr_d <= decr;
: : wire decr_p = decr & ~decr_d;
: : reg [12:0] mod_n;
: : always @ ( posedge reset or posedge clk )
: : if ( reset ) mod_n <= 13'h000;
: : else if ( incr_p ) mod_n <= mod_n + 13'h00a;
: : else if ( decr_p ) mod_n <= mod_n - 13'h00a;
: 讲一下我对这个电路的想法好了 各位大大看有没有错
: 1.假定某一时间incr=1 那麽incr_p也会立刻变为1
: 2.当离这个时间最接近的那一次posedge clk发生的瞬间
: 会同时进入三个always block 因此incr_d=1造成incr_p=0
: 3.同时间第三个always block也要根据incr_p的值来决定进入哪个判断式
: 我的疑问就是 这样2和3同时发生 我有办法让他跑进else if(incr_p)这个判断式里面吗?
: 到底是incr_p先变为0 再做判断
: 还是incr_p还没变为0时 就做完判断了
: 我的电路要後者才是正确的
: 不知道我有哪边想错? 还请指教
c1 c2
_________ _________
__| |_________| clk
_________________________
______| incr
_________
___________________| incr_d
_______________
___| |_________ incr_p
如果你incr波型从c1之前为low,然後在c1、c2之间变化成high
这样子你的incr_p如上图的波型在c2时
第3个always就会跑进else if(incr_p)这个assignment
反之,在c1、c2之间变化成low,这样子就会造成
第3个always跳过else if(incr_p)这个assignment
因此结论就是要看你的incr怎麽给,会影响第3个always的判断
进而造成输出的不同!!
-------------------------------------------------------
另带一提,incr讯号可能会和第3个always的clk产生raceing!!
原因如下:
第1、2个always block下面的wire incr_p、decr_p属於 Mealy Machine 输出
然後成为第3个always的控制讯号,然後控制着mod_n的输出
因此会造成在clk trigger时,第3个always的输入在
同时间incr也发生变化,可能会造成第3个always选择
else if(incr_p)或是不选择else if(incr_p)
因此建议:
考虑清楚你的incr讯号与clk之间的关系
如果可以,你也许可以选择把incr_p、decr_p做成 Moore Machine 输出
这样子电路行为也许能更符合你的需求!!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.63.117.152
1F:推 bakerly:这线路前题是incr/decr要大於一个CLK,不然会有机会出错 08/07 17:31
2F:→ felghana:恩 我的设计绝对是大於1的clk的时间 08/07 20:09