純記錄

module Test(

                output [7:0] seg,

                output [3:0] dig,

                output reg led,

                input clock

        );   

        reg [14:0] number;  // number to display     

        reg [25:0] clock_divider;       

        wire [3:0] D3;

        wire [3:0] D2;

        wire [3:0] D1;

        wire [3:0] D0;

       

        assign seg7_clk = clock_divider[14];

       

        BIN2BCD bin2bcd(number, D3, D2, D1, D0);

        Seg7    seg7(seg, dig, seg7_clk, D3, D2, D1, D0);

       

        // initial

        initial

        begin

                clock_divider = 0;

                number = 0;

        end 

       

        // number counts

        always @ (posedge clock )

        begin

                clock_divider = clock_divider + 1'b1;

                if(clock_divider==25'd25000000)

                begin

                        clock_divider = 0;                   

                        number = number+ 1;

                        if (number==14'd10000)

                        begin

                                number = 0;

                        end

                end

        end

       

       

endmodule

 

 

/*

        Bin2BCD: Convert binary to 4 BCDs       

*/

 

module BIN2BCD(

        input [14:0] binary,

        output reg [3:0] BCD3,

        output reg [3:0] BCD2,

        output reg [3:0] BCD1,

        output reg [3:0] BCD0

        );

       

        integer i;

        always@(binary)

        begin

                BCD3 = 4'd0;

                BCD2 = 4'd0;

                BCD1 = 4'd0;

                BCD0 = 4'd0;

                for (i=14; i>=0; i=i-1)

                begin

                        if (BCD3>=5)

                                BCD3 = BCD3 + 3;

                        if (BCD2>=5)

                                BCD2 = BCD2 + 3;

                        if (BCD1>=5)

                                BCD1 = BCD1 + 3;

                        if (BCD0>=5)

                                BCD0 = BCD0 + 3;

                               

                        BCD3 = BCD3 << 1;

                        BCD3[0] = BCD2[3];

                        BCD2 = BCD2 << 1;

                        BCD2[0] = BCD1[3];

                        BCD1 = BCD1 << 1;

                        BCD1[0] = BCD0[3];

                        BCD0 = BCD0 << 1;

                        BCD0[0] = binary[i];

                end

        end

 

endmodule                     

 

 

/*

        4-digit 7-Segment LED display

*/

 

module Seg7(

        output reg      [7:0] seg,

        output reg      [3:0] dig,

        input                        clk,

        input [3:0] D3,

        input [3:0] D2,

        input [3:0] D1,

        input [3:0] D0

        );     

       

        reg [3:0] disp_dat;

       

        initial

        begin

                dig= 4'b1110;

        end 

       

        // scan digits

        always @ (posedge clk)

        begin

                dig = {dig[2:0],dig[3]};

                case (dig)

                        4'b1110 : disp_dat = D0;

                        4'b1101 : disp_dat = D1;

                        4'b1011 : disp_dat = D2;

                        4'b0111 : disp_dat = D3;

                        default : disp_dat = 4'hf;

                endcase

        end 

 

        // scan display

        always @ (disp_dat)

        begin

                case (disp_dat)

                        4'h0 : seg = 8'hc0; //"0"

                        4'h1 : seg = 8'hf9; //"1"

                        4'h2 : seg = 8'ha4; //"2"

                        4'h3 : seg = 8'hb0; //"3"

                        4'h4 : seg = 8'h99; //"4"

                        4'h5 : seg = 8'h92; //"5"

                        4'h6 : seg = 8'h82; //"6"

                        4'h7 : seg = 8'hf8; //"7"

                        4'h8 : seg = 8'h80; //"8"

                        4'h9 : seg = 8'h90; //"9"

                        4'ha : seg = 8'h88; //"a"

                        4'hb : seg = 8'h83; //"b"

                        4'hc : seg = 8'hc6; //"c"

                        4'hd : seg = 8'ha1; //"d"

                        4'he : seg = 8'h86; //"e"

                        4'hf : seg = 8'h8e; //"f"

                endcase

        end //always @ (disp_dat)     

       

endmodule

 

arrow
arrow
    全站熱搜

    ghostyguo 發表在 痞客邦 留言(0) 人氣()