技术
<strong>前言:</strong>
前面我们都是使用JTAG方式下载比特流文件,然后下载elf文件,最后点击Run as或者Debug as来运行程序。JTAG方式是通过tcl脚本来初始化PS,然后用JTAG收发信息,优点是可以在线调试,缺点是断电后程序就丢失了。为了解决程序丢失的问题,可以制作镜像文件烧写到sd卡或者flash中,上电即可加载程序。
ZYNQ有两大类启动模式:从BootROM主动启动,从JTAG被动启动。
在没有外部JTAG的情况下,处理系统(PS)与可编程逻辑(PL)都必须依靠PS来完成芯片的初始化配置。即借助CPU来完成配置,这也是ZYNQ系列的不同之处。
板子依然使用的是zc702.
参考
书籍《RapidIO The Embedded System Interconnect》
xilinx手册pg007《Serial RapidIO Gen2 Endpoint v4.1 LogiCORE IP Product Guide》
Zynq-Linux移植学习笔记之14-RapidIO驱动开发
<font size="3"><strong>host初始化</strong></font>
直接看RapidIO的初始化,一些底层的比如物理层链路层之类的不需要关心,用到了再去看,毕竟都是基于芯片或者IP来开发。先从高层了解这个过程。
<strong>系统启动过程概述</strong>
<strong>分号</strong>
Tip
不要在行尾加分号, 也不要用分号将两条命令放在同一行。
<strong>行长度</strong>
Tip
每行不超过80个字符
例外:
1. 长的导入模块语句
2. 注释里的URL
不要使用反斜杠连接行。
Python会将 圆括号, 中括号和花括号中的行隐式的连接起来 , 你可以利用这个特点. 如果需要, 你可以在表达式外围增加一对额外的圆括号。
这年头GitHub可谓是程序员必备交友技能。毫无疑问GitHub现在已经是全球最大的开源社区了,也常常被人戏称为“全球最大同性交友平台”。
你可以在这里follow各种开源社区的技术大牛,学习到各种各样的开源技术和开源项目。
那么作为一个嵌入式工程师,我们应该如何用好GitHub呢?GitHub可以用来做些什么好玩有意思的事情呢?
<font size="3"><strong>追随开源项目</strong></font>
要说在嵌入式方面应用最广的是什么,大家一定不会忽略Linux。
<font color="#FF8000">作者:Huster-ty </font>
Xenomai是一种采用双内核机制的Linux 内核的强实时扩展。由于Linux 内核本身的实现方式和复杂度,使得Linux 本身不能使用于强实时应用。在双内核技术下,存在一个支持强实时的微内核,它与Linux 内核共同运行于硬件平台上,实时内核的优先级高于Linux 内核,它负责处理系统的实时任务,而Linux 则负责处理非实时任务,只有当实时内核不再有实时任务需要处理的时候,Linux内核才能得到运行的机会。所以Xenomai与传统Linux组成双内核以弥补Linux实时性差的缺陷。
<strong>前言:</strong>
ZYNQ 7000有三种GPIO:MIO,EMIO,AXI_GPIO
MIO是固定管脚的,属于PS,使用时不消耗PL资源;EMIO通过PL扩展,使用时需要分配管脚,使用时消耗PL管脚资源;AXI_GPIO是封装好的IP核,PS通过M_AXI_GPIO接口控制PL部分实现IO,使用时消耗管脚资源和逻辑资源。
使用的板子是zc702。
<strong>1.MIO方式</strong>
为了快速实现算法板级验证,PC端需要通过JTAG或以太网与FPGA形成通路。最简单便捷的方案是利用协议栈芯片,用户可以无视底层,利用简单的SPI协议读写寄存器实现复杂的TCP UDP等网络协议。当然带宽会受限于SPI接口有效速率,本文采用芯片为W5500,支持10M/100M自适应,其理论值高达80Mbps,基本达到算法验证的要求。
ZYNQ可以通过灵活的EMIO模拟SPI接口,从而在最少改动官方demo的前提下移植C语言驱动程序。本文着重讲述EMIO的C语言软件驱动方式及可重用封装,封装后可以接口方式被其他应用程序直接调用,非常方便。直接上代码,再加以说明。
/*
* EMIO_ope.c
*
*/
在Xilinx提供的很多ip如VDMA ,OSD,Mixer,TPG等等,在使用前都需要进行配置,配置接口往往是AXI-Lite接口,正常情况下我们一般自己编写配置逻辑或者通过MB/ZYNQ等对IP进行配置,如果在我们使用到XDMA的同时也使用到需要AXI-Lite配置的ip的话,那么有一种新的方法可以对这类型IP进行配置。首先说说XDMA,XDMA是Xilinx封装好的PCIE DMA传输IP,可以很方便的把PCIE总线上的数据传输事务映射到AXI总线上面,实现上位机直接对AXI总线进行读写而对PCIE本身TLP的组包和解包无感。
FPGA毕竟不是ASIC,对时序收敛的要求更加严格,本文主要介绍本人在工程中学习到的各种时序约束技巧。
首先强烈推荐阅读官方文档UG903和UG949,这是最重要的参考资料,没有之一。它提倡要在设计的早期阶段就要排除问题,越到后期时序的改善就越困难。其中HLS层次对性能的影响是最大的。
本文将从代码风格,时序修正,工程设置等几个方面介绍本人的实践经验,希望让各位初学者快速提高,也希望FPGAer能给出宝贵建议。
<strong>1. 代码风格</strong>
推荐使用Xilinx language templates的代码块,这里的代码能够综合出正确且结构简洁的电路,包括移位寄存器,乘法,复数乘法,FIR滤波器等,凡是涉及到的模块尽量使用官方写法。
<strong>前言:</strong>
使用的板子是zc702。用Vivado的IP核搭建最小系统,包括ARM核(CPU xc7z020),DDR3(4×256M),一个UART串口(Mini USB转串口),纯PS,通过串口打印出HelloWorld,工程虽小,五脏俱全,算是一种朝圣。配置要和板子对应,大家注意修改。
操作步骤:
硬件部分
<font color="#FF8000">作者:做但不能忘思考 ,来源:FPGA2嵌入式</font>
<strong>0. 概述</strong>
做FPGA开发或者是嵌入式开发,数字图像处理是一个很大的领域,回顾下大学里学的模电,数电,单片机原理,数字图像处理,通信理论,MATLAB,目前比较前沿的Python等知识联系起来,能更好的指明人生规划的方向。
<strong>1. 模拟电路</strong>
在Vivado FIR滤波器设计与仿真(一)中产生了两路正弦信号,频率分别为4MHz和5MHz,今天要进行FIR滤波器设计,在进行滤波器设计之前,需要对滤波器的参数进行设置,需要借助MATLAB软件或者Filter Solutions软件,这次使用Filter Solutions来进行参数设定。
<strong>一. 概述</strong>
Verilog HDL不同于我们学过的C,Python等软件设计语言;Verilog是一门硬件描述语言。这里有两个关键词:硬件,描述。
硬件:表示我们时刻要从数字电路系统的角度去认识和学习Verilog HDL
描述:而不是设计。因此表示在用动手进行Verilog编写之前,电路的架构至少已经在你脑子里构建好了,而Verilog只是把它描述出来而已。
从上面两点可以看出,Verilog的学习与编写,不能想软件那样自由,要以数字电路系统为根本。
反过来讲,学习Verilog,可以从下面三个问题入手:
1.设计对象有哪些需要描述?
2.如何描述它们?
前言:
偶数分频容易得到:N倍偶数分频,可以通过由待分频的时钟触发计数器计数,当计数器从0计数到N/2-1时,输出时钟进行翻转,并给计数器一个复位信号,使得下一个时钟从零开始计数。以此循环下去。
奇数分频如何得到呢?
第一部分 奇数分频
奇数分频方法:
N倍奇数分频,首先进行上升沿触发进行模N计数,计数到(N-1)/2时输出时钟翻转,同时进行下降沿触发的模N计数,计数到(N-1)/2时输出时钟翻转时,进行输出时钟时钟翻转。两个占空比非50%的n分频时钟相或运算,得到占空比为50%的奇数N分频时钟。
或者使用“相与”,方法与上相同,只是翻转的数值变为(N-2)/2。
本文设计思想采用明德扬至简设计法。上一篇博文中定制了自定义MAC IP的结构,在用户侧需要位宽转换及数据缓存。本文以TX方向为例,设计并验证发送缓存模块。这里定义该模块可缓存4个最大长度数据包,用户根据需求改动即可。
该模块核心是利用异步FIFO进行跨时钟域处理,位宽转换由VerilogHDL实现。需要注意的是用户数据包位宽32bit,因此包尾可能有无效字节,而转换为8bit位宽数据帧后是要丢弃无效字节的。内部逻辑非常简单,直接上代码:
`timescale 1ns / 1ps
Vivado HLS中常见的接口类型有:
1. ap_none
默认类型,该类型不适用任何I/O转换协议,它用于表示只读的输入信号,对应于HDL中的wire类型。
2. ap_stable
只用于输入信号,其具体实现方式仍为ap_none。它用于向Vivado HLS的综合器表明该信号在两次复位之间值是不变的。
3. ap_vld
在数据端口port_name的基础上创建一个额外的数据有效信号指示< port_name >_vld。
4. ap_ack
在数据端口port_name的基础上创建一个额外的应答信号指示< port_name >_ack。
5. ap_hs
对于ZYNQ MPSoC有以下几个文件,
1.FSBL
这个FSBL跟zynq-7000的fsbl是一样的,用户可以选择用cortex-a53制作启动的fsbl文件,也可以选择用cortex-r5来制作启动的fsbl文件。
2.PMUFW (pmufw.elf)
PMU的配置文件,但这个不是必须的,用户是可选的,MPSOC有LPD.FPD.PL三路电源轨,PMU是为了更好的管理电源和控制功耗,一般情况下,大部分客户不需要修改这个elf文件,这个文件不是制作BOOT.bin必须要的。
3.ARM Trusted Firmware(bl31.elf)
ARM Trusted Firmware文件,是一个arm加密固件,用户根据需要来定制,这个文件不是制作BOOT.bin必须要的。