AG32 FPGA部分简单开发

环境

  • Quartus 13.0(Quartus 不能使用Lite 版本,需要使用Full 版本)
  • AGM SDK
  • Supra(快捷方式在SDK目录下,具体路径为AgRV_pio\packages\tool-agrv_logic\bin

FPGA编程

在AG32芯片中,拥有异构双核(RISC-V+FPGA)处理器,包含2K逻辑单元。两者可以同时使用并进行交互,但是FPGA通常是作为MCU的一个外设设备来使用。

简要概述

如果芯片中同时使用mcu 和cpld,cpld的开发流程的简要描述:

  1. 在VE 文件里配置用到的mcu 和pin 之间、mcu 和cpld 之间、cpld 和pin 之间的信号关联。
  2. 在VS code中点击“prepare LOGIC”按钮,生成cpld 的框架工程。
  3. 用quartus 打开该工程并添加自己的逻辑代码,最后转换工程,生成vo;
  4. 用supra 打开转换后的工程,编译出bin,最后回到VS code进行烧录。

fpga使用具体步骤

1. VE文件修改

在AG32 中,mcu 和cpld 和外部引脚,三者是相互独立的。

  1. mcu 用的IO,在ve 里,可以关联到外部引脚Pin_xx。
  2. cpld 用的IO,在ve 里,可以关联到外部引脚pin_xx。
  3. mcu 的某一路信号又可以直接和cpld 的某一路信号,在ve 里,关联起来。

在ve 中定义好以后,运行prepare LOGIC 会自动产生cpld 的顶层模块的输入输出接口,这些接口就是cpld 和mcu 与外部引脚关联的信号通路。

引脚关联格式
  1. MCU:
    在这里插入图片描述

  2. CPLD:这里的方向是CPLD对外部引脚而言,共有OUTPUT、INPUT和INOUT三种格式,SIGNAL则会在生成LOGIC工程时自动添加到顶级逻辑模块中。
    在这里插入图片描述

  3. MCU<->CPLD:其中的FunctionName为mcu 端可用的FunctionName,详细定义可参考《AGRV2K_逻辑设置.pdf》;direction可以省略,为MCU对CPLD而言,如果省略则分别会生成输入和输出信号。
    在这里插入图片描述

如果cpld 里想用信号量数组,并使每个元素对应到不同PIN,可以在ve 里定义如下:

mcu_a[0] PIN_31
mcu_a[1] PIN_32
mcu_a[2] PIN_33
mcu_a[3] PIN_34
2. cpld工程创建

首先,需要在platformio.ini 中添加如下两行,打开自定义ip:

ip_name = analog_ip
logic_dir = logic

其中ip_name就是之后生成自定义verilog文件的文件名,设置过后不可随意更改;而生成工程的顶层文件名则与logic_ve的名称相同。

之后在VS code中点击Prepare LOGIC后,可以看到在当前工程目录下生成一个logic 文件夹,里面存放的就是fpga部分的工程代码。
在这里插入图片描述

其中需要注意的两个verilog文件是analog_ip.v 和example_board.v。其中用户需要实现的功能在analog_ip.v文件中进行编写;example_board.v 是根据VGE中的pin配置,自动转换出来的verilog源码,也是supra工程的top module,不要手工改动。

注意:在后期若对VE文件有所修改,重新Prepare LOGIC 时,会重新生成cpld 工程模板,但 analog_ip.v 对应新增出analog_ip_tmpl.v 文件,而example_board.v 则是直接覆盖

3.工程简介

我们使用Quartus打开logic文件夹中的qdf工程,如下:
在这里插入图片描述

其中各文件定义如下:

  1. analog_ip.v:用户自定义logic 的入口。用户logic 实现在这里编写。
  2. example_board.v:整个logic 的top module。会关联analog_ip 的module 和atla_sim 下的各module。 不要修改该文件
  3. alta_sim.v:封装过的跟AG32 相关的各module。 不要修改该文件

注意:这里的空工程不能马上添加自己的代码,首先要进行工程转换。

工程转换

打开Quartus 的tools->TCL Scripts,如下图所示:
在这里插入图片描述

打开TCL Scripts窗口后,选中af_quartus.tcl并点击run。
在这里插入图片描述

这个转换的过程,顺便进行了cpld 工程的编译。 第一次导入工程,必须执行以上方式来转换。 后续编写和修改cpld 代码后,可以仍然执行上图方式,也可以直接点击菜单栏中的“编译”按钮来编译。
在这里插入图片描述

编译运行成功后,可以看到该logic 占用的资源数量,需要确保使用到的 逻辑单元不能超过2K
在这里插入图片描述

编译完成后,会在logic目录的simulation\modelsim目录下生成vo文件,接下来打开Supra来生成bin文件。

Supra编译

首先打开logic目录下的工程文件
在这里插入图片描述

之后在菜单栏中依次点击【Tool】-> 【Compile】
在这里插入图片描述

在打开的界面中点击【Run】按钮
在这里插入图片描述

编译成功后,会弹窗提示:Compile design example_board done with code 0。然后在logic 路径下可以看到新编译出来的example_board.bin文件。

烧录

完成上面的步骤后,就能够进行代码的烧录了,首先进入VS code,点击Upload LOGIC即可。

FPGA点亮LED

下面以点LED灯为例进行进行fpga使用的介绍。

首先修改VE文件如下

SYSCLK 200
BUSCLK 100HSECLK 8LED1 PIN_34:OUTPUT # LED1

这里我们将PIN_34接到了LED1信号线上。

之后在VS code中点击Prepare LOGIC,生成LOGIC工程,并对其中的user_ip.v文件进行如下修改

module user_ip (output tri0        LED1,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 tri0        mem_ahb_hresp,output tri0 [31:0] mem_ahb_hrdata,output tri0        slave_ahb_hsel,output tri1        slave_ahb_hready,input              slave_ahb_hreadyout,output tri0 [1:0]  slave_ahb_htrans,output tri0 [2:0]  slave_ahb_hsize,output tri0 [2:0]  slave_ahb_hburst,output tri0        slave_ahb_hwrite,output tri0 [31:0] slave_ahb_haddr,output tri0 [31:0] slave_ahb_hwdata,input              slave_ahb_hresp,input       [31:0] slave_ahb_hrdata,output tri0 [3:0]  ext_dma_DMACBREQ,output tri0 [3:0]  ext_dma_DMACLBREQ,output tri0 [3:0]  ext_dma_DMACSREQ,output tri0 [3:0]  ext_dma_DMACLSREQ,input       [3:0]  ext_dma_DMACCLR,input       [3:0]  ext_dma_DMACTC,output tri0 [3:0]  local_int
);
assign mem_ahb_hreadyout = 1'b1;
assign slave_ahb_hready  = 1'b1;reg LED;
reg [24:0] clkcount;assign LED1 = LED;always @ (posedge sys_clock)beginclkcount <= clkcount+1;case(clkcount[24])0:                LED <= 0;1:                LED <= 1;endcaseendendmodule

编译结束后可以看到逻辑资源使用非常少,没有超过2K的限制。
在这里插入图片描述

之后进行Supra编译,编译完成后如下图。
在这里插入图片描述

最后执行Upload LOGIC烧录,烧录完成后,就能够看到LED在疯狂闪烁啦。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/60292.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

github使用基础

要通过终端绑定GitHub账号并进行文件传输&#xff0c;你需要使用Git和SSH密钥来实现安全连接和操作。以下是一个基本流程&#xff1a; 设置GitHub和SSH 检查Git安装 通过终端输入以下命令查看是否安装Git&#xff1a; bash 复制代码 git --version配置Git用户名和邮箱 bash …

hive修改表名、修改列名、修改分区

文章目录 一、修改表二、修改列三、修改分区 官网地址&#xff1a;https://cwiki.apache.org/confluence/display/Hive/GettingStarted#GettingStarted-AlteringandDroppingTables 一、修改表 1、重命名表名 ALTER TABLE table_name RENAME TO new_table_name示例: 将user表…

告别复杂协作:Adobe XD的简化替代方案

Adobe XD是一款集成UI/UX设计和原型创建功能的设计平台。它允许用户进行网页、移动应用的设计&#xff0c;以及原型的绘制&#xff0c;并且能够将静态设计转化为动态的交互原型。尽管Adobe XD提供了这些功能&#xff0c;但它依赖于第三方插件&#xff0c;且插件库有限&#xff…

React Hooks在现代前端开发中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 React Hooks在现代前端开发中的应用 React Hooks在现代前端开发中的应用 React Hooks在现代前端开发中的应用 引言 React Hooks …

ASR+LLM+TTS在新能源汽车中的实战

ASRLLMTTS在新能源汽车中的实战解决方案&#xff0c;已经在路面上大规模应用&#xff0c;下面简单介绍一下&#xff1a; 实战案例 以下是一些国内新能源车机里 ASRLLMTTS 的案例&#xff1a; 蔚来&#xff1a; 蔚来的车机系统在智能语音交互方面有较为出色的应用。其 ASR 技…

Scala图书馆创建图书信息

图书馆书籍管理系统相关的练习。内容要求&#xff1a; 1.创建一个可变 Set&#xff0c;用于存储图书馆中的书籍信息&#xff08;假设书籍信息用字符串表示&#xff0c;如 “Java 编程思想”“Scala 实战” 等&#xff09;&#xff0c;初始化为包含几本你喜欢的书籍。 2.添加两本…

前后端、网关、协议方面补充

这里写目录标题 前后端接口文档简介前后端视角对于前端对于后端代码注册路由路由处理函数 关于httpGET/POST底层网络关于前端的获取 路由器网关路由器的IP简介公网IP(WAN IP)私网IP(LAN IP)无线网络IP(WIFI IP)查询路由器私网IP路由器公网IP LAN口与WIFI简介基本原理 手动配置电…

Tomcat与Nginx之全面比较

概况 Apache Tomcat Apache Tomcat&#xff0c;通常简称为Tomcat&#xff0c;是一个开源的Web应用服务器&#xff0c;它主要用于运行Java Web应用程序。Tomcat实现了Java Servlet和JavaServer Pages&#xff08;JSP&#xff09;技术&#xff0c;这些是Java EE规范的一部分。To…

网络基础协议理论(TCP协议)

TCP协议&#xff08;传输控制协议&#xff09;是网络中一种面向连接的、可靠的、基于字节流的传输层通信协议。以下是对TCP协议的详细简述&#xff1a; 1、TCP协议的基本概念 TCP协议在通信双方建立连接后才能进行数据传输&#xff0c;确保数据的可靠性和顺序性。它广泛应用于…

C语言学习笔记----基础篇

1.数据类型-变量-常量 数据类型 数据类型 │ ├── 基本数据类型 │ ├── 整数类型 │ │ ├── int │ │ ├── unsigned int │ │ ├── short │ │ ├── unsigned short │ │ ├── long │ │ ├── unsigned long │ │ ├…

YOLOv9改进 ,YOLOv9改进损失函数采用SlideLoss来处理样本不平衡问题

摘要 作者提出了一种基于 YOLOv5 改进的实时人脸检测模型&#xff0c;称为YOLO-FaceV2。设计了一个感受野增强模块&#xff08;RFE&#xff09;来提升小尺度人脸的感受野&#xff0c;并引入了 NWD 损失&#xff0c;以弥补 IoU 在小目标位置偏差上的敏感性。针对人脸遮挡问题&a…

设计模式——策略模式(c++)

策略模式&#xff08;Strategy Pattern&#xff09;在 C 中的实现 1. 策略模式定义 策略模式定义了一系列算法&#xff08;策略类&#xff09;&#xff0c;将每个算法封装起来&#xff0c;使它们可以相互替换&#xff0c;达到灵活使用不同策略的目的。在策略模式中&#xff0…

strcpy放字符串,strcat接着放字符串

#include <stdio.h> #include <stdlib.h> #include <string.h>#define MAX_ARGS 10 #define USAGE_LEN 256int main(int argc, char *argv[]) {char usage[USAGE_LEN];char *args[MAX_ARGS];int i, arg_count 0;// 构建使用说明字符串strcpy(usage, "U…

uni-app中使用 unicloud 云开发平台③

文章目录 六、hbuilderX 中使用 unicloud 云开发平台文档传统业务开发流程什么是 unicloudunicloud 优点开发流程uncloud 构成云数据库云存储及 CDN创建云函数工程七、unicloud api 操作云函数调用云函数实现云数据库基本增删改查1. 获取数据库引用云存储操作六、hbuilderX 中使…

用 Python 从零开始创建神经网络(五):损失函数(Loss Functions)计算网络误差

用损失函数&#xff08;Loss Functions&#xff09;计算网络误差 引言1. 分类交叉熵损失&#xff08;Categorical Cross-Entropy Loss&#xff09;2. 分类交叉熵损失类&#xff08;The Categorical Cross-Entropy Loss Class&#xff09;展示到目前为止的所有代码3. 准确率计算…

rust并发

文章目录 Rust对多线程的支持std::thread::spawn创建线程线程与 move 闭包 使用消息传递在线程间传送数据std::sync::mpsc::channel()for received in rx接收两个producer 共享状态并发std::sync::Mutex在多个线程间共享Mutex&#xff0c;使用std::sync::Arc 参考 Rust对多线程…

PDF24:多功能 PDF 工具使用指南

PDF24&#xff1a;多功能 PDF 工具使用指南 在日常工作和学习中&#xff0c;PDF 是一种常见且重要的文档格式。无论是查看、编辑、合并&#xff0c;还是转换 PDF 文件&#xff0c;能够快速高效地处理 PDF 文档对于提高工作效率至关重要。PDF24 是一款免费、功能全面的 PDF 工具…

CentOS 安装 Python 3.11.9完整流程

在 CentOS 上安装 Python 3.11.9 并替换系统中的默认 Python 版本&#xff0c;可以按照以下步骤来进行。请注意&#xff0c;替换默认 Python 版本可能会影响系统的其他工具和依赖&#xff0c;因此请谨慎操作。 步骤 1&#xff1a;安装依赖 首先&#xff0c;确保系统安装了编译…

java数据结构与算法:栈

栈 1、栈的基本概念2、Java模拟简单的顺序栈实现3、增强功能版栈4、利用栈实现字符串逆序5、利用栈判断分隔符是否匹配6、总结 1、栈的基本概念 **栈&#xff08;英语&#xff1a;stack&#xff09;**又称为堆栈或堆叠&#xff0c;栈作为一种数据结构&#xff0c;是一种只能在…

【Conda】Windows下conda的安装并在终端运行

下载 在官网下载 https://www.anaconda.com/download/success 安装 双击 一直下一步安装 配置环境变量 为了在终端运行&#xff0c;需配置环境变量 进入到安装conda的目录并复制路径 设置高级环境变量 在终端运行 输入&#xff1a; conda list表明可以正常运行 参考…