第一章:开发环境搭建与第一个工程

各位同学,咱们今天正式开始动手。说实话,学CPLD最怕什么?最怕环境装了半天,结果连个灯都点不亮。我当年刚入行时,光装Quartus就折腾了两天,最后发现是驱动没装对。所以这一章,咱们稳扎稳打,把环境搭好,再跑通第一个工程。

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

目前主流CPLD厂商就两家:Altera(现在叫Intel)和Lattice。对应的工具分别是Quartus II和Lattice Diamond。我个人习惯是:

  • Quartus II:适合Altera的MAX II、MAX 10系列。界面经典,资料多。
  • Lattice Diamond:适合Lattice的MachXO、iCE40系列。轻量级,启动快。

你想想看,选哪个其实取决于你手头的芯片。我建议初学者先从Quartus II入手,因为网上教程多,遇到问题好搜。但如果你公司指定用Lattice,那也别纠结,流程大同小异。

我的建议: 如果你不确定选哪个,先装Quartus II 13.0 SP1。这个版本稳定,对MAX II支持好,而且网上资源最丰富。

1.2 安装与配置:别踩这些坑

安装过程其实不复杂,但有几个地方容易翻车。我把自己踩过的坑列出来:

  1. 路径不要有中文——Quartus对中文路径支持很差,我曾经因为桌面有个“新建文件夹”导致编译报错,查了半天。
  2. 安装USB Blaster驱动——很多人装完软件发现下载器连不上,其实就是驱动没装。记得在设备管理器里手动指定驱动路径。
  3. License文件——Quartus需要license才能用。把license文件放到安装目录下,然后在Tools→License Setup里指定路径。
注意: 如果你用的是Windows 10/11,安装Quartus II 13.0时记得右键“以管理员身份运行”。否则某些组件会安装失败。

1.3 新建工程:从零开始

好,环境装好了,咱们来建第一个工程。以Quartus II为例:

  1. 打开Quartus II,点击 File → New Project Wizard
  2. 给工程起个名字,比如 led_test。注意:工程名不要有空格。
  3. 选择芯片型号。我用的是EPM240T100C5,你根据手头板子选。
  4. 一路Next,完成。

嗯,这里有个小细节:在第三步选择芯片时,如果你不确定型号,可以看板子上的丝印。我见过有人选错芯片,结果编译出来的文件下载不进去,白忙活半小时。

1.4 添加源文件:写你的第一行代码

工程建好了,现在添加一个Verilog源文件:

  1. 点击 File → New,选择 Verilog HDL File
  2. 保存为 led.v
  3. 输入以下代码:
module led (
    input  wire clk,      // 时钟输入
    input  wire rst_n,    // 复位,低有效
    output reg  led_out   // LED输出
);

always @(posedge clk or negedge rst_n) begin
    if (!rst_n)
        led_out <= 1'b0;  // 复位时LED灭
    else
        led_out <= ~led_out; // 时钟翻转一次,LED状态翻转
end

endmodule

这段代码很简单:每来一个时钟上升沿,LED就翻转一次。如果你板子上的时钟是50MHz,那LED会以25MHz的频率闪烁——人眼是看不出来的。所以实际项目中,我们会加一个计数器分频。但作为第一个程序,这样足够了。

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

代码写完了,但芯片不知道哪个引脚连LED。我们需要做引脚分配:

  1. 点击 Assignments → Pin Planner
  2. 在Location列,给 clk 分配一个引脚(比如PIN_1)。
  3. rst_n 分配一个引脚(比如PIN_2)。
  4. led_out 分配一个引脚(比如PIN_3)。
  5. 关闭Pin Planner,保存。

具体引脚号要看你的原理图。我刚开始做的时候,拿着板子对着原理图一个一个对,生怕搞错。后来发现其实只要记住:时钟引脚、复位引脚、LED引脚这三个位置就行。

避坑指南: 我曾经把LED接到了芯片的VCC引脚上,结果灯一直亮,怎么下载都不变。后来才发现那个引脚是电源,根本不受逻辑控制。所以分配引脚前,一定先看原理图。

1.6 编译与下载:见证奇迹的时刻

引脚分配完,点击 Processing → Start Compilation。编译成功后,你会看到 led.sof 文件生成。

接下来下载:

  1. 连接USB Blaster到板子和电脑。
  2. 点击 Tools → Programmer
  3. 点击 Hardware Setup,选择USB Blaster。
  4. 点击 Start,开始下载。

下载完成后,如果一切正常,LED应该开始闪烁。但如果你发现灯不亮,别慌。先检查:

  • USB Blaster驱动装了吗?
  • 板子上电了吗?
  • 引脚分配对吗?

我记得有一次,我折腾了半小时发现是板子的电源开关没打开。嗯,这种低级错误谁都犯过,别笑。

1.7 知识体系总览

下面这张图,帮你理清本章的核心逻辑:

第一章:开发环境搭建与第一个工程 1. 工具选择 2. 安装配置 3. 新建工程 4. 添加源文件 5. 引脚分配 6. 编译 7. 下载验证 8. LED点亮! 从工具选择到LED点亮,一共8个步骤,缺一不可

1.8 常见问题与解决

问题 可能原因 解决方法
编译报错:找不到模块 源文件没添加到工程 在Project Navigator里右键,Add Files
下载失败:无法识别USB Blaster 驱动没装好 重新安装驱动,或换USB口
LED不亮 引脚分配错误 核对原理图,重新分配
LED常亮不闪 时钟频率太高,人眼看不到 加一个分频计数器

好了,第一个工程跑通了。你想想看,从装软件到点亮LED,其实也就这么几步。以后不管多复杂的项目,底层逻辑都是一样的:建工程、写代码、分配引脚、下载验证。把这个流程刻在脑子里,后面学什么都快。

总结一下: 这一章我们完成了开发环境搭建、第一个Verilog程序、引脚分配和下载验证。你亲手点亮了人生中第一颗由CPLD控制的LED。虽然简单,但这是万里长征的第一步。
专注资料整理