基于FPGA的数字示波器.docx
- 文档编号:11915079
- 上传时间:2023-06-03
- 格式:DOCX
- 页数:23
- 大小:1.19MB
基于FPGA的数字示波器.docx
《基于FPGA的数字示波器.docx》由会员分享,可在线阅读,更多相关《基于FPGA的数字示波器.docx(23页珍藏版)》请在冰点文库上搜索。
基于FPGA的数字示波器
论文题目:
基于FPGA的数字示波器
1.摘要
随着信息技术的发展,对信号的测量技术要求越来越高,示波器的使用越来越广泛。
数字示波器是模拟示波器技术、数字化测量技术、计算机技术的综合产物,他主要以微处理器、数字存储器、A/D转换器和D/A转换器为核心,输入信号首先经A/D转换器转换成数字信号,然后存储在RAM中,需要时再将RAM中的内容读出,经D/A转换器恢复为模拟信号显示在示波器上,或者通过接口与计算机相连对存储的信号作进一步处理,这样可大大改进显示特性,增强功能,便于控制和智能化。
这种数字示波器中看到的波形是由采集到的数据经过重构后得到的波形,而不是加到输入端上信号的波形。
设计提出一个经过优化的数据采集方法,辅以FPGA为主控制器和必备的外围电路完成了基于FPGA的数字存储示波器的设计。
系统最大限度地利用了FPGA的高速数字信号处理能力以及众多硬核和软核内嵌的特性,降低了成本和开发难度,且性能优良。
2.原理
数字示波器具有存储数据的能力,数字存储就是在示波器中以数字编码的形式来贮存信号。
当信号进入数字存储示波器,或称DSO以后,在信号到达CRT的偏转电路之前,示波器将按一定的时间间隔对信号电压进行采样。
然后用一个模/数变换器(ADC)对这些采样值进行变换从而生成代表每一个采样电压的二进制字。
这个过程称为数字化。
获得的二进制数值贮存在存储器中,对输入信号进行采样的速率称为采样速率。
采样速率由采样时钟控制。
对于一般使用情况来说,采样速率的范围从每秒20兆次(20MS/s)到200MS/s。
存储器中贮存的数据用来在示波器的屏幕上重建信号波形。
所以,在DSO中的输入信号接头和示波器CRT之间的电路不只是仅有模拟电路。
输入信号的波形在CRT上获得显示之前先要存贮到存储器中,我们在示波器屏幕上看到的波形总是由所采集到数据重建的波形,而不是输入连接端上所加信号的直接波形显示。
示波器原理框图如下:
3.系统方案对比及分析
3.1.以FPGA来实现整个系统
以可编程器件FPGA为主控来实现整个系统,设计时电路相对简洁,因为FPGA的可编程性适用于模块化设计,内部集成大量电路模块,如A/D转换器,锁相环,甚至有些FPGA内部嵌入ARM相关处理器,DSP模块,电源模块,所以FPGA可以实现DSP相关算法,可以做大量运算,并且它的处理速度由于其并行性,在协调多个模块的工作时候非常方便,控制能力强。
在整个数值示波器的设置中,通过采样数据然后存储,再做相应的数据处理,执行相关任务,完全可以实现示波器的基本功能,设计可行性非常高。
辅助一些外围电路模块,基本能实现设计期望达到的功能和参数。
3.2.采用DSP与FPGA来实现整个系统
采用DSP和FPGA开发起来比较灵活,升级也容易,通用性强,在以FPGA为主控的同时辅以DSP作为信号处理,提高系统的效率。
但是DSP在与外围电路接口的时候,比如说LCD显示和键盘进行通信时候,因为DSP速度非常快,而LCD显示器和键盘电路比较慢,会造成资源浪费。
3.3.采用FPGA与单片机来实现整个系统
采用FPGA与单片机来实现,主要是利用单片机进行一些外部接口的监控,对键盘电路和显示电路实时更新,减轻FPGA主控的任务。
且单片机控制比较简单,现在大多单片机内设比较丰富,能很好地胜任工作。
但是这里使用单片机进行控制,增加了一些额外开销,且单片机任务比较简单,而且不多,本身FPGA集成一些内核可以进行比普通单片机更快的处理,再另外使用单片机有点多余。
综上,直接采用FPGA为主控芯片,资源足够丰富,就能很好地满足设计需求,不需要再多的控制器,因此直接选用方案一。
4.系统设计方案
当信号进入数字存储示波器时,首先对信号进行前置处理,然后将按一定的时间间隔对信号电压进行采样,之后对这些采样值进行数字化,即通过AD转换器变换得到代表每一个实际电压的二进制数字,进一步把这些数字贮存在存储器中,最终根据数字大小按一定比例把每一个采样点重现在显示器上,这样就能看到清晰的波形。
整个系统由高速采样电路、FIFO存储器、时钟分时电路、控制器FPGA和显示电路构成。
数字示波器系统框图如图所示,其中FPGA构成控制器,信号从探头输入,一路送入高速AD转换器对信号进行采样,采样所得的数据通过处理后存入FIFO存储器中,FIFO模块有两个,前者FIFO1通过开关来控制数据采样频率,后者FIFO2通过脉冲来控制其工作状态;当FIFO2存满后通知Nios
软核处理器,Nios
从FIFO存储器中通过DMA形式接受数据进行处理,然后将波形和频率等数据通过VGA显示在显示器上。
时钟电路为高速AD转换器和FIFO存储器提供不同的频率信号,作为不同水平扫描时的采样时钟频率。
输入信号第二路送入FPGA板的一个串口,通过频率计算模块计算该信号的频率。
FPGA以被测信号的频率数据作为频率、水平扫描、灵敏度和峰峰值计算、显示的依据。
5.系统框图
整个系统框图大概如上图所示,通过FPGA硬件设计和软件设计相结合,以NIOS为主控,配合上外部硬件设计,实现功能。
首先数据经过AD转换后变成14位数据,直接进入数据处理模块,数据会进行相应的伸缩变化,并且转换为16位数据。
处理后的数据进入FIFO,这块FIFO用来做一级缓冲,一直在采样,采样满会直接溢出,就是说FIFO一直都会存在数据,接着数据会传到第二块FIFO,这块FIFO有一个触发电路控制,控制进行数据采样。
这里的FIFO是nios的外设,已经挂载到总线,传入的数据会在DMA通道的作用下直接传输到内部的ram,再由nios控制显示输出。
其中频率测量模块或者峰值模块均有NIOS内核监控,并实时显示。
6.系统技术指标
a)带宽:
4MHz(根据五倍准则,示波器的误差不会超过±2%)
b)测量频率范围:
0~4MHz
c)电压检测:
0-2Vp-p
d)水平灵敏度:
e)垂直灵敏度:
0.05v/div、0.15v/div、1v/div
f)AD采样率:
65MHz
g)存储深度:
512
h)通道:
双通道
7.AD模块简介
高速A/D采集经过模拟信号调理电路后的信号,采样值送入FPGA内缓存,经过相应数据处理后,ARM把数据取走。
设计采用terasic公司的信号转换子板(THDB_ADA)Terasic--高速数字模拟转换子板。
该AD板块用于样本模拟信号,根据子接口的不同,可以分为GPIO0header和GPIO1header两种。
AD9248是一款双核、3 V、14位、20/40/65 MSPS模数转换器(ADC),集成了两个高性能采样保持放大器和一个基准电压源。
AD9248采用多级差分流水线架构,内置输出纠错逻辑,在最高65 MSPS数据速率时可提供14位精度,并保证在整个工作温度范围内无失码。
AD9248的模拟电压的输入范围为1Vp-p至2Vp-p,其带宽可以达到500MHz3dB。
8.频率测量模块及方案比较
频率测量是能够测量和显示信号频率的电路。
所谓频率,就是周期性信号在单位时间内变化的次数。
常用的直接测频法有两种,一种是测周期法,一种是测频率法。
8.1.测周期法
测周期法如下图所示,需要有基准系统时钟频率Fs,在待测信号一个周期Tx内,记录基准系统时钟频率的周期数Ns,则被测频率可表示为:
Fx=Fs/Ns
8.2.测频率法
测频率法就是在一定时间间隔Tw(该时间定义为闸门时间)内,测得这个周期性信号的重复变换次数为Nx,则其频率可表示为:
Fx=Nx/Tw
8.3.方法选择及使用
这两种方法的计数值会产生正负一个字的误差,并且被测精度与计数器中记录的数值Ns或Nx有关,为保证测试精度,一般对于低频信号采用测周期法,对于高频信号采用测频率法。
模拟信号分成两路,其中一路未经直接处理直接输入FPGA开发板中的IO引脚,系统为测量频率提供了一专用的模块。
该模块采用直接测频法对信号的周期进行检测,
在精确规定计数允许周期T内使能计数器,对被测信号的周期(脉冲)数进行计数,计数允许周期T的长度决定了被测信号频率的范围。
较长的计数允许周期T对低频信号而言有利于改善测量精度,但对于高频信号来说,则会产生溢出;较短的计数允许周期T对低频信号的测量,虽然精度降低,但能测量的最大频率较高,且不会产生溢出。
波形图
理论计算:
1.被测频率:
2.测量误差:
考虑
最大误差为1,
则
由于阈值闸门时间为1s,为使测量误差尽量小,设计时选Fc=1MHz。
8.4.Verilog设计结构
9.数据处理模块
该模块将AD转换出来的14位数据处理成16位的数据以匹配FIFO的数据位,否则FIFO队列的数据输出将会不完整,导致最后波形还原的失真。
因为对于16位宽的FIFO队列,输入数据位为十四位,当栈满输出时,第一个16位输出数据将是第一个14位输入数据与第二个输入数据中的高两位。
为了我们采取的处理是对数据进行伸缩变换,输出十六位的数值。
通过两个拨马开关,可以控制四种不同的压缩比例的转换。
10.FIFO存储模块
FIFO存储器是系统的缓冲环节,是系统的关键部分,如果没有FIFO存储器,整个系统就不可能正常工作。
FIFO是First-In/First-Out的缩写,是先入先出的意思。
FIFO存储器分为写入专用区和读取专用区。
读操作与写操作可以异步进行,写入区上写入的数据按照写入的顺序从读取端的区中读出,类似于吸收写入端与读出端速度差的一种缓冲器。
本系统使用了两个深度位512的16位FIFO存储器:
10.1.FIFO_1
FIFO1与数据处理模块连接,主要功能用于存储通过处理后的16位AD数据,起到一级缓冲作用。
AD的数据通过处理后形成连续不断的数据流,FIFO存储器对连续的数据流进行缓存,防止在进机和存储操作时丢失数据;同时,因为AD芯片产生的数据频率达到了65MHz,需要将处理的数据的频率降低,才能用于后续的处理。
该模块通过3位拨马开关来控制数据流的频率,可以使用9种频率来采集数据。
FIFO一直不断地读入数据,根据下一级的请求信号输出数据,满则溢出。
10.2.FIFO_2
FIFO2接于FIFO1之后,用来进一步加强数据采集的控制,用于数据交换,作为二级缓冲连接NIOS与外设,通过FIFO2可以灵活地选择数据流的流动速度。
允许系统进行DMA操作,提高数据的传输速度。
这是至关重要的一点,如果不采用DMA操作,数据传输将达不到传输要求,而且大大增加CPU的负担,无法同时完成数据的存储工作。
FIFO2通过DMA的方式将数据传输给显示控制处理器,同时可以释放CPU,使CPU能够腾出空闲处理其他数据。
11.Nios
软核模块
Nios
软核处理器,NiosII系列软核处理器是Altera的第二代FPGA嵌入式处理器,其性能超过200DMIPS。
NiosⅡ处理器核NiosⅡ处理器系列由三个不同的内核组成,可以灵活地控制成本和性能,从而拥有广泛的应用空间。
JTAG调试模块JTAG调试模块提供了通过远端PC主机实现NiosⅡ处理器的在芯片控制、调试和通讯功能,这是NiosⅡ处理器的一个极具竞争力的特性。
用户指令开发人员可以在NiosⅡCPU核内增加硬件,用以执行复杂运算任务,为时序要求紧张的软件提供加速算法。
Avalon™交换式总线Avalon交换式总线在处理器、外围设备和接口电路之间实现网络连接,并提供高带宽数据路径、多路和实时处理能力。
Avalon交换式总线可以通过调用SOPCBuilder设计软件自动生成。
通过这些总线,系统可以通过NiosⅡ的Avalon总线来进行控制系统的运行。
启动方案的软件设计目标是当系统复位后,在外部处理器向NiosⅡ程序存储器和数据存储器传输数据的过程中,NiosⅡ处理器运行要受到外部处理器的控制。
当一切就绪后,外部处理器发出一条释放NiosⅡ处理器的命令,接下来NiosⅡ处理器就可以正常运行了。
软件部分主要就是存放在启动延迟模块中ROM的代码,此代码主要是检测启动延迟模块中控制寄存器2的第0位是否为1。
若为1,则跳转到控制寄存器1中所存储的地址处执行。
NiosⅡ处理器通过与FIFO2的通信、使用DMA的方式接受FIFO2存储器的数据并存储在内置RAM中。
在接受数据之后,我们的系统对Nios
软核进行编程实现对数据复杂的运算任务,如频率,幅值以及采样频率的计算。
Nios
软核在对数据进行处理后,送入VGA显示的RAM中。
12.VGA显示
设计设计中的显示部分采用了680*460的的显示器直接显示通过VGA传输的像素数据。
由于学校提供的DE2-115开发板包含一个用于VGA视频输出的15引脚D-SUB接头。
故选用板上硬件资源ADV7123芯片。
VGA同步信号直接由CycloneIVEFPGA所驱动,AnalogDevice公司的ADV7123三通道10位(仅高八位连接到FPGA)高速视频DAC芯片用来将输出的数字信号转换为模拟信号(R,G,B)。
芯片可支持的分辨率为SVGA标准(1280*1024),带宽达100MHz。
设计选择美国AD公司的ADV7123作为视频DA转换器。
ADV7123是三路高速、10位输入的视频DA转换器,具有330MHz的最大采样速度,与多种高精度的显示系统兼容,包括RS2343A和RS-170可以广泛应用于如HDTV、数字视频系统(1600×1200@100Hz)、高分辨率的彩色图片图像处理、视频信号再现等,因此能够满足我们多方面应用需求。
下图是VGA显示终端接口硬件设计原理图,通过ADV7123产生三路模拟输出,同时结合行场同步信号完成图像的显示。
经过AD取样处理后的数据会被存入FPGA的存储器中,在信号出现触发脉冲之后,就可以开始对所存储的数据进行处理,数据处理模块将采集的数据进行数学运算、反相、频域分析、滤波等处理,及重建波形等。
并输出相应显示的数字信号点,经过ADV7123转换后在显示屏上相应的位置上显示。
13.系统软件构架设计
1.Avalon总线
Nios系统的所有外设都是通过Avalon总线与NiosCPU相接的,Avalon总线是一种协议较为简单的片内总线,Nios通过Avalon总线与外界进行数据交换。
可分为两类:
Slave和Master。
slave是一个从控接口,而master是一个主控接口。
slave和master主要的区别是对于Avalon总线控制权的把握。
master接口具有相接的Avalon总线控制权,而slave接口是被动的。
常见的Avalon的传输结构有:
Avalon总线从读(slaveread),Avalon总线带一个延迟状态从读,Avalon总线从写(slavewrite),Avalon总线带一个延迟状态从写。
2.nios自定义外设
自定义外设是SOPC系统灵活性的重要体现,是SOPC系统中极其重要的一种设计方法。
在大量的数据常需要处理时,利用自定义外设由具体的硬件来实现,可以极大程度地提高系统运行的速度,同时便于系统的模块化与集成化,是SOPC系统设计的重中之重。
定制的用户外设能够以“硬件加速器”的形式实现各种各样用户要求的功能。
典型的Avalon外设的开发步骤如下:
(1)规划元件的硬件功能。
若采用微控制器控制该元件,则规划访问该硬件的应用程序接口(API);
(2)在硬件和软件要求的基础上,定义一个恰当的接口(一般为AvalonSlave端口);
(3)使用硬件描述语言描述硬件逻辑。
一个典型元件的硬件架构一般由接口模块、寄存器文件模块和行为模块3部分组成。
接口模块作为顶层模块,定义总线接口信号;寄存器文件模块完成该元件与外部信号的通信,提供访问与控制元件的逻辑界面;行为模块实现元件的硬件功能。
我们这里使用的自定义外设有FIFO,VGA,为了通过NIOS控制外设,必须把它搭载到总线上,这里的总线需要遵循一定时序。
3.sopcbuilder构建内核
片上可编程系统,是Altera公司提出来的一种灵活的,高效的SOC解决方案,它将处理器、存储器(ROM、RAM等)、总线和总线控制器、IO口、DSP、锁相环等集成到一片FPGA中。
它具有灵活的设计方式,可裁剪,可扩充,可升级,并具备软硬件在系统可编程功能。
这里我们使用sopc来构建NIOS内核,时间FPGA的软硬件结合开发,更能提高项目整体功能。
4.软件设计流程
可编程逻辑器件FPGA是一种半定制的ASIC,它允许电路设计者自行编程实现特定应用的功能。
本设计采用原理图输入和Verilog语言输入两种不同的方法,控制单元承载了大部分控制任务,为各个功能模块提供相应的控制信号以确保整个系统工作的正确性。
采集存储系统的作用是将A/D变换后的数据存储到内部RAM中,其控制逻辑包括接口、功能控制模块、采集存储控制模块及输出显示模块等。
软件流程图大致如下:
13.NiosII软件实现
14.1.DMA传输
DMA方式主要适用于一些高速的I/O设备。
这些设备传输字节或字的速度非常快。
对于这类高速I/O设备,如果用输入输出指令或采用中断的方法来传输字节信息,会大量占用CPU的时间,同时也容易造成数据的丢失。
而DMA方式能使I/O设备直接和存储器进行成批数据的快速传送,而不需CPU干预。
由于CPU根本不参加传送操作,因此就省去了CPU取指令、取数、送数等操作。
在数据传送过程中,没有保存现场、恢复现场之类的工作。
内存地址修改、传送字个数的计数等等,也不是由软件实现,而是用硬件线路直接实现的。
所以DMA方式能满足高速I/O设备的要求,也有利于CPU效率的发挥。
本项目中我们只是用到DMA的接收功能,即仅仅打开接收通道,从FIFO的地址不断传输数据到内部存储器进行存储。
14.1.1.存储器到存储器
这种情况下需要同时打开发送通道和接收通道,而且源地址和目标地址都是自增的。
tx=alt_dma_txchan_open("/dev/dma_0");//打开发送通道
dma_res=alt_dma_txchan_send(tx,tx_buf,32,NULL,NULL);//tx_buf是源地址
rx=alt_dma_rxchan_open("/dev/dma_0");//打开接收通道
dma_res=alt_dma_rxchan_prepare(rx,rx_buf,32,dma_done,NULL);//rx_buf是目标地址,dma_done()是DMA完成后被调用的回调函数。
14.1.2.存储器到外设
这种情况下只要打开发送通道,而且源地址是自增的,目标地址是固定的。
tx=alt_dma_txchan_open("/dev/dma_0");//打开发送通道
alt_dma_txchan_ioctl(tx,ALT_DMA_TX_ONLY_ON,(void*)dst_addr);//dst_addr是目标地址
dma_res=alt_dma_txchan_send(tx,tx_buf,32,dma_done,NULL);//tx_buf是源地址
14.1.3.外设到存储器
这种情况下只要打开接收通道,而且源地址是固定的,目标地址是自增的。
rx=alt_dma_rxchan_open("/dev/dma_0");//打开接收通道
alt_dma_rxchan_ioctl(rx,ALT_DMA_RX_ONLY_ON,(void*)source_addr);//source_addr是源地址
dma_res=alt_dma_rxchan_prepare(rx,rx_buf,32,dma_done,NULL);//rx_buf是目标地址
其中通过alt_dma_txchan_ioctl,alt_dma_rxchan_ioctl还可以设置每次发送和接收的字节数。
14.2.1.PIO中断
nios的IO中断用来检测水平或垂直灵敏度的开关状态,当开关变化,就会产生一个上升沿的脉冲,所以IO配置为上升沿捕获,产生中断。
还有就是用来产生VGA刷新的标志。
通过alt_irq_register()函数可以实现中断注册,其函数原型如下所示:
Intalt_irq_register(alt_u32id,
Void*context,
Void(*handler)(void*,alt_u32));
Id:
中断优先级,即表明所注册的ISR是为哪个中断优先级的中断服务的,中断优先级在SOPCBUILDER中分配。
Context:
为所注册的ISR传递参数,可以是NULL
Handler:
中断服务函数ISR的指针
返回值:
返回值是0时,表示中断注册成功,为负数时,表明中断注册失败。
注意:
如果第三个参数不是NULL,则该优先级中断在注册成功后自动使能。
中断服务子程序ISR是专门为硬件中断服务的子程序。
它与普通函数的定义没有什么区别,只是对ISR的函数原型有特定的要求:
VoidISR_handler(void*context,alt_u32id);
ISR没有返回值,有两个输入参数:
Context:
可能是要传递给ISR的形参,可能是NULL;
Id:
中断优先级
14.系统的测试和分析
图
(一)单通道、通道一输入500kHz的正弦波信号,幅值1.8Vpp
图
(二)打开双通道、显示通道一输入500kHz、幅值位1Vp-p的正弦波信号
图(三)通道一输入500kHz、幅值位0.25Vp-p的正弦波信号
通道二输入500kHz、幅值位1Vp-p的正弦波信号
图(三)通道一输入500kHz、幅值位1Vp-p的正弦波信号
通道二输入500kHz、幅值位0.47Vp-p的正弦波信号
图(四)两个通道分别输入正弦波和三角波的情况
图(五)输入正弦波和方波的情况
15.总结
FPGA是一个极其强大能力的芯片,如同一块白板,展现设计者所想,在这次课设中也深刻感受到他的魅力。
我们团队拿到的由老师提供的terasic的DE2-115学习开发板,开发板性能强悍,价格也不菲。
其配件资源也机器丰富,在课程的学习下,我们决定以设计数字示波器为我们这次的课程设计的内容,需用到A/D转换功能,即便价格不低,老师还是提供了给我们相应配套开发板的AD转换板,方便直接使用和学习。
在这次队伍合作制作示波器的课设中,也遇到不少的麻烦。
但很庆幸课上老师的讲解和基础实验的训练下,我们对FPGA开发板有了个感性的认识,学会使用IP核、使用内嵌的软核、基于NIOS的编程系统等。
加上老师提供的开发板的学习资料和康奈尔大学的学生项目参考,及大便利我们做示波器的课程设计。
在对老师给的参考项目了解下,选择较为合适的设计方式,基于我们学过嵌入式编程课程和实践锻炼,我们决定使用软硬结合设计此次课设,合理分工,利用Verilog编程建立相应的硬件模块,进行信号的检测存储和处理。
创建NIOSII软核,利用Ecelipe软件进行相应的C语言编程,作为主控,并对检测到数据做最后的处理,控制VGA显示数据和波形。
实践之中,也遇到其他科考试和课设的袭击,但小组团队合作的力量很强大,我们尽可能的做出如我们一开始在课上所做的学习方案中提出的要求指标,虽说有点遗憾,未能全部实现,我们还是能从中学习到很多,关于书中的实验,在这次实践下,有了更深刻的理解,不再是那枯燥无味的简单操作。
转化为实际的应用,满足设计的需求。
对于数据的处理,有幅度检
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA 数字 示波器