FPGA直接控制ADC0809对模拟信号进行采样_第1页
FPGA直接控制ADC0809对模拟信号进行采样_第2页
FPGA直接控制ADC0809对模拟信号进行采样_第3页
FPGA直接控制ADC0809对模拟信号进行采样_第4页
FPGA直接控制ADC0809对模拟信号进行采样_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1、第二章 总体方案设计2.1 系统方案设计在以往的A/D器件采样控制设计中,多数是以单片机或CPU为控制核心,虽然编程简单,控制灵活,但缺点是控制周期长,速度慢。单片机的速度极大的限制了A/D高速性能的利用,而FPGA的时钟频率可高达100MHz以上。本设计以高集成度的芯片为核心,进行时序控制、码制变换。具有开发周期短,灵活性强,通用能力好,易于开发、扩展等优点。既降低了设计难度,又加快了产品的开发周期。基于FPGA的信号采集系统主要有:A/D转换器,FPGA,RS232通信,PC机组成。A/D 转换器对信号进行会采集,A/D 内部集成了采样、保持电路,可有效的降低误差,减少外围电路的设计,降低

2、系统的功耗。A/D在接受到指令后进行采集,FPGA采集控制模块首先将采集到的通过A/D 转换城的数字信号引入FPGA,而后对数字信号送往算法实现单元进行处理,并存于FPGA内部RAM中,再将数据由RS232传送到PC上做FFT,实现对采集信号的时域和频域的显示。LF398A/D外围电路时钟电路核心控制器F P G APC机SRAM图2.1.1系统的总体框图:FPGA的设计结构如图2.1.2所示。数字倍频器的倍频输出提供ADC控制器的采样触发脉冲。根据ADC0809操作时序,ADC控制器来实现ADC0809的数据采集操作,采样的时机由倍频器来控制。控制器每控制完成一次采样操作,则停止等待下一个触

3、发脉冲的到来。倍频器每输出一个低电平脉冲,ADC采样控制器的状态机进行一次采样操作。在倍频器的触发控制下,完成被测信号一个基波周期N个点的等间隔采样,同时数字倍频器跟踪输入信号的频率的变化,尽可能地保持N个点的采样宽度正好为被测信号一个周波的宽度。- 时钟分配及各模块的控制:在协调模块工作时,起到很重要的作用。引进晶振产的时钟信号,根据实际需要对起进行倍频或分频,使A/D的采样频率,RAM的读写频率,信号处理实现的核心模块的工作频率一致。 RST CLOCK32MHZ数字倍频正弦 方波 CLK2时钟模块 CLK0ADC控制器ADC0809 DIN0.7 CLK LF398数据处理模 块 EOC

4、 DOUT07 ADD ALE ST RDB ENFPGA图2.1.2系统具体流程框图2.2 各功能模块的设计方案2.2.1 FPGA最小系统板方案设计FPGA是英文Field Programmable Gate Array的缩写,即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物4。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。 该系统的框图如下:电源模块系统扩展接口下载接口PC端FPGA时钟模块图2.2.1 FPGA最小系统框图2.2.2AD模块方案设计本课题要求对不大于

5、10kHz的任意周期信号进行数据采集,根据奈奎斯特采样定理,AD的采样速率最小应为20kHz,而且要求系统简单可靠。综合考虑,本系统最后选择了adc0809,它具有最高100sps的采样速率,转换时间不大于100us,芯片的控制和外围电路都较为简单,完全满足系统的设计要求。2.2.3lf398模块方案设计对变化较慢的模拟信号(即所谓低频信号)在A/D芯片之前可不加采样保持电路。确切的说,若A/D转换器的速度比较模拟信号变化速度高很多倍,我们可将模拟信号直接加到A/D转换器上。如果模拟信号变化比较快, 为了保证转换精度,就要在A/D之前加上采样保持电路,使得在转换期间保持模入信号不变。第三章 系

6、统硬件具体设计:3.1硬件总体设计本硬件电路的主要芯片有:模数转换芯片ADC0809、FPGA。其硬件电路如下图所示: 图3.1 FPGA控制的ADC0809采样电路图3.1中,输入部分:IN0IN7为8条模拟量输入通道。ADC0809对输入模拟量要求:信号单极性,电压范围是05V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路;中间部分:主要是FPGA芯片,实现对ADC0809的采样控制;输出部分:输出的8位二进制数字信号由两种方式显示,一种方式是由8个发光二极管组成,每一个二极管代表一位二进制数,当二极管处于发光状态即“亮”

7、时,表示输出二进制“1”;否则输出“0”。简言之,“亮”“1”,“灭”“0”;另一种输出方式是由两位数码管组成的,每一位数码管以十六进制(即0-F)显示二进制输出的四位。3.2取样定理为了能正确无误地用取样信号VS表示模拟信号VI,取样信号必须有足够高的频率。可以证明,为了保证能从取样信号将原来的被取样信号恢复,必须满足FS=FI(MAX)上式就是取样定理,其中,FS为取样频率,FI(MAX)为输入模拟信号Vi的最高频率分量的频率。在满足上式的条件下,可以用低通滤波器将VS还原为VI。这个低通滤波器的电压传输系数在低于FI(MAX)的范围内应保持不变,而在FS-FI(MAX)以前应迅速下降为0

8、,因此,A/D转换器工作时的取样频率必须高于最大频率,取样频率提高也就意味着留给每次转换的时间相应的缩短,这就要求转换电路必须具备更快的工作速度。因此,为了满足要求,通常取FS=(3-5)FI(MAX)。3.3 模数转换过程采样- 保持:由于采样时间极短,采样输出为一串断续的窄脉冲,而要把每一个采样的窄脉冲信号数字化,是需要一定的时间,因此在两次采样之间,应将采样的模拟信号暂时存储起来。把每次采样的模拟信号存储到下一个采样脉冲到来之前称为保持。量化与编码:量化与编码电路是A/D转换器的核心组成部分,对采样值的量化一般有两种方法:(1)只舍不入:首先取一最小量化单位=UM/2N,UM是输入模拟电

9、压的最大值,n是输出数字代码的位数。当输入模拟电压U1在0-之间,则归入0*,当U1在-2之间,则归入1。这样的量化方法产生的最大量化误差为,而且量化误差总是为正。(2)有舍有入:如果量化单位=2UM/(2N+1)-1,当输入电压U1在0-/2之间,归入0*,当UT在/2-3/2之间归入1。这种量化方法产生的最大量化误差为/2,而且量化误差有正、有负。3.4 模数转换类型直接型A/D转换器:直接型A/D转换器是把输入的模拟电压直接转换成输出的数字代码,而不需要经过中间变量。这种A/D转换器的优点是转换速度快,但转换精度受分压电阻、基准电压及比较器阈值电压等精度的影响,精度较差。间接型A/D转换

10、器:间接型A/D转换器是先将输入的模拟电压u转换成与之大小对应的中间变量,然后再将中间变量转换为输出的数字量。目前使用较多的多属于电压-时间(V-T)变换型和电压-频率(V-F)变换型两大类:(1)电压/时间型A/D转换器有单积分型、双积分型和四重积分型多种,但用的最多的是双积分型。(2)电压-频率型A/D转换器,主要有积分器、窗口比较器、触发器和计数器等组成。3.5 模数转换精度A/D转换器的转换精度:在单片集成A/D转换器中,也用分辨率和转换误差来描述转换精度。分辨率:A/D转换器的分辨率是指引起输出数字量变动一个二进制数码最低有效位时,输入模拟量的最小变化量,小于此最小变化量的输入模拟电

11、压变化,将不会引起输出数字量的变化。转换误差:通常以相对误差的形式给出,它表示A/D转换器实际输出的数字量与理想输出的数字量之间的差别,并用最低有效位LSB的倍数表示。3.6 模数转换芯片ADC0809大规模集成电路芯片ADC0809是一种由单一+5V电源供电,采用逐次逼近转换原理,片内有8路模拟开关,可控制8个模拟量中的一个进入转换器中,能够对0+5V的8路输入模拟电压进行分时转换的通用型可编程模数转换器。(1) ADC0809的内部逻辑及引脚结构 :8路模拟量开关IN0 ST CLKIN1 EOCIN2三态输出锁存器8路A/D转换器IN3 D0IN4 D1IN5D2IN6D3IN7D4D5

12、D6地址锁存与译码器D7ABCALE VREF+ VREF- OE图3.6.1内部逻辑及引脚结构图由上图可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。地址锁存与译码电路完成对A,B,C三个地址位进行锁存和译码,其译码输出用于通道选择。八位A/D转换器是逐次逼近式,由控制与时序电路、逐次逼近寄存器、树状开关以及256R电阻梯网络等组成。 (2) 引脚结构 IN3

13、 IN2IN4 IN1IN5 IN0IN6 AIN7 BST CEOC ALED3 D7OE D6CLK D5VCC D4VREF+ D0GND VREF-D1 D2 1 28 2 27 3 26 4 25 5 24 6 23 7 22 8 21 9 2010 1911 1812 1713 1614 15图3.6.2引脚结构图w D7D0:输出数据线(三态)w IN0IN7:8通道(路)模拟输入w ADDA、ADDB、ADDC:通道地址w ALE:通道地址锁存w START:启动转换w EOC:转换结束状态输出w OE:输出允许(打开输出三态门)w CLK:时钟输入(10KHz1.2MHz(3

14、)ADC0809主要引脚说明: ADC0809对输入模拟量要求:信号单极性,电压范围是05V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。 地址输入和控制线:4条,IN0IN7:8条模拟量输入通道,ALE为地址锁存允许输入线,高电平有效。当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。A,B和C为地址输入线,用于选通IN0IN7上的一路模拟量输入。通道选择表如下表所示。CBA选择的通道000IN0001IN1010IN2011IN3100IN410

15、1IN5110IN6111IN7数字量输出及控制线:11条 ST为转换启动信号。当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。EOC为转换结束信号。当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。OE1,输出转换得到的数据;OE0,输出数据线呈高阻状态。D7D0为数字量输出线。 CLK为时钟输入信号线。因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ, VREF(),VREF()为参考电压输入。3.7 ADC0809设

16、计及工作原理:ADC0809满量程为5V,则分辨率为5000mV/256=20mV,也就是说当模拟电压小于20mV,ADC就不能转换了,所以分辨率一般表示式为: 分辨率=Vref/2位数(单极性) 或 分辨率=(V+ref-V-ref)/2位数(双极性)求f采要2 f信,也就是说必须在信号的一个周期内采集2个以上的数据,才能保证信号形态被还原(避免出现“假频”),这就是“最小采样”原理。若f信=20kHz,则f采 40kHz,其转换时间要求25s。工作原理:START是转换启动信号,一个正脉冲过后A/D开始转换:ALE是3位通道选择地址信号锁存信号。当模拟量送至某一输入端,有3位地址信号选择,

17、而地址信号由ALE锁存。EOC是转换情况状态信号,当启动转换约100us后,EOC将产生一个负脉冲,以示转换结束。在EOC的上升沿后,且输出使能信号ENABLE为高电平,则控制打开三态缓冲器,把转换好的8位数据送至总线。至此ADC0809的一次转换结束8位A/D转换器ADC0809为单极性输入、逐次逼近型A/D转换器,其原理图如图2.3所示:图3.7 8位逐次逼近型A/ D 转换器ADC0809 原理图逐次逼近式ADC是应用最广泛的一种A/D转换方法。逐次逼近式进行转换时,用一个逐次比较寄存器存放转换出来的数字量,转换结束时,将数字量送到缓冲器中。由启动信号对逐次比较寄存器清零,使D/A转换器

18、输出电压也为零。比较器输出高电平,转换开始。同时,逐次逼近寄存器在控制电路控制下进行计数。ADC0809控制逻辑是通过类似对分搜索的方法来控制逐次比较寄存器进行计数,即首先使最高位,经D/A转换后得到一个满量程一半的模拟电压.与输入电压进行比较,如果,比较器得出1,则控制电路使逐次比较寄存器的位保留1;如果,比较器输出为0,则清除位的1,然后使次高位,与上次的结果相加后经D/A转换得到新的(满量程的3/4或1/4),再与进行比较,决定保留还是清除位上的1,重复上述过程,直至为止。这样,经过8次比较后,8位逐次比较寄存器的状态即为一次A/D转换完成后所对应的数字量。转换结束后,控制电路送出一个低

19、电平作为结束信号,同时,将逐次比较寄存器中的数字量送入缓冲寄存器,从而得到数字量输出。3.8采样保持器LF398设计:LF398是一个专用的采样保持芯片,它具有很高的直流精度和较高的采样速率,器件的动态性能和保持性能可以通过合适的外接保持电容达到最佳。LF398的内部结构如图所示; 图3.8.1 LF398的内部电路结构N1是输入缓冲放大器,N2是高输入阻抗射极输出器。S为逻辑控制采样/保持开关,当S接通时,开始采样;当S断开时,开始保持。图3.8.2LF398电路图脉冲变高,采样,S合上,脉冲变低,保持,S打开。LF398的引脚功能为:3、12脚:正负电源输入端。1脚:Vi,模拟电压输入端。

20、11脚:MCTR,逻辑控制输入端,高电平为采样,低电平为保持。10脚:MREF,逻辑控制电平参考端,一般接地。8脚:HOC,采样/保持电容接入端。7脚:OUT,采样/保持输出端。如图3-5所示,被抽样信号从PAM-SIN输入,进入LF398的1脚Vi端,经内部输入缓冲放大器N1放大后送到模拟开关S,此时,将抽样脉冲作为S的控制信号,当LF398的11脚MCTR端为高电平时开关接通,为低电平时开关断开。然后经过射极输出器N2输出比较理想的脉冲幅度调制信号。K1为“平顶抽样”、“自然抽样”选择开关。第四章:各个部分的接口设计:4.1 LF398与ADC0809连接框图将ADC0809的启动转换脉冲

21、START连到LF398的引脚8上,作为采样控制脉冲,在脉冲的下降沿启动转换,在转换期间,LF398处于保持状态。ADC0809IN START 3 5LF398 模入 8图4.1 LF398与ADC0809连接图4.2 FPGA与ADC0809连接框图CLK,STAR,OE VCCIN0 D0IN7 D7ADDA EOCADDB REF+ADDC REF- GNDFPGA_IO16 VCC (IO16,IO15,IO14) FPGAADINPUT ( IO1.IO8) (0.7) FPGA_IO9 FPGA VCC (IO10IO13 ) ALE 200UF 104 图4.2 ADC0809

22、与FPGA连接引脚图FPGA_IO18接收ADC0809 8位数数据FPGA_IO9 接收ADC0809转换结束信号EOCFPGA_IO1012为ADC0809提供8路模拟信号开关的3位地址选通信号(ADDAC)FPGA_IO13为ADC0809提供地址锁存控制信号ALE:高电平时把三个地址信号送入地址锁存器,并经译码器得到地址输出,以选择相应的模拟输入通道FPGA_IO14为ADC0809提供输出允许控制信号OE:电平由低变高时,打开输出锁存器,将转换结果的数字量送到数据总线上FPGA_IO15为ADC0809提供启动控制信号START:一个正脉冲过后A/D开始转换FPGA_IO16为ADC

23、0809提供时钟信号CLKIN0.IN7:8路模拟信号输入端口Vref+和Vref-:参考电压输入端口4.3 FPGA与单片机连接框图串行接口(RS-232),串行接口是连接FPGA和PC机的一种简单方式。RS-232有下列特性: 使用9针的DB-9插头(旧式计算机使用25针的DB-25插头). 允许全双工的双向通讯(也就是说计算机可以在接收数据的同时发送数据). 最大可支持的传输速率为10KBytes/s. DB-9插头你可能已经在你的计算机背后见到过这种插头它一共有9个引脚,但是最重要的3个引脚是: 引脚2: RxD (接收数据). 引脚3: TxD (发送数据). 引脚5: GND (地

24、). 仅使用3跟电缆,你就可以发送和接收数据.数据以每次一位的方式传输;每条线用来传输一个方向的数据。由于计算机通常至少需要若干位数据,因此数据在发送之前先“串行化”。通常是以8位数据为1组的。先发送最低有效位,最后发送最高有效位。对于RS-232来说,是这样处理的:1. 串行线缆的两端事先约定好串行传输的参数(传输速度、传输格式等) 2. 当没有数据传输的时候,发送端向数据线上发送1 3. 每传输一个字节之前,发送端先发送一个0来表示传输已经开始。这样接收端便可以知道有数据到来了。 4. 开始传输后,数据以约定的速度和格式传输,所以接收端可以与之同步 5. 每次传输完成一个字节之后,都在其后

25、发送一个停止位(1) FPGA单片机 RS232图4.3 FPGA与单片机连接框图4.4 FPGA与RAM连接框图D0.D7ADDRSRAM_/WESRAM_/OESRAM_/CSFPGARAM 图4.4 FPGA与RAM连接框图第五章软件设计系统软件的总体设计需要分析的数据FIFO控制模块发送接收核心模块 SIN SOUT分频模块图5总体设计框图5.1采样控制模块:用状态机对ADC0809进行采样控制首先必须了解其工作时序,然后据此做出状态图,最后写出相应的VHDL代码。(1) ADC0809时序分析ADC0809的工作时序如下图3.3所示。时序图中,START为启动转换信号,高电平有效;A

26、LE是3位通道选择地址(ADDC、ADDB、ADDA)信号的锁存信号。当模拟量送至某一输入端(如IN1或IN2等),由3位地址信号选择,而地址信号由ALE锁存;EOC是转换情况状态信号,当启动转换约100us后,EOC产生一个负脉冲,以示转换结束;在EOC的上升沿后,若使输出使能信号OE为高电平,则控制打开三态缓冲器,把转换好的8位数据结果输至数据总线。至此ADC0809的一次转换结束了.ADC0809工作时序:CLOCKADDAADDC 地址锁存 启动ALE/STARTEOC 转换时间OED0D7图 5.1 ADC0809工作时序图由时序图知ADC0809的工作过程如下:w 送通道地址,以选

27、择要转换的模拟输入;w 锁存通道地址到内部地址锁存器;w 启动A/D变换;w 判断转换是否结束;w 读转换结果(2)状态设计根据ADC0809的工作时序图做出状态图,在对其采样控制电路中定义了七个状态:初始化状态、模拟信号选通状态、启动A/D转换状态、启动采样状态、采样停止状态、输出数据状态、数据锁存状态。St0/ale=0,start=0,oe=0,lock=0 resetSt6/ale=0,start=0,oe=1,lock=1St1/ale=1,start=0,oe=0,lock=0St2/ale=0,start=1,oe=0,lock=0St5/ale=0,start=0,oe=1,l

28、ock=0St3/ale=0,start=0,oe=0,lock=0St4/ale=0,start=0,oe=0,lock=0图3.4 控制ADC0809采样状态图如上图3.4所示,为控制ADC0809采样状态图,图中的ST0,ST1,ST2,ST3,ST4,ST5,ST6为设计定义的七种状态类型,与上面的七种状态一一对应。在ST0状态中的RESET为复位信号,在此状态下输出ALE=0;START=0;OE=0;LOCK=0;表示对ADC0809的初始化。在ST1状态下输出ALE=1;START=0;OE=0;LOCK=0;其中ALE上升沿有效,此状态下模拟信号输入选通。在ST2状态下,输出A

29、LE=0;START=1;OE=0;LOCK=0;START信号有效,启动A/D转换。在ST3状态下,输出ALE=0;START=0;OE=0;LOCK=0;在此状态中检测EOC的下降沿,如果EOC的下降沿来了则启动采样,否则,等待启动采样。在ST4状态下,输出ALE=0;START=0;OE=0;LOCK=0;在此状态中检测EOC的上升沿,如果EOC的上升沿来了则停止采样,否则,采样周期中等待。在ST5状态下,输出ALE=0;START=0;OE=1;LOCK=0;OE为高电平,则控制打开三态缓冲器,把转换好的8位数据结果输至数据总线。在ST6状态下,输出ALE=0;START=0;OE=1

30、;LOCK=1;LOCK信号有效,将输出的数据锁存,至此一次完整地采样控制结束。(3) 进程设计在做好状态图之后,进行进程的设计,本设计采用三进程进行状态机设计,如下图3.5所示:LOCK1Process clock时序进程Process pro组合进程ProcessLatch锁存器CLK状态机工作时钟Current_statenext_stateADC0809 ALESTART OEADDACLK EOCD7.0Q7.0采样数据输出图3.5 采样状态机结构图如上图3.5所示:程序含三个进程,clock进程是时序进程,它在时钟信号CLK的驱动下,不断将nest_state中的内容赋给curre

31、nt_state,并由此信号将状态变量传输给组合进程pro。组合进程pro有两个功能:状态译码功能,即根据从current_state信号获得的状态变量,以及来自ADC0809的状态线信号EOC,决定下一状态的转移方向,即确定此态的状态变量;采样控制功能,即根据current_state中的状态变量确定对0809的控制信号线ALE、START、OE等输出相应的控制信号,当采样结束后还要通过LOCK向锁存器进程latch发出锁存信号,以便将由0809的D7.0数据输出口的8位转换数据锁存起来,START是转换启动信号,一个正脉冲过后A/D开始转换:ALE是3位通道选择地址信号锁存信号。当模拟量送

32、至某一输入端,有3位地址信号选择,而地址信号由ALE锁存。EOC是转换情况状态信号,当启动转换约100us后,EOC将产生一个负脉冲,以示转换结束。在EOC的上升沿后,且输出使能信号ENABLE为高电平,则控制打开三态缓冲器,把转换好的8位数据送至总线。至此ADC0809的一次转换结束。5.2分频模块设计由于硬件电路的时钟频率为32MHz,频率太高,在做下载是看不到预想的结果,故采用此模块,将频率变低已达到预期的效果。另外,以计数的方式设计了一个8位二进制的输出来替代ADC0809的经模数转换后的8位二进制输出,即一个输入时钟经两个不同的分频之后为各所用,分频模块程序如下:library IE

33、EE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity div is Port ( clk : in std_logic; -系统时钟 clk1: out std_logic; -分频后的时钟输出 shuout: out std_logic_vector(7 downto 0); -8位二进制输出端end div;architecture Behavioral of div isbegin process(clk) variable cnt:intege

34、r range 0 to 31999999; -分频系数的设置,这里系统时钟为32MHZ begin if clkevent and clk=1 then if cnt=4 then -为了看到仿真结果,这里给cnt赋值为4 cnt:=0; clk1=1; else cnt:=cnt+1; clk1=0; end if; end if; end process; shu:process(clk) variable cnt:integer range 0 to 31999999; -定义整型变量 variable p:std_logic_vector(7 downto 0):=00000000;

35、 variable full:integer range 0 to 200; -定义整型变量 begin if clkevent and clk=1 then if full=10 then -为了看到仿真结果 ,给full赋值10 full:=0; p:=p+1; else full:=full+1; end if; end if; if p=11111111 then -当P计数满后,清零重新开始计数 p:=00000000; end if; shuout=p; end process shu;end Behavioral;5.3传输模块串行通信即串行数据传输,实现FPGA与PC的串行通信

36、在实际中,通过串行通信,可以向FPGA发控制命令让其执行相应的操作,同时把需要的数据通过串口发到PC上进行相应的数据处理和分析,以此来判断FPGA是否按要求工作,实现了与PC的串行通信。串行通信的状态流程置位接受串行数据判断数据初始状态操作结束控制FIFO发送数据FPGA数据发送模块的设计 根据RS232 异步串行通信来的帧格式,在FPGA发送模块中采用的每一帧格式为:1位开始位+8位数据位+1位奇校验位+1位停止位,波特率为2400。本系统设计的是将一个8位的数据封装成高位帧和低位帧两个帧进行发送,先发送低位帧,再发送高位帧,在传输数据时,加上文件头和数据长度,文件头用555555来表示,只

37、有单片机收到555555时,才将下面传输的数据长度和数据位进行接收,并进行奇校验位的检验,正确就对收到的数据进行存储处理功能,数据长度可以根据需要任意改变。由设置的波特率可以算出分频系数,具体算法为分频系数X=CLK/(BOUND*2)。可由此式算出所需的任意波特率。下面是实现上述功能的VHDL源程序。Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity atel2_bin isport( txclk: in std_logic;

38、-2400Hz的波特率时钟 reset: in std_logic; -复位信号 din: in std_logic_vector(15 downto 0); -发送的数据 start: in std_logic; -允许传输信号 sout: out std_logic -串行输出端口 );end atel2_bin;architecture behav of atel2_bin issignal thr,len: std_logic_vector(15 downto 0);signal txcnt_r: std_logic_vector(2 downto 0);signal sout1: s

39、td_logic;signal cou: integer:=0;signal oddb:std_logic;type s is(start1,start2,shift1,shift2,odd1,odd2,stop1,stop2);signal state:s:=start1;begin process(txclk) begin if rising_edge(txclk) then if cou3 then thr=0000000001010101; -发送的文件头 elsif cou=3 then thr3 and state=stop2) then thr=din;-发送的数据 end if

40、; end if; end process; process(reset,txclk) variable tsr,tsr1,oddb1,oddb2: std_logic_vector(7 downto 0); begin if reset=1 then txcnt_r0); sout1=1; state=start1; cou if start=1 then if cou=3 then len=thr; end if; tsr:=thr(7 downto 0); oddb1:=thr(7 downto 0); sout1=0; -起始位 txcnt_r0); state=shift1; els

41、e state oddb=oddb1(7) xor oddb1(6) xor oddb1(5) xor oddb1(4) xor oddb1(3) xor oddb1(2) xor oddb1(1) xor oddb1(0); sout1=tsr(0); -数据位 tsr(6 downto 0):=tsr(7 downto 1); tsr(7):=0; txcnt_r=txcnt_r+1; if (txcnt_r=7) then state=odd1;cou -奇校验位 if oddb=1 then sout1=0;state=stop1; else sout1=1;state sout1=1

42、; -停止位 if cou4 then state=start1; else state tsr1:=thr(15 downto 8); oddb2:=thr(15 downto 8); sout1=0; -起始位 txcnt_r0); state oddb=oddb2(7) xor oddb2(6) xor oddb2(5) xor oddb2(4) xor oddb2(3) xor oddb2(2) xor oddb2(1) xor oddb2(0); sout1=tsr1(0);-数据位 tsr1(6 downto 0):=tsr1(7 downto 1); tsr1(7):=0; txcnt_r=txcnt_r+1; if (txcnt_r=7) then state -奇校验位 if oddb=1 t

温馨提示

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

最新文档

评论

0/150

提交评论