当前位置:首页 > EDA > 电子设计自动化
[导读] 数字存储示波器作为测试技术的重要工具,被广泛应用于各个领域,并逐步取代传统模拟示波器。其采样数据是波形运算和分析的基础,直接影响到整个数字存储示波器的准确性。从这点出来,提出采用现场可编程逻辑器件(

 数字存储示波器作为测试技术的重要工具,被广泛应用于各个领域,并逐步取代传统模拟示波器。其采样数据是波形运算和分析的基础,直接影响到整个数字存储示波器的准确性。从这点出来,提出采用现场可编程逻辑器件( 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 引脚,这才能与真实的芯片相应应的引脚连接。

下面以芯片LTC2620 为例,说明其驱动过程。图4 右上角是LTC2620 的接口例化组件,是由VHDL语言生成的,首先是VHDL 的实体部分,主要是定义端口及其属性。

ENTITY LTC2620_comtrol IS

PORT(

clk5m : IN STD_LOGIC;

clr_n : IN STD_LOGIC;

DAT_DATA_A : IN STD_LOGIC_VECTOR( 11 DOWNTO 0) ;

DAT_DATA_B : IN STD_LOGIC_VECTOR( 11 DOWNTO 0) ;

DAT_DATA_C : IN STD_LOGIC_VECTOR( 11 DOWNTO 0) ;

DAT_DATA_D : IN STD_LOGIC_VECTOR( 11 DOWNTO 0) ;

DAT_DATA_E : IN STD_LOGIC_VECTOR( 11 DOWNTO 0) ;

DAT_DATA_F : IN STD_LOGIC_VECTOR( 11 DOWNTO 0) ;

DAT_DATA_G : IN STD_LOGIC_VECTOR( 11 DOWNTO 0) ;

DAT_DATA_H : IN STD_LOGIC_VECTOR( 11 DOWNTO 0) ;

n_CS_LD : OUT STD_LOGIC;

SCK : OUT STD_LOGIC;

SDI : OUT STD_LOGIC) ;

END;

其中n_CS_LD、SCK、SDI 为输出端口,是根据芯片LTC2620 的输入引脚而设定的。芯片LTC2620 引脚图如图5 所示。

图5 LTC2620 引脚图

接口与引脚已经连接好,但还需要仿真这三个引脚的工作时序。这就需要根据芯片LTC2620 手册说明来来模拟其时序以及其数据输入格式,为4 位命令+ 4 位地址+ 12 位数据流,共20 位数据,但数据一般以8 位为单位,即一个字节,所以需要发送24 位数据,其中16 位数据流的前4 位都需要作置零处理。LTC2620 时序图如图6 所示。

图6 LTC2620 输入引脚时序图

数据输入格式如图7 所示。

图7 输入引脚数据格式图

接着,使用VHDL 在其结构体部分编写LTC2620 时序,需要设计两个进程来完成,分别是PROCESS( clk5m,clr_n) 进程和PROCESS( load_clk,clr_n,DAT_DATA_A) 进程。

首先定义数据格式,分成三部分,COMMAND( C3 - C0) 、ADDRESS ( A3 - A0) 和DATA ( D11 -D0) ,一共为20 位,要分三个字节发送,即24 位。数据格式定义的VHDL 代码:

CONSTANT CNT_COMMAMD_DATA : STD_LOGIC_VECTOR( 3 DOWNTO 0) : = "0011" ;

/ /COMMAND( C3 - C0)

SIGNAL ADDRESS_DATA : STD_LOGIC_VECTOR( 3 DOWNTO 0) ;

/ / ADDRESS( A3 - A0)

SIGNAL DAT_DATA: STD_LOGIC_VECTOR( 11 DOWNTO 0) ;

/ / DATA( D11 - D0)

根据图6,对时序SCK、SDI、CS /LD 进行定义:

SIGNAL r_n_CS_LD,r_SCK,r_SDI : STD_LOGIC;

内部时钟定义:

SIGNAL r_load, load_clk, load_en : STD_LOGIC;

再设定三个进程来模拟图7 的SCK、SDI、CS /LD 三个时序图。

1) 进程1 主要是通过内部时钟生成SCK 时序

代码为:

PROCESS( clk5m, clr_n)

VARIABLE tp : INTEGER RANGE 0 TO 25;

BEGIN

IF clr_n = '0' THEN

tp: = 0; load_clk < = '0';

ELSIF clk5m'EVENT AND clk5m = '1' THEN

IF tp < 25 THEN

tp: = tp + 1; load_clk < = '1';

ELSE

tp: = 0; load_clk < = '0';

END IF;

END IF;

END PROCESS;

2) 进程2 主要是设置LTC2620 的8 个输出引脚VoutA - VoutH 与ADDRESS ( A3 - A0) 之间的对应关系,ADDRESS,如表1 所示。

使用CASE 语句完成,代码如下:

CASE state IS

WHEN 1 = > DAT_DATA < = DAT_DATA_B; ADDRESS_DATA < = "0001" ;

WHEN 2 = > DAT_DATA < = DAT_DATA_C; ADDRESS_DATA < = "0010" ;

WHEN 3 = > DAT_DATA < = DAT_DATA_D; ADDRESS_DATA < = " 0011" ; WHEN 4 = > DAT_DATA <

= DAT_DATA_E; ADDRESS_DATA < = "0100" ; WHEN 5 = > DAT_DATA < = DAT_DATA_F; ADDRESS_DATA <

= "0101" ; WHEN 6 = > DAT_DATA < = DAT_DATA_G; ADDRESS_DATA < = " 0110" ; WHEN 7 = > DAT_DATA

< = DAT_DATA_H; ADDRESS_DATA < = " 0111" ; WHEN OTHERS = > DAT_DATA < = DAT_DATA_B; ADDRESS_

DATA < = "0001" ; load_en < = '0';

END CASE;

3) 进程3 主要是设置DATA ( D11 - D0) 的数据输出,每次需发送24 位数据,其中4 位无用上,给置0 处理,代码如下:

IF r_load = '0' THEN

data( 23 DOWNTO 20) : = CNT_COMMAMD_DATA;

data( 19 DOWNTO 16) : = ADDRESS_DATA;

data( 15 DOWNTO 4 ) : = DAT_DATA;

data( 3 downto 0) : = "0000" ;

……/ /省略;

end IF;

3 结语

本文详细介绍了使用VHDL 硬件描述语言,程序编写过程,对两个功能模块进行基于FPGA 的嵌入式系统程序开发。实现了ARM 接口通信控制模块、芯片驱动模块的程序设计,有效地解决了芯片间之间的通信与驱动的问题,以FPGA 为核心,有效地实现芯片间的相互协作,为数字存储示波器数据采样提供重要的可靠性。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

近日,一则关于 AI 算力领域的消息引发行业震动!据科技网站 The Information 援引四位知情人士爆料,中国科技巨头阿里巴巴与百度已正式将自研芯片应用于 AI 大模型训练,打破了此前对英伟达芯片的单一依赖。

关键字: AI 算力 阿里 百度 芯片 AI模型

上海2025年9月5日 /美通社/ -- 由上海市经济和信息化委员会、上海市发展和改革委员会、上海市商务委员会、上海市教育委员会、上海市科学技术委员会指导,东浩兰生(集团)有限公司主办,东浩兰生会展集团上海工业商务展览有...

关键字: 电子 BSP 芯片 自动驾驶

9月1日消息,继小鹏、零跑后,现在小米汽车也宣布了8月的交付量。

关键字: 小米汽车 芯片

当地时间 8 月 22 日,美国芯片制造商英特尔公司宣布与美国联邦政府达成协议,后者将向英特尔普通股投资 89 亿美元,以每股 20.47 美元的价格收购 4.333 亿股英特尔普通股,相当于该公司 9.9% 的股份。

关键字: 英特尔 半导体 芯片

在当今数字化时代,人工智能(AI)和高性能计算(HPC)的迅猛发展对 GPU 芯片的性能提出了极高要求。随着 GPU 计算密度和功耗的不断攀升,散热问题成为了制约其性能发挥的关键因素。传统的风冷方案已难以满足日益增长的散...

关键字: 人工智能 高性能计算 芯片

8月20日消息,博主数码闲聊站暗示,9月底大概率只有小米16系列会亮相,其它骁龙8 Elite 2旗舰、天玑9500旗舰新品都将排到10月份,新机大乱斗会在国庆假期之后开始。

关键字: 小米雷军 芯片

8月21日消息,据媒体报道,英伟达宣布将自研基于3nm工艺的HBM内存Base Die,预计于2027年下半年进入小规模试产阶段,此举旨在弥补其在HBM领域的技术与生态短板。

关键字: 英伟达 黄仁勋 芯片 显卡

继寻求收购英特尔10%的股份之后,近日又有消息称,特朗普政府正在考虑通过《芯片法案》资金置换股权的方式,强行收购美光、三星、台积电三大芯片巨头的股份。若此举落地,美国政府将从“政策扶持者”蜕变为“直接股东”,彻底重塑全球...

关键字: 芯片 半导体

在集成电路设计流程中,网表作为连接逻辑设计与物理实现的关键桥梁,其分模块面积统计对于芯片性能优化、成本控制和资源分配具有重要意义。本文将详细介绍如何利用 Python 实现网表分模块统计面积的功能,从网表数据解析到面积计...

关键字: 网表 芯片 分模块

8月19日消息,封禁4个多月的H20为何突然又被允许对华销售,这其实是美国设计好的。

关键字: 英伟达 黄仁勋 芯片 显卡
关闭