三八譯碼器:
138 為3 線-8 線譯碼器,共有 54/74S138和 54/74LS138 兩種線路結構型式,其主 要電特性的典型值如下: 當一個選通端(G1)為高電平,另兩個選通端(/(G2A)和/(G2B))為 低電平時,可將地址端(A、B、C)的二進制編碼在一個對應的輸出端以低 電平譯出。 利用 G1、/(G2A)和/(G2B)可級聯擴展成 24 線譯碼器;若外接一個反 相器還可級聯擴展成 32 線譯碼器。 若將選通端中的一個作為數據輸入端時,138 還可作數據分配器。
module decoder_38(E,A_in,Y_out); input [2:0] A_in; input [2:0] E; output [7:0] Y_out; reg [7:0] Y_out; always @(A_in or E ) begin if(E == 3'b100) begin case(A_in) 3'b000: Y_out = 8'b1111_1110; 3'b001: Y_out = 8'b1111_1101; 3'b010: Y_out = 8'b1111_1011; 3'b011: Y_out = 8'b1111_0111; 3'b100: Y_out = 8'b1110_1111; 3'b101: Y_out = 8'b1101_1111; 3'b110: Y_out = 8'b1011_1111; 3'b111: Y_out = 8'b0111_1111; endcase end else begin Y_out = 8'b1111_1111; end end endmodule
測試程序:
`timescale 1ns/1ps module decoder_38_tb(); reg [2:0] A_in; reg [2:0] E; wire [7:0] Y_out; decoder_38 D_38( .E(E), .A_in(A_in), .Y_out(Y_out) ); initial begin #5 E = 3'b100; A_in = 3'b000; #5 E = 3'b100; A_in = 3'b001; #5 E = 3'b100; A_in = 3'b010; #5 E = 3'b100; A_in = 3'b011; #5 E = 3'b100; A_in = 3'b100; #5 E = 3'b100; A_in = 3'b101; #5 E = 3'b100; A_in = 3'b110; #5 E = 3'b100; A_in = 3'b111; #5 E = 3'b101; //使能端無效 A_in = 3'b111; #5 $stop ; end endmodule