PS-AXI-GPIO-流水灯设计

1、实验目的

在了解了AXI协议的基本内容后,通过已经设计好的AXI的IP核来了解实际设计中AXI的工作原理和设计原理是必要的。这个实验以前实际上按照教程做过,但是没有过多地注意AXI总线的作用和地位,对于AXI协议还是当作黑盒子处理。但是,如果想要将自己的FPGA设计挂到AXI上,了解AXI的具体原理是必要的。这次的回顾除了对一些操作做出具体的解析外,主要任务就是了解IP核的AXI的原理,为下一步基于AXI4打包FL的IP核打好基础。

2、实验操作

(1)构建硬件平台

从目标看,依次添加PS ,AXI-GPIO两个IP核,按照常用开发板设计好,使用默认的自动补齐和连线。这个硬件平台就搭建完成。

配置来看,led需要四个输出,所以AXI-GPIO需要一个四位位宽的输出GPIO。

然后就可以进入引脚设置和生成bit流。

至于对具体的结构会在后面的实验分析中进行,这里只是大致的看一下操作。详细的操作在下面的博文中有:GPIO实验

(2)实现软件设计

这部分需要补充的就是如何使用AXI总线调用外设。一般来说官方对于ARM内核使用的AXI上的IP核上都有比较全面的库。通过这些封装好的库可以有效地使用AXI协议。这部分只需要考虑如何使用即可。

假设已经知道如何导入硬件和初始化设置,这里主要针对一些简单的ARM功能进行编程,方便调试硬件。

【1】对于一个空的工程而言,加入主函数main是第一步。

【2】使用系统函数是基本的操作。如果熟悉的人当然可以直接加入头文件和调用系统函数,完全没压力。但是对于初学者来说,面对大量的可用资源往往不知从何下手。这里提供一个简单的方法。

先看一下vitis的ARM处理器的操作系统的基本框架:

这是vitis创建工程的目录结构。上面的system,也就是操作系统的文件。下面的wrapper则是硬件资源的初始化文件。感觉这两个的关系类似BOOT和WINDOWS的关系。至于文件内容,如果只是想基于ARM内核做开发的话,可以忽略。但是需要了解大致的分布,方便寻找资源来设计。一开始vitis打开了rsc文件夹。这个文件夹就是源文件(也就是用户文件)放置的地方。在这个地方创建一个包含main的主函数,就启动了这个ARM内核。

【3】面对空无一物的主文件,首先要找的就是需要定一个硬件的地址方便操作。这里的地址有一个主地址和一个从地址。主地址可以在硬件设计时分配,这里是0x4120,可以在address editor中找到并且修改。光有主地址还是不够的,这里还需要从地址。所有的地址在vitis中可以查看:

这就是地址配置文件的目录。注意这个目录是在wrapper下的,可以快速查找到对应设备的地址。

【4】基于地址的操作

这里使用的是官方IP核,一般是有用户手册来标明从地址对应的寄存器。对于自定义的基于AXI4的设计,这部分由设计者掌握。如何快速查找到官方IP的手册,在vivado中有快捷方式。实质上这里就是自动调用DOCNAV打开对应文件。

在BD视图中右击IP核,在列表中找IP document的具体文档,一般第一个就可以。

这里由于我使用DocNav是更新的,所以这里就不展示,以后再解决这个问题。

从地址0x0000就是数据位,默认为输出,这里也不用修改输出模式。所以可以直接基于地址操作寄存器。

【5】寄存器操作

这里就需要在wrapper中找rsc文件,从里面调用响应的函数即可。

3、实验结果

这里只是初步接触基于软件设计的调试,实验结果以后有时间做出来再看。这里首先掌握ARM内核调试的方法,为后面的操作打下基础。

PS-AXI-GPIO-流水灯设计的更多相关文章

  1. C语言基于NIOSII的软件开发及流水灯设计

    一.Quartus II 12.1 (32-Bit)进行硬件设计 1.所需要的系统元器件组成 2.系统电路图 二.Nios II 12.1 Software Build Tools for Eclip ...

  2. 毕业回馈-89C51之GPIO使用(流水灯)

    今天分享一个89c51制作的8位流水灯案例.使用Proteus仿真. 同上一遍文章不同.上一篇文章中对于GPIO操作主要是位操作,即sbit led1=P0^0;其中P0^0代表p0.0这个引脚,然后 ...

  3. (一)GPIO 编程实验 LED 流水灯控制

    7个寄存器 是R1-R16.(当然,里面有很多是分几个模式的,所以总共有37个)类似于单片机的R0-R7. GPXCON,GPXDAT等等是另外的寄存器,应该叫,特殊功能寄存器,类似于单片机的P0,P ...

  4. zedboard学习记录.2.PS+PL 流水灯与uart

    1.建立一个工程. 硬件设计 2.IP integrator -> create block desgin;Run Block Automation. 3.add IP -> AXI GP ...

  5. Xilinx Vivado的使用详细介绍(4):Zedboard+vivado之流水灯(加SDK)

    Vivado+zedboard之初学流水灯 Author:zhangxianhe 环境:vivado 2016.3(已验证适用于2015.4) 开发板:Zedboard version xc7z020 ...

  6. STM32学习笔记(二) 基于STM32-GPIO的流水灯实现

    学会了如何新建一个工程模板,下面就要开始动手实践了.像c/c++中经典的入门代码"hello world"一样,流水灯作为最简单的硬件设备在单片机领域也是入门首推.如果你已经有了一 ...

  7. S5PV210_流水灯

    1.整体思路:把相应的配置数据写入相应的寄存器,控制GPIO电平(Led.s)——运用工程管理Makefile编译.链接文件(由Led.s编译得到led.bin,该文件用于USB启动方式点亮LED,若 ...

  8. 第一个Linux驱动-流水灯【转】

    转自:http://www.xuebuyuan.com/1856562.html 水平有限,描述不当之处请指出,转载请注明出处http://blog.csdn.net/vanbreaker/artic ...

  9. 【接口时序】2、Verilog实现流水灯及与C语言的对比

    一. 软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件:ISE14.7 3.仿真工具:ModelSim-10.4-SE 硬件平台: 1.FPGA型号:XC6SLX45 ...

  10. 第一个FPGA工程—LED流水灯

    这一章我们来实现第一个FPGA工程-LED流水灯.我们将通过流水灯例程向大家介绍一次完整的FPGA开发流程,从新建工程,代码设计,综合实现,管脚约束,下载FPGA程序.掌握本章内容,大家就算正式的开始 ...

随机推荐

  1. 核心MySQL主库优化总结

    公司核心主库,在我来公司时是1主5从库(腾讯云RDS),外加7个自建级联从库. 从2020年2月到2021年8月优化总结: 1,  7个自建多级从库,从以前的中转同步改成从一级从库同步,废弃了5个从库 ...

  2. C++ 指针的错误释放

    错误代码: #include <iostream> int main() { int* ptr = (int*)malloc(4); int i = 1111; ptr = &i; ...

  3. Error creating bean with name 'XXX': Bean with name 'senseOneToSomeFeignImpl' has been injected into other beans [XXXXXX] in its raw version as part of a circular reference

    关于Spring框架中的循环依赖问题,您可以尝试以下几种方法来解决: 重新定义Bean依赖:重构代码以消除循环依赖.这可能涉及重新设计类,使它们不相互依赖即可运行. 使用Setter注入:与构造函数注 ...

  4. Spring + JAX-WS : ‘xxx’ is an interface, and JAXB can’t handle interfaces 错误解决方法

    错误栈 Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 2 counts of IllegalAnnotatio ...

  5. 【Azure 应用服务】Azure Data Factory中调用Function App遇见403 - Forbidden

    问题描述 在Azure Data Factory (数据工厂)中,调用同在Azure中的Function App函数,却出现403 - Forbidden错误. 截图如下: 问题解答 访问Azure ...

  6. 【Azure 应用服务】基于Azure的CI/CD工具链部署App Service

    问题描述 在中国区Azure中,App Service是否支持CI/CD工具部署呢? Windows 和Linux两个系统都是同样的方法吗? 问题解答 目前中国区Azure支持Windows 和 Li ...

  7. C++ auto与循环

    C++ auto与循环 C++ auto 的介绍 typeid(p).name();可以输出auto的类型 auto 是 C++11 引入的一个关键字,用于自动类型推导.编译器会根据初始化表达式的类型 ...

  8. 迈向现代化的.NET配置指北

    一.欢呼 .NET Standard 时代   我现在已不大提 .NET Core,对于我来说,未来的开发将是基于 .NET Standard,不仅仅是面向未来 ,也是面向过去:不只是 .NET Co ...

  9. [.Net]使用Soa库+Abp搭建微服务项目框架(四):动态代理和RPC

    ​上一章我们完成了小项目的面向服务体系改造,你或许一直在思考一个问题.为什么要将业务独立成微服务? 微服务原理 以一个健康医疗系统为例, 这个系统包含了用户模块,问卷的发放与填写,图表显示,报表生成与 ...

  10. JavaScript获取href的值

    1.当href的值为正常网址时: <!DOCTYPE html> <html> <head> <title></title> <met ...