設計一個具有 Set、Reset 輸入與單一輸出 Y 的邏輯電路:Set=1 時 Y 置高;Reset=1 時 Y 置低;其他情況保持現狀。這是經典的 SR 鎖存器,本文提供邏輯圖、真值表、Verilog 行為級/結構級實作與時序分析。
| Set | Reset | Y (次態) | 說明 |
|---|---|---|---|
| 0 | 0 | Y (保持) | 保持狀態 |
| 1 | 0 | 1 | 置位 |
| 0 | 1 | 0 | 復位 |
| 1 | 1 | 禁止/不定 | 競爭狀態,實際電路避免 |
Set ───┐
│
NAND───┐
│ ┌─── Y
NAND───┘ │
│ │
Reset ───┐ │ │
NAND───┘ │
│ │
└────┘ (交叉耦合)
兩個 NAND 門交叉耦合:第一個 NAND 輸入 Set 與第二個輸出;第二個 NAND 輸入 Reset 與第一個輸出。
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
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 不同時為有效電位。加入 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 設計面試必備核心技能。