FPGA设计之latch出现

背景

  在数字电路中我们学习过触发器和锁存器,但是在写Verilog的时候很少使用latch(锁存器),这是为什么呢。

触发器(FF)与锁存器(latch)对比

基本定义

  锁存器,是一种对脉冲电平敏感的存储单元电路。锁存器和寄存器都是基本存储单元,锁存器是电平触发的存储器,寄存器是边沿触发的存储器。两者的基本功能是一样的,都可以存储数据。

产生场景

  锁存器是组合逻辑产生的,而寄存器是在时序电路中使用,由时钟触发产生的。

latch危害

  latch 的主要危害是会产生毛刺(glitch),这种毛刺对下一级电路是很危险的。并且其隐蔽性很强,不易查出。因此,在设计中,应尽量避免 latch 的使用。

Verilog中如何避免产生latch

  组合逻辑中,if 或者 case 语句不完整的描述, 比如 if 缺少 else 分支,case 缺少 default 分支,导致代码在综合过程中出现了 latch。解决办法就是 if 必须带 else 分支, case 必须带default 分支。
  但只有不带时钟的 always 语句 if 或者 case 语句不完整才会产生 latch(此时为逻辑电路), 带时钟的语句 if或者 case 语句不完整描述不会产生 latch。

代码

always@(posedge clk_50M or negedge rstn) begin
    if(enable) begin
        data_mux <= data;
     end
    //else begin
    //    data_mux <= 0;
    //end    
end

此代码不产生latch

always@(*) begin
    if(enable) begin
        data_mux <= data;
     end
    //else begin
    //    data_mux <= 0;
    //end    
end

此代码会产生latch

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值