用Verilog语言怎么写一个60进制的计数器然后显示在数码管上

2019-07-16 00:29发布

小弟刚学FPGA用的是EP4CE6  现在想写一个60进制的计数器 然后在数码管上显示出来   用verilog写   但想了好几天没想出来   去大侠指导下   或给个程序看看   小弟感激不尽。。。。。拜托了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
孟凡良
1楼-- · 2019-07-16 05:05
好吧   自己的事自己解决    我参照别人的程序已经弄好了   贴程序   附加一句   永远别指望别人  能靠的住的只有自己
孟凡良
2楼-- · 2019-07-16 10:56
 精彩回答 2  元偷偷看……
孟凡良
3楼-- · 2019-07-16 12:21
第二顶层模块   例化下面的模块
module exp07_top
(
    CLK, RSTn,
     Number_Data,
     Row_Scan_Sig, Column_Scan_Sig
);

    input CLK;
     input RSTn;
     input [7:0]Number_Data;
     output [7:0]Row_Scan_Sig;
     output [1:0]Column_Scan_Sig;

     /**************************************/

     wire [3:0]Ten_Data;
     wire [3:0]One_Data;

     number_mod_module U1
     (
         .CLK( CLK ),
          .RSTn( RSTn ),
          .Number_Data( Number_Data ), // input - form top
          .Ten_Data( Ten_Data ), // output - to U2
          .One_Data( One_Data )  // output - to u2\U2
     );
     
     /****************************************/

     wire [7:0]Ten_SMG_Data;
     wire [7:0]One_SMG_Data;

     smg_encoder_module U2
     (
         .CLK( CLK ),
          .RSTn( RSTn ),
          .Ten_Data( Ten_Data ), // input - from U1
          .One_Data( One_Data ), // input - from U1
          .Ten_SMG_Data( Ten_SMG_Data ), // output - to U3
          .One_SMG_Data( One_SMG_Data )  // output - to U3
     );

     /*****************************************/
     
     smg_scan_module U3
     (
         .CLK( CLK ),
          .RSTn( RSTn ),
          .Ten_SMG_Data( Ten_SMG_Data ), // input - from U2
          .One_SMG_Data( One_SMG_Data ), // input - from U2
          .Row_Scan_Sig( Row_Scan_Sig ), // output - to top
          .Column_Scan_Sig( Column_Scan_Sig ) // output - to top
     );

     /******************************************/
     
endmodule


孟凡良
4楼-- · 2019-07-16 14:07
十位取位模块   
module exp07_top
(
    CLK, RSTn,
     Number_Data,
     Row_Scan_Sig, Column_Scan_Sig
);

    input CLK;
     input RSTn;
     input [7:0]Number_Data;
     output [7:0]Row_Scan_Sig;
     output [1:0]Column_Scan_Sig;

     /**************************************/

     wire [3:0]Ten_Data;
     wire [3:0]One_Data;

     number_mod_module U1
     (
         .CLK( CLK ),
          .RSTn( RSTn ),
          .Number_Data( Number_Data ), // input - form top
          .Ten_Data( Ten_Data ), // output - to U2
          .One_Data( One_Data )  // output - to u2\U2
     );
     
     /****************************************/

     wire [7:0]Ten_SMG_Data;
     wire [7:0]One_SMG_Data;

     smg_encoder_module U2
     (
         .CLK( CLK ),
          .RSTn( RSTn ),
          .Ten_Data( Ten_Data ), // input - from U1
          .One_Data( One_Data ), // input - from U1
          .Ten_SMG_Data( Ten_SMG_Data ), // output - to U3
          .One_SMG_Data( One_SMG_Data )  // output - to U3
     );

     /*****************************************/
     
     smg_scan_module U3
     (
         .CLK( CLK ),
          .RSTn( RSTn ),
          .Ten_SMG_Data( Ten_SMG_Data ), // input - from U2
          .One_SMG_Data( One_SMG_Data ), // input - from U2
          .Row_Scan_Sig( Row_Scan_Sig ), // output - to top
          .Column_Scan_Sig( Column_Scan_Sig ) // output - to top
     );

     /******************************************/
     
endmodule


孟凡良
5楼-- · 2019-07-16 14:53
上面的错了   这个是十位取位模块
module number_mod_module
(
    CLK, RSTn,
     Number_Data,
     Ten_Data, One_Data
);

    input CLK;
     input RSTn;
     input [7:0]Number_Data;
     output [3:0]Ten_Data;
     output [3:0]One_Data;
     
     /*********************************/

     reg [31:0]rTen;
     reg [31:0]rOne;

     always @ ( posedge CLK or negedge RSTn )
         if( !RSTn )
              begin
                    rTen <= 32'd0;
                     rOne <= 32'd0;
                end
            else
                begin
                     rTen <= Number_Data / 10;
                      rOne <= Number_Data % 10;
                 end

     /***********************************/
     
     assign Ten_Data = rTen[3:0];
     assign One_Data = rOne[3:0];

     /***********************************/

endmodule
孟凡良
6楼-- · 2019-07-16 15:15
数码管加码模块
module smg_encoder_module
(
    CLK, RSTn,
     Ten_Data, One_Data,
     Ten_SMG_Data, One_SMG_Data
);

    input CLK;
     input RSTn;
     input [3:0]Ten_Data;
     input [3:0]One_Data;
     output [7:0]Ten_SMG_Data;
     output [7:0]One_SMG_Data;
     
     /***************************************/
     
     parameter _0 = 8'b1100_0000, _1 = 8'b1111_1001, _2 = 8'b1010_0100,
               _3 = 8'b1011_0000, _4 = 8'b1001_1001, _5 = 8'b1001_0010,
                  _6 = 8'b1000_0010, _7 = 8'b1111_1000, _8 = 8'b1000_0000,
                  _9 = 8'b1001_0000;

     /***************************************/

     reg [7:0]rTen_SMG_Data;

     always @ ( posedge CLK or negedge RSTn )
         if( !RSTn )
              begin
                    rTen_SMG_Data <= 8'b1111_1111;
                end
        else
               case( Ten_Data )

                      4'd0 : rTen_SMG_Data <= _0;
                      4'd1 : rTen_SMG_Data <= _1;
                      4'd2 : rTen_SMG_Data <= _2;
                      4'd3 : rTen_SMG_Data <= _3;
                      4'd4 : rTen_SMG_Data <= _4;
                      4'd5 : rTen_SMG_Data <= _5;
                      4'd6 : rTen_SMG_Data <= _6;
                      4'd7 : rTen_SMG_Data <= _7;
                      4'd8 : rTen_SMG_Data <= _8;
                      4'd9 : rTen_SMG_Data <= _9;
                     
                 endcase
              
     
     /***************************************/
     
     reg [7:0]rOne_SMG_Data;

     always @ ( posedge CLK or negedge RSTn )
        if( !RSTn )
             begin
                    rOne_SMG_Data <= 8'b1111_1111;
              end
       else
             case( One_Data )

                    4'd0 : rOne_SMG_Data <= _0;
                    4'd1 : rOne_SMG_Data <= _1;
                    4'd2 : rOne_SMG_Data <= _2;
                    4'd3 : rOne_SMG_Data <= _3;
                    4'd4 : rOne_SMG_Data <= _4;
                    4'd5 : rOne_SMG_Data <= _5;
                    4'd6 : rOne_SMG_Data <= _6;
                    4'd7 : rOne_SMG_Data <= _7;
                    4'd8 : rOne_SMG_Data <= _8;
                    4'd9 : rOne_SMG_Data <= _9;
                     
              endcase
              
    /***************************************/

     assign Ten_SMG_Data = rTen_SMG_Data;
     assign One_SMG_Data = rOne_SMG_Data;
     
     /***************************************/
              
endmodule

一周热门 更多>