基于fpga的高速数据采集系统实现(代码片段)

fpga和matlab fpga和matlab     2022-12-13     700

关键词:

欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程

目录

一、理论基础

二、核心程序

2.1锁存器模块

2.2双口地址计数器模块

2.3双口RAM模块

2.4时钟分频模块

三、测试结果


一、理论基础

       高速数据采集在军用民用领域都有着广泛的应用。高速数据采集系统在自动控制、电气测量、地质物探、航空航天等工程实践中有着极为广泛的应用。如何对高速的信号进行实时采集、实时存储,保证信号不丢失,以满足工业现场的需要,一直是高速数据采集系统研究的一个重要方向。数据采集系统是信号与信息处理系统中不可缺少的重要组成部分,同时也是软件无线电系统中的核心模块。

      高速数据采集系统主要包括以下几个部分:模拟信号调理电路、模数转换器、数据处理器件、数据存储器件、时钟电路、触发电路、传输接口芯片和电源系统等,如图1所示。

图1 高速数据采集系统结构图

      其中,模拟信号调理电路是用来将模拟信号放大调整到ADC的采样量程之内,这样既能充分发挥ADC的性能,又能保证采样数据的完整性;ADC是高速数据采集系统的核心器件,模拟信号输入,数字信号输出;数据处理器件有很多种,可以根据实际的不同需要进行选择;数据存储器件主要用于存储数据,可以进行显示,回放和数据处理等操作;时钟电路是比较重要的,时钟的稳定性和精确性决定着数据采集的结果,所以一般的做法是单独设计稳定的时钟电路;触发电路实现外部对数据采集频率和次数的控制,传输接口用于将数据传输给计算机进行后处理。

           采用单路高速A/D转换器以及存储器构成串行采集系统系统框图如图2所示:

图2 单路高速数据采集框图

       采用单路高速AD转换器和高速存储电路来构成字串行采集系统,系统的采样就属于实时采样,适用于任何形式的信号波形,重复的或不重复的,单次的或连续的。又由于所有采样点是以时间为顺序,因而易于实现波形显示功能。但是采用单片高速A/D芯片和高速存储器件,会大大提高系统开发成本。同时系统的采样率就受到A/D转换器最高转换速率以及存储器写入速度的限制。因此,单通道数据采集系统的采集速度受器件自身参数的限制,很难再大幅度提高其转换速度。

二、核心程序

其整体结构如下所示:

2.1锁存器模块

        系统工作的时候要对数据进行锁存,然后进行传输,通常这样做可以使系统更加稳定的工作,其工作原理比较简单,实现代码如下所示:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity dlatch8 is

port(

   cp: in std_logic;

   d:  in std_logic_vector(7 downto 0);

   q:  out std_logic_vector(7 downto 0)

   );

end dlatch8;

architecture one of dlatch8 is

begin

   process(cp,d)

   begin

      if(cp='1') then

      q<=d;

      end if;

   end process;

end;

2.2双口地址计数器模块

       地址计数器用来给RAM存储器产生地址信号。由RAM的写入时钟来控制,每当时钟上升沿到来一次,地址计数器就自动加1,直到进行至RAM的底部,表示此时RAM已经写满。下面给出由VHDL语言实现的地址计数器部分源代码。

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

use ieee.std_logic_arith.all;

entity addrcount is

      port(

           clr:in std_logic;

           clk:in std_logic;

           eoc: out std_logic;

           q: buffer std_logic_vector(6 downto 0)

          );

        end;

architecture beha of addrcount is

begin

   process(clr,clk)

   begin

      if(clk'event and clk='1') then

              if clr='0'then

              q<="0000000";

          elsif(q="1111111")then

              q<="1111111";

          else

              q<=q+1;

          end if;

      end if;

   end process;

   process(q)

      begin

      if(q="1111111") then

      eoc<='0';

      else

      eoc<='1';

      end if;

   end process;

end beha;

2.3双口RAM模块

       对于高速数据接收,一般发送端和接收端的时钟是异步的,这就涉及到异步时钟域数据的传输的问题,此外在不同时钟控制的时钟域中传递数据时,了避免发生亚稳态和产生毛刺,应该做好异步时钟域之间的隔离处理。通常,可采用DPRAM以数据缓冲的形式来作为异步时钟域之间的隔离接口。

LIBRARY ieee;
USE ieee.std_logic_1164.all;
LIBRARY altera_mf;
USE altera_mf.all;
ENTITY lpm_ram_dp IS
	PORT
	(
		clock		: IN STD_LOGIC ;
		data		: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
		rdaddress		: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
		wraddress		: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
		wren		: IN STD_LOGIC  := '1';
		q		: OUT STD_LOGIC_VECTOR (7 DOWNTO 0)
	);
END lpm_ram_dp;
ARCHITECTURE SYN OF lpm_ram_dp IS
	SIGNAL sub_wire0	: STD_LOGIC_VECTOR (7 DOWNTO 0);
	COMPONENT altsyncram
	GENERIC (
		address_aclr_a		: STRING;
		address_aclr_b		: STRING;
		address_reg_b		: STRING;
		indata_aclr_a		: STRING;
		intended_device_family		: STRING;
		lpm_type		: STRING;
		numwords_a		: NATURAL;
		numwords_b		: NATURAL;
		operation_mode		: STRING;
		outdata_aclr_b		: STRING;
		outdata_reg_b		: STRING;
		power_up_uninitialized		: STRING;
		read_during_write_mode_mixed_ports		: STRING;
		widthad_a		: NATURAL;
		widthad_b		: NATURAL;
		width_a		: NATURAL;
		width_b		: NATURAL;
		width_byteena_a		: NATURAL;
		wrcontrol_aclr_a		: STRING
	);
	PORT (
			wren_a	: IN STD_LOGIC ;
			clock0	: IN STD_LOGIC ;
			address_a	: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
			address_b	: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
			q_b	: OUT STD_LOGIC_VECTOR (7 DOWNTO 0);
			data_a	: IN STD_LOGIC_VECTOR (7 DOWNTO 0)
	);
	END COMPONENT;
BEGIN
	q    <= sub_wire0(7 DOWNTO 0);
	altsyncram_component : altsyncram
	GENERIC MAP (
		address_aclr_a => "NONE",
		address_aclr_b => "NONE",
		address_reg_b => "CLOCK0",
		indata_aclr_a => "NONE",
		intended_device_family => "Cyclone",
		lpm_type => "altsyncram",
		numwords_a => 256,
		numwords_b => 256,
		operation_mode => "DUAL_PORT",
		outdata_aclr_b => "NONE",
		outdata_reg_b => "CLOCK0",
		power_up_uninitialized => "FALSE",
		read_during_write_mode_mixed_ports => "DONT_CARE",
		widthad_a => 8,
		widthad_b => 8,
		width_a => 8,
		width_b => 8,
		width_byteena_a => 1,
		wrcontrol_aclr_a => "NONE"
	)
	PORT MAP (
		wren_a => wren,
		clock0 => clock,
		address_a => wraddress,
		address_b => rdaddress,
		data_a => data,
		q_b => sub_wire0	); END SYN;

2.4时钟分频模块

       一般在高速系统中,时钟的生产有两种方法实现,PLL锁相环法和计数器分频法。下面我们对两种方法做简单的介绍。

    计数器分频器的设计比较简单,其主要通过计数器来控制时钟发现跳板的周期,这里我们对其工作原理就不做介绍了。本系统由于使用的分频器比较简单,因此在这个系统中,我们将实用计数器分频器来设计时钟。

    其实现的VHDL代码如下所示:

LIBRARY IEEE;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity fredivid is

port(

     clkin:in std_logic;

     clkout: out std_logic

    );

end fredivid;

architecture one of fredivid is

             signal q:std_logic_vector(1 downto 0);

begin

     process(clkin)

     begin

         if(clkin'event and clkin='1')then

             if(q="11")then

             q<="00";

         else

             q<=q+1;

         end if;

     end if;

     end process;

     process(q)

     begin

         if(q(1)='1') then

         clkout<='1';

     else

         clkout<='0';

         end if;

     end process; end;

三、测试结果

     最后,对于设计完成的系统,我们得对其资源做分析。本系统其资源实用情况如所示:

图1 资源使用分析

本系统,我们共实用逻辑单元2048个。

图2 时序分析报表

     其中tsu,tco,tpd,th分别为7.098ns,14.272ns,9.109ns,0.227ns。后面的输入信号频率基本在200M左右,达到高速传输的要求。

A28-35

基于cpci系统的高速数字通信接口电路设计与应用

参考技术A基于CPCI系统的高速数字通信接口电路设计与应用  在CPCI系统环境下高速数字通信AFDX协议端系统接口的电路设计与功能实现。采用Verilog编程实现基于FPGA的硬件设计部分,采用C编程实现基于MicroBlaze的嵌入式软件设计... 查看详情

音乐合成基于fpga的音乐合成系统verilog实现(代码片段)

1.软件版本matlab2013b,quartusii12.12.系统FPGA实现2.1频率选择音乐的合成主要有几种频率,这里设置如下几组频率,在实际情况下,可以进行扩充。Fc=261.63;%CFd=293.66;%DFe=329.63;%EFf=349.23;%FFg=392;  %GFa= 查看详情

基于fpga的数据采集系统(代码片段)

...、理论基础二、核心程序三、测试结果一、理论基础   数据采集是指将模拟量采集转换成数字量后,再由计算机进行存储、处理、显示或打印的过程,相应的系统称为数据采集系统。随着科技进步,人们对数据采集... 查看详情

基于fpga的正弦pwm产生系统verilog实现(代码片段)

目录一、理论基础二、案例背景三、部分FPGA仿真四、仿真结论分析五、参考文献一、理论基础根据如下公式,首先建立simulink仿真模型:       这里,主要需要设计cos模块。三个余弦输出其分别有120度的相位差。... 查看详情

基于fpga的双目相机目标深度图像提取实现——简略版(代码片段)

目录一、理论基础二、核心程序三、测试结果一、理论基础系统的整体框架结构如下图所示:    双目立体视觉模拟了人类双眼感知环境的方式其结构如图2-1所示,主要包括图像采集、摄像机表达、图像校正... 查看详情

基于fpga的高速图像处理平台设计_爱学术

...处理速度慢,显示分辨率低,不方便携带等问题,设计了一个基于FPGA的高速图像处理平台,包含高速图像的采集、处理、及显示。图像采集通过CameraLink接口采集图像,图像处理部分利用乒乓操作对图像数据进行高速存储,FPGA完成图像预... 查看详情

fpga教程案例8基于verilog的分频器设计与实现(代码片段)

FPGA教程目录MATLAB教程目录---------------------------------------------------------------------------------------1.软件版本vivado2019.22.本算法理论知识和Verilog程序   在实际FPGA开发过程中,系统的时钟clk往往较大,而实际所需要的时钟频... 查看详情

基于fpga的alu计算器verilog实现(代码片段)

欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》目录一、理论基础二、核心程序三、测试结果一、理论基础    VerilogHDL是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,用它... 查看详情

基于dsp+fpga高速运动控制器设计

基于“PC+运动控制器”结构的开放式机器人运动控制系统能够充分利用PC开放程度高、通用性好、处理能力强等特点以及运动控制器运算速度快、实时性能好、控制能力强等特点,因此得到较快发展,成为目前的研究... 查看详情

基于fpga的双口ram实现及应用怎么用

  基于FPGA的双口RAM实现及应用的使用方法:  CPU并行工作(双单片机系统)方式得到广泛应用。为了使2个单片机能够快速有效交换信息,充分利用系统资源,采用双口RAM实现存储器共享是目前较为流行的方法。  大容量、... 查看详情

基于fpga的ad7303/adcs7476模拟数字转换vhdl开发(代码片段)

欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》目录一、理论基础二、核心程序三、测试结果一、理论基础    在AlteraNIOS板上设计和实现一个格式转换系统,该系统读取模拟输入,将其转换为数字数据&... 查看详情

fpga教程案例7基于verilog的计数器设计与实现(代码片段)

FPGA教程目录MATLAB教程目录---------------------------------------------------------------------------------------1.软件版本vivado2019.22.本算法理论知识和Verilog程序    计数器是一种最简单基本的运算。计数器在数字系统中主要是对脉冲... 查看详情

基于多核平台的高速网络流量实时捕获方法(代码片段)

设计了基于DPDK的包捕获系统,以及把包分配到不同队列的hash算法且实现核心的负载均衡。传统报文处理流程缺点多次中断。多次拷贝,占用总线资源,降低cache利用率。根据Linux报文处理,分析性能瓶颈Linux下也有很多加速数据... 查看详情

xilinxrocketio模块的介绍

...多种高速数据传输协议。依据实际工程应用需求,提出了基于RocketIO的高速串行数据传输系统解决方案,实现了每通道2.5Gb/s的传输速度。最后介绍了RocketIO在Auror 查看详情

fpga目标跟踪基于fpga的帧差法和sad匹配算法的目标跟踪实现(代码片段)

1.软件版本quartusii12.12.系统FPGA实现FPGA整体的算法流程如下图所示: FPGA的模块主要包括如下几大模块:摄像机驱动程序,SDRAM控制程序,显示屏驱动程序,中值滤波程序,帧差法模块,SAD模板匹配模块&... 查看详情

基于fpga的ecg信号采集,存储以及传输系统verilog实现

目录一、理论基础二、案例背景1.问题描述2.思路流程三、部分verilog程序 查看详情

数据采—存—传系统(fpga)

...关课题研究。采-存-传系统——采集支持各种不同方式的数据采集接口。    通常我们的用户可以使用标准的FMC扩展卡为采存传硬件系统扩展不同采样率的ADC或图像传感器;阿吉毕也提供有相当多种类的FMC-ADC扩展子卡以及FM... 查看详情

基于dsp+fpga+ad9238的冲击波超压测试系统设计与实现

...稳定的发展。2.2测试系统的总体框架2.2.1系统组成传统的数据采集系统采用单片机进行软件设计来控制ADC进行采集,由于冲击波测试对系统的实时性要求比较高,基于软件控制的方法无法获得精确的时钟信号,且处理... 查看详情