113 年 國立中山大學積體電路設計研究所碩士班《數位系統設計》
第 Problem 1 題20 分
Implement the following Boolean function
.
(a) by using only NOR gates. (5%)
(b) by using only NAND gates. (5%)
(c) by using the simplest sum-of-products form (5%)
(d) by drawing the logic diagram using a multiplexer (5%)
Please note that for (a), (b) and (c) you need to show the final Boolean function and how you derive the function.
登入後即可作答並保存紀錄。
核心觀念
本題綜合考查四種布林函數實現方法:
- 布林代數化簡與卡諾圖分組
- NOR-only 實現:利用「NOR–NOR」結構實現乘積和式的對偶形式,即 POS。
- NAND-only 實現:利用「NAND–NAND」結構實現最簡和項積,即 SOP。
- 多工器(MUX)實現:將部分變數指定為選擇線,逐一求出各選擇組合下的資料輸入。
基本定義如下:
原函數為
其輸出為 的最小項為
解題方法:先求最簡 SOP
將最小項依照卡諾圖相鄰原則分組:
- :
- :
- :
- :
因此最簡和項積為
此式比原式更適合用 NAND 閘實現。
(a) 只使用 NOR gates
1. 先轉成最簡 POS
由最小項可知,輸出為 的位置為
在 的卡諾圖中分組:
- :
- :
- :
- :
因此得到最簡乘積和式:
2. 改寫成 NOR–NOR 結構
令
最後:
其中反相變數以 NOR 自己輸入自己產生:
所以只使用 NOR gates 的完整表示式為
(b) 只使用 NAND gates
NAND–NAND 結構最適合實現 SOP:
先將各和項取反:
最後以 NAND 將上述結果相加:
因此:
也就是
第 Problem 2 題12 分
Short answer questions:
(a) Provide an example to demonstrate that a Boolean function can have more than one simplest form of expression, indicating its non-uniqueness. (3%)
(b) Provide an overview of the hardware structure of a sequential circuit and utilize this structure to explain how a sequential circuit is different in functionality and design from a combinational circuit. (4%)
(c) Present several waveform diagrams to illustrate and clarify the concepts of setup time and hold time in a D flip-flop. (5%)
登入後即可作答並保存紀錄。
核心觀念
本題涵蓋數位邏輯設計的三大核心基礎觀念:
- 布林函數化簡之非唯一性(Non-uniqueness of Minimal SOP Form):
在卡諾圖(Karnaugh Map)或布林代數化簡中,若所有本質質隱項(Essential Prime Implicants, EPI)涵蓋完後,剩餘的最小項(Minterms)可由多組成本相同(項數與文字數相同)的非本質質隱項(Non-essential Prime Implicants)覆蓋,則該函數的最簡積之和(Sum of Products, SOP)式將具有非唯一性。 - 循序邏輯與組合邏輯之硬體架構與設計差異:
- 組合電路(Combinational Circuit):無記憶性、無回授路徑,輸出僅由當前輸入決定()。
- 循序電路(Sequential Circuit):包含組合邏輯、記憶元件(Memory Elements, 如 Flip-Flop/Register)與回授路徑(Feedback Path),電路輸出與次態(Next State)同時由當前輸入與現態(Present State)共同決定。
- D 正反器(D Flip-Flop)之時序參數(Timing Parameters):
- 建立時間(Setup Time, ):時脈觸發緣(Active Clock Edge)抵達前,資料輸入端 必須維持穩定不變的「最短時間」。
- 保持時間(Hold Time, ):時脈觸發緣抵達後,資料輸入端 必須維持穩定不變的「最短時間」。
- 時序違規(Timing Violation):若違反建立或保持時間,正反器內部雙穩態電路無法順利閂鎖,將引發亞穩態(Metastability)。
解題方法與詳細推導
(a) 布林函數最簡式非唯一性之範例(3%)
給定四變數布林函數:
1. 繪製卡諾圖並找出所有質隱項(Prime Implicants, PIs):
CD
AB\ 00 01 11 10
00 | 1 | 0 | 0 | 1 | -> m0, m2
01 | 1 | 1 | 1 | 1 | -> m4, m5, m7, m6
11 | 0 | 1 | 1 | 0 | -> m13, m15
10 | 1 | 0 | 0 | 1 | -> m8, m10
- 四個角落群組(Corner Group):
- 第 2 列整列(Row 2):
- 中間四格(Center 2x2):
- 第 1、2 行外側垂直群組:
2. 分析質隱項涵蓋:
- 僅能被 涵蓋 為本質質隱項(EPI)。
- 僅能被 涵蓋 為本質質隱項(EPI)。
- 選取上述兩項 EPI 後,已涵蓋最小項:。
- 尚未涵蓋的最小項為:。
- 覆蓋 可以有以下兩種選擇:
- 選取質隱項 (含 2 個文字)
- 選取質隱項 (含 2 個文字)
3. 最簡式(Minimal SOP)結果:
- 形式一: (共 3 項、6 個文字)
- 形式二: (共 3 項、6 個文字)
兩者所用之閘極數(Gate count)與文字數(Literal count)完全相同,皆為最簡 SOP 式,證明最簡化表示式具非唯一性(Non-uniqueness)。
(b) 循序電路之硬體架構與功能/設計差異(4%)
1. 循序電路之通用硬體架構圖(Block Diagram)
+--------------------------------+
| |
外部輸入 (X) | 組合邏輯電路 | 外部輸出 (Z)
--------------->| (Combinational Logic) |-------------->
| |
| 次態 (Next State, Y) |
+---------------+----------------+
|
v
+-----------+
| 記憶元件 |
| (Flip- | <--- 時脈信號 (CLK)
| Flops) |
+-----+-----+
|
| 現態 (Present State, y)
v
(回授路徑 Feedback Path)
+--------------------------------+
2. 功能差異(Functional Differences)
- 組合電路:無內部狀態記憶。任何時間點的輸出 僅由當前輸入 決定,即 。
- 循序電路:具備狀態記憶能力。任何時間點的輸出 不僅取決於當前輸入 ,還取決於過去輸入歷史所儲存的現態 :
- Mealy 型態:
- Moore 型態:
- 狀態轉移(次態方程式):
3. 設計差異(Design Methodology Differences)
| 比較維度 | 組合邏輯電路(Combinational Circuit) | 循序邏輯電路(Sequential Circuit) |
第 Problem 3 題18 分
Design an asynchronously resettable positive edge-triggered finite state machine that accepts a one-bit input d and generates two one-bit outputs x and y.
x should be 1 if d has been 0 for at least two consecutive cycles.
y should be 1 if d has been 0 for at least three cycles (not necessarily consecutively).
(a) Give Verilog/VHDL codes of an asynchronously resettable positive edge-triggered flip-flop. (3%)
(b) Draw the state transition diagram and define each state clearly. (5%)
(c) Write RTL Verilog/VHDL codes to implement the finite state machine you designed in (b). (10%)
登入後即可作答並保存紀錄。
本題考查有限狀態機 (Finite State Machine, FSM) 的設計,特別是異步重置 (asynchronous reset) 的正緣觸發 D 觸發器,以及設計一個能夠偵測輸入序列的狀態機。
核心觀念:異步重置 D 觸發器、狀態機設計、狀態轉移圖、組合邏輯與時序邏輯的結合。
(a) 異步重置正緣觸發 D 觸發器的 Verilog/VHDL 程式碼
一個異步重置的 D 觸發器,當 reset 訊號為有效時 (通常是低電位 active-low 或高電位 active-high),無論時脈訊號如何,都會立即將輸出 Q 設定為重置值 (通常是 0)。當 reset 無效時,觸發器才響應時脈的正緣,將 D 的值傳遞到 Q。
Verilog 程式碼:
module d_flipflop_async_reset (
input wire clk, // Clock input
input wire reset, // Asynchronous reset input (active-high assumed)
input wire d, // Data input
output reg q // Output
);
// Asynchronous reset logic
always @(posedge clk or posedge reset) begin
if (reset) begin
q <= 1'b0; // Reset output to 0 when reset is high
end else begin
// Synchronous operation on positive clock edge
q <= d;
end
end
endmodule
VHDL 程式碼:
library ieee;
use ieee.std_logic_1164.all;
entity d_flipflop_async_reset is
port (
clk : in std_logic; -- Clock input
reset : in std_logic; -- Asynchronous reset input (active-high assumed)
d : in std_logic; -- Data input
q : out std_logic -- Output
);
end entity d_flipflop_async_reset;
architecture Behavioral of d_flipflop_async_reset is
begin
process (clk, reset)
begin
if reset = '1' then -- Asynchronous reset (active-high)
q <= '0';
elsif rising_edge(clk) then -- Synchronous operation on positive clock edge
q <= d;
end if;
end process;
end architecture Behavioral;
注意: 這裡假設 reset 為 active-high。若為 active-low,則 if reset = '1' 應改為 if reset = '0' (VHDL) 或 if (!reset) (Verilog)。
[Answer for (a)] (Verilog code provided above)
(b) 狀態轉移圖與狀態定義
我們需要設計一個狀態機,輸出 x 在 d 連續兩個週期為 0 時為 1,輸出 y 在 d 連續三個週期為 0 時為 1。狀態機需要記錄 d 為 0 的連續個數。
狀態定義:
我們需要追蹤 d 為 0 的連續次數。
- 狀態 S0: 初始狀態,或前一個輸入
d不是 0。 - 狀態 S1: 前一個輸入
d是 0,但再前一個不是 0。 - 狀態 S2: 前兩個輸入
d都是 0。 - 狀態 S3: 前三個輸入
d都是 0。
輸出定義:
x輸出:當狀態機處於 S2 或 S3 時,表示d已連續為 0 至少兩個週期。y輸出:當狀態機處於 S3 時,表示d已連續為 0 三個週期。
狀態轉移圖:
設 D 輸入為 d,時脈觸發邊緣為正緣。狀態機有異步重置 (async_reset),當重置時,狀態機進入 S0。
-
狀態 S0:
- 若
d= 1:保持在 S0。 - 若
d= 0:轉移到 S1。 - 輸出:x=0, y=0。
- 若
-
狀態 S1: (表示前一個
d是 0)- 若
d= 1:轉移回 S0 (連續 0 的計數中斷)。 - 若
d= 0:轉移到 S2 (連續 0 的計數增加)。 - 輸出:x=0, y=0。
- 若
-
狀態 S2: (表示前兩個
d都是 0)- 若
d= 1:轉移回 S0 (連續 0 的計數中斷)。 - 若
d= 0:轉移到 S3 (連續 0 的計數增加)。 - 輸出:x=1, y=0。 (因為
d已連續為 0 兩個週期)
- 若
-
狀態 S3: (表示前三個
d都是 0)- 若
d= 1:轉移回 S0 (連續 0 的計數中斷)。 - 若
d= 0:保持在 S3 (連續 0 的計數繼續,但我們只需要記錄至少三個,所以保持在此狀態即可)。 - 輸出:x=1, y=1。 (因為
d已連續為 0 三個週期)
- 若
狀態定義總結:
- S0 (Idle): 記錄的連續 0 的計數為 0。
- S1 (Count 1): 記錄的連續 0 的計數為 1。
- S2 (Count 2): 記錄的連續 0 的計數為 2。
- S3 (Count 3+): 記錄的連續 0 的計數 >= 3。
狀態轉移圖:
+-------+ d=0 +-------+
| |--------------> | |
| S0 | | S1 |
| x=0,y=0 |<-------------- | x=0,y=0 |
+-------+ d=1 +-------+
^ | d=0
| |
d=1 | v
| +-------+
| | |
+----------------- | S2 |
| x=1,y=0 |
+-------+
| d=0
|
v
+-------+
| |
| S3 |
| x=1,y=1 |
+-------+
^
| d=0 (stay in S3)
|
d=1 |
+-------+ (return to S0)
Async Reset: All states transition to S0 when reset is active.
注意: 在狀態轉移圖中,每個箭頭上的標籤是觸發轉移的條件 (輸入 d 的值)。箭頭指向的狀態是下一個狀態。狀態標籤內顯示了該狀態的輸出 x 和 y。
[Answer for (b)]
State Definitions:
- S0 (Count 0): Initial state. The previous input
dwas 1, or it's the reset state. No consecutive zeros counted. - S1 (Count 1): The previous input
dwas 0, but the input before that was 1. One consecutive zero counted. - S2 (Count 2): The previous two inputs
dwere 0. Two consecutive zeros counted. - S3 (Count 3+): The previous three or more inputs
dwere 0. Three or more consecutive zeros counted.
State Transition Diagram:
(Diagram described above)
State Transition Logic (Next State Logic):
Let current_state be the current state and d be the input. next_state is the state after the clock edge.
- If
resetis active,next_state= S0. - If
resetis inactive:- If
current_state= S0:- If
d= 0,next_state= S1. - If
d= 1,next_state= S0.
- If
- If
current_state= S1:- If
d= 0,next_state= S2. - If
d= 1,next_state= S0.
- If
- If
current_state= S2:- If
d= 0,next_state= S3. - If
d= 1,next_state= S0.
- If
- If
current_state= S3:- If
d= 0,next_state= S3. - If
d= 1,next_state= S0.
- If
- If
Output Logic:
x= 1 ifcurrent_stateis S2 or S3. Otherwisex= 0.y= 1 ifcurrent_stateis S3. Otherwisey= 0.
(c) RTL Verilog/VHDL 程式碼
我們將使用 Mealy 型機器來實現輸出邏輯,因為輸出 x 和 y 不僅取決於狀態,也可能取決於輸入 d。然而,根據上面的狀態定義和輸出邏輯,輸出 x 和 y 只取決於當前狀態。因此,這是一個 Moore 型機器。
Verilog 程式碼:
第 Problem 4 題20 分
(a) Assume that the 4-bit binary adders are available. Please design a combinational circuit for the addition of two BCD digits using the 4-bit binary adder. Please draw the final logic circuit of the BCD adder with the 4-bit binary adder circuit block. Please note that you don't have to show the details of the 4-bit binary adder. (10%)
(b) Design a combinational circuit that generates the 9's complement of a BCD digit. Please note that you need to show the final Boolean function and how you derive the function. (10%)
登入後即可作答並保存紀錄。
核心觀念
-
BCD 加法器(BCD Adder)基本原理:
- BCD(Binary Coded Decimal,二進碼十進數)只使用 (即 ),非法碼為 (即 )。
- 兩個 BCD 數字相加加上前一級進位 ,其和的範圍為 ()。
- 第一個 4-bit 二進位加法器計算二進位和 (其中 為進位輸出, 為 4-bit 總和)。
- 當和數大於 9(即 )時,產生十進位進位輸出 ,且因二進位以 16 為底、十進位以 10 為底,二者差值為 6,故必須對第一級和數加上修正值 (即 )。
- 修正判斷條件:
- 使用第二個 4-bit 二進位加法器將第一級的和加上修正項 。
-
9 的補數(9's Complement)電路設計:
- 設輸入 BCD 碼為 (範圍 ),輸出 9 的補數為 。
- 運算定義:
- 輸入碼 為不可能出現的無效碼(Don't Care,),可利用卡諾圖(Karnaugh Map)簡化布林函數。
解題方法
(a) BCD 加法器設計
-
第一級二進位加法:
- 輸入兩個 4-bit BCD 碼 與 ,以及進位輸入 。
- 經由第一個 4-bit 二進位加法器(Adder 1)運算,輸出和數 與進位 。
-
進位偵測邏輯(Correction Detector):
- 當總和介於 時:,輸出合法,不需修正,。
- 當總和介於 時:,此時 且 ,即 。
- 當總和介於 時:Adder 1 產生進位,。
- 綜合以上,BCD 加法器的進位輸出方程式為:
-
第二級修正加法器:
- 使用第二個 4-bit 二進位加法器(Adder 2)。
- 加數一為 Adder 1 的輸出 。
- 加數二為修正碼 。
- 其進位輸入腳位接地(GND / 0)。
- Adder 2 的輸出即為最終 BCD 和 。
-
邏輯電路圖:
A[3:0] B[3:0] Cin
│ │ │
▼ ▼ ▼
┌───────────────────────────────┐
│ 4-bit Binary Adder 1 │
└───────────────────────────────┘
│ │ │ │ │
K Z8 Z4 Z2 Z1
│ │ │ │ │
│ ├──┬───┼──┬───┤ │
│ │ │ │ │ │ │
│ ▼ ▼ ▼ ▼ │ │
│ ┌────┐ ┌────┐ │ │
│ │AND1│ │AND2│ │ │
│ └─┬──┘ └─┬──┘ │ │
│ │(Z8Z4)│(Z8Z2│ │
│ ▼ ▼ │ │
└──►┌──────────┐ │ │
│ OR1 │ │ │
└────┬─────┘ │ │
│ │ │
├─────────┼────┼────────────► Cout
│ │ │
│ Cout │ │
▼ │ │
0 Cout Cout 0 │ │ 0 (GND)
│ │ │ │ │ │ │
▼ ▼ ▼ ▼ ▼ ▼ ▼
┌───────────────────────────────────┐
│ 4-bit Binary Adder 2 │
│ (Inputs: Z8..Z1 and 0,Cout,Cout,0)│
└───────────────────────────────────┘
│ │ │ │
▼ ▼ ▼ ▼
S3 S2 S1 S0
(b) 9 的補數產生電路推導
第 Problem 5 題15 分
(a) Design a counter with T flip-flops that goes through the following binary repeated sequence: 0, 1, 3, 7, 6, 4. Show that when binary states 010 and 101 are considered as don't care conditions, the counter may not operate properly.(10%)
(b) Find a way to correct the design. (5%) Please note that you need to show the final Boolean function, the state diagram and how you derive the function.
登入後即可作答並保存紀錄。
核心觀念
本題考查:
- T 型正反器的激勵方程式
- 同步循序電路的狀態轉移設計
- Karnaugh map 中 don't care 的使用
- 非法狀態的自我修復(self-correcting counter)
設三個 T 型正反器的現態為
其中 為最高位元, 為最低位元。
T 型正反器的特性方程式為
因此激勵值為
當 時,正反器保持原狀;當 時,正反器反相。
(a) 使用 don't care 的設計
題目要求的循環狀態為
狀態 與 未指定,因此在設計初期視為 don't care。
1. 狀態與 T 輸入表
由 計算各正反器的輸入:
| 現態 | 次態 | |||
|---|---|---|---|---|
| 000 | 001 | 0 | 0 | 1 |
| 001 | 011 | 0 | 1 | 0 |
| 010 | 未指定 | X | X | X |
| 011 | 111 | 1 | 0 | 0 |
| 100 | 000 | 1 | 0 | 0 |
| 101 | 未指定 | X | X | X |
| 110 | 100 | 0 | 1 | 0 |
| 111 | 110 | 0 | 0 | 1 |
其中 代表 don't care。
2. 化簡
的狀態為 與 ,don't care 為 與 。
利用 don't care 組合後:
- 組成
- 組成
因此
也就是
3. 化簡
的狀態為 與 ,並利用 don't care:
- 組成
- 組成
因此
也就是
4. 化簡
的狀態為 與 ,並利用 don't care:
- 組成
- 組成
因此
也就是
其中 表示 XNOR。
為何電路可能無法正常運作?
將非法狀態代入上述函數。
狀態
所以次態為
因此
狀態
所以次態為
因此
非法狀態形成另一個循環:
電路一旦因為啟動暫態、雜訊或正反器初始值進入 或 ,便會永遠在這兩個狀態間循環,無法進入題目要求的六狀態循環。因此,將未使用狀態視為 don't care,雖能使邏輯函數較簡單,卻不能保證電路具備自我修復能力。
(b) 修正設計
修正方法是指定非法狀態的恢復路徑。本題採用最直接的設計:
如此一來,任何非法狀態最多經過一個 clock 就回到合法循環。
1. 修正後狀態圖
合法循環為
第 Problem 6 題15 分
A circuit for a gated D-latch is shown in Fig. 1.
🖼️【此處有附圖,請對照原卷】
Assume that the propagation delay through a NAND gate or an inverter is 1 ns. Complete the timing diagram given in Fig. 2, which shows the signal values with 1 ns resolution. Please note that you need to redraw the timing diagram in your answer sheet.
🖼️【此處有附圖,請對照原卷】
登入後即可作答並保存紀錄。
核心觀念
本題的核心在於具傳遞延遲(Propagation Delay)之**閘控 D 型閂鎖器(Gated D-Latch)**的時序分析與波形繪製:
- 電路拓撲與元件延遲:
- 電路由 1 個反相器(Inverter)與 4 個雙輸入 NAND 閘組成。
- 題目指定反相器與 NAND 閘之傳遞延遲均為 ,分析時間解析度為 。
- 各節點布林邏輯關係(含延遲):
設時間 (單位:)以 為離散步階,前一奈秒區間 之各節點訊號決定當前區間 之閘極輸出:- 反相器輸出 :
- 左上 NAND 閘輸出(記為設定訊號 ):
- 左下 NAND 閘輸出(題目指定節點 ,即重置訊號):
- 右側由兩個交叉耦合(Cross-Coupled)NAND 閘組成的 閂鎖器核心:
- 反相器輸出 :
- NAND 型 閂鎖器的狀態轉換:
- 當 時:保持原態(Hold)。
- 當 時:置位(Set),。
- 當 時:重置(Reset),。
- 由於回授迴路的延遲,當輸入改變時,必定是先由接收到低電位(0)的該顆 NAND 閘輸出率先變為 1,再經由回授使另一顆 NAND 閘輸出變為 0。
解題方法
由原卷 Fig. 1 可辨識出電路由 1 個反相器與 4 個雙輸入 NAND 閘構成;由 Fig. 2 讀得時間軸範圍為 ,解析度為 。輸入訊號波形如下:
- :週期為 ( 低、 高),即在 為 0;在 為 1。
- :在 為 0; 為 1; 為 0; 為 1; 為 0; 為 1。
- 初始條件():(此時穩態下 )。
依時間推進逐步推導各時段訊號變化:
1. ( 保持區間)
- 由於 ,左上與左下 NAND 閘皆有至少一個輸入為 0,因此 與 之輸出恆為 1:
- 期間 雖在 有脈衝上升,但因鐘脈衝為 0,輸出級 SR 閂鎖器處於保持態:
2. ( 第一個致能區間)
- : 升為 1。此時 ,反相器輸出 。
- :
- 左下 NAND 閘因前一奈秒輸入為 ,經 延遲後,輸出 下降為 0:
- 同時輸入端 升為 1。
- 左下 NAND 閘因前一奈秒輸入為 ,經 延遲後,輸出 下降為 0:
- :
- 反相器反應 的上升,輸出 下降為 0。
- 左上 NAND 閘因前一奈秒輸入為 ,經 延遲後,輸出 下降為 0。
- 左下 NAND 閘前一奈秒輸入仍為 ,故輸出 仍為 0。
- :
- 左下 NAND 閘因前一奈秒輸入為 ,輸出 回升為 1:
故 在 區間為低電位 0。 - 右上 NAND 閘因前一奈秒輸入 ,輸出 上升為 1:
- 左下 NAND 閘因前一奈秒輸入為 ,輸出 回升為 1:
- :
- 右下 NAND 閘因前一奈秒輸入 ,輸出 下降為 0。
- 閂鎖器穩定鎖在 。
3. ( 保持區間)
- : 降為 0。
- :左上 NAND 閘輸出 回升為 1。此時 降為 0。
- 由於 ,左方閘門封鎖,,SR 閂鎖器保持前態:
4. ( 重置區間)
- : 升為 1。此時 ,反相器輸出 。
- :
- 左下 NAND 閘因輸入 ,輸出 下降為 0:
- 左上 NAND 閘因 ,輸出 維持為 1。
- 左下 NAND 閘因輸入 ,輸出 下降為 0:
- :
- 右下 NAND 閘的輸入之一 在前一奈秒變為 0,強制其輸出 上升為 1:
- 右下 NAND 閘的輸入之一 在前一奈秒變為 0,強制其輸出 上升為 1:
- :
- 右上 NAND 閘的兩個輸入皆為 1( 且前一奈秒 已回升至 1),因此輸出 下降為 0:
- 右上 NAND 閘的兩個輸入皆為 1( 且前一奈秒 已回升至 1),因此輸出 下降為 0:
- 此後 保持穩定,直至時鐘下降。
5. ( 保持區間)
- : 降為 0。
- :左下 NAND 閘因 變為 0,輸出 回升為 1:
故 在 區間為低電位 0。 - : 升為 1,反相器於 變為 0。但因 ,不影響輸出, 維持為 0。
6. ( 置位區間)
- : 升為 1。