全系AG32芯片均内置2K逻辑门资源,支持FPGA/CPLD逻辑开发,芯片功能使用分为三种模式,开发者可根据项目需求灵活选择:
仅使用MCU内核:无需阅读本文档,按常规MCU开发流程即可;
仅使用CPLD逻辑资源:硬件设计与操作流程参考官方文档《MANUAL_AGRV2K_3.0.pdf》,无需阅读本文档;
MCU+CPLD联合编程:必须严格按照本文档流程,完成全套开发、配置、编译及烧录操作。

一、开发基础认知
1.芯片架构特性
AG32芯片由MCU内核与CPLD逻辑模块两部分组成,二者相对独立、互不干扰,同时支持信号互通联动:两部分拥有独立的编译、下载流程,芯片正常运行需同时烧录MCU固件BIN文件与CPLD逻辑BIN文件。
2.引脚映射核心规则
与ST系列芯片固定GPIO引脚映射不同,AG32芯片的GPIO、外设引脚均非固定配置,所有引脚关联、信号互通均通过VE配置文件定义。VE文件核心作用包含三点:
配置MCU外设、GPIO与芯片外部引脚的映射关系;
配置CPLD逻辑与芯片外部引脚的映射关系;
配置MCU与CPLD之间的内核信号互通通路。
3 联合编程工程规则
MCU+CPLD联合开发模式下,CPLD工程由VSCode的prepare LOGIC命令自动生成,禁止通过Supra工具手动创建。CPLD开发完全依托VSCode工程体系,不再独立运行,其顶层模块的输入输出信号,均由VE文件配置自动关联至MCU工程。
4 CPLD运行模式说明
5 默认逻辑模式(仅MCU运行)
项目仅使用MCU功能时,VE文件只需配置MCU相关引脚。在VSCode执行upload LOGIC指令后,系统会自动生成空白默认逻辑、编译并烧录CPLD固件,全程无需开发者干预,逻辑模块无自定义功能。
6 自定义逻辑模式(MCU+CPLD联合运行)
项目需同时启用MCU与CPLD功能时,需开启自定义逻辑模式。VE文件需完整配置三类信号关联:MCU与外部引脚、CPLD与外部引脚、MCU与CPLD内核信号。
通过VSCode执行prepare LOGIC可自动生成CPLD工程框架,开发者在框架内编写自定义逻辑代码,编译生成BIN文件后,统一通过VSCode完成烧录,外层流程与默认逻辑模式完全一致。
7 CPLD整体开发流程概览
完整开发流程:VSCode配置VE文件 → 执行prepare LOGIC生成CPLD工程框架 → Quartus编写逻辑代码、导出VO文件 → Supra编译生成BIN文件 → VSCode烧录固件。
二、CPLD详细开发流程
2.1 开发工具安装要求
CPLD/FPGA开发需搭配两款专用工具,工具分工明确,缺一不可:
Supra.exe:SDK安装后自动部署,无需额外安装。若路径缺失,可在目录AgRV_pio\packages\tool-agrv_logic\bin中查找,建议创建桌面快捷方式方便调用,主要用于将VO文件编译为最终烧录BIN文件。
Altera Quartus II:需用户自行安装,禁止使用Lite精简版,推荐固定版本:Quartus II 64-Bit Version 13.0.1 Build 232 06/12/2013 SJ Full Version,安装后需配套安装Cyclone IV E器件库,主要用于编写Verilog代码、转换工程、生成VO文件。
2 创建CPLD空白工程
本步骤基于已搭建完成的VSCode+MCU SDK开发环境,若无基础环境,需先参考《AG32开发环境搭建.pdf》完成环境部署。
3 开启自定义逻辑配置
以官方example例程(路径:…\AgRV_pio\platforms\AgRV\examples\example)为例,默认未开启自定义IP,需修改根目录platformio.ini文件,顶格添加以下两行配置(无前置空格):
ip_name = analog_ip
logic_dir = logic
4 生成工程框架
配置保存后,VSCode左侧工具栏将出现【Prepare LOGIC】功能,点击该按钮,工程目录下会自动生成logic文件夹,即为CPLD开发模板工程。
5 工程命名规则
工程文件夹、核心文件名均由platformio.ini配置项控制,支持自定义修改,修改后需重新执行【Prepare LOGIC】生效:
board_logic.ve:对应logic目录下顶层V文件名称;
ip_name:对应用户自定义逻辑模块V文件名称;
logic_dir:对应CPLD工程根文件夹名称。
2.2.4 核心文件说明
生成的logic目录包含两个核心Verilog文件,分工明确,严格禁止随意修改:
analog_ip.v:用户自定义逻辑入口文件,空白模板仅保留模块接口,所有CPLD功能代码均在此文件中实现;
example_board.v:工程顶层模块,由VE配置自动转换生成,负责关联MCU、系统内核与用户逻辑,禁止手动修改。
6 配置更新适配规则
后续修改VE引脚配置后,重新执行【Prepare LOGIC】会更新工程模板:顶层文件example_board.v直接覆盖更新,用户逻辑文件analog_ip.v不会被覆盖,同时生成analog_ip_tmpl.v最新接口模板,需用户手动将新接口合并至自定义逻辑文件中。
补充:创建工程前需提前在platformio.ini中配置board_logic.device,匹配芯片引脚规格(32/48/64/100脚)。
7 Quartus工程打开与配置
使用Quartus II打开example\logic工程,首次使用需确认器件选型:选择Cyclone IV E系列EP4CE75F23C8器件(官方例程默认已配置,仅需核对)。
工程内三类文件功能说明:
analog_ip.v:用户功能开发入口,自定义逻辑全部在此实现;
example_board.v:顶层绑定文件,关联系统与用户逻辑,禁止修改;
alta_sim.v:芯片系统内核封装库,提供底层功能支撑,无需关注、禁止修改。
8 工程转换与编译(Quartus端)
首次导入工程必须执行工程转换,后续代码修改可直接编译,操作步骤如下:
打开Quartus菜单栏,点击【tools】→【Tcl Scripts…】;
选中对应脚本并点击【Run】执行工程自动转换与编译;
执行完成后可查看逻辑资源占用(最大不超过2K),同时在路径\logic\simulation\modelsim下生成核心VO文件;
后续迭代开发:修改代码后可直接点击编译按钮,无需重复执行脚本转换。
9 固件编译(Supra端)
打开Supra工具,加载example\logic工程;
点击左上角【Tool】→【Compile】,在弹窗中点击【run】启动编译;
提示Compile design example_board done with code 0即编译成功,logic目录下生成最终可烧录CPLD.BIN文件。
10 固件烧录(VSCode端)
CPLD固件最终烧录需回到VSCode工程,执行烧录指令完成固件下载,实现MCU与CPLD双固件联动运行。
11 迭代开发简化流程
修改VE引脚配置:重新执行Prepare LOGIC → 合并模板接口 → Quartus编译 → Supra编译 → VSCode烧录;
仅修改CPLD逻辑代码:Quartus编译 → Supra编译 → VSCode烧录。
三、核心配置规则详解
1 自定义模块命名规范
用户自定义逻辑的模块名称、文件名必须与platformio.ini中ip_name配置值完全一致,该绑定关系由Prepare LOGIC自动匹配,手动修改命名会导致Quartus编译异常、工程匹配失败。
2 VE文件三类信号关联规则
VE文件是MCU、CPLD、外部引脚三者联动的核心桥梁,所有信号关联配置后,执行Prepare LOGIC即可自动生成CPLD顶层接口。
3 MCU与外部引脚关联
用于配置MCU外设、GPIO的引脚映射,为常规MCU开发配置,格式:MCU功能名 + 引脚ID。
示例:
GPIO4_3 PIN_32:MCU GPIO4_3映射至32号引脚;
UART0_UARTRXD PIN_31:串口0接收引脚映射至31号引脚。
4 CPLD与外部引脚关联
用于配置CPLD逻辑直接操控外部引脚,格式:CPLD自定义信号名 + 引脚ID:方向。
方向支持三种:INPUT(输入)、OUTPUT(输出)、INOUT(双向,默认),方向参数可省略。
示例:LED_D3 PIN_32:OUTPUT,定义CPLD输出信号LED_D3绑定32号引脚,配置后可在CPLD代码中直接控制引脚电平。
5 MCU与CPLD内核信号关联
实现MCU与CPLD的内核数据互通,无需占用外部引脚,格式:MCU功能名 + CPLD自定义信号名。
示例:
GPIO4_1 iocvt_chn:MCU GPIO信号关联CPLD自定义通道;
UART1_UARTTXD txd_chn:MCU串口1发送信号关联CPLD通道。
信号方向规则(以CPLD为参照):MCU输出信号对应CPLD输入信号,MCU输入信号对应CPLD输出信号。系统会根据MCU原生信号方向,自动生成对应CPLD接口,无需手动定义。
补充:除常规GPIO、外设信号外,芯片支持AHB总线、DMA、复位、启停等内核级信号互通,完整信号列表参考官方《AGRV2K_逻辑设置.pdf》。
四、官方例程解析与开发参考
1 基础例程:CPLD控制LED闪烁
例程路径:网盘「1.led灯闪烁」,为入门级基础案例,核心展示CPLD引脚映射、时钟驱动、逻辑电平控制功能。
开发流程:VE配置CPLD引脚映射 → 生成LOGIC工程 → Quartus编写时钟分频、LED翻转逻辑 → 编译导出VO文件 → Supra编译BIN → 烧录验证。
2 进阶例程:ADC/DAC/CMP模拟功能
例程路径:网盘「2.adcDac例程」,基于官方analog工程开发,实现CPLD将ADC串行数据转为MCU可识别的并行APB总线数据,是MCU+CPLD总线交互的核心参考案例。
3 工程核心文件解析
my_board.v:自动生成顶层文件,完成MCU AHB总线、时钟、DMA信号与CPLD的绑定,禁止修改;
alta_sim.v:系统底层内核库,提供芯片基础总线、时钟支撑;
ahb2apb.v:核心转换模块,实现高速AHB总线转低速APB总线,适配外设数据传输;
analog_ip.v:用户功能入口,集成3路ADC、2路DAC、1路CMP逻辑,实现模拟信号采集与转换。
4 核心总线交互原理
MCU与CPLD通过AHB总线完成数据交互:MCU端将CPLD寄存器统一映射至地址段0x6000000~0x7FFFFFFF,应用层直接操作该地址寄存器即可实现数据读写;CPLD端通过AHB总线信号感知MCU操作,完成对应逻辑响应。
核心时钟说明:
sys_clock:MCU配置的系统主时钟,为CPLD核心工作时钟;
bus_clock:系统二次分频时钟,必须为SYSCLK整数分频,默认与主时钟同频,主要用于APB总线低速外设。
5 例程使用注意事项
该例程完整逻辑占用约1.2K逻辑单元,用户可根据项目需求裁剪多余ADC/DAC/CMP通道,节省逻辑资源;
ADC、DAC、CMP模拟功能的外部引脚为硬件固定映射,不支持VE文件重配置、重映射;
二次开发建议:基于空白LOGIC工程搭建基础框架后,按需合并官方模拟功能逻辑,避免冗余代码。