# AGM学习 **Repository Path**: wu-xi212/agm-learning ## Basic Information - **Project Name**: AGM学习 - **Description**: 使用FPGA+RISCV结构,本项目包括环境搭建和部分内容 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 6 - **Created**: 2023-07-15 - **Last Updated**: 2023-07-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AG32VF407环境搭建(FPGA+RISCV) 本内容由Lal_Han(http://chengone.cn)补充,辅助进行FPGA开发 # 一、AG32VF407介绍 ![](image/2.png) * 主频248MHz MCU+2K LEs(FPGA)[实测可以跑到384MHz] * 采用合封FPGA+RISC-V内核的方式 * FPGA和RISC-V引脚和单独指定 * 单片机所有引脚可随意指定 * 自带2K的FPGA * MCU部分使用VScode搭建开发环境,FPGA使用Quartus开发 ![](image/3.png) # 二、内核说明 ![](image/1.bmp) 核心优势(自认为): * 单片机引脚自定义 * 内置FPGA * 主频和内存比较高 # 三、开发环境搭建 AGM32 软件链接: https://pan.baidu.com/s/17bp-zAnsYRuVMRTSSVHN5A 提取码: 12ej ## (1)vscode ![](image/4.png) [1687221901394686.pdf (eeworld.com.cn)](http://bbs.eeworld.com.cn/data/attachment/elecplay/upload/file/20230620/1687221901394686.pdf) 参考上面链接,注意事项: * 一定要按流程!一定要按流程!一定要按流程! * 先安装vscode,再安装pytyhon(一定是3.10以上) * 再是platform,接着是sdk ## (2)Quartus 这里引用了CSDN中的文章 ![](image/5.png) https://blog.csdn.net/luoganttcc/article/details/128127499 # 四、MCU+FPGA开发过程 ## (1)编写VE文件 ![](image/6.png) VE文件是必须要首先确定的,代表FPGA和MCU对外引脚连接,必须要进行绑定才可以进行交互(类比esp32的引脚任意定制和FPGA的分配引脚的步骤) ### 1、MCU的类型定义 ![](image/7.png) * 比如,定义gpio到外部引脚:GPIO4_3 PIN_32 * 比如,定义串口0到外部引脚:UART0_UARTRXD PIN_31 * 定义格式为:前边为mcu的FunctionName,后边是PIN脚ID。 ### 2、FPGA与外部引脚 ![](image/8.png) * 比如,定义led到外部引脚:LED_D3 PIN_32:OUTPUT * 定义格式为:cpld信号名称 外部pin脚ID: 方向 * cpld信号名称,是自定义名称,随后在cpld中自行引用; * 方向:有3种:OUTPUT、INPUT和INOUT(FPGA开发) ## (2)修改INI文件,生成logic ![](image/9.png) 这里取消注释。ip_name代表生成的V文件名称,而dir代表是目录名称,可改可不改 ![](image/10.png) * 点击Platform * 选择dev * 选择custom * Prepare(生成logic文件即FPGA文件) ## (3)修改、编译FPGA程序 ### 1、打开FPGA程序 ![](image/11.png) 此时在当前目录下生成了logic目录 ![](image/12.png) 点击qpf文件进入FPGA环境 ### 2、修改程序 ![](image/13.png) 此时选择你自己的FPGA程序(其它的不建议修改,请不要修改),此时在VE文件中定义的LED_D2和LED_D3已经出现在top文件了,且方向为OUTPUT,该两个引脚为VE文件中设定的引脚,方便理解。我这里放置一个对照图,里面的数字就是PIN几,对应STM32F4的外部引脚 ![](image/14.png) 我这里主要写了一个LED的翻转程序 ```verilog module lal_ip ( output LED_D2, output LED_D3, input sys_clock, input bus_clock, input resetn, input stop, input [1:0] mem_ahb_htrans, input mem_ahb_hready, input mem_ahb_hwrite, input [31:0] mem_ahb_haddr, input [2:0] mem_ahb_hsize, input [2:0] mem_ahb_hburst, input [31:0] mem_ahb_hwdata, output tri1 mem_ahb_hreadyout, output mem_ahb_hresp, output [31:0] mem_ahb_hrdata, output slave_ahb_hsel, output tri1 slave_ahb_hready, input slave_ahb_hreadyout, output [1:0] slave_ahb_htrans, output [2:0] slave_ahb_hsize, output [2:0] slave_ahb_hburst, output slave_ahb_hwrite, output [31:0] slave_ahb_haddr, output [31:0] slave_ahb_hwdata, input slave_ahb_hresp, input [31:0] slave_ahb_hrdata, output [3:0] ext_dma_DMACBREQ, output [3:0] ext_dma_DMACLBREQ, output [3:0] ext_dma_DMACSREQ, output [3:0] ext_dma_DMACLSREQ, input [3:0] ext_dma_DMACCLR, input [3:0] ext_dma_DMACTC, output [3:0] local_int ); led led_output( .clk (sys_clock), .LED_CTL2 (LED_D2), .LED_CTL3 (LED_D3) ); endmodule module led ( input clk, output LED_CTL2, output LED_CTL3 ); reg LED_2; assign LED_CTL2 = LED_2; reg LED_3; assign LED_CTL3 = LED_3; reg [31:0] clkcount; always @ (posedge clk) begin clkcount <= clkcount+1; case(clkcount[28:27]) 0: LED_2 <= 0; 1: LED_2 <= 1; 2: LED_3 <= 0; 3: LED_3 <= 1; endcase end endmodule ``` ### 3、编译和导出 ![](image/15.png) ![](image/16.png) 运行后得到使用的逻辑单元 ![](image/17.png) 这个地方不要超过2000 ![](image/18.png) 或者双击Compile Ddsign也可以,建议第一次选择TCL ### 4、supra编译 该软件在安装的SDK根目录下 ![](image/19.png) ![](image/20.png) ![](image/21.png) > 在这里选择logic目录下的project ![](image/22.png) ![](image/23.png) 点击RUN,成功会提示如下 ![](image/24.png) # 五、烧录程序 ## 1、烧录VE 如果有改动需要烧录,没有改动不需要烧录 ![](image/25.png) * 烧录器需要修改的话,在ini文件里修改,选择性取消注释即可,连接单片机的PA13/PA14引脚,即PIN72/PIN76 在vscode中选择打开命令行 ![](image/26.png) 输入指令: ```c pio run -e serial -t logic ``` ## 2、烧录程序 ![](image/27.png) ## 3、烧录FPGA ![](image/28.png) ## 4、补充命令行 ```c 编译(debug):pio run -e dev -v 串口烧录 ve 配置:pio run -e serial -t logic 串口烧录 code:pio run -e serial -t upload 烧录 ve 配置: pio run -e release -t logic 烧录 code: pio run -e release -t upload ```