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

2019-07-16 00:29发布

小弟刚学FPGA用的是EP4CE6  现在想写一个60进制的计数器 然后在数码管上显示出来   用verilog写   但想了好几天没想出来   去大侠指导下   或给个程序看看   小弟感激不尽。。。。。拜托了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
19条回答
Aiby
2019-07-17 14:50
module scan_led (sys_clk              ,
                                 sys_rstn                ,
                                 sm_seg                  ,
                                 sm_bit
                                );
input               sys_clk           ;
input               sys_rstn          ;
output     [7:0]    sm_seg            ;
output     [7:0]    sm_bit            ;                               
reg              [7:0]    sm_seg            ;
reg              [7:0]    sm_bit            ;
reg                  [4:0]    dataout_buf       ;
reg                  [3:0]    shi               ;
reg                  [3:0]    ge                ;
reg                  [5:0]    count             ;
reg        [1:0]    disp_dat          ;
reg        [15:0]   delay_cnt         ;
reg        [25:0]   delay_cnt_1hz      ;
always@(posedge sys_clk or negedge sys_rstn)
        begin
                if(!sys_rstn)
                        delay_cnt<=16'd0;
                else if(delay_cnt==16'd49999)
                        delay_cnt<=16'd0;
                else
                        delay_cnt<=delay_cnt+1'b1;       
        end


always@(posedge sys_clk or negedge sys_rstn)
        begin
                if(!sys_rstn)
                        delay_cnt_1hz<=26'd0;
                else if(delay_cnt_1hz==26'd49999999)
                        delay_cnt_1hz<=26'd0;
                else
                        delay_cnt_1hz<=delay_cnt_1hz+1'b1;       
        end       
       

       
always@(posedge sys_clk or negedge sys_rstn)
        begin
                if(!sys_rstn)
                        disp_dat<=4'd0;
                else if(delay_cnt==16'd49999)
                        disp_dat<=disp_dat+1'b1;
                else
                        disp_dat<=disp_dat;       
        end
always@(posedge sys_clk or negedge sys_rstn)
        begin
                if(!sys_rstn)
                        count<=6'd0;
                else if(delay_cnt_1hz==26'd49999999)
                        count<=count+1'b1;
                else if(count==60)
                   count<=6'd0;
                else       
                        count<=count;       
        end
always@(posedge sys_clk or negedge sys_rstn)       
  begin
                if(!sys_rstn)
                        shi<=4'd0;
                else
                   shi<=count/10;
        end
       
always@(posedge sys_clk or negedge sys_rstn)       
  begin
                if(!sys_rstn)
                        ge<=4'd0;
                else
                   ge<=count%10;
        end                     
       
always @(disp_dat)
begin
   case(disp_dat)
       2'b00 :
          sm_bit = 8'b1111_1110;
       2'b01 :
          sm_bit = 8'b1111_1101;
      /* 2'b10 :
          sm_bit = 8'b1111_1110;
       2'b11 :
          sm_bit = 8'b1111_1101;*/

       default :
          sm_bit = 8'b1111_1110;
    endcase
end
always@(sm_bit)
begin
        case(sm_bit)
                8'b1111_1110:
                        dataout_buf<=ge;
                8'b1111_1101:
                        dataout_buf<=shi;
                /*8'b1111_1011:
                        dataout_buf=2;
                8'b1111_0111:
                        dataout_buf=3;       
                8'b1110_1111:
                        dataout_buf=4;
                8'b1101_1111:
                        dataout_buf=5;
                8'b1011_1111:
                        dataout_buf=6;
                8'b0111_1111:
                        dataout_buf=7;*/
                default:
                        dataout_buf=0;
         endcase
end

always@(dataout_buf)
begin
        case(dataout_buf)
                    4'h0 : sm_seg = 8'hc0;   // "0"
                        4'h1 : sm_seg = 8'hf9;   // "1"
                        4'h2 : sm_seg = 8'ha4;   // "2"
                        4'h3 : sm_seg = 8'hb0;   // "3"
                        4'h4 : sm_seg = 8'h99;   // "4"
                        4'h5 : sm_seg = 8'h92;   // "5"
                        4'h6 : sm_seg = 8'h82;   // "6"
                        4'h7 : sm_seg = 8'hf8;   // "7"
                        4'h8 : sm_seg = 8'h80;   // "8"
                        4'h9 : sm_seg = 8'h90;   // "9"
                        4'ha : sm_seg = 8'h88;   // "a"
                        4'hb : sm_seg = 8'h83;   // "b"
                        4'hc : sm_seg = 8'hc6;   // "c"
                        4'hd : sm_seg = 8'ha1;   // "d"
                        4'he : sm_seg = 8'h86;   // "e"
                        4'hf : sm_seg = 8'h8e;   // "f"
                        default :
                                  sm_seg = 8'hc0;   // "0"
         endcase
end
endmodule


一周热门 更多>