打印
[FPGA]

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

[复制链接]
1948|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
HIZYUAN|  楼主 | 2025-6-12 17:12 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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通过寄存器方式操作CPLD
  1. MCU如何访问CPLD
  2. 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逻辑单元


联系海 振 远 科技

6_conew1.png (110.03 KB )

6_conew1.png

7_conew1.png (117.13 KB )

7_conew1.png

8_conew1.png (39.62 KB )

8_conew1.png

9_conew1.png (167.43 KB )

9_conew1.png

10_conew1.png (121.41 KB )

10_conew1.png

11_conew1.png (41.88 KB )

11_conew1.png

102.png (8.39 KB )

102.png

103.png (8.43 KB )

103.png

104.png (8.24 KB )

104.png

105.png (8.42 KB )

105.png

106.png (8.38 KB )

106.png

107.png (8.24 KB )

107.png

108.png (8.46 KB )

108.png

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

35

帖子

2

粉丝