BCD譯碼器


Binary-Coded Decimal,用四位二進制數來表示一位十進制(0-9)的編碼形式。

需要注意的是,在使用Verilog語句設計組合邏輯電路時(coding style的問題),盡量選擇使用assign語句來代替always語句塊。尤其是對於if-else語句來說使用 assign = ? : 條件選擇語句設計出來的電路會更優,因為if-else語句可能會向下一級傳播不定態。 造成邏輯電路錯誤。
————————————————

module Decode_4_10(
                    data_in,
                    data_out
                    );
    input [3:0]data_in;
    output  [9:0]data_out;
    //output reg [9:0]data_out;
/*    
    always@(*)
        case(data_in)
            4'b0000:data_out=10'b1111_1111_10;
            4'b0001:data_out=10'b1111_1111_01;
            4'b0010:data_out=10'b1111_1110_11;
            4'b0011:data_out=10'b1111_1101_11;
            4'b0100:data_out=10'b1111_1011_11;
            4'b0101:data_out=10'b1111_0111_11;
            4'b0110:data_out=10'b1110_1111_11;
            4'b0111:data_out=10'b1101_1111_11;
            4'b1000:data_out=10'b1011_1111_11;
            4'b1001:data_out=10'b0111_1111_11;
            default:data_out=10'b1111_1111_11;
        endcase
*/
//assign description
    assign data_out[0]=~(~data_in[3]& ~data_in[2]& ~data_in[1]& ~data_in[0]);
    assign data_out[1]=~(~data_in[3]& ~data_in[2]& ~data_in[1]&  data_in[0]);
    assign data_out[2]=~(~data_in[3]& ~data_in[2]&  data_in[1]& ~data_in[0]);
    assign data_out[3]=~(~data_in[3]& ~data_in[2]&  data_in[1]&  data_in[0]);
    assign data_out[4]=~(~data_in[3]&  data_in[2]& ~data_in[1]& ~data_in[0]);
    assign data_out[5]=~(~data_in[3]&  data_in[2]& ~data_in[1]&  data_in[0]);
    assign data_out[6]=~(~data_in[3]&  data_in[2]&  data_in[1]& ~data_in[0]);
    assign data_out[7]=~(~data_in[3]&  data_in[2]&  data_in[1]&  data_in[0]);
    assign data_out[8]=~( data_in[3]& ~data_in[2]& ~data_in[1]& ~data_in[0]);
    assign data_out[9]=~( data_in[3]& ~data_in[2]& ~data_in[1]&  data_in[0]);
endmodule 
`timescale 1ns/1ns
module tb;
    reg [3:0]data_in;
    wire [9:0]data_out;
    Decode_4_10 Decode_4_10(
                    .data_in(data_in),
                    .data_out(data_out)
                    );
    initial begin
        data_in=0;
        #100;
        data_in=1;
        #100;
        data_in=2;
        #100;
        data_in=3;
        #100;
        data_in=4;
        #100;
        data_in=5;
        #100;
        data_in=6;
        #100;
        data_in=7;
        #100;
        data_in=8;
        #100;
        data_in=9;
        #100;
    end
    
endmodule

 


免責聲明!

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



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