图3.3.2 Quartus II仿真结果
4 AD采样设计
4.1 AD7980芯片介绍
AD采样,即将时间和幅值上都连续的模拟电信号,在采样时钟的作用下,转换为二进制0、1,这些0和1就构成了数字信号。
采样时选用AD7980芯片,该芯片是一种快速、低功耗、单电源的16位模数转换芯片,采用2.5V模拟单电源供电,取其高8位作为FIR滤波器的输入信号。该芯片共有10个引脚:
REF:输入的参考电压(相对于地),范围是2.4V-5.1V。
VDD:电源输入
IN+:模拟输入端,其电压是相对于IN-的。IN+与IN-的差值电压等于VREF。
GND:接地端
CNV:转换输入端,该端口有很多功能。当输入上升沿时,控制该芯片转换并选择界面模式(part、chain or )。当选择 模式时,STD在CNV为低电平时输出;当选择chain模式时,数据必须在CNV为高电平时读入。
STD:串行数据输出端。转换结果在该端口输出,且与SCK同步。
SCK:串行数据时钟输入端。当选择part模式时,转换结果有该时钟控制。
SDI:串行数据输入端。
VIO:输入/输出端口供电端,可工作于1.8V,2.5V,3V或5V电压。
该芯片工作时的模式图如下图4.1.1所示:
图4.1.1 AD7980芯片工作模式图
由图4.1.1可以发现,在cnv的下降沿SDO开始输出数据最高位,其他位将在SCK的下降沿输出。经过16 SCK的下降沿或CNV的变高时,以较早者为准,SDO的回报高阻抗。
4.2 采样率计算及控制程序设计
采样率要满足如下要求:
(1)
(2)
由于我们要设计的FIR滤波器的输入为8位数据,所以采样输出也需设计为8位。用Verilog编写的对上述芯片的控制程序如下:
module sample(clk_20MHz,SDO,data_ad2,data_ad,rst,data_en,ad_cnv);
input clk_20MHz;
input SDO;
output[15:0] data_ad;
output[7:0] data_ad2;
reg[15:0] data_ad;
reg[2:0] state;
input rst;
input ad_cnv;
reg[1:0] SDO_state;
parameter hold=1,ready=2,reap=4;
reg[4:0] count;
output data_en;//indictor when reap is completion
reg data_en;
reg[1:0] ad_cnv_data;
always @(negedge clk_20MHz or negedge rst or posedge ad_cnv)
begin
if ((!rst)||ad_cnv)
begin
state<=hold;
count<=5'b0;
SDO_state<=2'b11;
data_ad<=16'b0;
data_en<=0;
ad_cnv_data<=2'b11;
end
else
case(state)
hold:
begin data_ad<=16'b0;
if(ad_cnv_data==2'b10)
begin state<=ready;
ad_cnv_data<=2'b00;
end
else begin
ad_cnv_data<={ad_cnv_data[0],ad_cnv}; // depending on ad7980 datasheet 基于FPGA的多普勒滤波器设计+文献综述(6):http://www.youerw.com/tongxin/lunwen_3506.html