verilog验证三八译码器
三八译码器:
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