流水灯
流水灯笔记
亮灯
点亮一个led灯
设计流程
设计规划—波形绘制—代码编写—代码编译—逻辑仿真—波形对比—绑定管脚—分析综合,布局布线—上板验证
代码实现
1 | module led( |
- 仿真文件
1 | module tb_led(); |
基础流水灯
单模块直接计数,采用单一verilog模块,通过直接计数 50MHz 时钟周期的方式实现每秒一次的流水灯效果,核心思想是:
每当计数器累积到50,000,000(即1s)时,立即对led寄存器执行一次循环左移,并将计数器清零
关键机制
- 计数范围:0 - 49,999,999
- 移位时机
各模块作用
顶层模块
1 |
|
时钟分频模块 counter
clk_bps:仅当两级计数器都计满时输出 1 个时钟周期的高电平,其余时间为低电平。
该模块接收两个输入:时钟信号clk与复位信号(reset,简写为rst)rst
并且输出一个脉冲时 钟信号clk_bps。该模块定义了两个计数器,cnt_first与cnt_second,负责计数工作。
每过一个时 钟周期都会使某一个或两个计数器自增,直到达到特定条件两个计数器均会清零。此时将会拉高脉 冲时钟信号clk_bps一个周期。
我们可以认为,clk_bps的频率是计数器两次达到特定条件的时间间隔之倒数,其占空比将随频率变化,但高电平的持续时间永远为一个时钟周期的长度。
1 |
|
控制模块
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 秃头的君寻酱!







