前言
最近搞了一块AGM(遨格芯微) AG32VF407 的板子,趁放假前拿来测试下。
AG32VF407 这颗料是 MCU+CPLD 架构的,同类型的比较常见的还有安路和高云的一些芯片。这种芯片相比独立的MCU加CPLD的方案来说集成度高一些,并且MCU和CPLD间交互可以走内部总线或者直接内存 交互,使用起来相比通过外部总线通信来说会方便一些。
基础说明
这颗芯片大部分资料可以从官网下载到:
不过官网上的资料不全、有些内容也比较旧,最好还是找商家直接要。他家的资料还有一个问题是比较乱,最好花时间都看一遍。
这颗SOC芯片架构如下:

相比安路的 EF2M45 和高云的 GW1NSR-4C 这类体验上更多的是FPGA搭载了MCU形式的芯片,AGM的这类芯片使用上来说更加像是MCU搭载了CPLD。不管是外设的丰富度还是RAM、ROM大小来说AGM的这颗料算是一个目前主流的单片机了。
这颗料官方的开发板直接在淘宝上有卖,比较便宜,开发板加上下载调试器一套也就几十到一百多的样子:

这个板子下载调试可以用J-Link或者DAP-Link,官方的下载器就是DAP-Link的,用起来比较方便。
MCU开发基于 VS Code 和 PlatformIO (听说安装SDK时可能会破坏原本用户目录下 .platformio 目录中的内容,最好先进行备份)。CPLD开发基于 Quartus ,然后使用AGM自家的 Supra 软件来编译生成逻辑部分固件。
SDK的安装很简单,安装VS Code,在VS Code中安装PlatformIO(这个可能需要科学上网),然后安装SDK(这里用的 AgRV_pio-1.9.2-win64-release )。安装完成用户目录下的 AgRV_pio 就是SDK包了,里面包含了代码、例程和工具(Supra和Downloader)等。
这颗料在用的时候可以当作单独的MCU用,可以当CPLD用,也可以MCU+CPLD用。主要用到了MCU,那么项目整体都是基于VS Code来构建和管理的。
MCU和CPLD部分分别会编译出 .bin 文件,MCU固件烧录时烧录到Flash的头部,CPLD固件烧录时烧录到Flash的尾部。两部分固件也可以整合成一个,然后可以通过Downloader工具进行烧录。
项目搭建(MCU+CPLD)
如果是使用体验的话跟着官方的文档来就行,直接可以跑SDK包中的例程,我这里以例程为基础来创建自己的项目。
MCU部分
新建项目目录,然后将 AgRV_pio\platforms\AgRV\boards 目录拷贝到项目目录下(只需要其中407部分),然后将 AgRV_pio\platforms\AgRV\examples\example 目录下所有内容拷贝到项目目录下,现在大致的目录结构如下(有部分是项目运行后生成的):

接下来修改 platformio.ini 文件中两个配置就可以编译烧录进行测试了:

先烧录CPLD的,再烧录MCU的,如果提示Flash被锁就解锁下。



这个程序烧录后可以看到板子上D1、D2、D3的LED闪烁。
单片机程序可以直接调试:

CPLD部分
接下来开始测试CPLD部分,这里用了到开发板上的LED4,首先注释掉MCU代码中对于LED4的初始化代码:

接下来注释 .ve 文件中MCU对于LED4的使用,设置CPLD对LED4的使用:

配置启用CPLD:

重新生成项目:

重新生成后可以看到生成的logic目录,这里就是CPLD的项目了:

CPLD开发需要在Quartus中进行,AGM文档中说必须使用Full版本的,不能使用Quartus Lite版本。我这里使用 Intel® Quartus® Prime Lite Edition Design Software Version 22.1.2 for Windows 版本进行了测试,发现可以转换编译,但是固件烧录到板子之后MCU部分程序会在卡在等待PLL启动成功的地方。使用了AGM官方提供的 QuartusSetup-13.0.1.232 就不会有这个问题。
使用Quartus打开项目后首先需要转换:


然后可以正常添加代码进行开发,开发完成后进行编译:

添加了两段代码分别如下:
bash
led led_output (
.clk (sys_clock),
.LED_CTL4 (LED_D4)
);
bash
module led (
input clk,
output LED_CTL4
);
reg LED_4;
assign LED_CTL4 = LED_4;
reg [31:0] clkcount;
always @ (posedge clk)
begin
clkcount <= clkcount+1;
case(clkcount[27:27])
0: LED_4 <= 0;
1: LED_4 <= 1;
endcase
end
endmodule
接下来使用SDK包中的Supra工具编译出逻辑部分 .bin 文件:



接下来就只需要在PlatformIO中重新烧录CPLD固件,重新编译MCU固件、重新烧录。完成后开发板上就可以看到LED4闪烁了。
后记
这颗料总体来说使用上比安路的 EF2M45 要简单许多,比较适合以单片机开发为主的工程师使用,兼具了单片机的简单性和CPLD的灵活性。这个灵活性从单片机的角度来说是真的很灵活了,所有GPIO都可以按需求映射,这个对于画板子来说是很舒服了。
不过这颗料有个比较大的问题就是CPLD开发依赖Quartus,这个在商用的场合上就会让人顾虑了,会不会有合规性问题等。如果一直是这种情况的话这个系列很难做大。