基于ARM和FPGA的高速数据采集卡的设计与实现 1.docx
- 文档编号:3378745
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:15
- 大小:525.92KB
基于ARM和FPGA的高速数据采集卡的设计与实现 1.docx
《基于ARM和FPGA的高速数据采集卡的设计与实现 1.docx》由会员分享,可在线阅读,更多相关《基于ARM和FPGA的高速数据采集卡的设计与实现 1.docx(15页珍藏版)》请在冰豆网上搜索。
基于ARM和FPGA的高速数据采集卡的设计与实现1
清华大学
硕士毕业论文报告
课程名称:
嵌入式系统课程设计
专业班级:
应用电子技术09201班
******
******************************
完成时间:
2011年12月26日
报告成绩:
评阅意见:
评阅教师日期
第四章设计总结....................................................................................13
第一章系统设计方案和主要器件选型
1.1系统设计方案
整个系统是由前端模拟通道、触发电路、FPGA数据采集预处理、数据模拟输出和ARM数据处理显示五部分组成。
FPGA数据采集预处理分为A/D数据采集、触发控制、帧控制、SDRAM控制器和ARM数据交换五个部分,模拟数据经过A/D装换后在FPGA中缓冲,缓冲之后使用触发控制将采集到的数据分成512个数据点组成的数据帧,数据按照帧的顺序传输,经过SDRAM存储后,通过ARM与FPGA中的共享存储区传输给ARM。
具体的数据采集系统的硬件结构图如下图2-1所示:
图2-1数据采集卡硬件结构图
1.2ADC芯片选型
A/D转换器是整个采集系统的核心,系统前端模拟电压调理电路、FPGA数据采集和后端的采集控制部分都与A/D直接相关,A/D芯片的选择不但关系到系统设计的性能,而且直接决定了整板设计的难度。
1.3DA芯片选型
为了输出高性能的模拟信号,DAC采用采样率高达175M的高速DAC。
AD970X系列DAC针对低功耗特性进行了优化,同时仍保持出色的动态性能,适合用于手持便携式仪器等需要有效地合成宽带信号的场合。
AD9707精度高达14位,采样率为175MSPS,内部集成边沿触发式输入锁存器,1V温度补偿带隙基准电压源和自校准功能,使AD9707能提供真14位INL与DNL性能。
1.4FPGA芯片选型
在现代采集系统中FPGA往往被用做通信系统的中枢,负责了大量的数据采集和前期处理和控制工作,FPGA作为系统的中间级主芯片承担着承前启后的重大任务。
1.4.1FPGA的特点及选型
常见的FPGA一般由六部分组成,分别为可编程输入/输出单元、基本可编程逻辑单元、嵌入式块RAM、丰富的布线资源、底层嵌入功能单元和内嵌专用硬核等。
1.4.2FPGA的设计步骤
1.电路设计与输入2.功能仿真
3.综合优化4.综合后仿真
5.实现与布局布线6.时序仿真和验证
7.板级仿真与验证8.调试与加载配置
1.4.3FPGA核心电路设计
FPGA各系列的最小系统板的单元组成基本相同,仅具体电路中存在着差异。
一般可以把其组成分为七部分:
FPGA主芯片、PROM存储芯片、电源电路、全局时钟发生电路、JTAG接口电路、下载模式选择电路和接口引出插针。
以该最小系统板作为控制核心,外加所需的接口电路就可以实现各种设计。
1.5主控CPU选型
主控CPU相当与人的心脏,整个系统运行的快慢与它有直接关系,常见的嵌入式处理器有单片机、ARM、DSP等,它们都有各自的特点,运用的场合各有不同,设计的难度也不一样。
主控CPU的选择是一个综合的过程,在选择时它必须有以下特点:
1.CPU运算速度快,不能拖慢整个系统采集的效率。
2.CPU内嵌LCD控制器可以驱动TFT-LCD,利于降低系统设计难度。
3.所选处理器比较常见,在其他设计中有广泛应用,便于代码移植,简化设计。
4.基于此CPU的开发板购买方便,价格便宜,代码丰富。
第二章数据采集与触发电路设计
2.1前端采集电路设计
2.1.1AD前端调理电路
前端调理电路目的就是将被测信号调理到AD9480模拟输入的电压范围。
被测信号经过前端阻抗变换网络之后,进入后级运算放大器,后级选择高阻抗低噪声运算放大器ADA4817,输入阻抗高达500GΩ。
下图2-1为AD8351单端转差分的典型电路:
图2-1AD8351单端转差分的典型电路
下图2-2为AD9480功能模块图:
图2-2AD9480功能模块图
2.1.2FPGA数据采集
设计中使用FPGA内部的RAM来缓冲AD输出的数据,EP3C25内部的RAM资源总共有608Kbits,使用这些内部的RAM作为数据缓冲单元,既可以节约成本,又可以提高硬件采集的性能。
使用FPGA内部的RAM资源,设计中可以非常容易的构建前端数据缓冲所需要的双口RAM或者FIFO。
下图2-3为典型的双口RAM模块图。
2-3典型的双口RAM模块图
2.2触发电路与触发控制
为了保证采集数据的稳定,一般的数据采集系统中都会有触发电路,它能提供了一个稳定的触发相位点,使得重构的波形能够在上位机的显示屏上稳定显示,还保证我们能观测的感兴趣的波形。
2.2.1触发分析
触发的目的是同步,触发的过程是比较。
图2-4基本的触发结构图
2.2.2触发控制
典型的触发信号为比较器输出的脉冲信号,触发控制是根据触发脉冲的起始位置,采集起始位置之后的一帧数据,由于每一次触发信号产生时,采集的数据都是在一个固定的值,因此将每次触发后的512个数据点组合为一帧,在显示上就会出现一个稳定的数据波形。
整个控制和实现上述功能的过程就是触发控制。
2.4SDRAM控制器设计
2.4.1SDRAM控制器结构
图2-5SDRAM控制器系统结构
1.控制接口模块
图2-6接口模块的结构图
第三章各芯片间的数据传输与处理
3.1采集卡各芯片速度等级的划分和数据流向
按照整个系统各部分的速度,我们将系统简单的划分为三个速度等级,不管是程序设计还是PCB设计都要充分的考虑到各个速度等级的特点,才能设计出合理可靠的系统,具体划分情况如下图3-1所示:
图3-1系统速度等级划分图
为了提高采集、存储和显示的效率,根据各个芯片的特点,运用了下面几种处理方式来提高效率:
1.在FPGA中构建一个多缓冲单元的乒乓机制采集模块,提高FPGA采集的效率,并降低了中间级传输的速度,利于中间级的数据处理。
2.在中间级FPGA与后端ARM之间的通信中,使用DMA模式,大大提高了数据传输的速率,并解放了ARM,使其可以从容的进行数据处理和显示工作。
3.在ARM接收数据后对采集的数据帧进行控制,保证数据传输的可靠性和正确性。
3.2ARM与FPGA通信
在数据采集卡中ARM主要负责数据显示和数据分析,处理的速度处于MS级;而FPGA在系统中处于数据的高速采集和高速处理,处理的速度是ns级。
两个处理器的之间的数据传输属于典型的异步数据通信,它们之间通信的速度之间决定了系统处理数据的效率。
FPGA与ARM之间属于大量数据交换,以异步并行读取的方式为例介绍ARM与FPGA的通信,实际设计中使用DMA方式来实现ARM与FPGA之间的大数据量通信。
3.2.1ARM存储系统分析
S3C2410A存储控制器提供访问外部存储器所需要的存储器控制信号。
S3C2410A支持大、小端模式,将存储空间分为8个组(Bank),每组大小是128M,共计1GB,如图3-2所示。
3.3数据的模拟输出
3.3.1模拟输出电路设计
模拟输出部分是由AD9707、低电压异或门76VX86和运放ADA4899组成。
测试时可以通过跳线J1选择AD9707的工作模式,J1选择高电平时为PIN模式,低电平时为SPI模式,出现高电平脉冲时复位内部寄存器。
电路图中AD9707的输入时钟选择差分时钟,AD9707输出选择单端输出,正向输出端IOUTA与ADA4899的反相输入端相连,反向输出端IOUTB接地,内部基准电压源REFIO与ADA4899的同相输入端相连。
运算放大器ADA4899将AD9707单端输出的电流变化转换为电压变化,外部使用内部基准电压源时REFIO引脚需用一个0.1μF电容接地。
基本的硬件电路图如下图3-3所示:
图3-3AD9707基本外围电路
3.3.2AD9707内部寄存器配置
在AD9707测试之前必须按照外围电路的设计配置好AD9707工作的状态。
3.3.3使用ARM和FPGA分别配置AD9707
1.使用ARM配置AD9707内部寄存器
S3C2410具有两个SPI接口模块,每个模块分别具有两个8位移位寄存器用来接收和发送数据。
数据的接收(串行移入)和发送(串行移出)是同时进行的。
串行数据的速率由相应的寄存器设定。
其时序很简单,主要是在CLK的控制下,两个双向移位寄存器进行数据交换。
SPI接口发送数据的程序流程图如下图3-4所示:
图3-4SPI数据发送程序流程图
使用S3C2410的SPI端口0来配置AD9707内部寄存器的主程序如下:
voidSpi_MS_poll(void)
{
inti;
S16a[2]={0x0080,0x0200};
//地址0x00的数据为0x80;地址0x02的数据为0x00
for(i=0;i<2;i++)//通过两次赋值
{
SPI_Port_Init(0);//SPI端口初始化
rSPPRE0=0x0;//设置波特率SCLK为20M
rSPCON0=(0<<5)|(1<<4)|(1<<3)|(1<<2)|(0<<1)|(0<<0);
//设置SPI端口为polling模式,时钟使能,SPI为主控模式
rSPPIN0=(0<<2)|(1<<1)|(0<<0);
//禁止多主控错误检测使能,主机输出后释放MOSI
{
if(rSPSTA0&0x1)//检查SPI0的状态
{
rSPTDAT0=a[i];i++;//发送数据,准备下一次发送数据
}
}
rSPCON0=(0<<5)|(0<<4)|(1<<3)|(1<<2)|(0<<1)|(0<<0);
//设置SPI端口为Polling模式,禁止SCK,选择主控模式
}
}
使用ARM的SPI接口可以很方便的配置AD9707,但是在测试电路板上ARM离AD9707较远,走线比较长,布线时比较复杂,导致测试时不得不使用飞线。
为了解决布线困难的问题,我们采用FPGA模拟SPI接口配置AD9707内部寄存器。
2.使用FPGA配置AD9707内部寄存器
FPGA的使用非常灵活,同一片FPGA通过不同的程序可以产生不同的电路功能。
下面就是使用VHDL语言编写一个SPI控制器,来发送配置数据给AD9707。
根据图4-7中的写入时序编写程序[17][18][19][20],具体代码如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYSPIIS
GENERIC(DATA:
STD_LOGIC_VECTOR(11DOWNTO0):
="110101101011");
--配置数据
PORT(SCLK:
INSTD_LOGIC;
CSB,SDIO:
OUTSTD_LOGIC);
ENDSPI;
ARCHITECTUREBEHAVEOFSPIIS
SIGNALCOUNT:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALREG:
STD_LOGIC_VECTOR(11DOWNTO0);
SIGNALX:
STD_LOGIC;
BEGIN
PROCESS(SCLK,X)--产生片选信号CSB
BEGIN
ENDPROCESS;
PROCESS(SCLK)--从SDO串行发送配置数据
BEGIN
IF(SCLK'EVENTANDSCLK='1')THEN
IF(COUNT="0001")THENREG<=DATA;
ELSE
REG<=REG(10DOWNTO0)&'0';
ENDIF;
ENDIF;
ENDPROCESS;
SDIO<=REG(11);
ENDBEHAVE;
程序编译仿真后得到的时序图如下图4-9所示,整个程序综合之后仅占用4个逻辑单元,使用类属参数定义配置数据,方便用户按照自己的设计随意修改。
图4-9FPGA模拟SPI接口发送数据的时序仿真图
第四章实验报告总结
经过三个星期的实习,过程曲折可谓一语难尽。
在此期间我也失落过,也曾一度热情高涨。
从开始时满富盛激情到最后汗水背后的复杂心情,点点滴滴无不令我回味无长。
生活就是这样,汗水预示着结果也见证着收获。
劳动是人类生存生活永恒不变的话题。
通过实习,我才真正领略到“艰苦奋斗”这一词的真正含义,我才意识到老一辈测绘为我们的社会付出。
我想说,测绘确实有些辛苦,但苦中也有乐,在如今物欲很流的世界,很少有机会能与大自然亲密接触,但我们可以,而且测绘也是一个团队的任务,一起的工作可以让我们有说有笑,相互帮助,配合默契,多少人间欢乐在这里洒下,大学里一年的相处还赶不上这十来天的实习,我感觉我和同学们之间的距离更加近了;我想说,测绘确实很累,但当我们所测的数据制成成果时,心中也不免产生兴奋;正所谓“三百六十行,行行出状元”。
我们同样可以为社会作出我们应该做的一切,这有什么不好?
我不断的反问自己。
也许有人不喜欢野外的工作也许有人认为测绘的工作环境不好,但我认为无论干什么,只要人生活的有意义就可。
社会需要我们,我们也可以为社会而工作。
既然如此,那还有什么必要失落呢?
于是我决定沿着自己的测绘路,执着的走下去。
社会需要我们,我们也可以为社会而工作。
既然如此,那还有什么必要失落呢?
于是我决定沿着自己的测绘路,执着的走下去。
对我而言,知识上的收获重要,精神上的丰收更加可喜。
挫折是一份财富,经历是一份拥有。
这次实习必将成为我人生旅途上一个非常美好的回忆!
参考文献
[1]周林,殷侠等编著.数据采集与分析技术[M].西安:
西安电子科技大学出版社,2005
[2]吴继华,王诚编著.AlteraFPGA/CPLD设计(基础篇)[M].北京:
人民邮电出版社,2005
[3]王彦主编.基于FPGA的工程设计与应用[M].西安:
西安电子科技大学出版社,2007
[4]范书瑞,赵燕飞,高铁成编著.ARM处理器与C语言开发应用[M].北京:
北京航空航天大学出版社,2008
[5]吴继华,王诚编著.AlteraFPGA/CPLD设计(高级篇)[M].北京:
人民邮电出版社,2005
[6]唐彬,徐强,王莉薇编著.数字IC设计——方法、技巧与实践.北京:
机械工业出版社,2006
[7][美]SteveKilts著,孟宪元译。
高级FPGA设计结构、实现和优化[M].北京:
机械工业出版社,2009
[8][日]桑野雅彦著.王庆译.存储器IC的应用技巧.北京:
科学出版社,2006
附录1ARM外围电路
图1ARM供电
图2LCD接口
图3JTAG电路
图4全局复位电路
附录2FPGA外围电路
图1FPGA电源供电
图2AS配置电路
图3配置方式选择电路
图5SDRAM电路
附录4ARM读取显示程序
voidLcd640480(void)
{
volatileU16*port=(U16*)0x20000000;
//bank4起始地址为0x20000000
U16i,n,x,y,l,k=0,d[512];
U8a[512];
rBWSCON=rBWSCON&~(0xf<<16)|(BUS16<<16)|(ENWAIT<<18);
//bank4数据位宽度设置
rBANKCON4=((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC));
//bank4读写时序控制
for(i=0;i<5;i++);
//等待bank4配置有效
Lcd_Port_Init();
Lcd_Init(MODE_TFT_16BIT_640480);
Glib_Init(MODE_TFT_16BIT_640480);
Lcd_PowerEnable(0,1);
Lcd_EnvidOnOff
(1);
Uart_Printf("[TFT64KCOLOR(16bit/1pixel)LCDTEST]\n");
gui();
for(n=0;n<512;n+=1)//读取512个数据点
{
a[n]=*port;
*port++;
}
for(i=0;i<512;i+=1)
Uart_Printf("%d,",a[i]);
//在串口调试助手上显示512点的数据
for(l=12;l<512;l++)
{
x=20+l-12;
y=a[l];
PutPixel(x,y,YELLOW);
}
MoveViewPort(MODE_TFT_16BIT_640480);
Lcd_MoveViewPort(0,0,MODE_TFT_16BIT_640480);
Lcd_EnvidOnOff(0);
Lcd_Port_Return();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于ARM和FPGA的高速数据采集卡的设计与实现 基于 ARM FPGA 高速 数据 采集 设计 实现