在使用 MCU+CPLD 联合编程之前,请确认已经熟练掌握 MCU 的使用方法,并且对 CPLD 编程(Verilog 语言)有一定的基础。另外,对 AHB 总线也需要有一定的了解。
一、前述
在 AG32 芯片中,都有内嵌 2K 的逻辑门。使用 AG32 时有三种选择:
- 只使用 MCU 部分:不必关注此文档。
- 只使用 CPLD 部分:参考“纯粹 CPLD 编程”文档。
- MCU 和 CPLD 联合编程:请按照本文档完整走一个流程。
二、基础了解
- 独立性与连通性:MCU 和 CPLD 相互独立(各自编译、下载),但通过信号连通。芯片需烧录两个 bin 才能运行。
- VE 文件桥梁:MCU/CPLD 到外部 Pin 脚的连通,以及 MCU 到 CPLD 之间的信号关联,全部通过 VE 文件配置。
- 工程生成:联合编程时,CPLD 工程由 VSCode 的 “prepare LOGIC” 命令自动生成,不能手工通过 Supra 建立。
- 默认 Logic 与 自定义 Logic:
- 默认 Logic:仅用 MCU 时,系统自动生成默认 logic(用户逻辑为空),对开发者无感。
- 自定义 Logic:同时使用 MCU 和 CPLD 时,需在 VE 中配置关联,并使用 “prepare LOGIC” 生成框架工程进行开发。
三、安装软件
- Supra:集成在 SDK 路径下(tool-agrv_logic/bin/),用于生成最终 bin。
- Quartus II:需安装 Full 版本(推荐 v13.0.1),用于编写 Verilog 代码并导出 vo 文件。
四、CPLD 使用流程
整体分为 4 个步骤:
- 在 VE 文件里配置引脚关系;
- 建立 CPLD 空工程(prepare LOGIC)并编写逻辑;
- Quartus 下进行工程转换与综合;
- Supra 下编译出最终的 logic.bin。
五、在 VE 里定义引脚和信号关系
A. MCU 和外部引脚的关联
格式:MCU FunctionName + 空格 + Pin脚ID
示例:GPIO4_3 PIN_32
B. CPLD 和外部引脚的关联
格式:CPLD信号名称 + 空格 + Pin脚ID:方向
示例:LED_D3 PIN_32:OUTPUT
执行 prepare LOGIC 后,CPLD 顶层模块会自动生成对应的 input/output 接口。
C. MCU 和 CPLD 之间的关联
格式:MCU FunctionName + 空格 + CPLD信号名称
示例:GPIO4_1 iocvt_chn
注意:
- 对于普通 GPIO,会生成
_in,_out_data,_out_en三个信号。 - 对于带方向的外设信号(如 UART TX),仅生成对应的
input/output信号。 - 输入/输出方向是相对于 CPLD 端而言的。