FPGA学习笔记(一):闪烁灯的仿真

笔记一是设计一个周期为10ms的闪烁灯,并且通过仿真测试。

1. 打开VIVADO

 2.设计原理

(1) 首先定义一个计数值变量,当它自加到249999时置零。因为主频为50MHz,每个周期为20ns,当主频经过250000个周期后,时长为250000*20ns=5ms,即计数值的周期为5ms。

(2) 然后,当计数器加到249999时,led值就取反一次,即led周期为10ms,频率为10Hz。

 3.顶层文件

module counter(
    input clk,				// 输入时钟
    input rst_n,			// 输入复位
    output led				// 输出led
    );
    reg [24:0]  counter;	// 定义25位的计数变量
    reg led;

    
    always@(posedge clk or negedge rst_n)// 敏感条件为时钟上升沿和复位下降沿
        begin
            if(!rst_n)					
                counter <= 1'b0;// 复位值为0时,计数值置零
            else if (counter == 249999)
                counter <= 1'b0;// 计数值计算到249999时,计数值置零
            else
                counter <= counter + 1'b1;// 其余情况加1
        end
    // 主频为50MHz,每个周期为20ns,计数值周期20*250000=5ms,
    always@(posedge clk or negedge rst_n)
        begin
            if(!rst_n)
                led <= 1'b0;// 复位值为0时,led值置零
            else if(counter == 249999)
                led <= !led;// 计数值计算到249999时,led值取反
        end
		// led值每次过了5ms翻转一次,周期为10ms,频率10Hz
endmodule

4.仿真文件

module counter_tb;
    reg clk;		// 输入时钟
    reg rst_n;		// 输入复位
    wire led;		// 输出led
    // counter文件例化
    counter U1(
        .clk(clk),
        .rst_n(rst_n),
        .led(led)
    );
    
    initial clk = 1; 		// 初始化时钟为高电平
    always #10 clk = !clk;	// 时钟每隔10ns翻转一次,时钟频率为50MHz
    
    initial begin
        rst_n = 0;			// 初始化复位为低电平
        #201;				// 延时201ns
        rst_n = 1;			// 复位电平为高电平
    end
endmodule

5.结果展示 

 由结果图可以验证复位res_n在201ns后变为高电平,clk周期为20ns。

由结果图可以验证Led周期为10ms。​

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜yuan~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值