在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 9694|回复: 21

[求助] 如何理解电平敏感的透明锁存器概念呢?

[复制链接]
发表于 2015-1-13 00:45:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 IC.Michael 于 2015-1-13 13:04 编辑

最近在学夏宇闻老师的《verilog数字系统设计教程》,在always电平敏感信号中提到了电平敏感的透明锁存器的概念,不甚理解,所以想请教下下论坛里的朋友。这里,引用新浪博客一个网友的帖子。http://blog.sina.com.cn/s/blog_4cfafddd0100een4.html

文章中关于这个问题作了一些探讨。想与大家再交流下。谢谢!

附上帖子:(***帖子内容*** 非楼主原创)
      ***************************************************************

组合逻辑电路的设计,在谈到always电平敏感信号列表时,网上有的说:

   在赋值表达式右端参与赋值的所有信号都必须在always @(敏感电平列表)中列出,always中if语句的判断表达式必须在敏感电平列表中列出。如果在赋值表达式右端引用了敏感电平列表中没有列出的信号,在综合时将会为没有列出的信号隐含地产生一个透明锁存器。这是因为该信号的变化不会立刻引起所赋值的变化,而必须等到敏感电平列表中的某一个信号变化时,它的作用才表现出来,即相当于存在一个透明锁存器,把该信号的变化暂存起来,待敏感电平列表中的某一个信号变化时再起作用,纯组合逻辑电路不可能作到这一点。综合器会发出警告。

这句话是错的!而事实的真相应该是这段话:

敏感信号列表出现在always块中,其典型行为级的含义为:只要敏感信号列表内的信号发生电平变化,则always模块中的语句就执行一次,因此设计人员必须将所有的输入信号和条件判断信号都列在信号列表中。有时不完整的信号列表会造成不同的仿真和综合结果,因此需要保证敏感信号的完备性。在实际的PLD 器件开发中,EDA 工具都会默认将所有的输入信号和条件判断语句作为触发信号,增减敏感信号列表中的信号不会对最终的执行结果产生影响,因此如果期望在设计中通过修改敏感信号来得到不同的逻辑,那就大错特错了。当敏感信号不完备时,会使得仿真结果不一样,这是因为仿真器在工作时不会自动补充敏感信号表。如果缺少信号,则无法触发和该信号相关的仿真进程,也就得不到正确的仿真结果



必须将所有的输入信号和条件判断信号都列在信号列表中

有一种输入方式是:

always@(*)

  begin

       ....

  end

此时,综合工具和仿真工具会自动将所有的敏感信号自动加入敏感信号列表。

***************************************************************

发表于 2015-1-13 09:25:36 | 显示全部楼层
我以前用verilog写过锁存器并综合出了结果。建议楼主看看介绍数字电路基础的书籍,比如拉贝的透视。如果能够明白锁存器究竟是怎么工作的,理解verilog描述就很容易了。

在很多常见的电路中,锁存器是不希望出现的,更多使用的是DFF。但在某些场合下,锁存器也可以构成流水线去计算数据。
发表于 2015-1-13 09:58:44 | 显示全部楼层
楼主的意思是说,敏感信号列表不全,仿真可能不对,但综合出的电路都是一样的。
 楼主| 发表于 2015-1-13 13:23:37 | 显示全部楼层
回复 3# haimo


   这是我引用的帖子中的观点,我本人没有太多的经验,所以不太确定,向您请教来着。
 楼主| 发表于 2015-1-13 13:27:28 | 显示全部楼层
回复 2# Veriart


   谢谢您的回复,刚好手头貌似有这本书,我去看看学习下。
发表于 2015-1-13 16:27:06 | 显示全部楼层
回复 4# IC.Michael

不知道,但一般都写成always@*,简单保险。
发表于 2015-1-13 22:48:15 | 显示全部楼层
电平敏感的透明锁存器,其实就是D锁存器。D latch。当clk为高时,输出跟随输入D的变化而变化。
 楼主| 发表于 2015-1-13 23:59:43 | 显示全部楼层
回复 6# haimo


   恩。这样做是很保险。就是抠到一些细节的地方时,还是不太明白。哎。
 楼主| 发表于 2015-1-14 00:00:41 | 显示全部楼层
回复 7# 92wanglinyu


   那,我还有一个问题想要请教您。always @(...) 括号中为电平信号时,比如 a or b or c,意味着a或b或c发生变化就触发这个过程块。abc的变化可能是0到1或者1到0,不像锁存器响应一个电平,或者触发器响应一个边沿。那么我的问题是,always @(a or b or c)在综合时是怎么样的电路呢?如何实现在abc变化时触发always块?
发表于 2015-1-14 09:08:03 | 显示全部楼层
回复 9# IC.Michael


    锁存器出现很多时候是这样,always@(。。。)  if(a)。。。, 我建议你如果是设计纯组合逻辑,就用always@(*),如果刻意设计锁存器,直接调用stdcell。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

X

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-6-25 23:48 , Processed in 0.027468 second(s), 11 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表