11 / 63 · 概念
解碼器、獨熱選擇與有效輸入
將二進位位址轉成個別選擇線,設計 enable、範圍與選擇不變量。
單元可免費閱讀,註冊課程即可儲存學習進度。
將位址轉成選擇線
位元解碼器解碼器啟用與二進位碼對應的輸出線。若有 enable,可在未啟用時將所有輸出設為 0。根據輸入位址,從最多 個輸出中選出一個。具有 enable 的輸出 可定義如下。
2-to-4 解碼器中,、、、。enable=0 時所有輸出為 0;enable=1 時恰有一個為 1。
enable=1 時改變位址 a1a0,d0~d3 中只會亮起一個。再將 enable 改成 0,確認所有選擇線都關閉。
d[i] = enable AND (2 × a1 + a0 = i)
預設值讓功能定義完整
module decoder2 (
input logic en,
input logic [1:0] addr,
output logic [3:0] select
);
always_comb begin
select = 4'b0000;
if (en) begin
case (addr)
2'd0: select = 4'b0001;
2'd1: select = 4'b0010;
2'd2: select = 4'b0100;
2'd3: select = 4'b1000;
default: select = 4'b0000;
endcase
end
end
endmodule開頭的預設指定涵蓋所有執行路徑,避免記住前次輸出。光是加上 always_comb 名稱,不會自動把未定義分支變成正確電路。
輸出數量不是 2 的次方時
選擇 10 個裝置需要 4 位元位址,但 10~15 是無效代碼。此時必須指定策略,例如所有輸出為 0、錯誤旗標為 1。不能只因代碼未使用,就允許任意輸出。
驗證除了輸入與輸出的對應,也要檢查是否有多條選擇線同時開啟、disable 時是否全關閉。這些不變量不變量是在所有允許的執行過程中都必須成立的條件。例如,深度為 4 的 FIFO,其儲存數量必須一直介於 0 至 4。 詳細內容在記憶體 write enable 或匯流排選擇電路中特別重要。解碼器越大,位址訊號扇出與配線負載也越大,因此會考慮階層式解碼。
自己試試看
設計具有 10 個輸出的位址解碼器。請決定位址寬度、無效輸入數量,以及 en=0 時必須滿足的條件。
查看解說
位址需要 位元,無效代碼有 6 個。en=0 時,不論位址為何,所有選擇線都必須為 0。對無效位址也可指定全部為 0,另外顯示錯誤。