找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2051|回复: 0
收起左侧

FPGA 400进制 8倍计数器代码

[复制链接]
ID:537367 发表于 2019-5-13 20:35 | 显示全部楼层 |阅读模式
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,//数码管段选
output [2:0]wei//数码管位选  
        );
reg [32:0] cnt;// 时钟分频计数器
parameter system_clk = 50_000_000;
localparam cnt1_MAX = system_clk/1000/2-1;
reg [14:0] cnt1;   //分频计数器
reg clk_1k;         //扫描时钟,1KHz
reg [2:0]flag_wei;     //数码管位选
reg [7:0]flag_duan;     //数码管段选
reg [3:0]disp_data; //单位显示数据缓存
reg [32:0]flagf1;
reg [32:0]flagm1;
reg [32:0]flagm2;
//1KHz时钟分频计数器
always@(posedge clk)
begin
  if(cnt1==cnt1_MAX)cnt1<=0;
  else cnt1<=cnt1+1'b1;
end
//得到1KHz时钟
always@(posedge clk)
if(cnt1==cnt1_MAX)
  clk_1k<=~clk_1k;
always@(posedge clk)
begin
  if(clk)
     begin
        flagm2<=counter_out/10;//个位
        flagm1<=counter_out%10;//十位
        flagf1<=count_c;
     end
end  
   
//位选信号控制
always@(posedge clk_1k)
  if(flag_wei == 3'd5)
     flag_wei<=3'd0;
  else
     flag_wei<=flag_wei+1'b1;
//根据不同的数码管位选择不同的待显示数据
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
//显示小数点,分割时分秒
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
//数据译码,将待显示数据翻译为符合数码管显示的编码
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

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表