2. 开发环境搭建:Lattice Diamond软件安装、License配置、创建第一个工程、工程结构解析
好,咱们正式开始动手了。
这一章,我带你走一遍Lattice Diamond开发环境的搭建流程。说实话,很多初学者卡在第一步——软件装好了,License配不对,工程建起来又不知道每个文件是干嘛的。别急,咱们一步步来。
2.1 Lattice Diamond软件安装
Lattice Diamond是Lattice半导体官方提供的FPGA开发IDE。我个人习惯用2021.1版本,稳定,坑少。
安装前注意几点:
- 操作系统:Windows 10 64位或Linux(Ubuntu 18.04/20.04)。我建议用Windows,驱动和调试器支持更省心。
- 硬盘空间:至少留出10GB。Diamond本体大概4GB,加上器件库和更新包,你懂的。
- 关闭杀毒软件:安装过程中会写注册表和系统变量,杀毒软件容易误拦。我遇到过好几次,装到一半卡住,最后发现是360在捣乱。
安装步骤:
- 从Lattice官网下载Diamond安装包(需要注册账号,免费)。
- 双击运行安装程序,选择“Full Installation”。
- 选择安装路径——不要有中文和空格。我一般装到
C:\lscc\diamond\3.12这种路径。 - 勾选你需要用的器件系列。比如MachXO2、MachXO3、ECP5、CrossLink等。全选也行,就是占空间。
- 等待安装完成,大概20-30分钟。
2.2 License配置
装完软件,打开Diamond,大概率会弹出一个License错误窗口。别慌,这是正常现象。
License有两种:
- Node-Locked License:绑定一台电脑的MAC地址。适合个人开发。
- Floating License:网络浮动,适合团队。
咱们说最常见的Node-Locked方式。
配置步骤:
- 打开Diamond,点击菜单
Help → License Manager。 - 选择
Install License,浏览到你存放license.dat文件的路径。 - 点击
Apply,如果提示“License installed successfully”,就搞定了。
如果还是报错,检查环境变量 LM_LICENSE_FILE 是否指向了正确的license文件路径。可以在系统环境变量里手动添加。
2.3 创建第一个工程
好,License配好了,咱们来建第一个工程。目标很简单:写一个与门,然后烧到板子上看LED亮不亮。
新建工程步骤:
- 打开Diamond,点击
File → New → Project。 - 输入工程名,比如
my_first_and_gate。选择工程路径。 - 选择器件型号。我用的是 MachXO2-1200HC,封装TQFP144。你根据自己板子选。
- 点击
Finish,工程就建好了。
接下来,添加一个Verilog源文件:
- 右键
Input Files→New File。 - 选择
Verilog File,命名为and_gate.v。 - 写入以下代码:
module and_gate (
input wire a,
input wire b,
output wire y
);
assign y = a & b;
endmodule
然后写一个顶层文件,把输入输出映射到板子上的引脚:
module top (
input wire btn_a,
input wire btn_b,
output wire led
);
and_gate u_and (
.a(btn_a),
.b(btn_b),
.y(led)
);
endmodule
保存后,在Diamond左侧的 Process 窗口,双击 Synthesize Design 进行综合。如果没报错,恭喜你,第一步走通了。
2.4 工程结构解析
工程建好了,咱们看看Diamond到底生成了哪些文件。很多新手一打开工程目录就懵了——一堆文件夹,不知道哪个是哪个。
我帮你梳理一下核心文件结构:
| 文件/文件夹 | 作用 |
|---|---|
.ldf |
工程文件,双击它就能打开整个工程。相当于Diamond的“项目入口”。 |
impl/ |
实现文件夹。里面放着综合、布局布线、时序分析的结果。 |
src/ |
源代码文件夹。你的 .v 文件、.vhd 文件都放这里。 |
constraint/ |
约束文件夹。放 .lpf 文件(引脚分配、时序约束)。 |
synplify/ |
综合工具Synplify的工作目录。一般不用手动管。 |
par/ |
布局布线(Place and Route)的输出目录。 |
嗯,这里要特别说一下 .lpf 文件。它是Lattice的引脚约束文件。你写Verilog时用的 input、output 信号,必须通过 .lpf 文件映射到FPGA的实际物理引脚上。否则,综合出来的电路不知道信号该从哪个管脚进出。
举个例子,我的板子上按钮接在 PIN_1 和 PIN_2,LED接在 PIN_3,那么 .lpf 文件内容就是:
LOCATE COMP "btn_a" SITE "PIN_1";
LOCATE COMP "btn_b" SITE "PIN_2";
LOCATE COMP "led" SITE "PIN_3";
保存后,在Diamond里右键 Input Files → Add File,把这个 .lpf 文件加进去。然后重新综合、布局布线,最后生成烧录文件。
constraint 文件夹,把 .lpf 文件放进去。这样工程结构清晰,后期维护也方便。
2.5 知识体系一览
为了让你更直观地理解本章的知识脉络,我画了一张流程图:
这张图把四个步骤串起来了。你跟着箭头走,就能把环境搭好,跑通第一个工程。
好了,环境搭建就讲到这里。你跟着操作一遍,应该能顺利跑起来。如果遇到问题,回头看看我提到的几个坑点,大概率能解决。