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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM