4、工程创建向导:新建工程、工程命名规则、工程路径选择、器件选择、综合与仿真工具配置
好,咱们正式开始动手。打开 Radiant 软件,第一件事就是创建工程。
很多新手上来就点「Next」,一路狂点到底。结果呢?工程建好了,路径乱成一锅粥,器件选错了,综合工具也不对。回头改起来,那叫一个头疼。
我个人习惯,在点「New Project」之前,先花 30 秒想清楚三件事:这个工程叫什么?放哪里?用什么芯片?
4.1 新建工程:从启动到第一个界面
启动 Radiant 后,你会看到欢迎界面。点击 「New Project」,或者从菜单栏选 File → New → Project。
弹出来的对话框叫「New Project Wizard」。嗯,这里要注意,向导一共 5 步,每一步都有坑。
核心原则:工程路径中不要出现中文、空格、特殊字符。我见过有人把工程放在「桌面/新建文件夹」里,结果综合报错找不到路径,折腾了半天。
4.2 工程命名规则:别偷懒,名字就是文档
工程名字怎么取?我建议用这个格式:
项目代号_模块名_版本号
例如:LED_Blink_V1.0
或者:UART_Top_V2.1
为什么?你想想看,半年后你翻出这个工程,看到「test1」、「final」、「final_v2」这种名字,是不是想抽自己?
我在项目中遇到过最离谱的命名:一个同事把工程叫「111」,问他这是什么,他说「随便起的」。后来这个工程被反复复用,每次都要打开看代码才知道是干嘛的。浪费时间啊。
| 命名要素 | 建议 | 反面案例 |
|---|---|---|
| 项目代号 | 使用英文缩写,如 LED、UART、SPI | 不要用中文拼音 |
| 模块名 | 明确功能,如 Top、Ctrl、Rx | 不要用 a、b、c |
| 版本号 | V1.0、V2.1,用点分隔 | 不要用 V1、V2(容易混淆) |
4.3 工程路径选择:放对位置,少走弯路
路径选择这一步,很多人直接默认。但我建议你单独建一个工作目录。
比如:
D:/FPGA_Projects/Lattice/LED_Blink_V1.0/
注意几点:
- 不要放在 C 盘,尤其是系统盘。综合时会产生大量临时文件,C 盘满了你就哭了。
- 路径不要太深,超过 3 层文件夹就行。太深了,Radiant 有时会报路径过长错误。
- 工程文件夹名和工程名保持一致。这样找工程时一目了然。
我的小技巧:在工程文件夹里再建三个子文件夹:src(源码)、constr(约束)、doc(文档)。养成习惯,后面管理起来特别方便。
4.4 器件选择:选错芯片,从头再来
这一步是重中之重。向导会让你选择器件系列和具体型号。
Radiant 支持的器件系列包括:
- Certus-NX:低功耗、小封装,适合边缘计算
- CrossLink-NX:高速接口,适合视频桥接
- MachXO3D:控制类应用,安全启动
- iCE40 UltraPlus:超低功耗,适合可穿戴
怎么选?我一般看三点:
- 逻辑资源够不够:先估算你的设计需要多少 LUT、FF、BRAM。
- 封装和引脚:确认你的 PCB 板子能焊上去。
- 速度等级:-1、-2、-3 代表不同速度,-3 最快但也最贵。
我曾经犯过的错:有一次选错了封装,工程建好了,综合也过了,结果下载时发现引脚对不上。最后只能重新建工程,白白浪费了半天。所以,选器件前,一定先看原理图。
4.5 综合与仿真工具配置:默认不一定最好
向导最后一步,会让你选择综合工具和仿真工具。
Radiant 默认使用自带的 Lattice Synthesis Engine (LSE)。说实话,对于大多数设计,LSE 够用了。但如果你需要更精细的控制,可以换成 Synplify Pro。
| 工具 | 优点 | 缺点 |
|---|---|---|
| LSE(默认) | 集成度高,一键使用 | 优化选项少 |
| Synplify Pro | 优化能力强,适合复杂设计 | 需要额外安装和 license |
仿真工具方面,Radiant 内置了 Active-HDL 的简化版。如果你习惯用 ModelSim 或 Questa,也可以指定外部工具。
我个人习惯:小工程用 LSE + Active-HDL,大工程用 Synplify Pro + ModelSim。为什么?小工程图省事,大工程图稳定。
配置小贴士:如果你用的是第三方仿真工具,记得在工程设置里指定仿真库路径。否则仿真时会报「找不到库」的错误。这个坑我踩过两次,后来学乖了。
4.6 知识体系一览
下面这张图,帮你把本章的核心逻辑串起来:
说白了,工程创建就是这五步。每一步都不难,但每一步都可能有坑。你只要按照这个流程走,基本不会出大问题。
最后提醒一句:建好工程后,先点一下「Synthesis」试试能不能跑通。如果报错,趁早排查。别等到代码写完了才发现器件选错了,那才叫欲哭无泪。