![]() |
|
||||||||||||||
| . 网站首页 . 新闻 . 新品 . 方案 . 专访 . 活动 . DSP . EDA . 评测室 . 技术文库 . 会员区 . 商城 . 服务导航 . 邮购 . 资源 . | ||
|
||
|
|||||
| FPGA设计之三:latch | |||||
作者:Free 文章来源:Free 点击数: 更新时间:2008-1-3 ![]() |
|||||
|
首先回答一下: 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还是要尽可能的敬而远之。 |
|||||
| 欢迎点击进入:TI德州中文网 (国内唯一针对TI应用的中文技术网站) 文章录入:admin 责任编辑:admin | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| 没有相关文章 |
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 管理登录 | | |||
|
|