HIZYUAN 发表于 2025-6-12 17:12

AG32 MCU+CPLD 联合编程(案例描述)

本帖最后由 HIZYUAN 于 2025-6-12 17:22 编辑

前言:
AGM是AG32 MCU, 可编程SoC和异构MCU的解决方案提供商, 海振远科技可提供全系列的开发板及SDK资料,方便用户从0开始,快速上手开发。AGM AG32 MCU和FPGA 目前广泛应用于工业,消费,测试测量和医疗等场景。AG32内置的FPGA( AGRV2K) 可升级替代EP570, EPM1270, LATTICE XO2-256,XO2-640, XO2-1200 等。AG32 的管脚可以灵活定义,引脚与STM32。并且内置2KLE FPGA, 非常适合MCU + FPGA/CPLD的应用场景。
目录一、CPLD控制PIN脚(LED闪烁)二、MCU通过CPLD控制PIN脚三、MCU通过寄存器方式操作CPLD1. MCU如何访问CPLD2. CPLD如何判别及响应四、MCU通过AHB转APB方式操作CPLD外设五、CPLD实现一个UartTx“外设”六、DMA在CPLD中的使用七、CPLD中如何使用RAM八、更多样例1.ADC如何从0创建的例程2.ADC+CPLD控制led灯的例程3.ADC+SpiFull的例程

案例列表如下:1. CPLD控制PIN脚(LED闪烁)2. MCU通过CPLD控制PIN脚(LED闪烁)3. MCU通过寄存器方式操作CPLD;4. MCU通过AHB转APB方式操作CPLD外设;5. CPLD实现一个简单的UartTx的外设;6. DMA在cCPLD中的使用(以adc为例);7. CPLD中如何使用RAM;8. 其他更多样例(不再详解,自行看代码注释)
这里所有用到的案例例程,如果需要,请联系海振远科技获取。另外,所有例程请务必参照描述自己重建一份。一则,通过自己手动创建,能更清晰学习整个操作过程;二则,网盘上的例程都是基于当时版本的,在最新版本上未必兼容;三则,需要自己修改的往往是很少的代码(框架和工程都是自动生成,自己只需要填充自己的逻辑),不用费力气去复制整个工程。
以下进入正题。


一、CPLD控制PIN脚(LED闪烁)
功能描述:在 CPLD里驱动两个led灯的闪烁。这是第一个使用到MCU+ CPLD联合编程的样例,也是最简单的一个。在这个样例中,MCU部分屏蔽掉对LED灯的控制,然后在 CPLD里来驱动两个LED灯的闪烁。通过这个样例,会了解到:1.从头到尾新建一个 CPLD工程;2. CPLD中如何和外部PIN脚关联;3.如何通过CLK来驱动LED的闪烁。准备工作:复制上一份example工程作为试验工程;然后屏蔽掉main()函数中对TestGpio()的调用,改为while(1);放开platformio.ini文件中的ip_name和logic_dir两个选项(该动作为:开启自定义logic功能),如图:

操作步骤:就是上节讲到的四步骤,先复习下:1.在VE文件里配置引脚关系;2.建立CPLD空工程(使用prepare LOGIC命令)并编写逻辑;3.Quartus下进行工程转换(和综合);4.Supra下编译出最终的logic.bin;

1. 在VE文件里配置引脚关系可以先删除掉其他的引脚定义,只保留时钟配置。然后添加CPLD控制PIN脚的定义如下:

这里添加的 LED_D3 PIN_32:OUTPUT #LED2 解释如下:LED_D3: 这里是CPLD中用到的信号名称PIN_32: 正常的管脚名字OUTPUT: 对CPLD来说是输出的方向。除了OUTPUT,还有INPUT和INOUT。通过这些关键字限制信号的输出方向。#: VE中的注释符。整行的意思是:定义一个LED_D3的信号(cpld的信号)绑定到Pin32脚上。当LED_D3高低变化时,Pin32将跟着变化。2. 建立CPLD空工程(使用prepare LOGIC命令)并编写逻辑点击VSCode左边栏的 prepare LOGIC,则自动生成空的CPLD工程。该CPLD工程在logic文件夹下。(如果不熟悉,请回看上节描述)此时,打开quartus工程,可以看到 user_ip 中包含了上边定义的 LED_D3和LED_D2 两项:

然后,可以在该user_ip的模块外边(即:endmodule 之后)添加led模块代码如下:

此时,user_ip.v文件里其实有两个moudle: user_ip 和 led。接下来,让led模块在user_ip模块内实例化,让两模块关联起来即可。即:在 user_ip的module内添加led的实例化 如下:

这里的操作过程如果还是不理解,请联系海振远科技获取样例工程。3. Quartus下进行工程转换点击Quartus下的tools->TCL Scripts(如果不熟悉,参考上节介绍),等待转换编译完成。4. Supra下编译出最终的logic.bin再打开Supra软件,对该CPLD工程进行编译(如果不熟悉,参考上节介绍),等待编译完成。到这里,全部编译logic的动作完成。接下来,对该logic进行烧录、对code进行编译并烧录。开发板重新上电后,就可以看到2个led灯的闪烁了。回顾:1.对用户逻辑来说,总入口就是user_ip的module;2.这里新建了一个led的module,里边使用了user_ip的两个led信号和sysclk信号;3.led内部对sysclk进行了分频的使用;

补充信息——关于AG32:
AG32系列32位微控制器旨在为MCU用户提供新的自由度和丰富的兼容外设以及兼容的引脚和功能。AG32VF407产品系列提供卓越的品质、稳定性和非凡的价值。
器件特征:
■ 最大 CPU 速度为 248 MHZ■ 从 Flash 执行零等待■ SRAM 128KB.FLASH 1MB■ 支持浮点■ 1个CAN2.0.5个UART2个I2C■ 2 个基本定时器,5 个高级定时器■ 支持 SDIO 、以太网 MAC■ 支持 USB FS+OTG■ 看门狗■ 3个 12 位、最高 3M SPS ADC(17 通道)、2个 DAC■ 2x 比较器■ RTC, SPI■ 内置2KLE FPGA逻辑单元

联系海 振 远 科技
页: [1]
查看完整版本: AG32 MCU+CPLD 联合编程(案例描述)