AGM的CPLD+RISCV初探
m24h2024/06/05原创 极客DIY IP:上海
关键词
AGM

说实在的 FPGA/CPLD对于我而言 比较鸡肋 现在MCU性能不低 而且接口日益集成和统一 一般爱好者都找不到使用的机会 我曾经想在运动控制中使用 后来一想 DIR/STEP接口本身就该淘汰了 至于并行显示或者高速采集接口之类 我也没有多少兴趣

不过 廉价是王道 如果MCU+CPLD够便宜的话 也不是不可以玩玩 比如AGM的AG32VF系列 集成了一个32位RISCV MCU和2k LEs的CPLD 价格与一般的同档次MCU差别不大 TB网页直接说了类似"卷到死"的话

目前该系列有AG32VF103/303/407 不过 其实从价格就可以看出来 区别其实只在引脚数量上 有48/64/100三种 内核都是一样的 邦定不同罢了 flash应该是另一个DIE 有256k/512k/1M (CPLD应该要用最后100-148k)  RAM都是128k CPLD另有4k 主频248M 超频据说能到300多M

需要注意的是ADC/DAC是要占用LEs的 官方提供了verilog代码 满通道全用最多要占到1.5k左右 如果要搞一些自己的电路 估计要放弃一些

官方开发板一向贵 不过 反正不是引脚兼容么  也可以用普通的STM32开发板移花接木 于是3块钱买了块小蓝丸f103国产假冒芯片的开发板 ... 我有个pen 有个apple 于是 pineapple也有了

IMG_20240605_171456.jpg

需要注意的是stm32f103c的35脚是地 ag32vf103c/303c的35脚是IO 稳妥起见要划断铜箔 开发时候为了兼容性 不用那个脚 

官方提供的开发包可以在XXXXXXXXXXXXXXXXXX/AGMCU/AGMCU找到 不过 没有源代码 要在release里面找

AGM提供的文档非常的简陋 但是有了开发包 里面还有例子 基本也就没有太多问题了 开发包基于platformIO

烧录可以通过串口(Boot0接高) 或者使用jlink/usb-bluster/openocd 当然最方便是用openocd了 在开发包里面搜索一下一个叫"XXXXXXXXXg"的文件 就是openocd的脚本 在最前面加上几行

set ADAPTER cmsis-dap
set CONNECT_UNDER_RESET 1
set ADAPTER_SPEED 1000

就可以用"openocd -f XXXXXXXXXg"来连接 (硬件上要提供3.3V电压 连上SWIO/SWCLK)

Open On-Chip Debugger 0.12.0+dev-03761-g5b5e10502 (2024-03-20-10:51)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
Info : Using speed 1000 KHz
Info : CMSIS-DAP: SWD supported
Info : CMSIS-DAP: FW Version = 1.0
Info : CMSIS-DAP: Interface Initialised (SWD)
Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 0 TDO = 0 nTRST = 0 nRESET = 0
Info : Connecting under reset
Info : CMSIS-DAP: Interface ready
Info : clock speed 1000 kHz
Info : SWD DPIDR 0x2ba01477
Info : [cpu] datacount=1 progbufsize=16
Info : [cpu] Disabling abstract command reads from CSRs.
Info : [cpu] Disabling abstract command writes to CSRs.
Info : [cpu] Examined RISC-V core
Info : [cpu]  XLEN=32, misa=0x40801125
[cpu] Target successfully examined.
Info : [cpu] Examination succeed
Info : starting gdb server for cpu on 3333
Info : Listening on port 3333 for gdb connections
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : accepting 'telnet' connection on tcp/4444
Info : device id = 0x40200001
Info : agrv2k.FLASH size = 256kbytes

用"flash banks"命令看看flash的信息 (flash probe ? 或者 flash info ? 可以看到更多没有多少意义的信息)

> flash banks
#0 : agrv2k.FLASH (agrv) at 0x80000000, size 0x00040000, buswidth 0, chipwidth 0
#1 : agrv2k.ROM (agrv) at 0x00010000, size 0x00002000, buswidth 0, chipwidth 0

然后还一种方式 使用USB口烧录  需要在开发包里面找一个叫"dfu_XXXXXXn"的文件 烧录进去

>  flash write_image dfu_usb.bin 0x80000000

用USB线接入 电脑会报道找个COM口 在开发包里面找一个叫"agrv32flash.exe"的程序 就可以通过这个USB COM口烧录程序了 不必每次再连DAPLINK 但是程序就不能放在0x80000000处了 好像要放在0x80008000

> agrv32flash.exe COM16

agrv32flash 1.0.0
Initializing device...
I..I
Done
Interface serial_w32: 57600 8E1
Version      : 0x20
Option 1     : 0x5a
Option 2     : 0xa5
Device       : 0x40200001 (AGM32RV40xxx)
- RAM        : 0x20000000 128KiB
- Flash      : 0x80000000 256KB (size first sector: 1x4096)
- Option RAM : 0x81000000 128B
- System RAM : 0x10000 8KiB

因为目前暂时没有什么想法  找不到CPLD应用方向 验证了一下芯片没坏 可以访问 就停手了 

[修改于 6个月19天前 - 2024/06/05 17:16:36]

来自:综合交流区 / 极客DIY
3
2
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
月光
6个月19天前 IP:江苏
932674

曾经了解过,但是拆机的7010太香了 就没去深入研究过(捂脸

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
量子隧道
6个月19天前 IP:广东
932676

开眼了,很多年没玩这些,这几年变化真快,居然有与STM32管脚兼容的CPLD,很好啊,做小东西方便了。

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
m24h作者
6个月13天前 修改于 6个月13天前 IP:上海
932891

假期做了更多零碎尝试 这里就不多细说 仅做总结 

python环境是必须的 而且要更新到位 开发包里面使用了一些多类型检查方面的新语法 我版本有些低了 只好自己改了下 

MCU开发环境基于platformio 安装很简单 用pip install platformio即可 之后再安装开发包即可 platformio完全可以通过pio命令完成所有需要的操作

目前感觉开发包也有很多问题 比如需要手动在安装好的AgRV_pio\packages\tool-agrv_logic目录下 增加一个package.json文件 不然platformio不认这个目录 后面使用pio会遇到问题

{
  "name": "tool-agrv_logic",
  "version": "1.0.0",
  "description": "tool-agrv_logic",
  "keywords": [
    "tools",
    "logic"
  ],
  "system": [
    "windows_amd64"
  ]
}

vscode不是必须的 我不喜vscode 喜用eclipse 在工程的主目录下 使用命令pio init --ide eclipse就可以用eclipse打开工程了

D:\WORK\custom_ip>pio init --ide eclipse
Resolving debug dependencies...
Project diretory: D:\WORK\custom_ip
PlatformIO Core version: 6.1.15
AgRV Core version: 1.5.0

Already up-to-date.
Updating metadata for the eclipse IDE...
Project has been successfully updated!

但是除了build之类的通用target 还有一些和CPLD方面的target 需要通过命令pio run -t <target>手动执行 也可以手动加到eclipse项目的build target 其中最有用的是prelogic preip logic这三个 建议通过eclipse写/烧MCU代码 CPLD方面还是手动操作就行 反正也需要通过Quartus II和Supra来开发 和eclipse么有关系

debug          Custom    batch         Create Batch   Create Batch bitstream agm_custom_ip_debug_batch.bin
debug          Custom    batch_upload  Upload Batch   Upload Batch bitstream agm_custom_ip_debug_batch.bin
debug          Custom    gc            Garbage Clean  Cleaning up build leftover garbages
debug          Custom    logic         Upload LOGIC   Programming LOGIC bitstream top.bin
debug          Custom    logic_clean   Clean LOGIC    Cleaning up logic environment
debug          Custom    preip         Prepare IP     Preparing LOGIC IP compilation project top
debug          Custom    unlock        Unlock Flash   Setting Flash read unprotect (Unlock)
debug          Custom    wipe          Wipe Flash     Wiping Flash to Factory Settings
debug          Platform  upload        Upload

top            Custom    batch         Create Batch   Create Batch bitstream agm_custom_ip_top_batch.bin
top            Custom    batch_upload  Upload Batch   Upload Batch bitstream agm_custom_ip_top_batch.bin
top            Custom    gc            Garbage Clean  Cleaning up build leftover garbages
top            Custom    logic         Upload LOGIC   Programming LOGIC bitstream top.bin
top            Custom    logic_clean   Clean LOGIC    Cleaning up logic environment
top            Custom    prelogic      Prepare LOGIC  Preparing LOGIC compilation project top
top            Custom    unlock        Unlock Flash   Setting Flash read unprotect (Unlock)
top            Custom    wipe          Wipe Flash     Wiping Flash to Factory Settings
top            Platform  upload        Upload

大概的说 开发设计包括3个部分 MCU的代码  CPLD的设计 以及.ve引脚设计 流程大概如下

  1. 首先需要改写XXXXXXXXXXXXXi 确定board/board_XXXXXXXX/board_XXXXXXXXvice/ip_name/logic_dir等关键参数

  2. 编写board_XXXXXXXX 内容包括时钟的设计 以及MCU/CPLD/外部Pin三方的互联 值得注意的是 开发包中例子的.ve文件都是针对100引脚的 32/48/64引脚的 都需要自己重新编写

  3.  使用pio run -e <环境> -t prelogic来生成CPLD工程 此外 它还会根据.ve文件 生成MCU开发需要的时钟方面的.hx头文件  以及引脚关联有关的其他文件 所以这步即使是不做CPLD开发 也是必须的

  4. 然后就可以使用各种IDE来开发MCU程序了 CPLD方面使用Quartus II来设计 产生.vo文件给Supra使用 需要注意的是Quartus II需要使用正式版 web/lite版本是不行的 官网文档有明确提出这点 此外需要加上cyclone IV和MAX系列的设备包 (仿altera cyclone IV很正常 国内早就实现假货满天飞了 但是为啥要加MAX系列设备包我不太理解 但是也加了)

  5. 最后都需要Supra的compile功能来完成布线 产生.bin文件 即使不做CPLD 引脚映射也需要的

  6. 烧录可以用openocd 可以先烧布线 在flash的最后102400 bytes 然后再烧MCU部分 一般从0x80000000开始



MCU部分 我一直疑惑这是一个固化的RISCV软核 还是一个真正的硬核 但是官网找不到解答 但是其更高端产品是确定带arm硬核的 它提供了类似systick的MTime 以及类似stm32f103的高级定时器 常用的SPI/I2C/UART都有 但是高级应用方面稍有些简陋 

值得一提的是它的GPIO 除了仍然要注意和SPI/I2C/UART/Timer等的共用冲突之外 上拉下拉开漏都不能简单通过API实现 上拉下拉需要在.asf文件中通过命令实现 开漏需要在.ve文件中指定 

有意思的是 GPIO的位掩码非常具有特色 我之前遇到的 假如仅仅需要修改GPIO某些引脚 要么通过读-修改-写的方式 要么通过arm的置位/清除寄存器或者位带操作 而这里是通过不同的访问地址来实现 举个例子 AG32VF的GPIO1 有8个位  假如只要修改第2第5位 就使用GPIO1的data寄存器地址 加上偏移0b100100来读写

CPLD方面 2k的LEs说大不大 实现不了几个复杂的接口 但是说小也不小  甚至可以搭NIOS软核了 而硬IP方面 只有一个PLL 4个Mem9K 样例里面有一些有用的代码 比如ahb2qspi.v ahb2ram.v ram2ahb.v等等 Quartus自带一些有意思的软核 但我还没有实验

MCU 固有外设 CPLD 三方 可以通过AHB(还支持4路DMA) 以寄存器方式 或者Mem9K搭建的buffer互动 CPLD可主可从  也可以通过GPIO等外设连接的方式使用 除了PLL CPLD还可使用MCU时钟或者总线时钟  可以引发4条MCU外部中断线 ... 嗯 可以从下图大概看出 可以和MCU/IO哪些地方互连 (不过 也可能不是所有信号都能用 毕竟有些信号.ve文件可能不支持)

x2.png

引用
评论
2
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
m24h
进士 学者 机友
文章
55
回复
904
学术分
1
2020/01/22注册,1时30分前活动

个人开源项目: XXXXXXXXXXXXXX

主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:上海
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}