作者: bakerly (bakerly) 看板: Electronics
标题: Re: [问题] veriog撰写问题
时间: Fri Aug 7 17:30:19 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同时发生 能确定一定会跑mod_n <= mod_n + 13'h00a 吗?
: 到底是incr_p先变为0 再做判断
: 还是incr_p还没变为0时 就做完判断了
: 我的电路要後者才是正确的
: 不知道我有哪边想错? 还请指教
问题在於
因为incr_d是由CLK产生的,所以在incr_p变为0之前第三个always会先执行
现实生活上的电路incr_p一定会比CLK慢一个DFF+一个AND的延迟。
我在这里没有写任何的delay在里面,你如果把每一行code都加上个#1
再下去想可能就会清楚一点了。
当然...这有个前题...CLK是完美的...如果CLK的SKEW也拿进来讲
那是有机会出错的。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.168.128.150
※ 编辑: bakerly 来自: 218.168.128.150 (08/07 17:32)
1F:推 felghana:确实用硬体去想 加上delay就不会错了 感谢指教 08/07 20:09