第二章 开发环境搭建:Quartus II / Lattice Diamond 安装、第一个CPLD工程、引脚分配与下载

好,咱们正式开始动手了。

这一章,说白了就是“磨刀”。刀磨快了,后面砍柴才不费劲。我见过不少新手,一上来就急着写代码,结果环境没配好,折腾半天连灯都点不亮,心态直接崩了。咱们别走那个弯路。

2.1 开发工具的选择:Quartus II 还是 Lattice Diamond?

做CPLD开发,主流就两家:Intel(原Altera)和 Lattice。我个人习惯,根据芯片选工具。

  • Quartus II:对应 Intel 的 MAX 系列,比如 MAX II、MAX 10。如果你手头是这些片子,就用它。
  • Lattice Diamond:对应 Lattice 的 MachXO、iCE40 系列。工业控制和通信接口里,MachXO 用得非常多。

其实两个工具的核心逻辑是一样的:建工程 -> 写代码 -> 综合 -> 布局布线 -> 生成烧录文件 -> 下载。只是界面和操作细节不同。

我的建议:初学者别贪多。先盯着一款芯片学透。我当年就是从 MAX II 开始的,一个工程反复改,直到把时序分析搞明白。工具只是手段,核心是逻辑。

2.2 安装避坑指南

安装过程其实不复杂,但有几个坑,我替你们踩过了。

2.2.1 Quartus II 安装要点

  • 版本选择:Quartus II 13.0sp1 是个经典版本,稳定,对 MAX II 支持好。新版本虽然功能多,但体积大,启动慢。做CPLD,够用就行。
  • 安装路径:不要有中文!不要有空格!我见过有人装在“D:\程序\Quartus”里,结果编译报错,查了半天是路径问题。
  • 设备支持:安装时记得勾选“MAX II”或“MAX 10”系列。默认只装Cyclone系列,很多人装完发现找不到芯片,又得重装。
  • License:Quartus II 需要 license 文件。网上有免费版,但注意对应版本号。我曾经因为 license 版本不对,折腾了一下午。

2.2.2 Lattice Diamond 安装要点

  • 版本选择:Diamond 3.10 或 3.12 比较常用。Lattice 的软件相对轻量,但安装时同样注意路径无中文。
  • License 管理:Lattice 的 license 是绑定网卡 MAC 地址的。如果你换了电脑或者用了虚拟机,记得重新申请。我有个同事,笔记本在公司用得好好的,回家连不上,就是因为家里网卡不一样。
  • 驱动问题:下载器驱动有时需要手动安装。Windows 10/11 可能会自动禁用未签名驱动,记得进“高级启动”选项,禁用驱动签名强制。

注意:安装完成后,建议重启电脑。别问我为什么,这是玄学,但有效。

2.3 第一个CPLD工程:点亮一盏灯

好了,工具装好了。咱们来写第一个工程。目标很简单:让一个LED灯亮起来。

你想想看,这其实就是一个“Hello World”。虽然简单,但流程完整:建工程 -> 写代码 -> 分配引脚 -> 编译 -> 下载。

2.3.1 新建工程(以 Quartus II 为例)

  1. 打开 Quartus II,点击 File -> New Project Wizard
  2. 输入工程名,比如 led_test。注意:工程名不要用中文,不要用数字开头。
  3. 选择芯片型号。比如 MAX II 系列的 EPM240T100C5。如果你不确定,看芯片表面,上面印着呢。
  4. 选择仿真工具和综合工具。新手直接用默认的就行。
  5. 完成。

2.3.2 写代码

新建一个 Verilog 文件:File -> New -> Verilog HDL File。输入以下代码:

module led_test (
    input   wire    clk,      // 时钟输入,假设是 50MHz
    input   wire    rst_n,    // 复位,低有效
    output  reg     led       // LED 输出
);

// 分频计数器,让 LED 以 1Hz 闪烁
reg [24:0] cnt;

always @(posedge clk or negedge rst_n) begin
    if (!rst_n)
        cnt <= 25'd0;
    else
        cnt <= cnt + 1'b1;
end

// 取最高位作为 LED 输出
always @(posedge clk or negedge rst_n) begin
    if (!rst_n)
        led <= 1'b0;
    else
        led <= cnt[24];  // 约 0.3Hz 闪烁
end

endmodule

嗯,这里要注意:cnt[24] 是计数器的最高位。50MHz 时钟下,计数到 2^25 约 33.5 百万次,大约 0.67 秒翻转一次。所以 LED 会以约 0.75Hz 的频率闪烁。

小技巧:如果你想让 LED 常亮,直接把 led 赋值为 1'b1 就行。但闪烁更有成就感,对吧?

2.3.3 综合与编译

点击 Processing -> Start Compilation。Quartus 会帮你做综合、布局布线、生成烧录文件。

第一次编译可能会有点慢,耐心等。如果报错,多半是语法问题。检查一下分号、括号、模块名是否一致。

2.4 引脚分配:把逻辑和物理连起来

代码写好了,但芯片不知道哪个引脚是 clk,哪个是 led。这就需要引脚分配。

我个人习惯,先看原理图。找到芯片的引脚号,比如:

  • 时钟:引脚 12
  • 复位:引脚 33
  • LED:引脚 56

然后打开 Assignments -> Pin Planner。在表格里,把 clk 的 Location 填上 PIN_12rst_nPIN_33ledPIN_56

注意:有些引脚是专用引脚,比如全局时钟引脚、JTAG引脚,不能随便分配。分配前,建议看看芯片的 datasheet。我曾经把时钟分配到一个普通 IO 上,结果芯片死活不工作。

分配完成后,重新编译一次。Quartus 会把引脚信息写入烧录文件。

2.5 下载:让代码跑起来

最后一步,把代码烧进芯片。

  1. 连接下载器。Quartus 用 USB-Blaster,Lattice 用 HW-USBN-2B。注意驱动要装好。
  2. 点击 Tools -> Programmer
  3. 点击 Hardware Setup,选择你的下载器。
  4. 点击 Add File,选择生成的 .pof 文件(Quartus)或 .jed 文件(Lattice)。
  5. 勾选 Program/Configure,点击 Start

如果一切顺利,进度条走完,LED 开始闪烁。恭喜你,第一个 CPLD 工程跑起来了!

避坑指南:如果下载失败,先检查硬件连接。我曾经遇到过下载线接触不良,折腾了半小时才发现是线松了。另外,检查芯片是否供电,CPLD 需要 3.3V 和 1.8V 两路电源,缺一不可。

2.6 本章知识体系

为了让你更直观地理解整个流程,我画了一张图:

CPLD 开发环境搭建与工程流程 1. 工具安装 Quartus II / Diamond 2. 新建工程 选择芯片型号 3. 编写代码 Verilog / VHDL 4. 综合编译 生成网表文件 5. 引脚分配 Pin Planner 6. 再次编译 生成烧录文件 7. 下载烧录 Programmer 8. 验证结果 LED闪烁? 失败?检查

这张图把整个流程串起来了。从工具安装到最终验证,每一步都环环相扣。如果你在哪一步卡住了,回头看看这张图,就知道问题出在哪个环节。

2.7 小结

这一章,我们走完了CPLD开发的完整流程。从工具安装,到第一个工程,再到引脚分配和下载。你想想看,其实并不复杂,对吧?

环境搭建是基本功。我见过太多人,代码写得漂亮,但环境配不好,连灯都点不亮。记住:工具是死的,人是活的。多动手,多试错,慢慢就熟了。

下一章,咱们会深入CPLD的内部结构,看看那些逻辑单元到底是怎么工作的。嗯,到时候你会觉得,原来CPLD这么简单。


专注资料整理