首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

面試經典:Set/Reset 鎖存器電路設計與 Verilog 實作

     編輯:關於C語言

設計一個具有 Set、Reset 輸入與單一輸出 Y 的邏輯電路:Set=1 時 Y 置高;Reset=1 時 Y 置低;其他情況保持現狀。這是經典的 SR 鎖存器,本文提供邏輯圖、真值表、Verilog 行為級/結構級實作與時序分析。

邏輯符號與真值表

SetResetY (次態)說明
00Y (保持)保持狀態
101置位
010復位
11禁止/不定競爭狀態,實際電路避免

NAND 門實作電路圖

     Set ───┐
            │
            NAND───┐
                   │    ┌─── Y
            NAND───┘    │
                   │    │
     Reset ───┐  │    │
            NAND───┘    │
                   │    │
                   └────┘ (交叉耦合)

兩個 NAND 門交叉耦合:第一個 NAND 輸入 Set 與第二個輸出;第二個 NAND 輸入 Reset 與第一個輸出。

Verilog 行為級模型

module sr_latch (
    input  wire set,
    input  wire reset,
    output reg  y
);
    always @(*) begin
        if (set && !reset)       y = 1'b1;
        else if (!set && reset)  y = 1'b0;
        else if (set && reset)   y = 1'bx;  // 禁止狀態
        // else 保持 y 不變
    end
endmodule

Verilog 結構級模型 (NAND 門)

module sr_latch_struct (
    input  wire set_n,   // 低電位有效
    input  wire reset_n, // 低電位有效
    output wire q,
    output wire q_n
);
    nand (q,   set_n, q_n);
    nand (q_n, reset_n, q);
endmodule

注意:NAND 版 SR 鎖存器輸入為低電位有效(Set_n, Reset_n),真值表與高電位有效版相反。

時序波形關鍵點

  • 建立/保持時間:Set/Reset 信號需在時鐘沿前/後穩定(若同步化)。
  • 脈衝寬度:最小脈衝寬度需滿足器件資料手冊規格,否則可能進入亞穩態。
  • 競爭避免:設計時務必確保 Set 與 Reset 不同時為有效電位。

擴展:同步 SR 鎖存器 (Gated SR Latch)

加入 Enable 控制:

module gated_sr_latch (
    input  wire clk,
    input  wire set,
    input  wire reset,
    output reg  q
);
    always @(posedge clk) begin
        if (set && !reset)       q <= 1'b1;
        else if (!set && reset)  q <= 1'b0;
        else if (set && reset)   q <= 1'bx;
    end
endmodule

總結

SR 鎖存器是循序邏輯基石。掌握 NAND/NOR 兩種結構級實作、真值表、禁止狀態處理、Verilog 行為與結構級建模,並理解時序約束,是數位 IC 設計面試必備核心技能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved