FPGA学习日记(18)--数码管动态显示

 

数据生成模块

 

module data_gen
#(
   parameter CNT_MAX = 23'd4999_999 ,
   parameter DATA_MAX = 20'd999_999 
)
(   
    input    wire         sys_clk     ,
    input    wire         sys_rst_n   ,
           
    output   reg   [19:0] data        ,
    output   wire  [5:0]  point       ,
    output   wire         sign        ,
    output   reg          seg_en      
    
);

reg [22:0] cnt_100ms;
reg cnt_flag ;

always@(posedge sys_clk or negedge sys_rst_n)
    if(sys_rst_n == 1'b0)
        cnt_100ms <= 23'd0;
    else if(cnt_100ms == CNT_MAX)
        cnt_100ms <= 23'd0;
    else
        cnt_100ms <= 1'b1 + cnt_100ms;

always@(posedge sys_clk or negedge sys_rst_n)
    if(sys_rst_n == 1'b0)
        cnt_flag <= 1'b0;
    else if (cnt_100ms == CNT_MAX - 1)
        cnt_flag <= 1'b1;
    else 
        cnt_flag <= 1'b0;    
        
always@(posedge sys_clk or negedge sys_rst_n)
    if(sys_rst_n == 1'b0)
        data <= 20'd0;
    else if((data == DATA_MAX)&&(cnt_flag == 1'b1))
        data <= 20'd0;
    else if(cnt_flag == 1'b1)
        data <= data + 1'b1;
    else 
        data <= data;

assign point = 6'b000_000;
assign sign  = 1'b0;

always@(posedge sys_clk or negedge sys_rst_n)
    if(sys_rst_n == 1'b0)
        seg_en <= 1'b0;
    else 
        seg_en <= 1'b1;

endmodule         
`timescale 1ns/1ns
module tb_data_gen();

reg   sys_clk     ;
reg   sys_rst_n   ;
                    
wire [19:0] data   ;
wire [5:0]  point  ;
wire        sign   ; 
wire        seg_en ;


initial 
    begin 
        sys_clk =1'b1;
        sys_rst_n <= 1'b0;
        #20 
        sys_rst_n <= 1'b1;
    end
 
always #10 sys_clk = ~sys_clk;

data_gen
#(
  .CNT_MAX (9)   ,
  .DATA_MAX(9)   
)
data_gen_inst
(
   .sys_clk   (sys_clk  ) , 
   .sys_rst_n (sys_rst_n) ,
   .data  (data  ),
   .point (point ),
   .sign  (sign  ),
   .seg_en(seg_en)

);
endmodule

计数器 cnt_flag

data

加入BCD码模块

  

 

module bcd_8421
(
    input       sys_clk     ,
    input       sys_rst_n   ,
    input wire [19:0] data  ,
                        
    output reg [3:0] unit  ,
    output reg [3:0] ten   ,
    output reg [3:0] hun   , 
    output reg [3:0] tho   ,
    output re
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值