You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Verilog中是否存在Asynchronous和Synchronous Latches?如何建模?

异步/同步锁存器的存在性与Verilog建模

是的,锁存器同样存在异步(复位/置位)和同步(复位/置位)两种类型。锁存器属于电平敏感的存储单元,这里的“异步”和“同步”针对复位/置位信号的生效条件定义:

  • 异步锁存器:复位/置位信号不受使能电平控制,只要复位信号有效,就会直接强制输出为复位值;
  • 同步锁存器:复位/置位信号仅在使能电平有效时生效,若使能无效,即使复位信号有效,输出也会保持当前状态。

下面是两种锁存器的Verilog建模示例:

异步复位锁存器(高电平使能,低电平异步复位)

这种锁存器的复位信号优先级最高,无论使能是否有效,只要复位信号触发,输出就会被置为复位值。

module async_reset_latch (
    input wire d,          // 输入数据
    input wire enable,     // 高电平有效使能
    input wire reset_n,    // 低电平有效异步复位
    output reg q           // 输出数据
);

always @(enable or reset_n or d) begin
    if (!reset_n) begin
        q <= 1'b0;
    end else if (enable) begin
        q <= d;
    end
    // 当enable无效时,q自动保持当前值,无需额外代码
end

endmodule

同步复位锁存器(高电平使能,低电平同步复位)

这种锁存器的复位操作仅在使能电平有效时执行,若使能处于无效状态,复位信号不会对输出产生影响。

module sync_reset_latch (
    input wire d,          // 输入数据
    input wire enable,     // 高电平有效使能
    input wire reset_n,    // 低电平有效同步复位
    output reg q           // 输出数据
);

always @(enable or d) begin
    if (enable) begin
        if (!reset_n) begin
            q <= 1'b0;
        end else begin
            q <= d;
        end
    end
    // enable无效时,q自动保持当前值
end

endmodule

额外说明

锁存器的电平敏感特性使其在时序设计中容易引入毛刺、亚稳态等问题,因此多数数字电路设计场景下,优先推荐使用边沿触发的触发器。只有在特定的低功耗或面积优化场景中,才会考虑使用锁存器。

内容的提问来源于stack exchange,提问作者yasara malshan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 15:54:25