基于FPGA的数字存储示波器对外围芯片的控制设计

2015-10-28 09:33:44   来源:eefocus   

关键字: FPGA  数字存储示波器  外围芯片

数字存储示波器作为测试技术的重要工具,被广泛应用于各个领域,并逐步取代传统模拟示波器。其采样数据是波形运算和分析的基础,直接影响到整个数字存储示波器的准确性。从这点出来,提出采用现场可编程逻辑器件( FPGA)作为数字存储示波器采样控制系统的核心,从芯片间有效协助的角度,基于FPGA设计ARM接口通信控制模块和外围芯片驱动功能模块,以FPGA为核心有效地组织其它芯片,共同完成数字存储示波器数据采样过程,确保数据按需求采样,有效地提高数字存储示波器的采样效率和数据的可靠性。


1数字存储示波器的总体设计方案

数字存储示波采用双处理器( ARM + FPGA)的嵌入式系统设计方案,ARM内嵌WINCE操作系统,整个采样系统主要在FPGA里完成,从功能的角度分成采样信息处理子系统与采样控制子系统,本文着重介绍采样控制子系统的驱动部分,由ARM接口控制模块与芯片驱动模块组成。如图1所示:



图1数字存储示波器总体功能模块图


2系统驱动模块设计

2. 1 ARM接口通信控制模块设计

ARM接口通信控制模块为主要的控制模块,如图2所示。

图2 ARM接口通信控制部分功能模块图

加入这个模块而不直接链接两个芯片有以下两点原因:

1) ARM作为主控芯片的控制模块,引脚数量有限。如果ARM接口直接与FPGA接口相连,会占用ARM过多的接口。

2) ARM和FPGA相连的信号线由于存在各种干扰,有时会出现毛刺现象,影响测量效果。

所以为了测量的稳定准确,需要加入FPGA和ARM的接口模块。此模块是本设计的重点也是难点。其原理以下结合图2来说明。

ARM接口通信控制模块左边为跟ARM链接的接口,分别为1路时钟cmd_clk,3路的命令线cmd_sel[2. . 0],8路数据线cmd_data[7. . 0]。右边为FPGA响应的相关接口,在此不作一一讲述,下面主要讲术FPGA与ARM之间的通信协议。

cmd_clk为1位输出接口,是ARM与FPGA的同步时钟,用作同步通信。

cmd_sel[2. . 0]为3位输出接口,用作设置cmd_data[7. . 0]的模式选择。

cmd_data[7. . 0]为8位输出接口,是ARM发送到FPGA的命令或数据。

功能实现方面采用了VHDL语言,以文本输入作为设计输入,主要运用CASE与PROCESS语句,部分程序如下所示。

PROCESS( cmd_clk,cmd_sel) / /进程,对cmd_clk与cmd_sel进行变化捕捉。

BEGIN / /进程开始。

IF cmd_clk'EVENT AND cmd_clk ='1'THEN / /捕捉时钟信号上升沿触发。

IF cmd_sel( 2) ='1'THEN / / cmd_sel( 2) ='1'时,cmd_data[7. . 0]的输出为数据模式

r_add_add<= cmd_data; / /数据赋值

ELSE / / cmd_sel( 2) ='0'时,cmd_data[7. . 0]的输出为命令模式

CASE r_add_add IS / /命令查询

WHEN X"00" =>IF cmd_sel = "000" THEN r_DAT_DATA_A( 7 DOWNTO 0)<= cmd_data;——

ELSIF cmd_sel = "001" THEN r_DAT_DATA_A( 11 DOWNTO 8)<= cmd_data( 3 DOWNTO 0) ;

END IF;

WHEN X"01" =>IF cmd_sel = "000" THEN r_DAT_DATA_B( 7 DOWNTO 0)<= cmd_data;

ELSIF cmd_sel = "001" THEN r_DAT_DATA_B( 11 DOWNTO 8)<= cmd_data( 3 DOWNTO 0) ; END IF;

WHEN X"02" =>IF cmd_sel = "000" THEN r_DAT_DATA_C( 7 DOWNTO 0)<= cmd_data;

ELSIF cmd_sel = "001" THEN r_DAT_DATA_C( 11 DOWNTO 8)<= cmd_data( 3 DOWNTO 0) ; END IF;

WHEN X"03" =>IF cmd_sel = "000" THEN r_DAT_DATA_D( 7 DOWNTO 0)<= cmd_data;

ELSIF cmd_sel = "001" THEN r_DAT_DATA_D( 11 DOWNTO 8)<= cmd_data( 3 DOWNTO 0) ; END IF;

……/ /省略

WHEN X"08" =>IF cmd_sel = "000" THEN r_HC74_DAT_DATA( 7 DOWNTO 0)<= cmd_data;——

ELSIF cmd_sel = "001" THEN r_HC74_DAT_DATA( 15 DOWNTO 8)<= cmd_data;——

ELSIF cmd_sel = "010" THEN r_HC74_DAT_DATA( 23 DOWNTO 16)<= cmd_data; END IF;

/ / cmd_sel[2. . 0]的后两位作为数据位数的选择,这里可选为8位、16位、24位。

……/ /省略

WHEN OTHERS =>r_X9313_DATA<= cmd_data( 4 DOWNTO 0) ;

END CASE;

END IF;

END IF;

END PROCESS;

本程序是一个进程,当cmd_sel( 2) ='1'时,cmd_data[7. . 0]作为数据传输。当cmd_sel( 2) ='0'时,cmd_data[7. . 0]作为命令选择传输。cmd_sel( 1)与cmd_sel( 0),作为发送数据位数选择,这是由于不同的指令操作,需要不同的数据位数,在这段程序中,有需要发送8位数据的,有需要发送12位的数据,有需要发送16位的数据,还有需要发送24位的数据,这取决于驱动的芯片所固定的数据位输入格式要求。

2. 2芯片驱动模块设计

芯片驱动模块的例化组件图,如图3所示。



图3芯片驱动模块例化组件


图3是已经封装好的功能模块,其内部结构如图4所示。



图4 LTC2620的接口例化组件图


由此可知,该模块内部还可以有子模块。分别为控制外围三个芯片的驱动,它们是芯片LTC2620、芯片X9313、芯片HC574.这些子模块只是一个接口,并非是一个真正的芯片,可以说是一个接口函数以图形化的方式来给调用,让程序结构更佳形象具体,其实它们都是通过VHDL语言编程程序代码而成的。图4的左边是输入接口,主要是与ARM接口通信控制模块(图2)的接口连接,而右边的是输出接口,当然这些输出接口是FPGA的I /O引脚,这才能与真实的芯片相应应的引脚连接。

[1] [2]
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
编辑:什么鱼
本文引用地址: http://www.eeworld.com.cn/Test_and_measurement/2015/1028/article_13721.html
[发表评论]
[加入收藏]
[打印本页]
[关闭窗口]
[返回顶部]
[RSS订阅]
小广播
每日新闻
最热点击
本周热门资源推荐
EEWORLD独家
论坛精华
精选博文