ArduinoDue与FPGA的数据通信方法及系统与流程

文档序号:17489221发布日期:2019-04-23 20:17阅读:440来源:国知局
Arduino Due与FPGA的数据通信方法及系统与流程

本申请涉及通信控制技术领域,尤其涉及一种arduinodue与fpga的数据通信方法及系统。



背景技术:

电子信息应用技术的发展带动了集成芯片和软件工具的飞速发展,使得基于c/c++、python、java、veriloghdl等语言的集成芯片得到广泛引用。其中基于c/c++的arm、dsp和基于veriloghdl的fpga及其集成嵌入式系统在实际信号处理、运动控制等领域中应用较为广泛。自2005年massimobanzi等人开发出arduino以来,目前已经出现arduinouno、nano、mega2560、due等众多arduino型号及其arduinogsmshield、wirelessprotoshield、wifishield、motorshield等多种扩展硬件平台。其中arduinodue采用atmelsam3x8ecpu芯片,是第一块基于32位arm核心微控制器的arduino型号,时钟频率为84mhz,性能远优于arduinouno、nano、mega2560等同类产品。但其在基于数据信号采集处理方面的应用较为欠缺。

一方面,由于arduinodue之外的其它arduino型号是时钟速率和数据位宽均较低,而性能强大的arduinodue出现较晚,发展速度还未突显;另一方面,目前在数据信号采集处理方面主要采用fpga来实现,arduinodue相比较于stm32fxx系列arm和dsp,缺少与fpga进行数据快速通讯的控制-地址-数据并行总线传输协议和扩展功能,虽然可利用uart、iic、spi等串行通信方式,且占有i/o引脚较少,但是通信速率有限,使得其应用受限,性能无法显著提升。



技术实现要素:

有鉴于此,本申请实施例提供一种arduinodue与fpga的数据通信方法及系统,以解决现有技术中arduinodue与fpga之间不能进行快速数据通讯的问题。

本申请实施例第一方面提供了一种arduinodue与fpga的数据通信方法,所述数据通信方法包括:

分别配置arduinodue和fpga的通信信号引脚的第一电平强度,其中,所述通信信号引脚包括片选信号引脚、地址线信号引脚、数据线信号引脚和时钟信号引脚;

在所述时钟信号引脚为输入引脚时,配置所述片选信号引脚的电平强度为第二电平强度,开始由arduinodue向fpga写数据或由arduinodue从fpga读数据;

若检测到所述输入引脚触发中断响应,则完成一次由arduinodue向fpga写数据或由arduinodue从fpga读数据;

在所述时钟信号引脚为输出引脚时,若检测到所述片选信号引脚的片选信号下降,则开始由fpga向arduinodue写数据或由fpga从arduinodue读数据;

若检测到所述输出引脚触发响应,则完成一次由fpga向arduinodue写数据或由fpga从arduinodue读数据。

可选地,所述若检测到所述输入引脚触发中断响应,则完成一次由arduinodue向fpga写数据或由arduinodue从fpga读数据,包括:

若检测到所述输入引脚的时钟信号下降沿触发中断响应,则根据传输的地址和数据依次对所述地址线信号引脚和所述数据线信号引脚进行高低电平的配置,以完成一次由arduinodue向fpga写数据;

若检测到所述输入引脚的时钟信号上升沿触发中断响应,则依次读取所述地址线信号引脚和所述数据线信号引脚的高低电平,以完成一次由arduinodue从fpga读数据。

可选地,所述若检测到所述输出引脚触发响应,则完成一次由fpga向arduinodue写数据或由fpga从arduinodue读数据包括:

若检测到所述输出引脚对应的时钟信号上升沿响应,则根据传输的地址和数据对所述地址线引脚和数据线引脚的高低电平进行配置,以完成一次由fpga向arduinodue写数据;

若检测到所述输出引脚对应的时钟信号下降沿响应,则并行读取所述地址线引脚和数据线引脚的高低电平,以完成一次由fpga从arduinodue读数据。

可选地,在完成一次由arduinodue向fpga写数据或由arduinodue从fpga读数据之后,包括:

在所述片选信号引脚的电平强度恢复为所述第一电平强度时,停止由arduinodue向fpga写数据或由arduinodue从fpga读数据。

可选地,在完成一次由fpga向arduinodue写数据或由fpga向arduinodue读数据之后,包括:

若检测到所述片选信号引脚的片选信号上升,则停止由fpga向arduinodue写数据或由fpga向arduinodue读数据。

本申请实施例第二方面提供了一种arduinodue与fpga的数据通信系统,所述数据通信系统包括:

配置模块,用于分别配置arduinodue和fpga的通信信号引脚的第一电平强度,其中,所述通信信号引脚包括片选信号引脚、地址线信号引脚、数据线信号引脚和时钟信号引脚;

第一读写模块,用于在所述时钟信号引脚为输入引脚时,配置所述片选信号引脚的电平强度为第二电平强度,开始由arduinodue向fpga写数据或由arduinodue从fpga读数据;若检测到所述输入引脚触发中断响应,则完成一次由arduinodue向fpga写数据或由arduinodue从fpga读数据;

第二读写模块,用于在所述时钟信号引脚为输出引脚时,若检测到所述片选信号引脚的片选信号下降,则开始由fpga向arduinodue写数据或由fpga从arduinodue读数据;若检测到所述输出引脚触发响应,则完成一次由fpga向arduinodue写数据或由fpga从arduinodue读数据。

可选地,所述第一读写模块在若检测到所述输入引脚触发中断响应,则完成一次由arduinodue向fpga写数据或由arduinodue从fpga读数据时,具体用于:

若检测到所述输入引脚的时钟信号下降沿触发中断响应,则根据传输的地址和数据依次对所述地址线信号引脚和所述数据线信号引脚进行高低电平的配置,以完成一次由arduinodue向fpga写数据;

若检测到所述输入引脚的时钟信号上升沿触发中断响应,则依次读取所述地址线信号引脚和所述数据线信号引脚的高低电平,以完成一次由arduinodue从fpga读数据。

可选地,所述第二读写模块在检测到所述输出引脚触发响应,则完成一次由fpga向arduinodue写数据或由fpga从arduinodue读数据时,具体用于:

若检测到所述输出引脚对应的时钟信号上升沿响应,则根据传输的地址和数据对所述地址线引脚和数据线引脚的高低电平进行配置,以完成一次由fpga向arduinodue写数据;

若检测到所述输出引脚对应的时钟信号下降沿响应,则并行读取所述地址线引脚和数据线引脚的高低电平,以完成一次由fpga从arduinodue读数据。

可选地,所述arduinodue与fpga的数据通信系统还用于:

在所述片选信号引脚的电平强度恢复为所述第一电平强度时,停止由arduinodue向fpga写数据或由arduinodue从fpga读数据。

可选地,所述arduinodue与fpga的数据通信系统还用于:

若检测到所述片选信号引脚的片选信号上升,则停止由fpga向arduinodue写数据或由fpga向arduinodue读数据。

本申请提供的实施例通过arduinodue与fpga之间的数据通信协议,根据arduinodue的程序语句串行执行和fpga并行数据采集特点,并借鉴于传统数据传统控制-地址-数据并行总线传输协议和spi数据同步串行总线传输协议,从而可以使arduinodue与fpga进行快速的数据交互。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍。

图1是本申请实施例提供的arduinodue与fpga的数据通信方法的示意图;

图2是本申请实施例提供的arduinodue向fpga写数据伪同步并行通信协议单向时序逻辑图;

图3是本申请实施例提供的arduinodue从fpga读数据伪同步并行通信协议单向时序逻辑图;

图4是本申请实施例提供的fpga从arduinodue读数据伪同步并行通信协议单向时序逻辑图;

图5是本申请实施例提供的fpga向arduinodue写数据伪同步并行通信协议单向时序逻辑图;

图6是本申请实施例提供的arduinodue与fpga之间数据伪同步并行通信协议双向时序逻辑图;

图7是本申请实施例提供的arduinodue与fpga的数据通信系统的结构示意图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及具体实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,而不构成对本申请的限制。

为了说明本申请所述的技术方案,下面通过具体实施例来进行说明。

实施例一:

图1示出了本申请实施例提供的一种arduinodue与fpga的数据通信方法的示意图,包括步骤s11-步骤s15,其中:

步骤s21,分别配置arduinodue和fpga的通信信号引脚的第一电平强度,其中,所述通信信号引脚包括片选信号引脚、地址线信号引脚、数据线信号引脚和时钟信号引脚;

步骤s22,在所述时钟信号引脚为输入引脚时,配置所述片选信号引脚的电平强度为第二电平强度,开始由arduinodue向fpga写数据或由arduinodue从fpga读数据;

步骤s23,若检测到所述输入引脚触发中断响应,则完成一次由arduinodue向fpga写数据或由arduinodue从fpga读数据;

可选地,所述若检测到所述输入引脚触发中断响应,则完成一次由arduinodue向fpga写数据或由arduinodue从fpga读数据,包括:

若检测到所述输入引脚的时钟信号下降沿触发中断响应,则根据传输的地址和数据依次对所述地址线信号引脚和所述数据线信号引脚进行高低电平的配置,以完成一次由arduinodue向fpga写数据;

若检测到所述输入引脚的时钟信号上升沿触发中断响应,则依次读取所述地址线信号引脚和所述数据线信号引脚的高低电平,以完成一次由arduinodue从fpga读数据。

可选地,在完成一次由arduinodue向fpga写数据或由arduinodue从fpga读数据之后,包括:

在所述片选信号引脚的电平强度恢复为所述第一电平强度时,停止由arduinodue向fpga写数据或由arduinodue从fpga读数据。

下面结合具体实例对上述过程进行说明:图2、3、4、5分别为arduinodue与fpga之间数据伪同步并行通信协议单向时序逻辑图,图中已画出的实线为起始第一次完整写或读数据信号时序逻辑图,而未画出的虚线为后续循环写或读数据信号时序逻辑图。其中cs、clk、a0_m、d0_n依次为片选、时钟、(m+1)位地址线、(n+1)位数据线信号,t0为一段时间内写或读数据的起始时刻,t1为第一次在时钟沿触发时开始写或读数据的起始时刻,t2为第一次执行完写或读数据的结束时刻,t3为写数据或读数据的结束时刻。为了便于清晰描述,图中除clk时钟信号外,其它信号电平均起始于高电平信号,起始分配地址为0首地址,起始传输数据为0。另外,考虑到arduinodue在数据采集编程实现的特点,采用时钟沿外部触发中断来实现数据的写和读过程,其中写和读数据分别对应于时钟外部触发下降沿和上升沿。考虑到arduinodue与fpga之间灵活多变的数据通信协议,需要根据arduinodue执行程序语句时间、地址线和数据线位宽确定可调的时钟周期信号,可采用fpga生成clk时钟触发信号,且此clk时钟信号将用于arduinodue写或读数据的外部中断响应信号。

图2示出了本申请实施例提供的arduinodue向fpga写数据伪同步并行通信协议单向时序逻辑图;

具体地,配置arduinodue和fpga所有通信信号引脚,包括:将cs片选、a0_m地址线、d0_n数据线信号引脚均配置为高电平输出引脚,clk时钟信号引脚配置为外部下降沿触发中断响应输入引脚;其次,t0时刻开始准备向fpga写数据时,先将cs片选信号配置为低电平;接着,t1时刻当外部clk时钟信号下降沿触发中断响应时,根据所需要传输的地址和数据依次对a0_m地址线和d0_n数据线引脚进行高低电平配置,图1中起始地址为0,对应的起始数据为0,t2时刻当外部clk时钟信号上升沿触发中断响应时,完成一次写数据过程,在此写数据过程中,虽然fpga从arduinodue并行读取数据信号,但是arduinodue向fpga写入数据信号是串行执行,从clk时钟信号下降沿到上升沿触发中断响应需要的消耗时间为(t2-t1);然后,完成图1中实线部分的首次写数据过程后,后续的虚线部分可按照同样逻辑循环进行;最后,t3时刻将cs片选信号配置为高电平,停止写数据过程,对应的整段写数据过程所消耗时间为(t3-t0)。

图3是本申请实施例提供的arduinodue从fpga读数据伪同步并行通信协议单向时序逻辑图;在二者之间进行读数据时首先,配置所有通信信号引脚,将cs片选信号引脚配置为高电平输出引脚,a0_m地址线、d0_n数据线信号引脚均配置为高电平输入引脚,clk时钟信号引脚配置为外部上升沿触发中断响应输入引脚;其次,t0时刻开始准备从fpga读数据时,先将cs片选信号配置为低电平;接着,t1时刻当外部clk时钟信号上升沿触发中断响应时,需要对地址线和数据线引脚高低电平依次读取,图2中起始地址为0,对应的起始数据为0,t2时刻当外部clk时钟信号下降沿触发中断响应时,完成一次读数据过程,在此读数据过程中,虽然fpga向arduinodue并行写入数据信号,但是arduinodue从fpga读取数据信号是串行执行,从clk时钟信号上升沿到下降沿触发中断响应的消耗时间为(t2-t1);然后,完成图2中实线部分的首次写数据过程后,后续的虚线部分可按照同样逻辑循环进行;最后,t3时刻将cs片选信号配置为高电平,停止读数据过程,对应的整段读数据过程所消耗时间为(t3-t0)。

步骤s24,在所述时钟信号引脚为输出引脚时,若检测到所述片选信号引脚的片选信号下降,则开始由fpga向arduinodue写数据或由fpga从arduinodue读数据;

步骤s25,若检测到所述输出引脚触发响应,则完成一次由fpga向arduinodue写数据或由fpga从arduinodue读数据。

可选地,所述若检测到所述输出引脚触发响应,则完成一次由fpga向arduinodue写数据或由fpga从arduinodue读数据包括:

若检测到所述输出引脚对应的时钟信号上升沿响应,则根据传输的地址和数据对所述地址线引脚和数据线引脚的高低电平进行配置,以完成一次由fpga向arduinodue写数据;

若检测到所述输出引脚对应的时钟信号下降沿响应,则并行读取所述地址线引脚和数据线引脚的高低电平,以完成一次由fpga从arduinodue读数据。

可选地,在完成一次由fpga向arduinodue写数据或由fpga向arduinodue读数据之后,包括:

若检测到所述片选信号引脚的片选信号上升,则停止由fpga向arduinodue写数据或由fpga向arduinodue读数据。

图4示出了本申请实施例提供的fpga从arduinodue读数据伪同步并行通信协议单向时序逻辑图;,在二者进行数据通信时,首先,配置通信信号引脚,将cs片选、a0_m地址线、d0_n数据线信号引脚均配置为高电平输入引脚,clk时钟信号引脚配置为输出引脚;其次,t0时刻当检测cs片选信号下降沿时,开始准备从arduinodue读数据;接着,t1时刻当检测clk时钟信号下降沿响应时,需要对a0_m地址线和d0_n数据线引脚高低电平并行读取,图3中起始地址为0,对应的起始数据为0,t2时刻当检测clk时钟信号上升沿响应时,完成一次读数据过程,在此读数据过程中,虽然fpga从arduinodue并行读取数据信号,但是arduinodue向fpga写入数据信号是串行执行,从clk时钟信号下降沿到上升沿响应需要的消耗时间为(t2-t1);然后,完成图3中实线部分的首次读数据过程后,后续的虚线部分可按照同样逻辑循环进行;最后,t3时刻当检测cs片选信号上升沿响应时,停止读数据过程,对应的整段读数据过程所消耗时间为(t3-t0)。

图5示出了本申请实施例提供的fpga向arduinodue写数据伪同步并行通信协议单向时序逻辑图;

首先,配置通信信号引脚,将cs片选信号引脚配置为高电平输入引脚,a0_m地址线、d0_n数据线信号引脚均配置为高电平输出引脚,clk时钟信号引脚配置为输出引脚;其次,t0时刻当检测cs片选信号下降沿时,开始准备向arduinodue写数据;接着,t1时刻当检测clk时钟信号上升沿响应时,根据所需要传输的地址和数据并行对a0_m地址线和d0_n数据线引脚进行高低电平配置,图4中起始地址为0,对应的起始数据为0,t2时刻当检测clk时钟信号下降沿响应时,完成一次写数据过程,在此写数据过程中,虽然fpga向arduinodue并行写入数据信号,但是arduinodue从fpga读取数据信号是串行执行,从clk时钟信号上升沿到下降沿响应需要的消耗时间为(t2-t1);然后,完成图4中实线部分的首次写数据过程后,后续的虚线部分可按照同样逻辑循环进行;最后,t3时刻当检测cs片选信号上升沿响应时,停止写数据过程,对应的整段写数据过程所消耗时间为(t3-t0)。

上面阐述了arduinodue与fpga之间数据伪同步并行通信协议单向时序逻辑实现过程,可看出arduinodue向fpga写数据与fpga从arduinodue读数据的时序逻辑相同,arduinodue从fpga读数据与fpga向arduinodue写数据的时序逻辑相同。因此,通过clk时钟信号上升沿和下降沿的写或读数据响应区分,并根据实际具体要求配置地址线和数据线信号位宽,可将a0_m地址线细分为a0_m1和a0_m2地址线(m1+m2=m+1),d0_n数据线细分为d0_n1和d0_n2数据线(n1+n2=n+1)。其中a0_m1地址线和d0_n1地址线对应于arduinodue从fpga读数据与fpga向arduinodue写数据通信协议;a0_m2地址线和d0_n2地址线对应于arduinodue向fpga写数据与fpga从arduinodue读数据通信协议。通过此配置后,结合上述4种单向协议进行组合,可实现arduinodue与fpga之间数据双向通信。

可选地,图6示出了本申请实施例提供的arduinodue与fpga之间数据伪同步并行通信协议双向时序逻辑图;首先,配置通信信号引脚,对fpga而言,将cs片选信号引脚配置为高电平输入引脚,a0_m1地址线、d0_n1数据线信号引脚均配置为高电平输出引脚,a0_m2地址线、d0_n2数据线信号引脚均配置为高电平输入引脚,clk时钟信号引脚配置为输出引脚。对arduinodue而言,将cs片选信号引脚配置为高电平输出引脚,a0_m1地址线、d0_n1数据线信号引脚均配置为高电平输入引脚,a0_m2地址线、d0_n2数据线信号引脚均配置为高电平输出引脚,clk时钟信号引脚配置为外部变化沿触发中断响应输入引脚;其次,对fpga而言,t0时刻当检测cs片选信号下降沿时,开始准备向arduinodue写数据。对arduinodue而言,t0时刻开始准备从fpga读数据时,先将cs片选信号配置为低电平;接着,对fpga而言,t1时刻当检测clk时钟信号上升沿响应时,根据所需要传输的地址和数据并行对a0_m1地址线和d0_n1数据线引脚进行高低电平配置,图6中起始地址为0,对应的起始数据为0,t2时刻当检测clk时钟信号下降沿响应时,完成一次写数据过程,在此写数据过程中,从clk时钟信号上升沿到下降沿响应需要的消耗时间为(t2-t1)。对arduinodue而言,t1时刻当外部clk时钟信号上升沿触发中断响应时,需要对a0_m1地址线和d0_n1数据线引脚高低电平依次读取,图6中起始地址为0,对应的起始数据为0,t2时刻当外部clk时钟信号下降沿触发中断响应时,完成一次读数据过程,在此读数据过程中,从clk时钟信号上升沿到下降沿触发中断响应的消耗时间为(t2-t1);再接着,对arduinodue而言,t2时刻当外部clk时钟信号下降沿触发中断响应时,根据所需要传输的地址和数据依次对a0_m2地址线和d0_n2数据线引脚进行高低电平配置,图1中起始地址为0,对应的起始数据为0,t3时刻当外部clk时钟信号上升沿触发中断响应时,完成一次写数据过程,在此写数据过程中,从clk时钟信号下降沿到上升沿触发中断响应需要的消耗时间为(t3-t2)。对fpga而言,t2时刻当检测clk时钟信号下降沿响应时,需要对a0_m2地址线和d0_n2数据线引脚高低电平并行读取,图3中起始地址为0,对应的起始数据为0,t3时刻当检测clk时钟信号上升沿响应时,完成一次读数据过程,在此读数据过程中,从clk时钟信号下降沿到上升沿响应需要的消耗时间为(t3-t2);然后,对arduinodue和fpga而言,图6虚线部分可根据clk时钟信号变化沿按照首次数据双向通信时序逻辑循环进行;最后,对arduinodue和fpga而言,t4时刻将arduinodue中cs片选信号配置为高电平,停止数据双向通信过程,对应的整段数据双向通信过程所消耗时间为(t4-t0)。

上述表明,该定义的arduinodue与fpga之间的数据通信协议根据arduinodue的程序语句串行执行和fpga并行数据采集特点,并借鉴于传统数据传统控制-地址-数据并行总线传输协议和spi数据同步串行总线传输协议,是一种利用外部时钟变化沿触发响应的数据伪同步并行通信协议。而且,结合实际需求和嵌入式集成系统参数,通过改变地址线位宽m、m1、m2和数据线位宽n、n1、n2,可设计灵活多变的单向或双向数据通信协议,实现过程简单方便,具有一定的普适性,可适用于arduinodue、stm32fxx系列arm、dsp、fpga等任意组合的嵌入式集成系统之间的数据通信。

本申请提供的实施例通过arduinodue与fpga之间的数据通信协议,根据arduinodue的程序语句串行执行和fpga并行数据采集特点,并借鉴于传统数据传统控制-地址-数据并行总线传输协议和spi数据同步串行总线传输协议,从而可以使arduinodue与fpga进行快速的数据交互。

实施例二:

图7示出了本申请另一实施例提供的一种arduinodue与fpga的数据通信系统,所述数据通信系统包括:

配置模块71,用于分别配置arduinodue和fpga的通信信号引脚的第一电平强度,其中,所述通信信号引脚包括片选信号引脚、地址线信号引脚、数据线信号引脚和时钟信号引脚;

第一读写模块72,用于在所述时钟信号引脚为输入引脚时,配置所述片选信号引脚的电平强度为第二电平强度,开始由arduinodue向fpga写数据或由arduinodue从fpga读数据;若检测到所述输入引脚触发中断响应,则完成一次由arduinodue向fpga写数据或由arduinodue从fpga读数据;

第二读写模块73,用于在所述时钟信号引脚为输出引脚时,若检测到所述片选信号引脚的片选信号下降,则开始由fpga向arduinodue写数据或由fpga从arduinodue读数据;若检测到所述输出引脚触发响应,则完成一次由fpga向arduinodue写数据或由fpga从arduinodue读数据。

可选地,所述第一读写模块72在若检测到所述输入引脚触发中断响应,则完成一次由arduinodue向fpga写数据或由arduinodue从fpga读数据时,具体用于:

若检测到所述输入引脚的时钟信号下降沿触发中断响应,则根据传输的地址和数据依次对所述地址线信号引脚和所述数据线信号引脚进行高低电平的配置,以完成一次由arduinodue向fpga写数据;

若检测到所述输入引脚的时钟信号上升沿触发中断响应,则依次读取所述地址线信号引脚和所述数据线信号引脚的高低电平,以完成一次由arduinodue从fpga读数据。

可选地,所述第二读写模块73在检测到所述输出引脚触发响应,则完成一次由fpga向arduinodue写数据或由fpga从arduinodue读数据时,具体用于:

若检测到所述输出引脚对应的时钟信号上升沿响应,则根据传输的地址和数据对所述地址线引脚和数据线引脚的高低电平进行配置,以完成一次由fpga向arduinodue写数据;

若检测到所述输出引脚对应的时钟信号下降沿响应,则并行读取所述地址线引脚和数据线引脚的高低电平,以完成一次由fpga从arduinodue读数据。

可选地,所述arduinodue与fpga的数据通信系统还用于:

在所述片选信号引脚的电平强度恢复为所述第一电平强度时,停止由arduinodue向fpga写数据或由arduinodue从fpga读数据。

可选地,所述arduinodue与fpga的数据通信系统还用于:

若检测到所述片选信号引脚的片选信号上升,则停止由fpga向arduinodue写数据或由fpga向arduinodue读数据。

以上所述本发明的具体实施方式,并不构成对本发明保护范围的限定。任何根据本发明的技术构思所作出的各种其他相应的改变与变形,均应包含在本发明权利要求的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1