第一章:开发环境搭建与第一个工程
各位同学,咱们今天正式开始动手。说实话,学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,那也别纠结,流程大同小异。
1.2 安装与配置:别踩这些坑
安装过程其实不复杂,但有几个地方容易翻车。我把自己踩过的坑列出来:
- 路径不要有中文——Quartus对中文路径支持很差,我曾经因为桌面有个“新建文件夹”导致编译报错,查了半天。
- 安装USB Blaster驱动——很多人装完软件发现下载器连不上,其实就是驱动没装。记得在设备管理器里手动指定驱动路径。
- License文件——Quartus需要license才能用。把license文件放到安装目录下,然后在Tools→License Setup里指定路径。
1.3 新建工程:从零开始
好,环境装好了,咱们来建第一个工程。以Quartus II为例:
- 打开Quartus II,点击 File → New Project Wizard。
- 给工程起个名字,比如
led_test。注意:工程名不要有空格。 - 选择芯片型号。我用的是EPM240T100C5,你根据手头板子选。
- 一路Next,完成。
嗯,这里有个小细节:在第三步选择芯片时,如果你不确定型号,可以看板子上的丝印。我见过有人选错芯片,结果编译出来的文件下载不进去,白忙活半小时。
1.4 添加源文件:写你的第一行代码
工程建好了,现在添加一个Verilog源文件:
- 点击 File → New,选择 Verilog HDL File。
- 保存为
led.v。 - 输入以下代码:
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。我们需要做引脚分配:
- 点击 Assignments → Pin Planner。
- 在Location列,给
clk分配一个引脚(比如PIN_1)。 - 给
rst_n分配一个引脚(比如PIN_2)。 - 给
led_out分配一个引脚(比如PIN_3)。 - 关闭Pin Planner,保存。
具体引脚号要看你的原理图。我刚开始做的时候,拿着板子对着原理图一个一个对,生怕搞错。后来发现其实只要记住:时钟引脚、复位引脚、LED引脚这三个位置就行。
1.6 编译与下载:见证奇迹的时刻
引脚分配完,点击 Processing → Start Compilation。编译成功后,你会看到 led.sof 文件生成。
接下来下载:
- 连接USB Blaster到板子和电脑。
- 点击 Tools → Programmer。
- 点击 Hardware Setup,选择USB Blaster。
- 点击 Start,开始下载。
下载完成后,如果一切正常,LED应该开始闪烁。但如果你发现灯不亮,别慌。先检查:
- USB Blaster驱动装了吗?
- 板子上电了吗?
- 引脚分配对吗?
我记得有一次,我折腾了半小时发现是板子的电源开关没打开。嗯,这种低级错误谁都犯过,别笑。
1.7 知识体系总览
下面这张图,帮你理清本章的核心逻辑:
1.8 常见问题与解决
| 问题 | 可能原因 | 解决方法 |
|---|---|---|
| 编译报错:找不到模块 | 源文件没添加到工程 | 在Project Navigator里右键,Add Files |
| 下载失败:无法识别USB Blaster | 驱动没装好 | 重新安装驱动,或换USB口 |
| LED不亮 | 引脚分配错误 | 核对原理图,重新分配 |
| LED常亮不闪 | 时钟频率太高,人眼看不到 | 加一个分频计数器 |
好了,第一个工程跑通了。你想想看,从装软件到点亮LED,其实也就这么几步。以后不管多复杂的项目,底层逻辑都是一样的:建工程、写代码、分配引脚、下载验证。把这个流程刻在脑子里,后面学什么都快。