1. 课程导入与开发环境搭建
视频图像处理是FPGA最典型、也最能体现并行计算优势的应用方向之一。与CPU逐像素串行处理不同,FPGA可以在同一时钟周期内对多路像素并行运算,天然适合做实时流水线:摄像头输出的BT656或BT1120视频流进入FPGA后,经过色彩空间转换、滤波、缩放、叠加等处理,再以HDMI或VGA时序输出,整条链路延迟可以控制在几行到几十行之内。本课程围绕Quartus Prime平台,从零搭建一套可综合、可下载、可观察的视频图像处理系统。本章先解决"能不能跑起来"的问题:装好工具、配好授权、装好下载器驱动、建好第一个工程并成功下载,为后续所有图像算法实验打地基。
一、典型应用场景与工程意义
视频图像处理在FPGA上的落地场景非常集中,常见的有以下几类:
- 工业视觉检测:线阵/面阵相机采集,做二值化、边缘提取、缺陷标记,要求微秒级确定性延迟。
- 医疗内窥与超声:实时去噪、伽马校正、伪彩映射,对图像延迟和稳定性要求极高。
- 安防与车载:多路视频拼接、畸变校正、目标框叠加,常配合SoC FPGA完成。
- 广播与LED显示:4K视频缩放、色彩空间转换、Gamma与逐点校正,是Quartus工程中最常见的图像流水线。
这些场景的共同点是:数据率高(1080p60约148.5 Mpixel/s)、延迟敏感、算法结构固定。用FPGA实现时,核心工作是把算法拆成"逐像素可流水"的运算单元,再用行缓存(Line Buffer)和场缓存(Frame Buffer)解决跨行、跨帧的数据依赖。本课程后续章节会围绕这条主线逐步展开。
二、Quartus Prime安装与授权配置
本课程使用Quartus Prime Lite Edition,它对Cyclone IV/V、MAX 10等主流教学器件免费,且支持ModelSim-Altera Starter仿真。安装流程如下:
- 从Intel(现Altera)官网下载Quartus Prime Lite安装包与对应器件库(如Cyclone IV E、Cyclone V)。安装路径不要包含中文和空格,建议
D:\altera\20.1\quartus。 - 安装时勾选Quartus Prime、ModelSim-Altera、器件支持包三项。安装完成后约需15~25 GB磁盘空间。
- 授权配置:Lite版对支持器件无需License文件,安装后即可编译。若使用Standard/Pro版或需要特定IP,则需在
Tools → License Setup中指定license.dat路径,并确认LM_LICENSE_FILE环境变量指向该文件。 - 验证:打开Quartus,
Help → About查看版本号;新建工程时能在Device Family中看到目标器件,说明器件库安装正确。
三、USB-Blaster驱动安装
下载比特流依赖USB-Blaster(或兼容下载器)。驱动安装步骤:
- 将USB-Blaster插入电脑USB口,Windows会提示未知设备。
- 打开设备管理器,找到带黄色感叹号的设备,右键"更新驱动程序"。
- 选择"浏览我的电脑以查找驱动程序",路径指向
<Quartus安装目录>\drivers\usb-blaster。 - 安装完成后,设备管理器中应出现
Altera USB-Blaster。 - 在Quartus中打开
Tools → Programmer,点击Hardware Setup,若能看到USB-Blaster即驱动正常。
四、第一个FPGA工程:创建、编译与下载
下面以一个"LED闪烁"工程为例,走通完整流程。目标器件假设为Cyclone IV EP4CE10F17C8(示例器件,可按实际开发板替换)。
1. 新建工程:File → New Project Wizard,设置工程目录、工程名led_blink、顶层实体名led_blink;在Device页选择器件族与具体型号;EDA Tool Settings中可暂不指定仿真工具。
2. 编写顶层代码:新建Verilog HDL File,输入一个分频计数驱动LED的模块:
module led_blink(
input wire clk, // 50MHz板载时钟
input wire rst_n, // 低电平复位
output reg led // LED输出
);
reg [24:0] cnt;
always @(posedge clk or negedge rst_n) begin
if(!rst_n) begin
cnt <= 25'd0;
led <= 1'b0;
end else if(cnt == 25'd24_999_999) begin
cnt <= 25'd0;
led <= ~led; // 约0.5s翻转一次
end else begin
cnt <= cnt + 1'b1;
end
end
endmodule
其中计数阈值24_999_999由50 MHz时钟与0.5 s翻转周期计算:50 000 000 × 0.5 − 1 = 24 999 999。
3. 引脚分配:打开Assignments → Pin Planner,把clk、rst_n、led分别绑定到开发板实际引脚(如clk→PIN_E1,led→PIN_A2,具体以板卡原理图为准)。
4. 编译:点击Start Compilation,依次执行Analysis & Synthesis、Fitter、Assembler、TimeQuest。编译成功后可在Compilation Report中查看资源占用与Fmax。
5. 下载:Tools → Programmer,Hardware Setup选择USB-Blaster,Add File选择output_files/led_blink.sof,勾选Program/Configure,点击Start。下载成功后开发板LED应以约1 Hz频率闪烁。
判断工程是否真正跑通,有三个可观察依据:编译无Error且时序满足;Programmer显示100% Successful;板上LED按预期频率变化。若LED常亮或常灭,优先检查引脚分配与时钟是否接入。