基于zynq7010的数字存储示波器设计.docx_第1页
基于zynq7010的数字存储示波器设计.docx_第2页
基于zynq7010的数字存储示波器设计.docx_第3页
基于zynq7010的数字存储示波器设计.docx_第4页
基于zynq7010的数字存储示波器设计.docx_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘 要电子科技大学成都学院毕 业 设 计 论 文论文题目 基于ZYNQ7010的数字存储示波器设计 学生姓名 龚 杨 学号 1240720345 专业 电子科学与技术 系(分院) 微电子技术系 指导教师 李 伟 指导单位 电子科技大学成都学院 2016年6月制摘 要示波器作为传统的仪器仪表,在仪器设备中占有重要的地位。早期示波器采用模拟方式完成信号的采集以及显示,由于笨重和难以存储信号,价格居高不下的因素只应用在少数场合。如今绝大多数示波器都是数字示波器,数字示波器又分为数字存储示波器,数字荧光示波器和采样示波器,其中数字存储示波器运用最为广泛。如今示波器通常采用DSP,FPGA,POWER PC作为主控,从信息处理技术的发展来说,FPGA以其独特的并行处理方式而在信号采集的处理方面具有巨大优势。本设计采用XILINX公司的ZYNQ7010芯片,具有双核ARM A9处理器,A7的FPGA资源,以及高速互联总线AXI。运用嵌入式Linux充分发挥ARM双核A9的潜力,使用FPGA资源高速稳定的存储数字信号,并完成数字增益调节,平均电平的调节,软件触发,峰值,均值计算等功能。AXI总线完成ARM和FPGA的交互,数据传递。信号采集采用AD8138与AD9214,采样率高达80Mhz。关键字:ZYNQ7010,AD9214,linux,FPGAIIIABSTRACTABSTRACTAs the traditional instrument, oscilloscope holds a very important place. In early time, oscilloscope collects signal and displays by simulation, and it was just used in very few occasions for its heavy, high price and bad signal storage. Now days most oscilloscopes are digital oscilloscopes which includes digital storage oscilloscopes, digital phosphor oscilloscopes, and digital sampling oscilloscopes, and digital storage oscilloscopes are most widely used. DSP, FPGA, POWER PC are the main master controls in oscilloscopes, from the developing of information processing technique, FPGA has big advantage in signal collection for its particular parallel processing. The chip ZYNQ7010 of this project comes from XILINX cooperation which has dual ARM A9 processor.Key Words: ZYNQ7010,AD9214,linux,FPGA III目录目录第1章课题整体框架51.1 课题任务51.2 课题要求51.3 研究意义5第2章设计方案62.1 硬件部分62.1.1 硬件开发环境62.1.2 电源设计62.1.3 信号采集电路设计62.1.4 人机交互设计62.1.5 主控核心板设计72.2 软件部分72.2.1 软件与逻辑开发环境72.2.2 软件与逻辑开发语言介绍8第3章实现功能93.1 实现功能描述93.2 电路设计93.2.1 电源电路设计103.2.2 信号调理、采集电路设计113.2.3 数字部分电路设计123.3 软件与逻辑系统设计153.3.1 逻辑开发介绍163.3.2 软件设计20第4章调试与实现234.1 调试中遇到的重点与难点234.2 解决方案234.3 调试过程展示234.3.1硬件调试234.3.2 软件与逻辑调试、仿真244.3.3 软件与逻辑、硬件整体调试264.4 实物展示27第5章总结29致谢31附录32附录一:逻辑顶层代码设计32附录二:软件设计部分代码46V第1章 课题整体框架第1章课题整体框架1.1 课题任务基于XILINX zynq7010 完成数字存储示波器软硬件设计。 1.2 课题要求通过原理图和PCB的设计,焊接调试,搭建整机硬件平台。在运行Linux嵌入式操作系统的ZYNQ7010双核ARM A9中进行软件和驱动的编写,对PL进行配置和控制,在TFT显示器上恢复波形。使用PL完成数据采集,处理,存储。1.3 研究意义随着嵌入式设备走入我们的生活之中,应用于各种苛刻的场合。对于嵌入式处理器的要求就更为严格,ARM和FPGA此时异军突起,ARM应用于低功耗,低成本,高性能,FPGA应用于信号处理,算法实现。ARM加FPGA的结构已经广泛运用于各种信号采集板卡,通信设备之中。所以XILINX推出了ZYNQ7000系列,该器件集成ARM软件可编程性与FPGA的硬件可编程性,优势互补,使嵌入式设备的开发进入一个新的高度。让我们期待ZYNQ7000在数字存储示波器这样的既具有人机交互接口和界面,又有高速信号处理的应用平台上会产生什么样的优秀表现。第2章 设计方案第2章设计方案2.1 硬件部分2.1.1 硬件开发环境本设计原理图和PCB的绘制使用Altium Designer 2013 ,友好的交互界面,众多的快捷操作和工具,大大减少了硬件开发的周期。在制板之后的焊接调试过程中使用了烙铁,信号源,高速示波器,频谱仪,万用表等工具,合理使用各种测试工具可以提高软硬件开发测试的效率。2.1.2 电源设计电源是硬件设计的重中之中,根据不同的需求合理设计电源才能满足硬件性能指标。在本设计中有众多的芯片需要供电,供电电压,功耗,纹波要求不尽相同。所以电源设计中采用12V-1.5A直流供电,使用LDO降压至9V,5V,3.3V,采用DC-DC开关电源集成块输出正负双5V电源给运放供电。2.1.3 信号采集电路设计信号采集电路是数字示波器的瓶颈,其中ADC芯片最为昂贵的部分,ADC芯片的采样速率和精度增长一倍,价格往往增加数倍,因此在设计信号采集电路时完全发挥ADC的性能。在本设计中ADC芯片选择ADI公司的AD9214,采样精度为10位,采样率80Mhz,完全能够满足本设计的设计指标,并且还有相同型号不同采样率的芯片可以选择,避免硬件升级时的改动。由于AD9214是差分信号输入,在AD9214前添加一个AD8138单端转差分芯片。AD8138具有320Mhz通带,完全满足ADC的指标,还具有增益调节和共模电压调节功能,可以省去部分运放,减少PCB的设计难度。2.1.4 人机交互设计人机交互设计是提供一个友好的使用体验,方便直观的使用各种功能,设置参数,查看信息,回传数据和文件。本设计采用TFT液晶显示模块,具有320x240的分辨率,还集成电阻式触摸功能。输入使用独立按键,此外还可以使用以太网在linux终端中输入命令进行控制和查看参数,通过tftp回传文件。2.1.5 主控核心板设计主控板设计优劣是能否发挥整体性能和使用体验的核心环节,在本设计中先后更换,对比过多种方案。目前比较成熟的方案有:1:ARM作为主控芯片,优势是价格便宜,开发速度快,外设多,交互方便,缺陷是采样不稳定,采样速度慢,不能很好地发挥ADC性能。2:ARM与FPGA,通过并行总线传输数据。优势是可以两种器件优势互补,很好地做到人机交互,又能稳定快速的采集,存储数据,完全发挥ADC的性能。缺点是电源供电复杂,占用PCB面积大,连线多,稳定性下降。并行总线占用大量管脚,带宽小。本设计综合考量各种设计方案,最终选用第二种方案的思路,但又有自己的独特之处,规避了第二种方案的缺点,采用XILINX公司推出的ZYNQ7010可扩展架构芯片, 之所以叫做可扩展架构,是因其拥有双核ARM A9处理器和各种外设和引脚的PS部分,还拥有A7资源的FPGA的PL部分,ARM在其中占主导地位,FPGA可以认为ARM的可编程外设。PS可以独立于PL运行,并且是在PS运行之后再使用PS加载FPGA,这就是这颗可扩展架构芯片的独特之处。核心板采用Z-turn开发板,具有一颗ZYNQ7010芯片,DDR3存储器,10M/100M网络设备。2.2 软件部分2.2.1 软件与逻辑开发环境1.Xlinx Vivado 14.4 :ZYNQ7010器件的开发环境,比Xlinx旧开发工具ISE综合实现效率高,界面更友好。使用该软件配置PS外设,进行FPGA代码的综合实现。2.modesim6.6d :使用其对FPGA代码进行仿真,通过编写仿真代码,输入仿真激励,观察波形和输出文件可以发现代码的bug,提高调试的效率。因为FPGA综合实现需要消耗大量时间,只通过上板调试是很不现实的,也难以发现故障的源头。3.Matlab2014a:Matlab是一款强大的数学工具,因为本设计涉及到数字信号处理,故采用该软件对算法的实现进行仿真,在确认算法层面是可行之后再编写Verilog代码进行工程实现。同时使用该软件生成modesim仿真激励文件,对modesim仿真输出文件进行波形分析,以及对本设计存储的信号进行分析,也是有效的辅助调试手段。4. Vivado SDK 14.4 :嵌入式Linux下c语言开发环境。2.2.2 软件与逻辑开发语言介绍Verilog HDL: 它是一种硬件描述语言(Hardware Description Language),以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。在ZYNQ7010的PL开发中采用该语言进行设计。C语言:它是一门通用计算机编程语言,既提供许多低级处理的功能,但仍然保持着良好的跨平台的特性,具有很好的可移植性,可以应用于嵌入式处理器的平台。在本设计中,C语言用于ZYNQ7010中PS部分的软件编程。SHELL脚本语言:该脚本语言是解释型语言,运行之前不需要编译,在文本处理方便有很大的优势,命令简单易学,还提供数组、循环、条件以及逻辑判断等功能,甚至可以用来编写程序。在本设计中用来编写代码对PL进行调试。73第3章 实现功能第3章实现功能3.1 实现功能描述在ZYNQ7010核心板构成的主控电路中,通过接插件连接底板上的电源部分、信号采集的模拟电路部分、独立按键部分、TFT液晶显示部分构成了整个设计的硬件。在ZYNQ7010上运行嵌入式Linux系统,在系统之中实现DDR3、以太网、TFT屏幕,按键等驱动。通过Liunx驱动配置PL的bit文件,通过AXI接口配置PL中的模块工作寄存器,让PL中的信号采集,增益控制,触发等功能运行。PS通过AXI接口回读PL中RAM存储的信号,并显示在TFT屏上,完成整个系统的稳定运行。3.2 电路设计硬件电路设计概述,本设计中硬件设计采用自底向上的设计思路,采用模块化的设计方式,先设计好各个硬件模块,然后再完成顶层布局布线。设计步骤有(1)器件选型。(2)原题图设计。(3)绘制封装。(4)PCB中分别对电源,信号采集,数字电路等模块进行布局和手工布线。(5)对设计好的模块进行互联,GND与敷铜的设计。(6)制板,焊接。(7)测试硬件性能,更换不同参数器件达到性能最优化。经过上述七个步骤,电路设计基本完成。硬件电路设计框图如图3-1所示:图3-1 硬件电路设计框图上图所示的电路中包含ESD静电保护、输入电压钳位保护、AD8138单端转差分、DAC8411和OPA188运放组成的增益调节、共模电压调节电路、ADC9214模数转换电路、正负双5伏开关电源电路、线性稳压9V,5V,3.3V电源电路、8位独立按键、TFT液晶显示电路、主控板接口电路。3.2.1 电源电路设计在本设计中,输入电源采用直流12伏1安,对输入电源的要求非常低,通用性也很好,随处可见,即插即用。将12v电源转换为5v,3.3v,正负双5v给不同设备供电,分别采用LDO线性稳压或者DC-DC集成块,同时不同设备对电源纹波的要求不同,也采用了相对应的电容滤波和型滤波进行处理。如图3-2所示,这是电源部分的设计。图3-2 电源电路设计图该电源部分工作方式不同分为两部分:(1)线性稳压电源:采用LM7809将12V降压至9V,然后再使用LM7805降压至5V,提供给主控板使用,将9V采用2片AMS1117-3.3降压至3.3v,分别给TFT液晶显示器和模拟电路供电,这种电源纹波小,没有开关噪声干扰到信号采集电路,但是工作效率低下,发热量极大。(2)开关电源:采用A1205S-1W集成块将12v输入转换为正负双5伏输出,该集成块采用DC-DC隔离降压方式,电压转换效率高,发热量小,集成度高。缺点是输出纹波大,电磁干扰会影响旁边的模拟电路。在本设计中该电源用来给运放供电,其实这是非常不明智的选择,该电源会有很大的输出纹波和开关噪声,作为运放电源会在输出信号中引入该电源噪声,但是为了让输入电源简洁统一,故采用这种方案,经过型LC滤波器的处理,电源噪声已经很小。3.2.2 信号调理、采集电路设计外部信号在通过SMA接口进入示波器后,首先经过ESD静电防护器件,防止静电对脆弱的模拟器件造成损害。接着经过一对肖特基二极管构成的电压钳位电路,将输入到运放的电压钳位到正负5V,防止大信号对运放造成失效。由于AD9214的输入为差分信号,同时对输入幅度和输入共模电压有限制。因此我们在AD9214前增加一个AD8138单端转差分器件,将输入信号从单端输入转换为差分输出,同时AD8138具有共模电压调节功能和增益调节功能。为了实现对AD8138的共模电压调节和增益调节进行程控,采用DA8411数模转换器和OPA188运放构成的电压保持电路来对AD8138的差分输出的增益和共模电压进行程序控制。最后差分信号在AD9214模数转换器中以80Mhz的采样率被转换为10位的数字信号,在FPGA提供的时钟上升沿被输入到FPGA部分进行处理。信号调理和采集电路如图3-3所示: 图3-3 信号调理和采集电路主要器件性能介绍: (1) AD9214: AD9214是一款10位单芯片模数转换器(ADC),采用3.3 V单电源供电,内置一个片内采样保持电路,专门针对低成本、低功耗、小尺寸和易用性进行了优化。该产品的转换速率最高可达105 MSPS,在整个工作范围内具有杰出的动态性能。该ADC只需一个3.3 V(2.7 V至3.6 V)单电源和一个编码时钟就能充分发挥工作性能。对于大多数应用来说,无需外部基准电压源或驱动器件。数字输出为TTL/CMOS兼容,单独的输出电源引脚支持3.3 V或2.5 V逻辑接口。时钟输入为TTL/CMOS兼容。可通过进入省电模式,将总功耗降至30 mW。在省电模式下,数字输出被置为高阻状态 (2)AD8138:AD8138可以用作单端至差分放大器或差分至差分放大器。它像运算放大器一样易于使用,并且大大简化了差分信号放大与驱动。该器件采用ADI公司转悠的XFCB双极性工艺制造,-3DB带宽为320MHZ,提供差分信号,谐波失真在现有差分放大器中最低。AD8138具有独特的内部反馈特性,可以提供输出增益和相位匹配平衡,从而抑制偶数阶谐波。内部反馈电路则可以使外部增益设置电阻不匹配的任何相关增益误差最小。AD8138的差分输出有助于平衡差分ADC的输入,使ADC性能达到最高。该器件无需使用具有高性能ADC的变压器,并保留低频和直流信息。在VOCM引脚上施加电压便可调整差分输出的共模电平,从而使驱动单电源ADC的输入信号可轻松实现电平转换。快速过载恢复则可确保采样精度。 (3)DAC8411:DAC8411是德州仪器推出的16位高精度,单通道,低功耗,小封装数模转换器,采用最大支持50Mhz的SPI接口,0至5.5v的宽范围电压输出,单电源供电。 (4)OPA188: OPA188 运算放大器使用德州仪器 (TI) 拥有自主知识产权的自动归零技术来提供低偏移电压(25V,最大值),以及时间和温度范围的接近零漂移。 这个微型、高精度、低静态电流放大器提供高输入阻抗和摆幅为电源轨 15mV 之内的轨到轨输出。 输入共模范围包括负电源轨。 单电源或者双电源可在 +4V 至 +36V(2V 至 18V)的范围内使用,单通道版本采用尺寸小外形晶体管 (SOT)23-5,微型小外形尺寸。3.2.3 数字部分电路设计模拟信号经过ADC后转换成数字信号被送入ZYNQ7010核心板,经过PL的处理和存储,通过PS部分让TFT液晶显示屏恢复出波形,期间可以通过按键调节波形的各种信息,以及设置,还可以通过电脑终端直接使用命令进行设置。数字部分电路设计框架如下图3-4所示: 图3-4 数字部分电路设计框架构成模块介绍: ZYNQ7010平台Z-turn核心板。Z-turn Board是深圳市米尔科技有限公司推出的一款以Xilinx Zynq-7010(兼容7020)作为主处理器的嵌入式开发板。Z-turn Board采用Xilinx最新的基于28nm工艺流程的Zynq-7000 All Programmable SoC平台,将ARM处理器和FPGA架构紧密集成。该产品拥有双核ARM Cortex-A9 MPCore的高性能,低功耗特性,在设计中能更好的满足各种工业需要。同时提供各种成熟的硬件解决方案而且提供Linux操作系统在内的丰富软件资源,通过配套的设计工具,帮助嵌入式软件人员充分发挥软硬件协同优势,实现超越传统架构的创新设计。下图3-5为Z-turn核心板硬件结构图: 图3-5 Z-turn核心板硬件结构图核心板硬件参数如图3-6所示:图3-6核心板硬件参数TFT液晶显示模块TFT -LCD 即薄膜晶体管液晶显示器。其英文全称为:Thin Film Transistor-Liquid Crystal Display。TFT -LCD 与无源 TN-LCD、STN-LCD 的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。TFT -LCD 也被叫做真彩液晶显示器。独立按键底板上使用核心板接插件扩展了8个独立按键做为简单操作的控制信号,一个轻触按键使用一个10k上拉电阻和一个100NF滤波电容,防止按键抖动造成多次触发。在本设计中使用核心板底部的1.27mm排针与底板连接,底板通过排针给核心板供电以及扩展8个独立按键、TFT显示屏,底板数字部分扩展如图3-7所示: 图3-7底板数字部分扩展3.3 软件与逻辑系统设计要使用ZYNQ7010进行软件与逻辑开发,由于其架构的独特性,我们首先来了解这颗芯片的设计架构,以便于我们对功能的合理划分。要知道ZYNQ7010当中有哪些可用资源,然后发现哪些功能适合软件去实现,哪些功能适合逻辑去实现,以及软件与逻辑如何协调工作。如图3-8所示,这是ZYNQ7010的架构图。 图3-8 ZYNQ7010的架构图从上图中,我们可以发现,ZYNQ7010中的PS部分具有一颗完整ARM芯片所有的硬件资源,包括ARM双核A9、通过AXI总线挂接的各种外设,时钟管理,存储器管理单元,与外界相连的PAD管脚。PL部分是通过AXI总线与PS进行交互,换一种说法就是:PL是硬件可编程的ARM外设。正是这种独特的架构,让PS和PL既可以独立运行,也可以进行组合,优势互补。在介绍完ZYNQ7010独特的架构之后,我们来看看这种架构的优势之一启动方式。ZYNQ7010的启动方式与普通的ARM架构芯片类似,下面按照时间顺序进行介绍:在器件上电运行后,处理器自动开始Stage-0Boot,也就是执行片内BootROM中的代码2. BootROM会初始化CPU和一些外设,以便读取下一个启动阶段所需的程序代码,FSBL(FirstStageBootloader)。不过这又有一个问题了-之前说到,Zynq支持多种启动设备,BootROM怎么知道从哪个启动设备里去加载FSBL?这就得靠几个特殊的MIO引脚来选择了,BootROM会去读取MIO2.8,从而确定启动设备,将选定设备的头192Kbyte内容,也就是FSBL,复制到OCM(OnChipMemory)中,并将控制器交给FSBL。3.FSBL启动时可以使用整块256Kb的OCM,当FSBL开始运行后,器件就正式由咱自己控制了。Xilinx提供了一份FSBL代码,如果没什么特殊要求,可以直接使用。1).使用XPS提供的代码,继续初始化PS2).将bitstream写入PL(配置FPGA),不过这一步也可以以后再做3).将接下来启动用的SecondStageBootloader(SSBL,一般就是U-Boot一类的东西),或者裸奔程序,复制到内存中4).跳到SSBL运行去4. 接下来的步骤就没啥特别了,Uboot开始运行,初始化好Linux启动环境,然后开始运行Linux系统。3.3.1 逻辑开发介绍逻辑开发采用自底向上的设计流程,既先设计好底层功能模块,然后再在顶层进行模块互联,使顶层文件简洁明了,工程架构清晰,方便进行调试,以及故障排查。在逻辑设计中涉及到连续的数据流处理,故采用了流水线和乒乓操作的设计思想,让稳定的数据流可以被连续的处理和存储。逻辑设计框架如图3-9所示:图3-9 逻辑设计框图逻辑模块设计详细介绍如下:A,zynq_ps_wrapper,zynq_ps_wrapper是PS部分硬件设计模块,采用Block Design设计方式,类似于原理图设计,调用ZYNQ7 processing System(PS部分硬核)、。提供50Mhz的时钟和复位,IRQ中断输入,MPU接口,DDR控制器接口。zynq_ps_wrapper设计图如图3-10所示:图3-10 zynq_ps_wrapper设计图B,clk_pro_zynq, clk_pro_zynq是PL时钟管理模块,时钟输入为PS的锁相环分频时钟gpmc_clkn,频率为50Mhz,还有PS输出的复位信号fpga_rst_n。通过调用IP core产生三路时钟输出(80Mhz,5Mhz,160Mhz)以及复位信号。时钟管理模块化是大型FPGA工程的必要措施,为了让时钟稳定,减少时钟树的分支,简洁的时钟设计显得尤为重要,这就需要从系统层面规划时钟。下图3-11为时钟管理设计介绍:图3-11时钟管理设计 C,mpu_itfc,MPU接口模块,PS使用AXI总线对PL的自定义寄存器的读写控制,存储器的信息访问。软件通过操作这些寄存器实现对PL各个模块的功能配置。D,AD9214_itfc,AD9214接口模块,AD9214采用并行接口,主机提供采样时钟,10位精度的采样数据在下一个时钟的上升沿输出。在示波器这样的只关心数据是否连续,不关心时延的平台上,我们可以认为一个时钟对应一个采样数据。该接口模块将80Mhz时钟经过OBUF之后输出给ADC,将数据同步到80Mhz的时钟下并输出。E,trig_check, trig_check模块是提供软件触发功能,通过对ADC接口数据进行对比和处理,输出一个触发信号。该模块可以通过MPU接口使用软件选择触发的模式,有高电平触发,低电平触发,上升沿触发,下降沿触发可以选择。还可以使用软件清除已经触发的信号,也可以使能和禁能该模块。F,cram_ram_cap, cram_ram_cap是信号存储模块,通过调用IP core生成两个131072深度、10位的双口ram,双口ram具有两个接口,一个接口用来写数据,一个接口用来让MPU读取数据,两者互不干扰。这里采用两块ram来存储数据,是让两块ram交替存储数据,当ram1存储完数据后,ram2开始存储数据。同时输出指示信号,mpu接收到指示信号后通过mpu接口取回ram1数据。Ram2写满数据之后,ram1再存储数据,mpu取回ram2的数据。这样的设计是为了防止遗漏ADC的数据以及防止mpu取回旧的数据,造成波形紊乱(运行操作系统后,mpu的实时性变差),这是典型的乒乓操作设计思维的运用。该模块还可以根据软件的配置来进行数据的抽取,被抽取后的数据采样率减小,一块ram可以存储更长时间的数据。但是值得注意的是,根据奈奎施特采样定理,当采样率低于2倍信号频率时,信号会失真,不能被恢复,这里需要合理的设置抽取倍数。同时抽取会使频谱产生镜像,当我们使用FFT分析数据的时候要使用FIR低通滤波器抑制频谱镜像。下图3-12是cram_ram_cap模块的示意图。图3-12 cram_ram_cap模块示意图G,d_gain, d_gain是数字增益、直流电平调整模块。调用乘法器的IP core来实现数字增益,使用加法器实现直流电平调整。数字增益和直流电平调整可以通过软件实现配置,调整后的数据通过mpu接口被mpu读取,并在TFT显示器上恢复成图像。H,zynq.xdc, zynq.xdc文件是约束文件,在该文件中定义端口使用的引脚、端口的电平,时钟的定义,周期约束,ADC源同步接口约束。3.3.2 软件设计一Linux驱动。测试驱动是否正常工作如裁图3-13所示: 图3-13 驱动文件目录二Linux内核相关代码目录如裁图3-14: 图3-14 内核代码目录裁图三Linux自定义驱动代码目录如裁图3-15: 图3-15 自定义驱动代码目录裁图四Shell脚本开发 A.在linux中使用Vi文本编辑器编写调试shell脚本语言。使用shell脚本语言编程实现读取PL中ram存储的数据并保存在ram_cap.txt文件中,并通过tftp回传到电脑中,使使用者可以通过matlab分析数据。Ram_cap.sh脚本文件源码如图3-16所示: 图3-16 Ram_cap.sh脚本文件源码B,danny_start脚本文件,该文件用于调用驱动初始化PL(下载bit文件),然后调用danny_test应用程序,实现示波器的功能。danny_start脚本文件源码如图3-17所示:图3-17 danny_start脚本文件源码五C语言开发使用Xilinx SDK提供的编译环境进行C语言的开发,实现TFT液晶屏的显示控制。使用MPU接口对PL进行配置,控制PL的工作状态,在适当的时候读取PL中ram存储的数据,并驱动TFT显示器还原出波形。C语言代码工作流程如图3-18所示:图3-18 C语言代码工作流程图第4章 调试与实现第4章调试与实现4.1 调试中遇到的重点与难点A.在硬件调试过程中,使用信号源输入单音信号,使用差分单头检查AD8138的差分输出时,发现单音信号上有一个稳定的噪声出现。经过艰苦的排查,发现是运放的电源有噪声,被引入到了AD8138的差分输出上。那么,难点就来了,我的运放电源采用开关电源的正负5v输出,无论我采用多大的电容都不能滤除300Khz处的开关噪声。B.开发环境搭建过程中,Xilinx SDK 软件不能自定义makefile文件,导致编译不成功。4.2 解决方案A.通过和从事电源设计的学长交流,尝试了多种滤波电路,最后采用型低通滤波器成功的抑制了该开关电源的噪声。最后再用示波器观察AD8138的差分输出已经不能明显观察出有噪声的影响。B.使用UltraEdit文本编辑器修改makefile文件,修改文件属性为只读。使用Xilinx SDK的命令键入窗口,输入命令将工作位置定位到当前目录,键入make命令编译所有文件。4.3 调试过程展示调试过程包括硬件调试,软件调试,逻辑代码仿真和调试,在调试过程中使用了大量的仪器设备,调试和仿真软件,还有编写脚本来调试逻辑模块功能。4.3.1硬件调试硬件调试过程中使用了烙铁,万用表,电源,信号源,高速示波器,频谱仪等工具。图4-1 模拟板焊接调试图4-2 整机硬件调试 4.3.2 软件与逻辑调试、仿真离散sin函数激励文件生成代码和波形如图4-3所示:图4-3 sin函数激励文件生成代码和波形激励文件频谱如图4-4所示:图4-4 sin激励文件频谱modelsim仿真过程如图4-5所示:图4-5 modelsim仿真图仿真波形与原波形对比如图4-6所示:图4-6 仿真波形与原波形对比图4.3.3 软件与逻辑、硬件整体调试软件与逻辑、硬件整体调试如图4-7所示:图4-7 软件与逻辑、硬件整体调试4.4 实物展示逻辑设计原理图如下图4-8所示:图4-8 逻辑设计原理图模拟板PCB设计图如下图4-9所示:图4-9 模拟板PCB设计图整机设计图如下图4-10所示:图4-10 整机设计图第5章 总结第5章总结在本次设计过程中,应用到了很多我在学校和在公司里学到的知识,也在不断地突破自己的局限,尝试自己不了解的技术,不拘泥于现有的能力。我相信,毕业设计考察的不是自己在大学之中掌握了多少知识,而是考察是否掌握了自我学习,自我创新的精神。在本设计当中,我运用到了PCB和原理图绘制、焊接、仪器的使用、数字信号处理及matlab、模拟电路设计、ARM处理器的运用、c语言的开发、FPGA开发、数字电路设计、信号与系统等课程。通过这次设计过程,我将所学的知识进行了运用和整合,同时也在努力学习新的知识,通过在厂商提供的案例和数据手册以及论坛,文库等方式快速的了解和运用新的器件和技术。这次毕设我对自己提出了很高的要求,是一次对自我认知的过程,俗话说,知己知彼,百战不殆。认识到自己的水平,就有助于摆正自己的心态,希望这次毕业设计会给自己的校园生活交上一份满意的答卷。致 谢致谢时光荏苒,忙碌而充实的大学时光就快戛然而止,大学教会我的不仅仅是知识,而是面向社会需要的综合能力和素养。在此感谢母校老师孜孜不倦的付出, 对我们这些莘莘学子的悉心培养,授予我们学习和生活的能力。然后感谢指导老师在大学四年中对我的谆谆教诲,在百忙之中答疑解惑,指点迷津,带领我们参与协会的管理和成长。在炎炎夏日当中与我们一同经历酷暑的考验,接受电子设计大赛的洗礼。正是在这些经历当中,我们茁长成长,不断提升自身的素养和能力。感谢公司的导师,同时也是我的上司的言传身教,因为他的帮助,我迅速的适应了学生到员工心态的转变,同时我的专业知识也在不断地积累。可以说,学校让我学到的是如何去学习,导师教我的是如何学习成为公司和社会需要的人才。学习到ZYNQ7000平台的开发需要感谢同事的技术积累,Xilinx提供的技术文档,论坛开发者的开源精神。附录附录附录一:逻辑顶层代码设计删除附录二:软件设计部分代码/显示字符串/x,y:起点坐标/width,height:区域大小 /size:字体大小/point_col:字色/back_col: 背景色/*p:字符串起始地址 void LCD_ShowString(u16 x,u16 y,u16 width,u16 height,u8 size,u16 point_col,u16 back_col,u8 *p) u8 x0=x;width+=x;height+=y; while(*p= )/判断是不是非法字符! if(x=width)x=x0;y+=size; if(y=height)break;/退出 LCD_ShowChar_color(x,y,*p,size,point_col,back_col,0); x+=size/2; p+; /更新数据void lcd_data_change(unsigned char cap_sel,unsigned int change_len,unsigned int change_color,unsigned int data_place,unsigned int step_in) unsigned int len; lcddisplay.old_color = lcddisplay.new_color; lcddisplay.old_len = lcddisplay.new_len; for(len =0;lenlcddisplay.old_len;len +) lcddisplay.old_datalen = lcddisplay.new_datalen; lcddisplay.new_len =change_len; lcddisplay.new_color=change_color; if(cap_sel = 0) for(len=0;len1; else for(len=0;len1; /显示void LCD_display_data(u8 *space,u16 len,u16 color) unsigned char temp1,temp2; for(;len1;len-) if(space320 - len 239) temp1 = 239; else temp1 = space320 - len; if(space321 - len 239) temp2 = 239; else temp2 = space321 - len; LCD_DrawLine_Color(320 - len,temp1 ,321 - len,temp2,color); /清除菜单显示void lcd_no_menu_clear(void) LCD_one_Color_Fill(251,0,319,239,WHITE); /显示主菜单void lcd_display_menu_main(void)unsigned int temp1,temp2;char print_str9;lcd_no_menu_clear();temp1=fpga_read(cap_en);temp2=fpga_read(tirg_out);if(temp1 = 0) &(temp2 = 0)if(menu.key_space = RUN) LCD_ShowString(251,10,48,24,24,GREEN,LGRAYBLUE,RUN ); else LCD_ShowString(251,10,48,24,24,GREEN,WHITE,RUN ); else if(menu.key_space = RUN) LCD_ShowString(251,10,48,24,24,BRED,LGRAYBLUE,RUN ); else LCD_ShowString(251,10,48,24,24,BRED,WHITE,RUN ); if(temp1 = 0) &(temp2 = 0)if(menu.key_space = STOP) LCD_ShowString(251,44,48,24,24,BRED,LGRAYBLUE,STOP); else LCD_ShowString(251,44,48,24,24,BRED,WHITE,STOP); else if(menu.key_space = STOP) LCD_ShowString(251,44,48,24,24,GREEN,LGRAYBLUE,STOP); else LCD_ShowString(251,44,48,24,24,GREEN,WHITE,STOP); if(temp2 != 0)if(menu.key_space = TRIG) LCD_ShowString(251,78,48,24,24,BRED,LGRAYBLUE,TRIG); else LCD_ShowString(251,78,48,24,24,BRED,WHITE,TRIG); else if(menu.key_space = TRIG) LCD_ShowString(251,78,48,24,24,GREEN,LGRAYBLUE,TRIG); else LCD_ShowString(251,78,48,24,24,GREEN,WHITE,TRIG); temp1=fpga_read(add_value); print_str0 = temp1/1000%10 +48; print_str1 = temp1/100%10 +48; print_str2 = temp1/10%10 +48; print_str3 = temp1%10 +48; print_str4 = 0; if(menu.key_space = V_OFFSET) LCD_ShowString(251,112,48,12,12,BLACK,LGRAYBLUE,V-OFFSET); if(menu.input_flag = input_start) LCD_ShowString(251,124,48,24,24,BLACK,YELLOW,print_str); else LCD_ShowString(251,124,48,24,24,BLACK,LGRAYBLUE,print_str); else LCD_ShowString(251,112,48,12,12,BLACK,WHITE,V-OFFSET); LCD_ShowString(251,124,48,24

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论