基于FPGA数据采集系统方案文档格式.docx
《基于FPGA数据采集系统方案文档格式.docx》由会员分享,可在线阅读,更多相关《基于FPGA数据采集系统方案文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
采用自顶向下的设计方法可将本设计分为控制器模
块和FIFO缓冲模块。
1.系统的模块设计与功能仿真
ad转换模块与高速存储模块结合调理电路与数据处理电路就构成了一个完整的系统。
调理电路和模拟信号经由a/d转换器adc08200转换模块后变为数字信号,传给同样由fpga控制的先进先出存储器fifo这样就弥补了由单片机控制带来的速度低的缺点.fpga存储的数字信号可由单片机系统来读取和处理.在quartus2平台下使用原理图输入方式可以使设计得到简化.系统的连接图如图4所示.其中clk为时钟信号;
rst为复位信号;
d[7...0]转换后的数字信号,接a/d的输出;
wr/rd为读写控制;
rdclk为读时钟;
aclr为清零信号;
adclk接a/d转换器的时钟clk;
adpd接adc08200的pd;
wrfull;
rdempty为写满,读空显示信号;
q{7...0}为输出数据.
2.控制器模块设计
2.1ADC08200芯片功能介绍
ADC08200是美国国家半导体公司生产的单通道、低功耗、高速8位模数转换器。
它具有成本低、功耗低、体积小和易于使用等优点。
最高采样频率达200MS/s。
在掉电模式下ADC08200仅消耗1mw。
独特的结构在50MHZ标准信号的输入情况下可达到7.3有效采样位。
单电源3v或2.5v的供电,带高质量参考源和高性能采样保持电路。
主要端口:
Clk:
时钟输入端;
Vin模拟信号输入端;
PD:
掉电保护,当PD为低时,D0-D7正常输出,当PD为高时,D0-D7输出保持;
D0-D7:
数据输出端口。
D0为数据最低位,D7为最高位;
图3为ADC08200的工作时序图和外围接口电路图。
图3ADC08200接口电路图
2.2基于VHDL控制器设计
VHDL是一种硬件描述语言,它可以对电子电路和系统的行为进行描述。
基于这种描述,结合相关的软件工具,可以得到所期望的实际电路与系统。
根据ADC08200的特点,可通过硬件描述语言设计一个状态机,最后下载到FPGA芯片上,通过FPGA芯片控制ADC08200的工件。
时钟由外部引入,由分频模块得到想要的时钟。
设计过程为编写VHDL代码,然后在QuartusII平台下进行编译,仿真。
最后下载到FPGA芯片中。
2.3高速存储模块的设计
FIFO是一种存储器参数可设置模块库,在高速数字系统中常用作缓存。
在高速数据传输和实时显示领域中,需要对数据进行快速储存和发送,要实现快速的数据采集、顺序储存和传送,传统的RAM型存储器已经无法满足要求。
目前许多高速系统都采用FIFO作为缓存体。
因为FIFO的写入(读出)时间只需要一个时钟周期,不需要对地址进行加1操作,大大提高了存储速度。
利用LPM中的宏功能块LPM_FIFO,在QuartusII平台下定制一个高速的先进先出FIFO根据需要对所使用的宏功能块的参数进行适当调整,由此生成一个满足自己特定需要的模块。
二.VHDL软件设计
1.主控制模块VHDL程序
libraryieee;
useieee.std_logic_1164.all;
entityadc08200is
port(rst:
instd_logic;
clk:
d:
instd_logic_vector(7downto0);
ctloe:
adclk:
outstd_logic;
adpd:
data:
outstd_logic_vector(7downto0);
dclk:
outstd_logic);
endentityadc08200;
architecturebhvofadc08200is
typead_statesis(state0_type,state1_type);
signalsta_g_currentstate:
ad_states;
signalsta_g_nextstate:
signalctl_gp_latchflag:
std_logic;
signalchipselect:
begin
:
process(sta_g_currentstate)
casesta_g_currentstateis
whenstate0_type=>
adclk<
='
1'
;
ctl_gp_latchflag<
dclk<
0'
sta_g_nextstate<
=state1_type;
whenstate1_type=>
=state0_type;
whenothers=>
endcase;
endprocess;
reg:
process(clk,rst)
begin
ifrst='
thensta_g_currentstate<
elsif(clk'
eventandclk='
)then
sta_g_currentstate<
=sta_g_nextstate;
endif;
endprocessreg;
latch:
process(ctl_gp_latchflag)
thendata<
=(others=>
'
);
elsif(ctl_gp_latchflag'
eventandctl_gp_latchflag='
)then
data<
=d;
endprocesslatch;
chipselect<
=ctloe;
adpd<
=notchipselect;
endarchitecturebhv;
2.LPM-FIFO宏模块的调用
1.1在设计数据采集系统前,必须首先完成对采集转换数据缓存和存放的设计。
利用MegaWizard
Plug-InManager定制FIFO宏功能块。
设计步骤如下:
(1)打开MegaWizardPlug-InManager初始对话框。
在Tools菜单中选择MegaWizard
Plug-InManager,产生如图7-5所示的界面,选择Createanewcustom…项(如果要修改一
个已编辑好的LPM模块,则选择Editanexistingcustom…项),即定制一个新的模块。
单
击Next按钮后,产生如图7-6所示的对话框,在左栏选择memorycompiler项下的LPM_FIFO,再选择Cyclone器件和VHDL语言方式;
最后输入FIFO文件存放的路径和文件名:
F:
\adc08200\fifo(定制的fifo元件文件名),单击Next按钮。
(2)选择ROM控制线、地址线和数据线。
在如图7-7和图7-8所示的对话框中选择
地址线位宽和ROM中数据数分别为6和64;
选择地址锁存控制信号inclock。
(3)单击Next按钮后出现图7-9的界面。
在“Whatshouldthefifo”栏选择默认的
“Auto”。
在适配中,QuartusII将根据选中的目标器件系列,自动确定嵌入fifo模块的类型。
生成FIFO模块如下:
1.2其FIFO部VHDL语言程序:
LIBRARYieee;
USEieee.std_logic_1164.all;
LIBRARYaltera_mf;
USEaltera_mf.all;
ENTITYfifoIS
PORT
(
clock:
INSTD_LOGIC;
data:
INSTD_LOGIC_VECTOR(7DOWNTO0);
rdreq:
wrreq:
empty:
OUTSTD_LOGIC;
full:
q:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
usedw:
OUTSTD_LOGIC_VECTOR(9DOWNTO0)
);
ENDfifo;
ARCHITECTURESYNOFfifoIS
SIGNALsub_wire0:
STD_LOGIC_VECTOR(9DOWNTO0);
SIGNALsub_wire1:
STD_LOGIC;
SIGNALsub_wire2:
STD_LOGIC_VECTOR(7DOWNTO0);
SIGNALsub_wire3:
COMPONENTscfifo
GENERIC(
add_ram_output_register:
STRING;
intended_device_family:
lpm_numwords:
NATURAL;
lpm_showahead:
lpm_type:
lpm_width:
lpm_widthu:
overflow_checking:
u