Verilog跑马灯实战:从代码到调试的完整避坑指南
刚接触FPGA开发时,实现一个简单的跑马灯效果往往成为许多人的第一个实战项目。看似简单的LED循环闪烁,却隐藏着不少新手容易踩中的陷阱。本文将带你从零开始,在Vivado中实现一个稳定的跑马灯效果,并重点解析那些"代码看起来对,但结果不对"的典型问题。
1. 工程搭建前的关键准备
在开始编写代码前,有几个关键因素直接影响最终效果。首先是时钟频率的确认,不同开发板的晶振频率可能不同,常见的包括50MHz、100MHz等。假设我们使用的是常见的50MHz时钟,那么每个时钟周期就是20纳秒。
计数器位宽的选择 直接影响最大计数值。例如,要实现0.5秒的LED切换间隔:
时钟频率 = 50,000,000 Hz
周期数 = 0.5s × 50,000,000 = 25,000,000
因此需要一个至少25位的计数器(2^25=33,554,432)。新手常犯的错误是位宽不足或计算错误。
提示:在Verilog中,reg [24:0] counter可以表示0到33,554,431的计数值,完全满足需求。
2. 核心代码实现与常见误区
下面是一个完整的跑马灯模块代码,我们逐段分析关键点:
module Led_run(
input Clk,
input Reset_n,
output reg [7:0] Led
);
reg [24:0] counter;
// 计数器逻辑
always@(posedge Clk or negedge Reset_n)
if(!Reset_n)
counter <= 0;
else if(counter == 25_000_000 - 1) // 注意使用下划线提高可读性


1715

被折叠的 条评论
为什么被折叠?



