基于FPGA实现对AD7656的采样及存储Word格式.docx
- 文档编号:18849824
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:12
- 大小:97.78KB
基于FPGA实现对AD7656的采样及存储Word格式.docx
《基于FPGA实现对AD7656的采样及存储Word格式.docx》由会员分享,可在线阅读,更多相关《基于FPGA实现对AD7656的采样及存储Word格式.docx(12页珍藏版)》请在冰豆网上搜索。
DB[6]/SCLK是数据6位/串行时钟。
DB[7]/HBEN/DCEN是数据7位/高位使能/菊花链式使能。
DB[8]DOUTA是数据8位/串行数据输出A。
DB[9]/DOUTB是数据9位/串行数据输出B。
DB[10]/DOUTC是数据10位/串行数据输出C。
DB[11]/DGND是数据11位/数字地。
DB[12]、DB[13]、DB[15]是数据12位、数据13位、数据15位。
DB
[14]/REFBUFEN/DIS是数据14位/参考缓冲使能(低电平时)/非使能(高电平时)。
RESET是复位信号输入。
RANGE是模拟输入范围选择输入信号。
VDO是正电源端。
Vss是负电源端。
H/S
SEL是硬件/软件选择输入引脚。
W/B是字或字节模式选择
2、对于ADC采样信号的控制与数据的存储
ADC7656的采样:
是通过一个主次逼近寄存器实现模数的转换的,即通过range引脚给ADC一个特定范围的电压,选一特定电压Vin,将寄存器的最高位置MSB为1,并将其与参考电压引脚REF的1/2进行比较,若Vin>
1/2Vref,则MSB不变;
否则,将MSB置为0。
将次高位置1,依次进行比较,直至LSB结束,模数转换完成,存入寄存器中。
本次采用软件是QuartusII,由于Verilog语言中的实数real在综合中不能被识别,同时为了保证输入数的精度,将其扩大
倍。
模数转换的原理:
首先,将移位寄存器最高位MSB置1;
然后将输入电压Vin与模拟输出电压Vout=1/2Vref进行比较;
如果Vin>
1/2Vref,则将最高位MSB置为1。
将次高位置为1,模拟输出电压Vout=3/4Vref,如果Vin<
3/4Vref,则将次高位置为0。
将第3高位置1,模拟输出电压为Vout=5/8Vref,如果Vin>
5/8Vref,则将第3高位置为1;
如此依次比较。
如图:
每个320ns输入电压1.32V、1.35V、1.2
V,经过模数转换器后其结果为010*********。
FIFO工作原理:
FIFO即先入先出缓存器。
din为输入数据引脚;
clock为输入脉冲信号;
wrreq为写信号,高电平有效;
rdreq为读信号,高电平有效;
q输出数据端口;
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转换使能逻辑输入、BUSY忙信号输出、CS片选信号以及RD读信号等来实现。
其波形如图:
ADC7656主要采用50Mhz的脉冲信号,当输入脉冲clk上升沿到来时,convst出发高电平使能,busy变化为高电平表示跟踪保持电路,经3us后,变为低电平表示转换结束,回到跟踪模式。
CS信号被地置低电平,RD用来访问转换的结果。
BUSY信号为低电平时开始读操作。
数据通过并行接口将数据读出。
并行接口模式以1个字的形式来操作(W/B=0),也可采用字节的形式(W/B=1),本文采用字的形式。
从并行总线上读数据时,信号SER/PAR应被置低电平。
当CS和RD均为低电平时,数据线DBO-DB15将不再是高阻状态。
当给RD一脉冲式时,读一16bit数据,从输出寄存器被读出。
注:
RD的脉冲应维持在30us,数据才可能被读出。
RAM使用原理:
随机存储器。
存储单元的内容可按需随意存入一数据,且存取的速度与存储单元的位置无关的存储器。
Address为数据地址端口;
clock为时钟脉冲输入端口;
data为数据输入端口;
q为数据输出端口;
wren为使能端口。
当使能信号wren为1时,输入脉冲到来时,将输入数据存入输入地址指定的地址单元。
综述,ADC数据的转化、采集及存储,即在模数转换器ADC输入端口a[31..0]输入电压0.67V、0.01V、5.36V,经过模数转换器在3us后在输出端口out[15..0]输出0010001000000000、0000000000000000、1111111100000000。
缓存寄存器FIFO1输入端口data[15..0],写信号wrreq置1,读信号rdreq有控制单元RD控制,并给时钟信号clock一个16倍频的信号,从输出端口去q[15..0]数据。
其输出端口q[15..0]接ram输入端口data[15..0],使其使能信号wren为1,给其一地址信号address[4..0],当时钟到来时将数据存入寄存器ram中,并从dout[15..0]显示出来0010001000000000、0000000000000000、111111110000000000。
3、参考程序:
1、moduleconvst(clk,q);
inputclk;
outputq;
regq;
reg[16:
0]i;
initialbegin
q=0;
i=0;
end
always@(posedgeclk)
begin
i=i+1;
if(i<
200)
q=1;
elseif(i<
205)
else
begini=0;
endmodule
2、modulebusy(clk,q);
initialbegin
beginq=1;
151)
205)
else
3、modulecs(clk,q);
initial
begin
i=i+1;
if(i<
151)
q=1;
200)
q=0;
4、modulerstp(clk,q);
inputclk;
always@(posedgeclk)
if(clk==1)
5、moduleRD(clk,clr,q);
inputclk,clr;
wireq;
reg[3:
initiali=1;
assignq=(clk==0&
&
clr==1)?
0:
i;
6、modulewritep(clk,clr,q);
initialq=0;
always@(clr)
beginif(clk==1)
elseif(clr==0)
elseq=0;
7、moduleFIFO(clk,rstp,din,writep,readp,dout,emptyp,fullp,usedw);
inputclk;
inputrstp;
//复位信号
input[15:
0]din;
inputreadp;
//读信号
inputwritep;
//写信号
output[15:
0]dout;
outputemptyp;
//空标志
outputfullp;
//满标志
output[1:
0]usedw;
parameterDEPTH=2,
MAX_COUNT=2'
b11;
//定义地址最大值
regemptyp;
regfullp;
reg[1:
reg[15:
reg[(DEPTH-1):
0]tail;
//定义读指针
0]head;
//定义写指针
//定义计数器
0]count;
0]fifomem[0:
MAX_COUNT];
//定义fifomem存储器有4个16位的存储器
//dout被赋给tail指向的值
always@(posedgeclk)begin
if(rstp==1)begin
dout<
=16'
h0000;
//复位信号有效置0
end
elsebegin
=fifomem[tail];
//将fifomem中第tail个单元赋给dout
end
if(rstp==1'
b0&
writep==1'
b1&
fullp==1'
b0)begin
fifomem[head]<
=din;
//写入
b1)begin
head<
=2'
b00;
//复位
if(writep==1'
=head+1;
tail<
if(readp==1'
emptyp==1'
=tail+1;
count<
case({readp,writep})
2'
b00:
=count;
b01:
if(count!
=MAX_COUNT)
=count+1;
//为写状态时计数器进行加法计数
b10:
b00)
=count-1;
//为读状态计数器进行减法计数
b11:
endcase
always@(count)begin
if(count==2'
emptyp<
=1'
b1;
//count为0时emptyp赋为1
else
b0;
if(count==MAX_COUNT)
fullp<
//计数到最大时fullp赋为1
always@(count)begin
usedw=count;
8、moduleaddress(clk,q);
reg[4:
0]q;
32)
q=i;
$finish;
9、moduleadc7656(a,b,clk,c1,d1,q,q1);
input[31:
0]a;
outputb,c1,d1,q,q1;
reg[31:
0]a1,b,c1,d1;
reg[7:
0]count;
reg[15:
0]q;
0]out;
regq1;
initial
begin
q1=0;
count=0;
c1=0;
d1=500000000;
always@(posedgeclk)
count=count+1;
b=(c1+d1)/2;
i=16-count;
if(a>
b)
out[i]=1;
c1=b;
d1=d1;
out[i]=0;
c1=c1;
d1=b;
if(count>
=8)
begin
d1=d1*2;
c1=c1*2;
q1=out[i];
if(count==16)
out={out[15],out[14],out[13],out[12],out[11],out[10],out[9],out[8],out[7],out[6],out[5],out[4],out[3],out[2],out[1],out[0]};
q=out;
if(count>
16)
其中,RAM为调用模块。
4、接线图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA 实现 AD7656 采样 存储
![提示](https://static.bdocx.com/images/bang_tan.gif)