基于Xilinx Zynq的物距测量系统设计与实现

摘 要:为了对障碍物距离精确测量,基于最新zedboard fpga(现场可编程逻辑阵列)开发板,采用软硬件协同的设计 方法,设计了障碍物距离测量系统的软硬件。系统为智能小车平台提供了完整的距离测量服务,测距范围能够达到2cm~4.5m,精度可达0.2cm。该设计包含从底层硬件电路设计、可编程逻辑ip(intellectualproperty)核设计、到linux设备驱动的设计全部流程,对于在zynq⁃7000fpga上软硬件从事开发的人员有一定的参考价值。
随着集成电路的制造和应用技术的快速发展,嵌入式系统的性能也不断提升,已经被广泛应用于工业控制、航空航天、军事以及消费电子等领域。在硅工艺的发展以及市场推动下,xilinx公司推出了基于7系列fpga的新一代全可编程(allprogrammable)zynq⁃7000系列产品。该系列产品,集成了嵌入式领域集大成者——双核arm cortexa9处理器和7系列28nm工艺fpga芯片。zedboard正是这样一款基于zynq⁃7000产品的实验 开发板卡,提供了软件和硬件设计的更多可能。本文基于目前fpga业界最先进的zedboard fpga(现场可编程逻辑阵列)开发板,从底层硬件电路设计、可编程逻辑ip(intellectualproperty)核设计、到linux设备驱动的设计,实现了障碍物距离测量的软硬件系统,并在智能小车平台上,实现了距离测量服务。该方法对于在zynq⁃7000fpga上软硬件的开发具有指导作用。
1、系统设计 传统上,fpga中嵌入处理器内核,都是以fpga为 主、处理器为辅,设计思路以可编程逻辑为主。然而新一代全可编程的zynq⁃7000采取不同的思路,它是以处理器为主,fpga为辅。fpga变成了arm处理器的一个协处理器[1]。图1为zynq⁃7000soc芯片的结构图。 简单来说,zynq由ps和pl两部分组成:ps(pro⁃cessingsystem,处理系统)相当于一片arm芯片,而pl (programmablelogic,可编程逻辑)相当于一片fpga芯片。
图1:zynq结构图
ps系统结构为:双核a9处理器,其是整个平台的控制中心,处理速度高达1ghz,可通过neon扩展及单精度浮点单元进行增强,拥有32kb指令及数据l1 缓存,统一的512kbl2缓存和256kb片上存储器;存储接口,用以管理片内系统的存储状态,包含ddr3,ddr2和lpddr2动态存储控制器和两个qspi,nandflash及norflash控制器;通用外设,ps中的通用外设是arm直接和外部设备通信的接口,含spi,i2c, can,uart,gpio,usb2.0等;其他组成部分。
pl部分结构为:低功耗可编程逻辑,包含28k~ 350k个逻辑单元,240k~2180k可扩展式blockram和80~900个dspslice;xadc,为pl内置的12b模/数转换器;通用/定制外设,pl中的外设是pl中的器件和 外部通信的接口。在arm接口不够用时,可以利用pl的外设接口。ps和pl之间的数据交互,则是通过axi(advancedextensibleinterface)接口实现的。具体有:高性能axi接口(highperformanceaxislaveports),共4个;通用axi接口,包括两个主设备接口和两个从设备接口,共4个;加速一致性端口,是arm多核架构下定义的一种接口。
根据zynq结构特点,在应用系统结构设计时注意,使用由zynq这样一款功能强大的soc芯片,与一般的arm芯片不同,与常用的fpga,更存在区别。它要求 硬件和软件之间进行协同设计,共同实现既定的性能指标要求。在soc设计中,ip(intellectualproperty,知识产权)核重用技术是一个很重要的概念,它是软硬件协同设计的关键,通过标准化ip核可以实现模块复用,可以完成大规模的、复杂的soc设计[3]。
本文以一个超声波测距系统为例,介绍如何在zynqsoc上,定制ip、设计linux设备驱动等,并完整的阐述了从硬件到软件的设计流程。设计的系统结构如图2所示。ps上,运行linux操作系统,为linaroubuntu发行版。根据文献[2]的指导操作,使用xilinx公司的开发软件完成配置,使ps可以运行操作系统。
图2:系统结构图
pl部分按照系统控制的需求进行定制。设计基于 xilinxaxi总线的超声波处理外设ip核,与外部的超声波发射和接收电路交互。在linux操作系统下,这个ip核就成为了一个设备,这就需要编写相应的设备驱动程序,实现超声波测距功能的封装。
2、 主要模块设计 2.1 超声波测距模块
该模块基本工作原理是:通过超声波发射探头,发射频率为40khz的超声波信号;当超声波信号遇到障碍物时,会发生反射;当超声波接收探头接收到40khz频率附近的声波信号时,经过信号调理电路;再通过系统计算接收与发射之间的时间差计算障碍物距离。
图3测距模块
设计中共使用到了三个相同测距模块,分别测量三个不同的方向上障碍物距离。测距模块分为超声波发射部分和接收部分,模块的电路结构如图4所示。具体是采用hc⁃sr04超声波测距模块,进行硬件设计[6]。该电路的对外接口为触发(trig)控制端和回响(echo)信号接收端。通过i/o口trig触发测距,提供了一个10ms以上的高电平触发信号,该模块将发出8个40khz的方波用于探测,并自动检测是否有回波信号。一旦检测到有回波信号则通过i/o口echo输出一个高电平回响信号,且回响信号的高电平时间th(单位:ms)即高电平持续的时间与所测的距离s成正比。其对应关系为:
式中:s为测试距离;th为高电平时间(单位:s);v为声速340m/s。
发射部分:利用串口转换芯片的升压功能,采用max232将输入jn1和jn2的3.3vttl电平转换,得到5v电平。它激励超声波发射探头的信号压差为10v, 发出40khz的超声波。如图4所示。
图4 发射电路
接收部分:对回波信号进行滤波、放大处理。接收电路图如图5所示。其中net9为控制接收电路工作的使能端口,net10为接收电路工作且接收到了回波信号时的响应信号。
图5: 接收电路图
2.2 ip核设计
使用xilinx的设计工具xps(xilinxplatformstudio) 建立ip的流程,新建一个ultrasonic(超声波)ip核模块。该ip核的模块结构如图2所示中的超声波处理外设部分,其中triggercounter,clockgen和echocounter使用veriloghdl实现。根据超声波测距模块的测距时序要求,设计触发和回响信号的逻辑,由triggercounter和echocounter实现。最终将测量到的数据放到axi4定义的寄存器中,使处理器能从axi总线上读取数据。本ip核有4个寄存器(reg0~reg3),与axi4总线相连,用户可以通过这4个寄存器控制发射超声波,获取测量的距离。其中,reg0的功能是使能一次测距以及三个方向上测量完毕标志,图6为reg0寄存器映射表;reg1~reg3为计数后计算得到的三个方向上超声波测量到的距离数值。将设计的ip核添加到xps工程中去,分配得到的地址空间为0x6e000000~0x6e00ffff。
图6:reg0寄存器映射表
2.3 linux驱动设计
linux设备驱动分为三类:字符设备、块设备和网络 设备。在这里需要编写的是一个字符设备[5]。另外,编写的设备将通过模块化的方式加载到操作系统中,而不是静态编译到内核中。驱动程序在交叉编译环境下,进 行模块化编译。得到以.ko为扩展名的驱动文件,使用 insmod和rmmod进行加载或者卸载,同时也可以通过lsmod查看是否已被加载。
建立一个ultrasonic_driver.c文件,使用交叉编译环 境进行编译,得到对应的可加载文件ultrasonic_driver.ko。在ultrasonic_driver.c中声明设备名称和模块的物理地址,该物理地址对应于xps中建立的嵌入式系统的地址。具体如下:
#definedevice_nameultrasonic_moudle#defineultrasonic_moudle_phy_addr0x6e000000
该设备驱动的主要函数有:设备初始化ultrason⁃ic_driver_module_init();三个方向上的距离测量函数,sys_ultrasonic_front_get(),sys_ultrasonic_right_get()和sys_ultrasonic_left_get();设备注销ultrasonic_driv⁃ er_module_exit()。
(1)设备初始化函数,完成注册信息,当进行ins⁃mod操作时,操作系统会自动调用初始化函数,完成各 项信息的注册。而设备注销操作,与它相反,不做赘述。该初始化函数中,需要完成如下工作[4]:内核注册设备驱动;创建ultrasonic_driver设备类;为ultrasonic_driver设备类创建一个ultrasonic_driver_device设备;为设备创建以下几个文件:dev_attr_ultrasonic_trigger,dev_attr_ultra⁃sonic_front,dev_attr_ultrasonic_right,dev_attr_ultrason⁃ic_left,分别对应三个方向上的距离数值;将模块的物理基地址映射到虚拟地址上;同时将其他几个寄存器地址计算得到虚拟地址;打印调试信息,表明完成初始化工作。
(2)距离测量函数,以前向(front)测距为例,另外两个方向(right,left)上类似。linux中,sysfs是一种基于ram的文件系统,它提供了一种用于向用户空间展现内核空间里的对象、属性和链接。sysfs与kobject层次紧密相连,它将kobject层次关系表现出来,使得用户空间 可以看见这些层次关系。可以通过cat和echo接口命令来读/写sysfs。使用函数宏device_attr创建接口如下:
staticdevice_attr(ultrasonic_front,s_irusr|s_iwusr,null,sys_ultrasonic_front_get);
device_attr宏声明有4个参数,分别是名称、权 限位、读函数、写函数。其中读函数和写函数是读/写功能函数的函数名。这样对ultrasonic_front创建一个写函 数sys_ultrasonic_front_get,其流程图如图7所示。
图7:sys_ultrasonic_front_get流程图
进入函数,首先会打印一条调试信息;然后向reg0(ultrasonic_trigger_addr)上写入使能,使开始发射超声波;循环检测reg0的bit1,查看数据是否有效;如果数据有效,则读取出reg1(ultrasonic_front_addr)上的数据值,并打印出来。完成一次读取操作。 完成以上设备驱动设计后,使用配置好的交叉编译环境,将该驱动代码编译为ultrasonic_driver.ko文件。将该文件放入启动的sd卡中。
3系统测试 对xps构建的系统,建立u⁃boot引导,编译配置内 核源码,编译设备树,并制作根文件系统,制作ramdisk镜像文件,得到所有的文件zimage,devicetreee.dtb,ram⁃disk8m.img.gz,boot.bin。放入zedboard板的sd卡中,同时也将ultrasonic_driver.ko文件放入sd卡,上电启动,直至完成。
在连接到zedboard串口的超级终端下,挂载sd,执行如下步骤:
mount/dev/mmcblk0p1/mnt //挂载sd卡
cd/mnt//进入sd卡目录
insmod./ultrasonic_driver.ko//加载ultrasonic_driver.ko模块
dmesg//查看加载打印信息lsmod//查看加载的模块
cd/sys/class/ultrasonic_driver/ultrasonic_driver
//进入创建的设备目录,sysfs下
catultrasonic_front//读取一次前向超声波测量距离
catultrasonic_right//读取一次右边超声波测量距离
catultrasonic_left//读取一次左边超声波测量距离
系统测试后可以在终端里看到打印的加载信息“ul⁃trasonicdriverinitialsuccessfully!”和读取到的测量距离数值。调整超声波探头前方障碍物距离,还可以得到不同的距离值,最终,实现的距离测量能够达到2cm~4.5m 的范围,精度可达0.2cm。
4结语 本文基于fpga业界最先进的芯片zynq以及开发平台zedboard,融合软硬件设计,从底层的各功能电路设计,veriloghdl代码编写,verilogip核设计,到linux设备驱动设计,完成了整个设计流程,在智能小车平台上实现了在linux系统中利用超声波测距的功能,达到2cm~ 4.5m的测距范围,精度达0.2cm,为上层应用提供了支撑服务。该系统设计对基于zynq⁃7000fpga上的开发的多个方面(例如,对arm+fpga应用设计的理解、软硬件结合的设计方法;xilinx下axi4⁃lite总线的ip核设计;linux字符设备驱动设计)有指导性意义。
参 考 文 献
[1]xilinxinc.zynq⁃7000allprogrammablesoctechnicalreference manual,v1.6.1[db/ol].[2013⁃04⁃17].http://www.xilinx.com/sup⁃ port/documentation/user_guides/ug585⁃zynq⁃7000⁃trm.pdf.
[2]陆佳华,江舟,马岷.嵌入式系统软硬件协同设计实战指南:基于xilinxzynq[m].北京:机械工业出版社,2013.
[3]李洪涛,顾陈,朱晓华.fpga技术开发(高级篇)[m].北京:国防工业出版社,2013.
[4]章立生,韩承德.soc芯片设计方法及标准化[j].计算机研究与 发展,2002,39(1):1⁃8.
[5]kroah⁃hartmancr.linux设备驱动程序[m].魏永明,耿 岳,钟书毅,译.3版.北京:中国电力出版社,2005.
[6]深圳市捷深科技有限公司.hc⁃sr04超声波测距模块说明书 [db/ol].[2014⁃04⁃10].

照明工程如何构建设计的整体协调性
英伟达似乎并不在意和特斯拉保持“若即若离的关系”
全部停产!百年车企丑闻不断!
智能手机市场争夺战愈发的激烈,OPPO与vivo之争出现火星
芯片GD32与以太网芯片的坑
基于Xilinx Zynq的物距测量系统设计与实现
二极管种类和型号大全,厂家东沃,超齐全
赛灵思CEO兼总裁 Moshe Gavrielov退休,Victor Peng 继任 CEO
主流NVMe M.2固态硬盘SSD的标准是什么?如何选择?
哪个牌子的骨传导耳机好、骨传导耳机品牌推荐
SIGFOX携手TI共同打造高成本效益、远程、低功耗物联网连接
AMDRadeonVII显卡新驱动比首发驱动平均游戏性能提升0.65%
视频监控、门禁对讲、防盗报警是民用安防市场的三大支柱
智慧灯杆网关路灯照明组网管控应用
泰凌微电子将参展CES 2023:带来物联网SoC最新技术和热门应用方案
什么是RS触发器,RS触发器的工作原理是什么?
精致面板与S120直接通讯网络结构图文详解
汽车整车性能检测系统的设计
三菱plc编程学习线路的总结
迪拜为公共交通引入面部识别系统来增强安全性