代码编写时产生的锁存器行为,为什么被称为设计错误

[复制链接]
3012|4
手机看帖
扫描二维码
随时随地手机跟帖
chenqinte|  楼主 | 2010-8-3 22:00 | 显示全部楼层
书中举了一个具体的例子:
always@*
      if(~sel)begin
         z1=a1;
         z2=b1;
      end
      else begin
         z1=a2;
      z3=b2;
    end
请问这样的锁存行为会有什么问题?

使用特权

评论回复
钻研的鱼| | 2010-8-4 11:37 | 显示全部楼层
锁存不见得都是错误。Z1应该是一个多路选择器,z2和z3是锁存器,以往的单片机里面,都是ale信号为高电平时锁存地址

使用特权

评论回复
yxwsz| | 2010-8-5 13:52 | 显示全部楼层
书上说的是要避免由于条件没有列全导致综合器自动推导出锁存器的情况,这个并不是设计者本来就想要的结果;
比如if语句里面,没有将一个变量所有可能的条件;上面的z2,只有在~sel的时候才给赋值,其它情况呢?
reg类型的变量会自动保持其值,所以综合器会推导出来一个锁存器; z3也是同样的情况;

单纯从代码来看,其实z2, z3对于设计者没有任何用处,所以推导出来的锁存器也是没有任何实际意义。

使用特权

评论回复
chenqinte|  楼主 | 2010-8-5 21:26 | 显示全部楼层
谢谢LS的解答,能从综合,芯片资源角度讲解,让我明白了为什么要避免出现无意义的锁存器

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

166

帖子

0

粉丝