標(biāo)題: FPGA 400進(jìn)制 8倍計(jì)數(shù)器代碼 [打印本頁]

作者: zhangboliangq    時(shí)間: 2019-5-13 20:35
標(biāo)題: FPGA 400進(jìn)制 8倍計(jì)數(shù)器代碼
module QQ(clk,clk_out);
input clk;
output reg clk_out;
reg [31:0] cnt;
always@(posedge clk)
  begin
          if(cnt<=5000000)
                begin
                   clk_out<=0;
                       cnt<=cnt+1;
                end
              elseif((cnt>2500000)&&(cnt<5000000))
                begin
                  clk_out<=1;
                      cnt<=cnt+1;
                end
              else
       begin
                   clk_out<=1;
                       cnt<=0;
                end
       end  
endmodule
module QQQ(clk,count_c,counter_out);
input clk;
output reg count_c;
output reg [7:0] counter_out;
reg current_state;
reg next_state;
always@( current_state)
begin
    case(current_state)
            1'b0:
                  begin
                         count_c=0;                         if(counter_out<58)
                               next_state=0;
                             else
                               next_state=1;
                      end
                1'b1:
                  begin
                         next_state=0;
                             count_c=1;
                      end
                default:
                  begin
                      end
         endcase
  end
always@(posedge clk)
  begin
          current_state<=next_state;
               if(counter_out<58)
               counter_out<=counter_out+1;
              else
               counter_out<=0;
       end
endmodule
module smg(
input clk,
input count_c,
input [7:0]counter_out,
output [7:0]duan,//數(shù)碼管段選
output [2:0]wei//數(shù)碼管位選  
        );
reg [32:0] cnt;// 時(shí)鐘分頻計(jì)數(shù)器
parameter system_clk = 50_000_000;
localparam cnt1_MAX = system_clk/1000/2-1;
reg [14:0] cnt1;   //分頻計(jì)數(shù)器
reg clk_1k;         //掃描時(shí)鐘,1KHz
reg [2:0]flag_wei;     //數(shù)碼管位選
reg [7:0]flag_duan;     //數(shù)碼管段選
reg [3:0]disp_data; //單位顯示數(shù)據(jù)緩存
reg [32:0]flagf1;
reg [32:0]flagm1;
reg [32:0]flagm2;
//1KHz時(shí)鐘分頻計(jì)數(shù)器
always@(posedge clk)
begin
  if(cnt1==cnt1_MAX)cnt1<=0;
  else cnt1<=cnt1+1'b1;
end
//得到1KHz時(shí)鐘
always@(posedge clk)
if(cnt1==cnt1_MAX)
  clk_1k<=~clk_1k;
always@(posedge clk)
begin
  if(clk)
     begin
        flagm2<=counter_out/10;//個(gè)位
        flagm1<=counter_out%10;//十位
        flagf1<=count_c;
     end
end  
   
//位選信號(hào)控制
always@(posedge clk_1k)
  if(flag_wei == 3'd5)
     flag_wei<=3'd0;
  else
     flag_wei<=flag_wei+1'b1;
//根據(jù)不同的數(shù)碼管位選擇不同的待顯示數(shù)據(jù)
always@(*)
begin
  case(flag_wei)
     3'd0:disp_data<=0;
     3'd1:disp_data<=0;
     3'd2:disp_data<=0;
     3'd3:disp_data<=flagf1;
     3'd4:disp_data<=flagm2;
     3'd5:disp_data<=flagm1;
     default :disp_data<=4'd0;
  endcase
end
//顯示小數(shù)點(diǎn),分割時(shí)分秒
always @ (*)
begin
       case(flag_wei)  
              0: flag_duan[7] = 1'b1;                                 
              1: flag_duan[7] = 1'b1;                                 
              2: flag_duan[7] = 1'b1;                                   
              3: flag_duan[7] = 1'b1;                                 
              4: flag_duan[7] = 1'b1;                                   
              5: flag_duan[7] = 1'b1;                                   
              default: flag_duan[7] = 1'b1;                          
              
       endcase      
end
//數(shù)據(jù)譯碼,將待顯示數(shù)據(jù)翻譯為符合數(shù)碼管顯示的編碼
always@(*)
begin
  case(disp_data)
     4'd0:       flag_duan[6:0]=7'b1000000;
     4'd1:      flag_duan[6:0]=7'b1111001;
     4'd2:      flag_duan[6:0]=7'b0100100;
     4'd3:      flag_duan[6:0]=7'b0110000;
     4'd4:      flag_duan[6:0]=7'b0011001;
     4'd5:      flag_duan[6:0]=7'b0010010;
      4'd6:      flag_duan[6:0]=7'b0000010;
     4'd7:      flag_duan[6:0]=7'b1111000;
     4'd8:      flag_duan[6:0]=7'b0000000;
     4'd9:      flag_duan[6:0]=7'b0010000;
     default :  flag_duan[6:0]=7'b1111111;
  endcase
end
assign wei = flag_wei;
assign duan = flag_duan;
endmodule






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1