13.计数器设计、标志脉冲信号的使用

(1)设计定义:设计一个计数器模块,实现每0.5秒跳转一次的功能,可以用LED灯的翻转来体现,要求初始状态为LED熄灭。

(2)visio视图:

(3)Verilog代码:

module counter(clk,reset_n,led_out);

    input clk;
    input reset_n;
    
    output reg led_out;
    
// 0.5s = 500_000_000ns = 20ns * 25_000_000;    需要25位的寄存器去储存。
    reg [24:0] cnt;
    reg cnt_flag;
    
//参数设计   
    parameter MCNT = 25'd24_999_999;
    
//计数器模块设计   
    always@(posedge clk or negedge reset_n)
        if(!reset_n)
            cnt <= 25'd0;
        else if(cnt == MCNT)
            cnt <= 25'd0;
        else 
            cnt <= cnt + 25'd1;

//标志信号设计
    always@(posedge clk or negedge reset_n)
        if(!reset_n)
            cnt_flag <= 1'd0;
        else if(cnt == MCNT - 25'd1)
            cnt_flag <= 1'd1;
        else 
            cnt_flag <= 1'd0;

//led_out灯翻转设计
    always@(posedge clk or negedge reset_n)
        if(!reset_n)
            led_out <= 1'd0;
        else if(cnt_flag)
            led_out <= ~led_out;
        else 
            led_out <= led_out;        
     
endmodule    

(4)RTL视图:(CE为使能端口)

Go to Source 可以直接定位到生成该器件的语句。

(5)仿真文件代码:

`timescale 1ns/1ns

module counter_tb;

    reg clk;
    reg reset_n;
    
    wire led_out;
    
    counter counter_inst(
        .clk(clk),
        .reset_n(reset_n),
        .led_out(led_out)
    );
    
    defparam counter_inst.MCNT = 25'd24_999;
    
    initial clk = 1'd1;
    always #10 clk = ~clk;
    
    initial begin
        reset_n <= 1'd0;
        #200;
        reset_n <= 1'd1;
        #1800_000;
        $stop;
    end

endmodule

(6)仿真波形:

(7)引脚绑定:

set_property IOSTANDARD LVCMOS33 [get_ports led_out]
set_property IOSTANDARD LVCMOS33 [get_ports reset_n]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
set_property PACKAGE_PIN N15 [get_ports reset_n]
set_property PACKAGE_PIN W19 [get_ports clk]
set_property PACKAGE_PIN M21 [get_ports led_out]

  • 12
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值