嵌入式开发

介绍与赛灵思FPGA开发有关的嵌入式实时软件、操作系统、中间件、开发平台、工具以及开源资料等。

前言:

前面我们都是使用JTAG方式下载比特流文件,然后下载elf文件,最后点击Run as或者Debug as来运行程序。JTAG方式是通过tcl脚本来初始化PS,然后用JTAG收发信息,优点是可以在线调试,缺点是断电后程序就丢失了。为了解决程序丢失的问题,可以制作镜像文件烧写到sd卡或者flash中,上电即可加载程序。

ZYNQ有两大类启动模式:从BootROM主动启动,从JTAG被动启动。

在没有外部JTAG的情况下,处理系统(PS)与可编程逻辑(PL)都必须依靠PS来完成芯片的初始化配置。即借助CPU来完成配置,这也是ZYNQ系列的不同之处。

板子依然使用的是zc702.

启动模式设置:

zynq 具有多种启动方式: NOR, NAND, Quad-SPI, SD Card以及 JTAG 。 zynq 如何判断从哪里启动呢? 上电后, zynq 会根据模式管脚的设定选用 boot 的方式。 而这个管脚的设定是通过核心板上的拨码开关实现的。zc702的拨码开关是sw16。

The ZC702 board supports these configurationoptions:
• PS Configuration: Quad SPI flash memory

xilinx zynq RapidIO系统配置

参考

书籍《RapidIO The Embedded System Interconnect》
xilinx手册pg007《Serial RapidIO Gen2 Endpoint v4.1 LogiCORE IP Product Guide》
Zynq-Linux移植学习笔记之14-RapidIO驱动开发

host初始化

直接看RapidIO的初始化,一些底层的比如物理层链路层之类的不需要关心,用到了再去看,毕竟都是基于芯片或者IP来开发。先从高层了解这个过程。

系统启动过程概述

1. host CPU获取引导代码,启动,如果有两个host,则两者是同时启动的。
2. 开始执行系统探测和枚举算法。
3. 枚举所有器件并将相关器件信息记录到器件数据库,建立host和所有endpoint之间的路由。
    •   计算并配置host和所有endpoint之间的最优路径。
    •   用最优路径信息配置switch。
    •   更新路由表。
4. 映射地址空间。

Python这么火,编码风格不可不知!

分号
Tip
不要在行尾加分号, 也不要用分号将两条命令放在同一行。

行长度
Tip
每行不超过80个字符

例外:
1. 长的导入模块语句
2. 注释里的URL

不要使用反斜杠连接行。

Python会将 圆括号, 中括号和花括号中的行隐式的连接起来 , 你可以利用这个特点. 如果需要, 你可以在表达式外围增加一对额外的圆括号。

Yes: foo_bar(self, width, height, color='black', design=None, x='foo',
emphasis=None, highlight=0)

if (width == 0 and height == 0 and
color == 'red' and emphasis == 'strong'):

如果一个文本字符串在一行放不下, 可以使用圆括号来实现隐式行连接:

x = ('This will build a very long long '
'long long long long long long string')

在注释中,如果必要,将长的URL放在一行上。

嵌入式工程师如何用好GitHub

这年头GitHub可谓是程序员必备交友技能。毫无疑问GitHub现在已经是全球最大的开源社区了,也常常被人戏称为“全球最大同性交友平台”。

你可以在这里follow各种开源社区的技术大牛,学习到各种各样的开源技术和开源项目。

那么作为一个嵌入式工程师,我们应该如何用好GitHub呢?GitHub可以用来做些什么好玩有意思的事情呢?

追随开源项目

要说在嵌入式方面应用最广的是什么,大家一定不会忽略Linux。

在GitHub上我们可以很轻松地找到Linus Torvald的linux项目 https://github.com/torvalds/linux

除此之外硬件厂商往往会在GitHub上推出给自家硬件适配的linux驱动源代码,还可以找到
  •   树莓派社区官方维护的 https://github.com/raspberrypi/linux
  •   Xilinx官方维护的linux项目 https://github.com/Xilinx/linux-xlnx

借助vivado来学习FPGA配置模式

DA(Vivado)软件可以很好的帮助我们更好的去学习FPGA相关知识,例如:

  •   记得使用EDA软件自带的语言模板;

  •   新建 IO Planning工程初步引脚分配;

Vivado HLS 图像的获取

作者: OpenSLee,来源:FPGA开源工作室

1. 背景知识

OPENCV(Open Source Computer Vision)被广泛的使用在计算机视觉开发上。使用Vivado HLS视频库在zynq-7000全可编程soc上加速OPENCV 应用的开发,将大大提升我们的计算机视觉开发。

图1和图2展示了如何使用opencv加速zynq-7000全可编程 soc的计算机视觉开发。

1> 使用Vivado HLS开发opencv的计算机视觉IP;

2> 将IP添加到SOC系统中

3> 验证和下板实验

本次重点为HLS的图像读入显示,视频读入显示,以及摄像头的读入显示。

2. HLS 使用到的函数

enum

{

/* 8bit,color or not */

CV_LOAD_IMAGE_UNCHANGED =-1,//读取图像的原通道数

/* 8bit,gray */

Vivado工程经验与时序收敛技巧

FPGA毕竟不是ASIC,对时序收敛的要求更加严格,本文主要介绍本人在工程中学习到的各种时序约束技巧。

首先强烈推荐阅读官方文档UG903和UG949,这是最重要的参考资料,没有之一。它提倡要在设计的早期阶段就要排除问题,越到后期时序的改善就越困难。其中HLS层次对性能的影响是最大的。

本文将从代码风格,时序修正,工程设置等几个方面介绍本人的实践经验,希望让各位初学者快速提高,也希望FPGAer能给出宝贵建议。

1. 代码风格
推荐使用Xilinx language templates的代码块,这里的代码能够综合出正确且结构简洁的电路,包括移位寄存器,乘法,复数乘法,FIR滤波器等,凡是涉及到的模块尽量使用官方写法。

合理的设计代码框架。IO相关的代码、时钟管理单元尽量放在顶层,后者有助于以共享资源从而提高性能降低功耗。模块的输出最好是使用寄存器输出,有助于降低路径延时帮助时序收敛。

Vivado时序分析练习

时序分析在FPGA设计中是分析工程很重要的手段,时序分析的原理和相关的公式小编在这里不再介绍,这篇文章是小编在练习Vivado软件时序分析的笔记,小编这里使用的是18.1版本的Vivado。

这次的练习选择的是ZYNQ的芯片,原本工程是工作在100MHz的时钟,但是作为练习,我们可以把时钟调到一个极限的程度来进行优化。

首先,打开一个工程,更改一下时钟频率,使得工程能够有一些时序问题,我们再通过时序分析的方法对它进行优化。我们这里把原本的100M时钟改成了200M时钟,具体步骤如下:

一:更改时钟之后进行综合,并打开timing analysis

二:通过report clock可以查看全局时钟树的情况

Vivado使用技巧(21)——仿真中的Debug特性

源代码级别调试
Vivado Simulator提供了在仿真过程中debug设计的特性,通过为源代码添加一些可控制的执行条件来检查出问题的地方。总的来说有三种调试方法:

1.使用Step逐行调试
Step命令一次只执行HDL代码中的一行,从而验证和调试设计。运行仿真后,点击Run->Step或工具栏中的Step可执行该命令。Restart可以将时间复位到TestBench的开始。当前执行的代码会高亮显示并且前方有箭头指示:

运行Step后会打开与顶层设计单元相关的HDL文件窗口,在窗口名称上右键->新建水平分组或新建垂直分组即可同时查看HDL和波形窗口。

2.使用断点(breakpoint)调试

Vivado下的仿真入门

本文通过一个简单的例子,介绍Vivado 下的仿真过程。主要参考了miz702的教程,同时也参考了Xilinx的ug937,  xapp199.。

我的软件平台是Vivado 2015.4, 硬件平台是黑金的AC7010, Zynq 7000, 其实与平台关系不大。

本文分为四部分:工程的建立,测试代码,仿真图形输出,更复杂点的例子。

工程和源码下载链接: 链接:http://pan.baidu.com/s/1gflHSdH 密码:fpi5

1:工程的建立:

打开Vivado 软件,
并点击新建工程, New Project,并点击Next

出现如图界面, 输入工程名和路径,我这里是qim

同步内容