繁体中文
高级搜索
 
首页 | 电子技术应用 | 行业最新动态 | 行业最新产品 | 软件资料下载 | 电路图纸欣赏 | 博客文章精选 | 电子精品论坛 | 电子技术贴吧

当前位置:首页 >> 博客文章精选 >> EDA与PLD---博客 >> FPGA设计之三:latch
FPGA设计之三:latch
作者:   来源: 发表时间:2006-12-30  字号:  

首先回答一下:

1)stateCAD没有用过,不过我感觉用这个东东在构建大的系统的时候似乎不是很方便。也许用system C或者system Verilog更好一些。

2)同步、异步的叫法是我所在公司的习惯叫法,不太对,不过已经习惯了,呵呵。

这次讲一下latch。

latch的危害已经说过了,这里不再多说,关键讲一下如何避免。

1)在组合逻辑进程中,if语句一定要有else!并且所有的信号都要在if的所有分支中被赋值。

always @( * ) begin

if ( sig_a == 1'b1 ) sig_b = sig_c;

end

这个是绝对会产生latch的。

正确的应该是

always @( * ) begin

if ( sig_a == 1'b1 ) sig_b = sig_c;

else sig_b = sig_d;

end

另外需要注意,下面也会产生latch。也就是说在组合逻辑进程中不能出现自己赋值给自己或者间接出现自己赋值给自己的情况。

always @( * ) begin

if ( rst == 1'b1 ) counter = 32'h00000000;

else counter = counter 1;

end

但如果是时序逻辑进程,则不存在该问题。

2)case语句的default一定不能少!

原因和if语句相同,这里不再多说了。

需要提醒的是,在时序逻辑进程中,default语句也一定要加上,这是一个很好的习惯。

3)组合逻辑进程敏感变量不能少也不能多。

这个问题倒不是太大,verilog2001语法中可以直接用 * 搞定了。

顺便提一句,latch有弊就一定有利。在FPGA的LE中,总存在一个latch和一个D触发器,在支持DDR的IOE(IOB)中也存在着一个latch来实现DDIO。不过在我们平时的设计中,对latch还是要尽可能的敬而远之。

到年底了,工作越来越紧了,可能后续的日志写作时间会不规律且长度不定,请大家谅解啊!

另外,有空请各位多推荐推荐,拜谢!

我希望能通过这个blog结交更多的FPGA设计爱好者,共同提高,共同进步。


!注意:如果您发现此文章出现影响您的阅读的状况,请从浏览器地址栏里复制本文的链接到留言本报告给站长解决!
  • 上一篇: 时钟
  • 下一篇: IBM采用自成形材料绝缘 芯片提速三分之一

  • >> 联系我们请给我们留言·留言本
    本站所有提供的信息软件资料均来自网络,版权及著作权归原作者所有,如果无意中侵犯了您的相关权利或触及法律法规,请给我们留言, 我们将在24小时内删除。
      浙ICP备05071687号  电子技术精品网