ZYNQ EMIO使用及可重用封装】的更多相关文章

为了快速实现算法板级验证,PC端需要通过JTAG或以太网与FPGA形成通路.最简单便捷的方案是利用协议栈芯片,用户可以无视底层,利用简单的SPI协议读写寄存器实现复杂的TCP UDP等网络协议.当然带宽会受限于SPI接口有效速率,本文采用芯片为W5500,支持10M/100M自适应,其理论值高达80Mbps,基本达到算法验证的要求. ZYNQ可以通过灵活的EMIO模拟SPI接口,从而在最少改动官方demo的前提下移植C语言驱动程序.本文着重讲述EMIO的C语言软件驱动方式及可重用封装,封装后可以…
在上一篇该系列博文中讲解了MATLAB待处理数据写入.bin二进制数据文件的过程,接下来需要将数据通过以太网发送到ZYNQ验证平台.之前了解过Xilinx公司面向DSP开发的System Generator可以通过硬件协仿真的方式,进行算法板级验证.一个是本人不熟悉这种方式,再一个缺乏通用性,也无法在系统层面进行硬件验证.当然方案有很多,熟悉上位机的朋友完全可以自己写个软件完成数据传输和算法结果对比等功能. 这里选择最简单的方案:在上位机通过网络调试助手将数据打包并发送至以太网端口,ZYNQ端利…
一.AXI DMA介绍 本篇博文讲述AXI DMA的一些使用总结,硬件IP子系统搭建与SDK C代码封装参考米联客ZYNQ教程.若想让ZYNQ的PS与PL两部分高速数据传输,需要利用PS的HP(高性能)接口通过AXI_DMA完成数据搬移,这正符合PG021 AXI DMA v7.1 LogiCORE IP Product Guide中介绍的AXI DMA的应用场景:The AXI DMA provides high-speed data movement between system memor…
简单总结一下 封装-即从很多类的抽取相同的代码 写在一个类里. 好处是 代码的重用,安全. 继承-减少代码的书写. 其好处也是 代码的重用. 多态- 把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化. 总的来说还是接口的重用. 那么总结一下,JAVA的三大特征 其好处 就是代码与接口的重用. 封装可以隐藏实现细节,使得代码模块化: 继承可以扩展已存在的代码模块(类): 它们的目的都是为了——代码重用. 而多态则是为了实现另一个目…
面向对象的三个基本特征 封装.继承.多态.其中,封装可以隐藏实现细节,使得代码模块化:继承可以扩展已存在的代码模块(类):它们的目的都是为了——代码重用.而多态则是为了实现另一个目的——接口重用 封装 把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏. 继承 它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展.其继承的过程,就是从一般到特殊的过程. 继承概念的实现方式有三类:实现继承.接口继承和可视继承. 1. 实…
Vue之优化封装请求方法 对于代码中的请求操作 1.接口请求可能需要重用 2.实际工作中,接口非常容易变动, 改起来很麻烦! 我们建议的做法是把所有的请求都封装成函数然后统一的>###组织到模块中进行管理 这样做的好处就是:管理维护更方便,也好重用 封装请求本身! loginIn() { // 对于代码中的请求操作 // 1.接口请求可能需要重用 // 2.实际工作中,接口非常容易变动, 改起来很麻烦! // 我们建议的做法是把所有的请求都封装成函数然后统一的组织到模块中进行管理 // 这样做的…
在一些大的项目中经常使用到模块,在这里,我们将了解一下什么是模块模式.模块模式最简单的方法大家一定会用过,如下所示: var a = { b : 1, c : 2 } 这样一个对象的直接量其实就已经是可以表示一个模块的定义了.但是这里会有些问题:a对象里面的b和c属性是公有的,也就是说我们可以在外面任意改变其值.而模块化设计要求的是我们尽可能的实现模块中的值和方法都不被外部改变,形成独立或者说是私有的环境.所以我们可以这样写: var count = (function(window, unde…
1.for(var i = 0, max = myArray.length; i < max ; i++){ //用myArrayy[i]来做点什么 } 用max存储myArray的长度,防止每次循环去读取数组长度,尤其是当设计到DOM节点集合时,可明显提高效率.(2016-08-22) 2.function foo(){ var a = b = 0; } b会声明为全局变量.原因是:从右到左的赋值过程,首先是 b = 0 ,此情况下b是未声明的,然后是 var a  = b;实际顺序为 var…
简介 Module模式是JavaScript编程中一个非常通用的模式,一般情况下,大家都知道基本用法,本文尝试着给大家更多该模式的高级使用方式. 首先我们来看看Module模式的基本特征: 模块化,可重用 封装了变量和function,和全局的namaspace不接触,松耦合 只暴露可用public的方法,其它私有方法全部隐藏 基本用法 先看一下最简单的一个实现,代码如下: var Calculator = function (eq) { //这里可以声明私有成员 var eqCtl = doc…
自己想要打印EMIO管脚的物理地址,在SDK提供的头文件中加入printf是无法打印的,基于此 我将需要打印地址的几个函数提取出来,放在main函数中,然后在里面加入printf打印这些用户管脚的地址: Ps_SetDirectionPin //设置方向,原函数XGpioPs_SetDirectionPin Ps_SetOutputEnablePin//设置使能,原函数XGpioPs_SetOutputEnablePin Ps_WritePin //写入值,原函数XGpioPs_WritePin…
简介 Module模式是JavaScript编程中一个非常通用的模式,一般情况下,大家都知道基本用法,本文尝试着给大家更多该模式的高级使用方式. 首先我们来看看Module模式的基本特征: 模块化,可重用 封装了变量和function,和全局的namaspace不接触,松耦合 只暴露可用public的方法,其它私有方法全部隐藏 关于Module模式,最早是由YUI的成员Eric Miraglia在4年前提出了这个概念,我们将从一个简单的例子来解释一下基本的用法(如果你已经非常熟悉了,请忽略这一节…
1.概要 Prism介绍 Github: https://github.com/PrismLibrary/Prism 开发文档:https://prismlibrary.com/docs/ Prism是一个框架,用于在WPF.Xamarin Forms.Uno Platform和WinUI中构建松散耦合.可维护和可测试的XAML应用程序. 设计目标 为了实现下列目的:创建能够由模块组成的程序,这些模块能够被单独地编写.组装.部署,并且对于程序来说是可选的 最小化团队之间的依赖,让每个团队专注与特…
---恢复内容开始--- 本次试验学习和掌握zynq的emio的使用,是通过PS控制PL端的GPIO. 1.创建硬件工程,主要就是添加EMIO就可以.当然了创建工程的时候还要注意DDR的设置,根据自己板子的DDR设置相应的参数.依次设置如下参数: 这里设置了3个EMIO口,最多可以设置成64个,具体看应用而定. 设置DDR3参数 2.既然是PL端,那就必需有管脚约束文件了,添加一个管脚约束文件.在管脚约束文件xdc中添加PL的管脚映射. 到这里就有个问题来了,什么知道管脚映射到哪里呢.不着急,打…
五.类是一种对数据和操作高度的封装机制 1)数据封装 unit Unit2; interface type TEmployee = class; private FName: String; public Constructor Create; function GetName: String; procedure SetName(AName: String); end; implementation constructor TEmployee.Create; begin FName:= 'Xu…
使用 AXI_Lite 从口实现寄存器列表的读写,并且自己封装为一个自定义 IP,以便以后使用.本次记录的是 M_AXI_GP0 接口,此接口是 ARM 作为主机,FPGA 作为从机,配置 FPGA 的寄存器或者 RAM. 一.ZYNQ AXI 总线拓扑结构图 黄色部分即为 FPGA 部分. 二.新建 AXI_Lite 寄存器列表 1..点击主页上方菜单 Tools --- Create adn psckage IP ,点击Next 2.选择第四项,Next 3.选择 IP 名称和存放的路径,N…
软件的定时中断很难控制精准触发沿的位置,可以通过 PL-PS 的中断完成精准的定时中断.PL 的中断通过 Verilog 代码产生,这样紧密结合 PS-PL 的处理,发挥各自的优势. 一.PL 侧定时中断 1.实际要求 ① 上升沿中断: ② 高电平宽度不小于1us: ③ 中断计数器的时钟为 200Mhz: ④ 有两个中断: 3ms 和 .5ms 2.Verilog中断代码 //************************************************************…
1 参考 Xilinx ZYNQ 7000+Vivado2015.2系列(四)之GPIO的三种方式:MIO.EMIO.AXI_GPIO 2 理论指示 在PS侧,有PS自己的IO pin,称为MIO,共有54个(编号0-53).如果PS侧IO不够使用,则可以通过扩展的方式来使用PL侧的IO.扩展方式有两中:EMIO和GPIO. EMIO 方式可以将PL侧IO直接看作PS侧IO使用,只是编号从54-117. 而GPIO则没有数量限制.直接挂到AXI总线上就可以. 上图是EMIO和MIO的IO映射关系…
一.GPIO原理 1.GPIO介绍 程序员通过软件代码可以独立和动态地对每个 GPIO 进行控制,使其作为输入.输出或中断. (1)通过一个加载指令,软件可以读取一个 GPIO 组内所有 GPIO 的值. (2)通过一个保存指令,将数据写到一个 GPIO 组内的一个或多个 GPIO . (3)在 ZYNQ-7000 SOC 内,GPIO 模块的控制寄存器和状态寄存器采用存储器映射方式,它的基地址为 0xE000_A000. (4)每个GPIO都提供了可编程的中断.通过软件程序代码可以实现:①读原…
ZYNQ 中PS端GPIO EMIO使用 在使用ZYNQ进行开发设计时,往往需要对一些GPIO引脚进行配置,传统的配置方法通常在PL端进行管脚约束之后在Verilog代码中对相应引脚进行配置.这样如果开发过程中一旦有需要对管脚配置进行修改的话,那么就必须重新进行综合.布局布线.生成比特流文件,如果设计工程相对复杂的话,完成整个过程通常需要相当长一段时间.影响开发效率. 此时,如果将配置引脚的逻辑放在PS端进行的话,更改配置的话就无需对整个工程在进行综合.布局布线.生成比特流文件.只需在SDK中直…
WebDriver对页面的操作,需要找到一个WebElement,然后再对其进行操作,比较繁琐: WebElement element =driver.findElement(By.name("q")); element.sendKeys("Cheese!"); 我们可以考虑对这些基本的操作进行一个封装,简化操作.比如,封装代码: protected void sendKeys(By by, String value){ driver.findElement(by)…
首先介绍一下Dbutils:    Common Dbutils是操作数据库的组件,对传统操作数据库的类进行二次封装,可以把结果集转化成List. 补充一下,传统操作数据库的类指的是JDBC(java database connection:java数据库连接,java的数据库操作的基础API.). DBUtils是java编程中的数据库操作实用工具,小巧简单实用.有兴趣的话可以到官网下载:http://commons.apache.org/dbutils/  下面的工具包正是符合了Common…
目的 1. 简化调用 WebDriver对页面的操作,需要找到一个WebElement,然后再对其进行操作,比较繁琐: WebElement element =driver.findElement(By.name("q")); element.sendKeys("Cheese!"); 我们可以考虑对这些基本的操作进行一个封装,简化操作.比如,封装代码: protected void sendKeys(By by, String value){ driver.find…
一.通过xib描述cell---(cell的高度一致,cell里面控件布局基本一样): 1.(M) 创建模型: -------------------------------------------------------------------------------------------------------------------- 2.(V) 封装xib:     在xib中可以在file‘owner下栏中选中控件按住control键拖线到NewsCell.h中和属性相关联. ---…
因为如今发现做个小项目都是导入n多的依赖包,非常烦琐,仅仅想快点开发完一个个的小需求项目,这个时候真心不想用框架,仅仅能自己写个jdbcutils,尽管网上有非常多有apache的,阿里的,可是感觉用过后都不怎么顺手,然后自己花了点时间写个新的,不喜勿喷 1.我们要写个resultset集合转成bean的回调接口,这个用过spring jdbc的人都知道这玩意 package org.simple.mvc.jdbc.bean; import java.sql.ResultSet; import…
GPIO General Purpose I/O ,网上能找到很多关于znyq gpio 的文章. 分类:EMIO .MIO .AXI_GPIO 硬件系统 MIO和EMIO是在zynq核中配置的,MIO是固定的,EMIO是可选的使用PL的引脚. AXI_GPIO是在PL端使用的GPIO,挂在znyq核的M_AXI_GP接口下使用. 需要zynq核,AXI_GPIO的使用PL端的模块,如AXI_GPIO 软件部分 SDK的库封装是多层次的, 可以使用高层次的 xgpio.h 使用AXI_GPIO需…
一.前言 Xlinx的ZYNQ系列SOC集成了APU.各种专用外设资源和传统的FPGA逻辑,为ARM+FPGA的应用提供助力,降低功耗和硬件设计难度的同时极大提高两者间传输的带宽.之前在研究生课题中使用过ZYNQ搭建环路系统对算法进行板级验证,但并没有深入使用和理解这个异构平台,今天算是对入门的总结.一款SOC的入门必然是GPIO的使用,而中断则是MCU能保证实时性的必杀武器.硬件调试难度高一直是FPGA的痛点,集成ARM的FPGA更是如此,cross-trigger调试有效地解决了这一问题,所…
抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还是可行的...简单说说思路,如有不正确的地方,还望指正^_^ 一.Ajax核心,创建XHR对象 Ajax技术的核心是XMLHttpRequest对象(简称XHR),IE5是第一款引入XHR对象的浏览器,而IE5中的XHR对象是通过MSXML库中的一个ActiveX对象实现的,因此在IE中可能有3个版本,即MSXML2.XMLHttp.…
本文版权归博客园和作者本人共同所有,转载和爬虫请注明原文链接 http://www.cnblogs.com/tdws/tag/NoSql/ 目录 一.基础配置封装 二.String字符串类型数据操作封装 三.Hash散列类型数据操作封装 四.List列表类型数据操作封装(建议自行封装) 五.Set集合类型数据操作封装(建议自行封装) 六.Sort Set集合数据类型操作封装(建议自行封装) 七.发布订阅(Pub/Sub)模式在StackExchange.Redis中的使用 八.主从配置,哨兵相关…
在菜鸟教程自学了redis,总想着像Mysql一样,在C/C++中进行对接.于是查询了一些资料,最后找到了hiredis.然而直接用它的话,难免有点不方便.于是,对其进行封装. hiredis直接去git上克隆,地址:https://github.com/redis/hiredis. 下载好之后,由于其自带Makefile,只要make一下就编译出静态库与动态库了,接着把头文件和静/动态库放在相应的文件夹里就可以了.注意如果使用动态库,而且是放在/usr/local/lib/里,得执行ldcon…
 面向对象的三个特征:封装.继承和多态. Java开发的过程就是找合适的库对象使用,没有对象创建新对象.找对象,建立对象,使用对象并维护对象之间的关系. 类就是对现实生活中事物的描述,而对象就是这类事物实实在在的个体.对应到Java编程中,描述就是class定义的类结构, 对象就是通过new申请堆内存建立的实体.定义类,就是在描述事物,就是在定义属性和行为.属性和行为共同成为类中的成员 (成员变量和成员方法). 成员变量和局部变量的区别: 1.作用范围:成员变量作用于整个类中,局部变量作用于函数…