假期做了更多零碎尝试 这里就不多细说 仅做总结
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引脚设计 流程大概如下
首先需要改写XXXXXXXXXXXXXi 确定board/board_XXXXXXXX/board_XXXXXXXXvice/ip_name/logic_dir等关键参数
编写board_XXXXXXXX 内容包括时钟的设计 以及MCU/CPLD/外部Pin三方的互联 值得注意的是 开发包中例子的.ve文件都是针对100引脚的 32/48/64引脚的 都需要自己重新编写
使用pio run -e <环境> -t prelogic来生成CPLD工程 此外 它还会根据.ve文件 生成MCU开发需要的时钟方面的.hx头文件 以及引脚关联有关的其他文件 所以这步即使是不做CPLD开发 也是必须的
然后就可以使用各种IDE来开发MCU程序了 CPLD方面使用Quartus II来设计 产生.vo文件给Supra使用 需要注意的是Quartus II需要使用正式版 web/lite版本是不行的 官网文档有明确提出这点 此外需要加上cyclone IV和MAX系列的设备包 (仿altera cyclone IV很正常 国内早就实现假货满天飞了 但是为啥要加MAX系列设备包我不太理解 但是也加了)
最后都需要Supra的compile功能来完成布线 产生.bin文件 即使不做CPLD 引脚映射也需要的
烧录可以用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文件可能不支持)
200字以内,仅用于支线交流,主线讨论请采用回复功能。