辉煌 发表于 2017-6-21 10:19:00

基于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位的数据,这取决于驱动的芯片所固定的数据位输入格式要求。

小舍YZ 发表于 2017-6-22 09:48:11

赞,,,,,,,,,,,,,谢谢分享。。。。。。。。。。。。。。:D
页: [1]
查看完整版本: 基于FPGA的数字存储示波器对外围芯片的控制设计