一、CPLD基础与开发环境
各位同学,咱们今天聊聊CPLD的基础。说实话,我刚入行那会儿,CPLD和FPGA傻傻分不清。后来踩了不少坑,才慢慢摸出门道。这一章,我就把最核心的东西掰开揉碎讲给你听。
1.1 CPLD内部结构:逻辑单元、宏单元、I/O单元
CPLD的内部结构,说白了就是三个部分:逻辑单元、宏单元、I/O单元。我习惯把它们比作一个工厂的车间、仓库和门卫。
逻辑单元(Logic Element)
这是CPLD干活的地方。每个逻辑单元包含一个查找表(LUT)和一个触发器。LUT负责组合逻辑,触发器负责时序逻辑。我在项目中遇到过一个问题:明明逻辑功能对了,但输出就是不稳定。后来发现是LUT输入太多,导致路径延迟过大。嗯,这里要注意,LUT的输入引脚数量是有限的,别贪多。
宏单元(Macrocell)
宏单元是CPLD的特色。它把逻辑单元的输出和I/O单元连接起来。每个宏单元通常包含一个触发器、一个乘积项分配器、还有可编程的极性控制。说白了,宏单元就是帮你把逻辑结果“打包”好,送到外面去。
我记得有一次调试一个通信协议解析,信号总是毛刺不断。查了半天,发现是宏单元里的触发器配置成了透明模式。改成边沿触发后,问题立刻解决。你想想看,有时候问题就出在这些小细节上。
I/O单元(I/O Cell)
I/O单元是CPLD和外界打交道的接口。它负责电平转换、驱动能力配置、上拉/下拉电阻等。我建议你在设计初期就规划好I/O标准,比如3.3V还是1.8V,否则后期改起来很麻烦。
1.2 CPLD与FPGA的区别
这个问题,面试时经常被问到。我直接给你画个表,一目了然。
| 对比项 | CPLD | FPGA |
|---|---|---|
| 内部结构 | 基于乘积项(PAL结构) | 基于查找表(LUT结构) |
| 逻辑容量 | 小(几百到几千宏单元) | 大(几万到几百万逻辑单元) |
| 时序特性 | 可预测,延迟固定 | 延迟随布线变化 |
| 上电特性 | 非易失,上电即工作 | 易失,需要外部配置芯片 |
| 适用场景 | 胶合逻辑、协议解析、控制 | 高速数据处理、复杂算法 |
为什么会这样?因为CPLD的布线结构是固定的,每个宏单元到I/O的路径延迟基本一致。而FPGA的布线是分布式的,路径越长延迟越大。我刚开始做设计时,总觉得FPGA更高级,什么都想用FPGA。后来发现,对于简单的协议解析,CPLD反而更合适——上电就工作,不用等配置,而且成本低。
1.3 Quartus II / Vivado 开发环境搭建与第一个工程
开发环境这块,我主要用Quartus II(针对Intel/Altera器件)和Vivado(针对Xilinx器件)。两个工具思路类似,但操作细节不同。我分别说一下。
Quartus II 环境搭建
- 下载安装:去Intel官网下载Quartus Prime Lite版(免费)。注意选择对应操作系统版本。
- 安装器件支持:安装时勾选你需要的CPLD系列,比如MAX II、MAX 10。
- 破解(如果需要):Lite版不需要破解,标准版需要license。
我记得第一次装Quartus时,忘了装器件库,结果打开软件发现找不到芯片。折腾了半天才明白。嗯,这里提醒你,安装时一定要选对器件系列。
Vivado 环境搭建
- 下载安装:去Xilinx官网下载Vivado HLx WebPACK版(免费)。
- 安装器件支持:Vivado支持所有Xilinx 7系列及之后的器件。CPLD的话,主要用CoolRunner系列。
- 设置环境变量:安装后可能需要手动添加路径到PATH。
第一个工程:点亮LED
咱们来个最简单的例子,用CPLD点亮一个LED。代码很简单,但能帮你跑通整个流程。
// 文件名:led_top.v
module led_top (
input wire clk, // 系统时钟
input wire rst_n, // 复位,低有效
output reg led // LED输出
);
// 分频计数器,让LED闪烁
reg [23:0] cnt;
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
cnt <= 24'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[23];
end
endmodule
这段代码做了两件事:一是用计数器分频,二是把最高位输出到LED。你下载到CPLD后,LED就会以大约1Hz的频率闪烁(假设时钟是50MHz)。
编译步骤很简单:新建工程 -> 添加文件 -> 分配引脚 -> 编译 -> 下载。具体操作每个工具略有不同,但核心流程一致。我建议你第一次做时,跟着官方教程一步步来,别跳步骤。
知识体系总览
下面这张图,是我自己画的CPLD知识体系结构图。你看一眼,就能明白这一章讲了什么。
好了,这一章的内容就到这里。你先把环境搭好,把LED点亮。后面咱们再聊怎么用CPLD解析通信协议。
公众号:蓝海资料掘金营,微信deep3321