4. 开发环境搭建

说实话,做FPGA开发这么多年,我见过太多人卡在环境搭建这一步。明明代码写得挺好,结果因为工具链没配好,折腾一整天连个灯都没点亮。这一章,我就把HDMI采集与显示实战需要用到的开发环境,从头到尾给你捋一遍。

本章核心内容:Vivado/Quartus安装配置、HDMI IP核授权、仿真工具(ModelSim/VCS)、版本管理(Git)

开发环境搭建 Vivado/Quartus HDMI IP核授权 ModelSim/VCS Git版本管理 安装步骤 License配置 IP核申请 授权验证 仿真库编译 波形调试 仓库初始化 分支策略

4.1 Vivado/Quartus安装配置——选对工具,少走弯路

做HDMI采集显示,你大概率会用到Xilinx或Intel(原Altera)的FPGA。我个人更习惯用Vivado做Xilinx的片子,Quartus则留给Intel。两个工具我都装过,踩过的坑也不少。

4.1.1 Vivado安装要点

Vivado现在最新版已经到2024.x了,但我建议你别追新。为什么?因为新版本对HDMI IP核的支持有时候反而不如老版本稳定。我在项目中用过2020.2到2023.1,目前觉得2022.2最稳。

版本 HDMI IP核支持 我的评价
2020.2 完整支持 老项目首选,稳定
2022.2 完整支持 + 新特性 推荐!我目前主力版本
2023.1 部分IP需更新 有坑,慎用

安装小技巧:安装路径不要有中文和空格。我见过有人把Vivado装在"Program Files (x86)"下面,结果编译时各种路径报错。老老实实装到 C:\Xilinx\Vivado\2022.2 这种路径最省心。

4.1.2 Quartus安装要点

Quartus相对轻量一些。如果你用Intel的Cyclone V或Arria系列做HDMI采集,Quartus Prime Standard版就够了。Pro版虽然功能强,但启动慢,而且License贵不少。

安装时记得勾选"Device"和"IP"组件。我刚开始用Quartus时图省事只装了基础包,结果发现HDMI相关的MegaCore全都没有,又得重装一遍,浪费时间。

注意:无论是Vivado还是Quartus,安装前请关闭杀毒软件。尤其是360和腾讯管家,它们会把破解文件或License生成器直接干掉。别问我怎么知道的...嗯,都是泪。

4.2 HDMI IP核授权——别让License卡住你

HDMI IP核这东西,说白了就是FPGA厂商给你封装好的硬核或软核。Xilinx的叫"HDMI 1.4/2.0 Transmitter Subsystem",Intel的叫"HDMI IP Core"。它们都不是免费的。

4.2.1 Xilinx HDMI IP核授权

Xilinx的HDMI IP核需要单独申请License。流程是这样的:

  1. 登录Xilinx官网,进入"Product Licensing"页面
  2. 选择"HDMI 1.4/2.0 Transmitter Subsystem"
  3. 填写你的设备信息(MAC地址、主机名)
  4. 生成License文件(.lic)
  5. 将License文件放到 C:\Xilinx\Vivado\2022.2\data\licenses 目录下

我曾经犯过一个低级错误:申请License时填错了MAC地址。结果Vivado一直报"Invalid License",折腾了两天才发现是网卡地址写错了。所以,申请前先用 ipconfig /all 确认一下你的物理地址。

4.2.2 Intel HDMI IP核授权

Intel的流程类似,但它的License管理工具叫"Intel FPGA License Setup"。你需要在Quartus里打开"Tools > License Setup",然后把生成的License文件路径填进去。

关键点:Intel的HDMI IP核分为"Evaluation"和"Full"两种License。Evaluation版只能用2小时,而且会加水印。做项目一定要申请Full License,别想着用Evaluation糊弄过去——我试过,做到一半IP核罢工,那叫一个酸爽。

4.3 仿真工具(ModelSim/VCS)——调试的命根子

做FPGA开发,仿真比综合更重要。我个人的习惯是:先仿真,后上板。代码写完后至少跑一遍仿真,确认时序没问题再烧录。否则,板子一冒烟,哭都来不及。

4.3.1 ModelSim配置

ModelSim是Mentor(现属Siemens)的工具,Vivado和Quartus都自带了一个简化版。但简化版功能有限,我建议你装独立版。

安装步骤:

  • 下载ModelSim SE-64 2020.4或更高版本
  • 安装时选择"Full Installation"
  • 配置环境变量 MODELSIM_HOME 指向安装目录
  • 编译仿真库:vlib work 和 vmap work work

这里有个坑:Vivado自带的仿真库和ModelSim独立版的库不兼容。你需要用Vivado的 compile_simlib 命令重新编译一遍。命令如下:

compile_simlib -simulator modelsim -simulator_exec_path C:\modeltech64_2020.4\win64 -family all -language all -dir C:\modelsim_lib

我第一次用这个命令时,编译了整整40分钟。别急,喝杯咖啡等它跑完就好。

4.3.2 VCS配置

如果你用Linux做开发,VCS是更好的选择。它比ModelSim快,尤其适合大规模仿真。但VCS的安装比较麻烦,需要Synopsys的License。

配置要点:

  • 设置 VCS_HOME 环境变量
  • 设置 LM_LICENSE_FILE 指向License文件
  • 运行 vcs -help 验证安装

我的建议:初学者先用ModelSim,上手快。等做到复杂项目(比如4K HDMI采集),再换VCS。别一上来就搞VCS,光License就能让你折腾一星期。

4.4 版本管理(Git)——后悔药你值得拥有

做FPGA项目,代码改来改去是常事。今天加个功能,明天发现bug,后天回退版本...没有Git,你只能靠文件夹命名来管理:hdmi_v1、hdmi_v2_final、hdmi_v3_final2。是不是很熟悉?

4.4.1 Git仓库初始化

我建议每个FPGA项目都建一个Git仓库。结构大概这样:

hdmi_capture_project/
├── src/              # RTL源码
│   ├── hdl/          # Verilog/VHDL文件
│   ├── ip/           # IP核文件
│   └── constraints/  # XDC/SDC约束
├── sim/              # 仿真文件
│   ├── testbench/    # 测试平台
│   └── waves/        # 波形文件
├── docs/             # 文档
└── .gitignore        # 忽略文件

初始化命令很简单:

cd hdmi_capture_project
git init
git add .
git commit -m "Initial commit: HDMI capture project structure"

4.4.2 .gitignore配置

FPGA项目有很多中间文件,比如Vivado的 .jou、.log、.runs 目录,这些都不应该提交到Git。我的 .gitignore 长这样:

# Vivado
*.jou
*.log
*.str
*.xdc.bak
.runs/
.ip_user_files/
.hw/

# Quartus
*.qws
*.db
*.rpt
incremental_db/

# ModelSim
*.vstf
*.wlf
transcript
work/

注意:千万不要把 .runs 目录提交到Git。那个目录动辄几个GB,而且每次编译都会变。我见过有人把整个Vivado工程目录都push到GitHub,结果仓库直接炸了——50GB,拉都拉不下来。

4.4.3 分支策略

做HDMI采集项目,我推荐用简单的"三分支"策略:

  • main:稳定版本,只合并经过验证的代码
  • develop:开发分支,日常提交到这里
  • feature/xxx:功能分支,比如 feature/hdmi_rx、feature/audio_embed

举个例子,你开发HDMI接收模块时:

git checkout -b feature/hdmi_rx
# 写代码、仿真、调试...
git add .
git commit -m "Add HDMI RX module with TMDS decoding"
git checkout develop
git merge feature/hdmi_rx

等所有功能都验证通过,再把develop合并到main。这样main永远是可发布的版本。

总结一下:环境搭建这件事,急不得。Vivado/Quartus装好、IP核授权搞定、仿真工具配通、Git仓库建好,这四步走完,你才能安心写代码。我见过太多人跳过这些步骤直接上手,结果后面被各种环境问题折磨得欲仙欲死。

嗯,这一章的内容就到这。工具都准备好了,下一章我们开始真正写代码——HDMI采集的顶层架构设计。