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

 

posted on 2017-04-05 21:21  飞翔的梦的窝  阅读(6065)  评论(0编辑  收藏  举报

导航