【黑金云课堂】FPGA技术教程FPGA基础:流水灯实验

本篇流水灯实验 ,选自 ALINX 黑金云课堂 FPGA 免费直播课 。该课程由 ALINX 资深工程师团队倾力打造,从 0 到 1 系统化教学,帮助每位工程师跨过 FPGA 开发门槛。


流水灯实验

实验目的

  • 熟悉FPGA完整开发流程

  • 理解时序逻辑工作方式

  • 掌握寄存器、时钟、复位作用

  • 为后续实验(按键消抖、PWM、PLL、串口、VGA等)打基础

  • 培养工程习惯:先仿真、后上板、再在线调试

实验原理

  • 本质:循环移位寄存器

  • 工作机制:

    1. 状态保存:LED状态由寄存器保存(每bit对应一个LED)

    2. 时钟驱动:时钟信号驱动寄存器内容变化

    3. 状态转移:按照代码逻辑进行按位赋值

    4. 循环移位示例:0001 → 0010 → 0100 → 1000 → 0001

时钟与分频原理

  • 系统时钟典型频率:50MHz 或 100MHz

  • 人眼可识别频率:约 1~5Hz

  • 问题:直接用系统时钟驱动LED,变化太快,人眼看到"常亮"

  • 解决方案:使用计数器对时钟分频,得到低频节拍信号

  • 分频计算示例:200MHz 系统时钟 → 目标 4Hz → 分频系数 = 200M / 4 = 25,000,000

程序设计思路

  • 模块化设计:封装独立Verilog模块,清晰接口

  • 内部结构:

  1. 分频计数器(如24位计数器)

  2. LED状态寄存器(4位)

  3. 同步时序逻辑:所有状态变化在时钟上升沿触发,避免异步问题

Verilog核心代码(要点)

  • 计数器逻辑:计数到预设值(如10M)产生节拍脉冲

  • 状态更新:按照代码逻辑进行按位赋值

  • 复位逻辑:异步或同步复位,初始化计数器与LED状态

仿真验证

  • 目的:提前发现逻辑错误、时序问题,降低调试成本

  • Testbench设计要点:

  1. 生成周期性时钟(如20ns周期 = 50MHz)

  2. 施加复位信号(如100ns)

  3. 观察LED输出变化

  • 验证要点:

    1. 复位时LED初始化为 0001(或 0000,视设计)

    2. LED按固定周期依次变化

    3. 状态变化发生在时钟上升沿

    4. 计数器达到阈值时更新LED

ILA在线调试

  • **为什么需要:**仿真环境理想,硬件存在时序延迟、噪声等;FPGA内部信号无法直接测量

  • ILA(Integrated Logic Analyzer):

    嵌入FPGA内部的逻辑分析仪,通过JTAG采集信号

  • 调试步骤:

    1. 在Vivado/Quartus中添加ILA核,选择待观察信号(led_regcnt等)

    2. 生成包含ILA的bit文件,下载到FPGA

    3. 连接Hardware Manager,设置触发条件,抓取波形

    4. 验证硬件行为

    5. 固化到Flash(生成mcs/bin文件)

相关推荐
仲南音13 小时前
Xilinx FPGA——时钟IP核MMCM、PLL
fpga开发
I'm a winner1 天前
基于Xilinx FPGA的LVDS高速串行通信系统(三)--数据训练及握手机制【文末源码】
fpga开发
upper20201 天前
coremark移植坑之-nostartfiles -nostdlib参数
学习·fpga开发·coremark移植·riscv设计
Eloudy1 天前
Vivado 纯命令行构建 FPGA 项目教程
fpga开发
Rambo.xia2 天前
AXI跨时钟域与数据一致性——CDC FIFO深度不够、写后读冒险、多Master仲裁、乱序返回,出了Bug根本查不出来
fpga开发·bug
upper20202 天前
FPGA部署卷积神经网络识别MINST图片
fpga开发·卷积神经网络·minst·minst识别·部署神经网络·神经网络识别图片
你是我的解忧王子2 天前
嵌入式 ADC采样 原始数据分析上层(平均值 波动率 正态分布 线性补偿 系统误差)
fpga开发·数据挖掘·数据分析
Eloudy2 天前
RFSoC 4x2 参考手册
fpga
9527华安3 天前
FPGA纯verilog代码ISP图像处理培训教程,基于IMX214,提供工程源码+视频教程+FPGA开发板
图像处理·fpga开发·isp·imx214·mipi
千寻xun3 天前
二、实战篇-NVME SSD控制之ZYNQ实现(六)-读写NVME SSD硬盘数据
fpga开发·nvme·nvme ssd