基于FPGA实现对AD7656的采样与存储.doc_第1页
基于FPGA实现对AD7656的采样与存储.doc_第2页
基于FPGA实现对AD7656的采样与存储.doc_第3页
基于FPGA实现对AD7656的采样与存储.doc_第4页
基于FPGA实现对AD7656的采样与存储.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、基于FPGA实现对AD7656的采样与存储 1、AD7656的引脚功能REFCAPA、REFCAPB、REFCAPC是参考电压引脚,这几个引脚应该接去耦电容器来减小每1个ADC通道参考缓冲器的衰减。V1一V6是模拟输入1-6引脚,它们是模拟前端输入,对应通道的输入范围取决于RANGE引脚的定义。AGND是模拟地,所有的模拟输入信号和外部参考信号都要用AGND。DVcc是5V数字电源端。VDRIVE是逻辑电源输入,该引脚的电压取决于内部参考电压,应接10F或100F的去耦电容器。DGND是数字地,它是数字电路的参考点。AVcc是模拟电压输入(4.5V-5.5V),它只给ADC的内核供电。CONV

2、STABC是转换使能逻辑输入,每对有其相关的CONVST信号,用来启动每对或每4个或6个ADC同步采样。CS是片选信号,逻辑低电平时使能。RD是读信号,逻辑低电平时使能。WR/PEFEN/DIS是写数据/参考使能/非使能。BUSY是忙信号输出,当转换开始时为高电平,并且在转换结束前一直为高电平。SER/PAR是串行/并行选择输入信号。低电平时选择并行接口模式,高电平时选择串行接口模式。DB0/SELA是数据0位选择输出A路。DB1/SELB是数据1位/选择输出B路。DB2/SELC是数据2位/选择输出C路。DB3/DCINC是数据3位,C路为菊花链式。DB4DCINB是数据4位/B路为菊花链式

3、。DB5/DCINA是数据5位/A路为菊花链式。DB6/SCLK是数据6位/串行时钟。DB7/HBEN/DCEN是数据7位/高位使能/菊花链式使能。DB8DOUTA是数据8位/串行数据输出A。DB9/DOUTB是数据9位/串行数据输出B。DB10/DOUTC是数据10位/串行数据输出C。DB11/DGND是数据11位/数字地。DB12、DB13、DB15是数据12位、数据13位、数据15位。DB14/REFBUFEN/DIS是数据14位/参考缓冲使能(低电平时)/非使能(高电平时)。RESET是复位信号输入。RANGE是模拟输入范围选择输入信号。VDO是正电源端。Vss是负电源端。H/SSEL

4、是硬件/软件选择输入引脚。W/B是字或字节模式选择 2、对于ADC采样信号的控制与数据的存储ADC7656的采样:是通过一个主次逼近寄存器实现模数的转换的,即通过range引脚给ADC一个特定范围的电压,选一特定电压Vin,将寄存器的最高位置MSB为1,并将其与参考电压引脚REF的1/2进行比较,若Vin1/2Vref,则MSB不变;否则,将MSB置为0。将次高位置1,依次进行比较,直至LSB结束,模数转换完成,存入寄存器中。本次采用软件是Quartus II,由于Verilog语言中的实数real在综合中不能被识别,同时为了保证输入数的精度,将其扩大倍。模数转换的原理:首先,将移位寄存器最高

5、位MSB置1;然后将输入电压Vin与模拟输出电压Vout=1/2Vref进行比较;如果Vin1/2Vref,则将最高位MSB置为1。将次高位置为1,模拟输出电压Vout=3/4Vref,如果Vin5/8Vref,则将第3高位置为1;如此依次比较。如图:每个320ns输入电压1.32V、1.35V、1.2V,经过模数转换器后其结果为0100010000000000、0100010100011110、0000000000000000。FIFO工作原理:FIFO即先入先出缓存器。din为输入数据引脚;clock为输入脉冲信号;wrreq为写信号,高电平有效;rdreq为读信号,高电平有效;q输出数据

6、端口;full满信号;empty空信号;usedw为写计数器。当写信号wrreq为1,满信号full为0时,当输入脉冲信号clock到来时,数据输入端口数据din被写入缓冲寄存器中,且写计数器usedw加1。当满信号full为1时,无论wrreq为何值,皆不进行写操作。读信号同理;当empty为0,rdreq为1时,脉冲输入信号clock到来时,从输出端口q读出寄存器中数据。若empty为1,则不论rdreq为何值,皆不能进行读操作。 本文主要是通过控制ADC7656的某些引脚实现对ADC的采样,并通过缓冲器fifo对采样信号进行存储。对于ADC7656信号的采集,主要通过控制CONVST转换

7、使能逻辑输入、BUSY忙信号输出、CS片选信号以及RD读信号等来实现。其波形如图:ADC7656主要采用50Mhz的脉冲信号,当输入脉冲clk上升沿到来时,convst出发高电平使能,busy变化为高电平表示跟踪保持电路,经3us后,变为低电平表示转换结束,回到跟踪模式。CS信号被地置低电平,RD用来访问转换的结果。BUSY信号为低电平时开始读操作。数据通过并行接口将数据读出。并行接口模式以1个字的形式来操作(WB=0),也可采用字节的形式(W/B=1),本文采用字的形式。从并行总线上读数据时,信号SERPAR应被置低电平。当CS和RD均为低电平时,数据线DBO-DB15将不再是高阻状态。当给

8、RD一脉冲式时,读一16bit数据,从输出寄存器被读出。注:RD的脉冲应维持在30us,数据才可能被读出。 RAM使用原理:随机存储器。存储单元的内容可按需随意存入一数据,且存取的速度与存储单元的位置无关的存储器。Address为数据地址端口;clock为时钟脉冲输入端口;data为数据输入端口;q为数据输出端口;wren为使能端口。当使能信号wren为1时,输入脉冲到来时,将输入数据存入输入地址指定的地址单元。如图:综述,ADC数据的转化、采集及存储,即在模数转换器ADC输入端口a31.0输入电压0.67V、0.01V、5.36V,经过模数转换器在3us后在输出端口out15.0输出0010

9、001000000000、0000000000000000、1111111100000000。缓存寄存器FIFO1输入端口data15.0,写信号wrreq置1,读信号rdreq有控制单元RD控制,并给时钟信号clock一个16倍频的信号,从输出端口去q15.0数据。其输出端口q15.0接ram输入端口data15.0,使其使能信号wren为1,给其一地址信号address4.0,当时钟到来时将数据存入寄存器ram中,并从dout15.0显示出来0010001000000000、0000000000000000、111111110000000000。3、参考程序:1、module convst

10、(clk,q);input clk;output q;reg q;reg 16:0i; initial beginq=0;i=0;endalways (posedge clk)begini=i+1;if(i200)q=1;else if(i205) q=0;else begin i=0;q=1;endendendmodule2、module busy(clk,q);input clk;output q;reg q;reg 16:0i;initial beginq=0;i=0;endalways (posedge clk)begin q=1; i=i+1;if(i151)q=1;else if(

11、i205)q=0;elsei=0;endendmodule3、module cs(clk, q);input clk;output q;reg 16:0i;reg q;initial begin q=1;i=0; endalways (posedge clk)begin i=i+1; if(i151) q=1;else if(i200) q=0;else if(i205)q=1;elsei=0;endendmodule4、module rstp(clk,q);input clk ;output q;reg q;initial beginq=1;endalways(posedge clk)beg

12、inif(clk=1)q=0;endendmodule5、module RD(clk,clr,q);input clk,clr;output q;wire q;reg 3:0i;initial i=1;assign q=(clk=0&clr=1)?0:i;endmodule6、module writep(clk,clr,q);input clk,clr;output q;reg q;initial q=0;always (clr)begin if(clk=1)q=0;else if(clr=0)q=1;else q=0;endendmodule7、module FIFO (clk, rstp,

13、 din, writep, readp, dout, emptyp, fullp,usedw);inputclk;inputrstp; /复位信号input 15:0din;inputreadp; /读信号inputwritep; /写信号output 15:0dout;outputemptyp; /空标志outputfullp; /满标志output 1:0 usedw;parameterDEPTH = 2,MAX_COUNT = 2b11;/定义地址最大值reg emptyp;regfullp;reg 1:0 usedw;reg 15:0dout; reg (DEPTH-1):0tail;

14、 /定义读指针reg (DEPTH-1):0head; /定义写指针/ 定义计数器 reg (DEPTH-1):0count;reg 15:0 fifomem0:MAX_COUNT; /定义fifomem存储器有4个16位的存储器/ dout被赋给tail指向的值always (posedge clk) begin if (rstp = 1) begin dout = 16h0000; /复位信号有效置0 end else begin dout = fifomemtail; /将fifomem中第tail个单元赋给dout endend always (posedge clk) begin i

15、f (rstp = 1b0 & writep = 1b1 & fullp = 1b0) begin fifomemhead = din; /写入 endendalways (posedge clk) begin if (rstp = 1b1) begin head = 2b00; /复位 end else begin if (writep = 1b1 & fullp = 1b0) begin head = head + 1; end endendalways (posedge clk) begin if (rstp = 1b1) begin tail = 2b00; /复位 end else

16、begin if (readp = 1b1 & emptyp = 1b0) begin tail = tail + 1; end endendalways (posedge clk) begin if (rstp = 1b1) begin count = 2b00; end else begin case (readp, writep) 2b00: count = count; 2b01: if (count != MAX_COUNT) count = count + 1; /为写状态时计数器进行加法计数 2b10: if (count != 2b00) count = count - 1;

17、/为读状态计数器进行减法计数 2b11: count = count; endcase endendalways (count) begin if (count = 2b00) emptyp = 1b1; /count为0时emptyp赋为1 else emptyp = 1b0;endalways (count) begin if (count = MAX_COUNT) fullp = 1b1; /计数到最大时fullp赋为1 else fullp = 1b0;endalways (count)beginusedw=count;endendmodule8、module address(clk,q);input clk;output q;reg 4:0q;reg 4:0i;initiali=0;always (posedge clk)begini=i+1;if(ib)begin ou

温馨提示

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

评论

0/150

提交评论