第二章:开发环境搭建——Quartus II 与 Lattice Diamond 的安装配置
说实话,很多初学者在学CPLD时,第一步就卡在了环境搭建上。我见过不少朋友下载了软件,装到一半报错,或者装好了发现驱动不识别,折腾一整天还没见到第一个工程长什么样。这一章,我就带你一步步搞定这件事。
2.1 选哪个工具?Quartus II 还是 Lattice Diamond?
这得看你手头的芯片是哪家的。目前主流CPLD主要来自两大厂商:Intel(原Altera)和Lattice。Intel的CPLD用Quartus II,Lattice的用Diamond。我个人习惯是,如果做小规模逻辑控制,Lattice的芯片性价比更高;如果后续想往FPGA方向走,Quartus II的生态更成熟。
| 对比项 | Quartus II | Lattice Diamond |
|---|---|---|
| 适用芯片 | MAX II、MAX 10、Cyclone系列等 | MachXO、iCE40、ECP5系列等 |
| 软件大小 | 约3-5GB(含器件库) | 约1.5-2.5GB |
| 免费版本 | Quartus II Web Edition(免费) | Diamond Free(免费,有器件限制) |
| 学习曲线 | 中等,资料多 | 较平缓,界面简洁 |
我的建议是:如果你是纯新手,从Lattice Diamond开始会友好一些。但如果你手头有Altera的开发板,那就用Quartus II。两个工具的核心操作逻辑是相通的,学会一个,另一个上手也快。
2.2 Quartus II 安装与配置
先讲Quartus II。我推荐下载13.0sp1或16.1版本,这两个版本稳定,网上资源也多。别追新,新版本对电脑配置要求高,而且有些破解工具不兼容。
2.2.1 下载与安装步骤
- 去Intel官网搜索"Quartus II Web Edition",找到对应版本下载。
- 运行安装程序,选择安装路径。注意:路径不要有中文或空格。
- 选择安装组件时,至少勾选"Quartus II software"和对应器件库(比如MAX II系列)。
- 安装完成后,不要急着打开。先安装USB Blaster驱动。
2.2.2 USB Blaster 驱动安装
USB Blaster是Altera的下载器。插上开发板后,电脑会提示安装驱动。驱动文件在Quartus安装目录下的drivers文件夹里。手动指定路径安装即可。
我曾经在Win10系统上折腾了半小时,发现驱动总是显示黄色感叹号。后来发现是Windows强制驱动签名的问题。解决办法是:重启电脑,按F8进入高级启动选项,选择"禁用驱动程序强制签名",再安装驱动就成功了。
2.3 Lattice Diamond 安装与配置
Lattice Diamond的安装相对简单。我建议下载3.12或3.13版本,这两个版本对MachXO2支持最好。
2.3.1 安装步骤
- 从Lattice官网注册账号后下载Diamond Free版本。
- 运行安装包,选择"Full Installation"。
- 安装过程中会提示选择License文件。如果是免费版,选择"Node-locked Free License"。
- 安装完成后,桌面会出现Diamond和Programmer两个图标。
2.3.2 驱动安装(FTDI芯片)
Lattice的开发板大多使用FTDI芯片做USB转JTAG。插上板子后,系统会自动识别并安装驱动。如果没反应,可以去FTDI官网下载CDM v2.12.28驱动包手动安装。
嗯,这里要注意:有些山寨开发板用的FTDI芯片是假货,驱动会报"USB Device Not Recognized"。我踩过这个坑,后来换了一块正版板子就解决了。所以买开发板时尽量选正规渠道。
2.4 第一个工程创建(以Quartus II为例)
环境搭好了,我们来创建第一个工程。目标很简单:写一个LED闪烁程序,让CPLD的某个引脚输出方波。
2.4.1 新建工程
- 打开Quartus II,点击 File → New Project Wizard。
- 输入工程名和路径。工程名不要用中文,比如
led_blink。 - 选择器件型号。比如我用的是MAX II EPM240T100C5,就在Family里选MAX II,在Device里选具体型号。
- 选择仿真工具和综合工具,新手保持默认即可。
- 点击Finish完成。
2.4.2 编写Verilog代码
新建一个Verilog文件:File → New → Verilog HDL File。输入以下代码:
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)
cnt <= 25'd0;
else if (cnt == 25'd24_999_999)
cnt <= 25'd0;
else
cnt <= cnt + 1'b1;
end
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
led <= 1'b0;
else if (cnt == 25'd24_999_999)
led <= ~led;
else
led <= led;
end
endmodule
这段代码实现了一个0.5秒翻转一次的LED。为什么是24_999_999?因为50MHz时钟周期是20ns,0.5秒需要计数25000000次,从0开始所以最大值是24999999。
2.4.3 引脚分配
点击 Assignments → Pin Planner,在打开的界面中,将clk分配到开发板的时钟引脚,rst_n分配到按键引脚,led分配到LED引脚。分配完成后保存。
2.4.4 编译与下载
- 点击工具栏的 Start Compilation 按钮,等待编译完成。
- 编译成功后,打开 Tools → Programmer。
- 点击 Hardware Setup,选择USB Blaster。
- 点击 Add File,选择工程目录下的
.pof文件。 - 勾选 Program/Configure,点击 Start 下载。
下载成功后,你会看到LED开始闪烁。那一刻,说实话,挺有成就感的。
2.5 本章知识体系
下面这张图帮你梳理了本章的核心内容,从工具选择到工程创建,一目了然。
2.6 常见问题与避坑指南
- 编译报错"Can't find device":检查工程中选的器件型号是否与开发板一致。我曾经选错了一个字母,查了半天才发现。
- 下载时提示"Unable to open device":驱动没装好。重新安装USB Blaster驱动,或者换一个USB口试试。
- LED不亮:先检查引脚分配是否正确,再用万用表测一下LED引脚电压。有时候是板子上的LED焊反了。
- Diamond编译报License错误:确认License文件路径是否正确,或者重新申请免费License。
好了,环境搭建和第一个工程就讲到这里。你跟着做一遍,应该能顺利点亮LED。如果卡住了,别急,回头看看驱动安装那一步,八成是那里出了问题。
公众号:蓝海资料掘金营,微信deep3321