当前位置: 首页 > news >正文

AG32 mcu+cpld 联合编程(概念及流程)

在使用mcu+cpld联合编程之前,请确认已经熟练掌握mcu的使用方法,并且对cpld编程(verilog语言)有一定的基础。

另外,对AHB总线也需要有一定的了解。

这个章节分为两部分:

第一部分,展示联合编程中各种概念和操作流程;

第二部分,从具体案例出发,由浅到深来描述各种常用的编程技巧。

.

以下描述为第一部分(概念和流程)。如要查看实例讲解,请参考第二部分。

.

一、前述

在AG32芯片(所有型号)中,都有内嵌2K的逻辑门,可供fpga/cpld来使用。

也就是说,使用AG32的芯片时,有三种选择:

  1. 只使用mcu部分;
  2. 只使用cpld部分;
  3. 同时使用mcu和cpld(即:mcu和cpld联合编程);

如果:

用于1(仅用做mcu),不必关注此文档。

用于2(仅用做cpld),硬件设计和操作流程,请跳转到“纯粹cpld编程”,也不必关注此文档。

用于3(mcu和cpld联合编程):请按照该文档的描述,先完整走一个流程。

.

二、基础了解

1. AG32整颗芯片包含两部分:mcu和cpld。

  这两部分是相互独立的(各自编译、各自下载),但又可以相互连通起来(信号连通)。

  芯片要把这两部分的bin都烧录进去,才能运行起来。

2. mcu和cpld到外部Pin脚的连通,是通过VE文件来配置的。

  跟ST芯片每个Gpio对应某个固定Pin脚不同,在AG32中,所有的Gpio/大部分的外设,对外引脚并不是定死的。而是需要在VE文件中指定对应。

  VE中,除了配置Gpio到Pin的关联,还可以配置mcu到cpld之间的信号关联。

3. Mcu+cpld联合编程时,cpld工程是由vscode的“prepare LOGIC”命令自动生成的。

  注意:联合编程时,cpld工程不能手工通过supra建立。

  cpld的对外接口,也是依托于vscode工程来的,不再是孤立的。

  cpld中的top module的信号输入,是关联到mcu工程的(由VE配置出来)。

4. cpld在联合编程中的定位:

  整颗芯片运行时,需要两个bin:mcu的bin和cpld的bin。

  如果芯片中只使用mcu不使用cpld:

  此时,VE文件里只配置mcu用到的Pin脚即可。

  这种情况下,vscode工程中点“upload LOGIC”时,会自动生成默认logic(该logic中“用户逻辑”为空而已),并编译出bin并烧录。

  整个过程中,logic部分对开发者来说是无感的。

  如果芯片中同时使用mcu和cpld:

  那么要把工程配置成“自定义logic”。

  此时VE文件里需要配置用到的mcu和pin之间、mcu和cpld之间、cpld和pin之间,三种情况下的信号关联。

  这种情况下,VSCode下点“prepare LOGIC”按钮,会为开发者生成cpld的框架工程。开发者需要在这个框架下完成cpld逻辑的编写。这个编写调试中,开发者持有主动权。等全部开发完成,并编译出bin,烧录就又回到VSCode去烧录。

这个过程,除了logic需要用户自己编写编译外,从更外层的视角看,整个流程还是跟“默认Logic”是相同的。

.

三、安装软件

mcu需要使用到的VSCode前边已经安装过了。

fpga/cpld需要使用Supra和Altera Quartus II两个软件来编程。

其中:

Supra.exe软件在安装完SDK后,已经在SDK路径下了,可直接使用(无需额外安装Supra)。

(注:如果在SDK路径下没有找到Supra.exe,可进入安装路径\AgRV_pio\packages\tool-agrv_logic\bin\去找到。同时建议手工新建一个快捷方式到SDK路径下以方便后续使用)

Altera Quartus II软件需要用户自行安装,安装后再安装对应的器件库。

(注意:Quartus不能使用Lite版本,需要使用Full版本。最好使用版本:Quartus II 64-Bit Version 13.0.1 Build 232 06/12/2013 SJ Full Version)

在这两个软件中,

Quartus工具用来编写vlog代码并导出vo文件,Supra工具使用vo文件来生成最终的bin。

http://www.lryc.cn/news/596565.html

相关文章:

  • OpenMVG OpenMVS 安装全流程常见问题与解决方法总结
  • 学习软件测试的第十九天
  • imx6ull-系统移植篇18——linux顶层 Makefile(下)
  • API是什么,如何保障API安全?
  • Springboot和postman的使用
  • XSS内容分享
  • 智能泵房监控系统:物联网应用与智能管理解决方案
  • Qt中QObject类的核心作用与使用
  • Qt 事件处理机制深入剖析
  • List<UserInfo> list = new ArrayList<>();为什么要这样创建数组?
  • 如何用keepAlive实现标签页缓存
  • 从 COLMAP 到 3D Gaussian Splatting
  • 滑动窗口经典问题整理
  • langchain4j之RAG 检索增强生成
  • Linux操作系统之线程(六):线程互斥
  • TCP day39
  • 质量即服务:从测试策略到平台运营的全链路作战手册
  • 重生学AI第十九集:VGG16的使用以及模型的保存与加载
  • 【期末考试复习】计算机组成原理 - 直接补码阵列乘法器
  • 【接口自动化】pytest的基本使用
  • CSS+JavaScript 禁用浏览器复制功能的几种方法
  • web登录页面
  • 黑马点评练习题-给店铺类型查询业务添加缓存(String和List实现)
  • kafka4.0集群部署
  • 数据结构01:链表
  • docker compose 安装使用笔记
  • Docker实战:使用Docker部署TeamMapper思维导图工具
  • 【实时Linux实战系列】基于实时Linux的传感器网络设计
  • Spring Boot音乐服务器项目-登录模块
  • 【论文阅读】Fast-BEV: A Fast and Strong Bird’s-Eye View Perception Baseline