作者horsehead ( NNNN)
看板Electronics
标题Re: [问题] veriog撰写问题
时间Fri Aug 7 23:04:07 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正缘触发而且时脉为stable 0 or stable 1的状态
同时你的incr要维持至少一个clock cycle以上的时间 为stable 0 ,
incr_p才会变为1 并非incr=1 而incr_p就立刻变为1
2以及3若以这样子的设计是会同时发生的 但是因为incr_p前面有一个and2存在会有
一些延迟 所以当时脉正缘触瞬间incr_p不会马上变化 仍会维持1一段时间 因此此时
正缘触发的时脉所戳到的incr_p为高电位 所以是会执行 mod_n + 13'h00a的
只是and2以及decr_d <= decr这个暂存器所产生的延迟是否能够维持足够的hold time
给mod_n去做判断呢? 那我又要如何控制其hold time让他够长呢 ?
放心吧 EDA工具就是为此而生的 只要你的设计是同步电路 编译完後软体会report fmax
只要你的时脉有符合这些问题都不会产生 软体都帮你处理好了 只是以目前这样子的
设计仍会有亚稳态的问题
修正一下我的说法 要解决亚稳态(metastable)应该要在加2级xDFF 用"3级"去
sampling
always @ ( posedge reset or posedge clk )
if ( reset ) begin
incr_d <= 1'b0;
incr_d1 <= 1'b0;
end else begin
incr_d <= incr;
incr_d1 <= incr_d;
end
这前两级是先做同步化解决metastable的问题
always @ ( posedge reset or posedge clk )
if ( reset )
incr_d2 <= 1'b0;
else
incr_d2 <=incr_d1;
wire incr_p = ~ incr_d2 & incr_d1 ;
然後这边是rising edge sampling
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.228.77.205
1F:推 felghana:恩 我有改了 并且模拟结果也是我要的 谢谢 08/07 23:25
※ 编辑: horsehead 来自: 61.228.77.205 (08/07 23:43)
※ 编辑: horsehead 来自: 61.228.77.205 (08/07 23:44)
2F:→ horsehead:若要更保险就把incr_p再经过一个DFF变成全同步信号再出 08/07 23:48
3F:→ horsehead:去只是这样子他又会在多延一个clock 系统端需考虑 08/07 23:49
4F:→ horsehead:这样子在整体架构上会不会有影响 08/07 23:51
5F:推 bakerly:这边我犯了一个错,我直觉把incr当成是sync的讯号,如果不 08/08 16:35
6F:→ bakerly:是还得再考虑metastable的问题没错。 08/08 16:35