本发明属于通信设备技术领域,尤其是涉及一种基于fpga实现数据间隔选择连续输出的方法。
背景技术:
目前,随着通信技术的发展,通信、测控、检测等设备均会使用fpga进行基带的调制解调及数据的处理。在fpga与单片机通信的接口模块中,需要接收基带处理的相关数据,根据需要筛选有用信息传输给单片机,通常些数据都是多种数据(数据信号,配置,状态指示等)随机排列传输。对于数据信号,单片机为了读取方便,通常希望数据信号能存在一个连续的地址空间中;对于控制信号,单片机希望能够在最快的时间内接收到。这样在fpga的数据处理中就会出现数据的阻塞、丢失、或者不连续输出等问题,不仅会浪费大量的时间等待有用的信息,而且会导致紧急信息不能给及时有效的传输,还会给单片机读取数据带来不必要的麻烦,大大降低了通信效率。
技术实现要素:
有鉴于此,本发明旨在提出一种基于fpga实现数据间隔选择连续输出的方法,以解决目前fpga芯片与单片机进行数据传输时,出现数据阻塞、丢失、或者不连续输出等问题。
为达到上述目的,本发明的技术方案是这样实现的:
一种基于fpga实现数据间隔选择连续输出的方法,包括以下步骤:
s1、在fpga中使用fifo存储器缓存数据;
s2、对fpga接口模块连接fifo存储器的接口进行定义,调节fifo存储器输入的时钟频率和输出的时钟频率,配合相应的控制信号,实现选择需要的数据传输,并实现连续地址输出。
进一步的,所述步骤s2中,对fpga接口模块连接fifo存储器的接口进行定义,定义方法如下:
data_data[19:0]:fpga需要传输的数据,这路数据为数据信息;
data_cfg[19:0]:fpga需要传输的数据,这路数据为控制信息;
data_state[19:0]:fpga需要传输的数据,这路数据为状态指示信息;
每个定义接口都连接一个fifo存储器,所述fifo存储器的输出端都连接fifo_out存储器的输入端,所述fif_out存储器的输出端连接单片机。进一步的,所述步骤s2中,所述控制信号控制方法如下:
control_data为传输数据信息的控制信号,当为‘1’时,表示需要给单片机传输;当为‘0’时表示不需要给单片机传输;
control_cfg为传输控制信息的控制信号,当为‘1’时,表示需要给单片机传输;当为‘0’时表示不需要给单片机传输;
control_state为传输状态指示信息的控制信号,当为‘1’时,表示需要给单片机传输;当为‘0’时表示不需要给单片机传输;
data_out[19:0]:fpga给单片机的输出数据。
进一步的,所述fifo存储器的输出时钟频率快于输入时钟频率。
进一步的,所述fpga的data_data[19:0]接口连接的fifo存储器,采用两个fifo存储器进行乒乓读写。
相对于现有技术,本发明所述的基于fpga实现数据间隔选择连续输出的方法具有以下优势:
本发明所述的基于fpga实现数据间隔选择连续输出的方法实现容易,只需要控制信号,即可实现重要数据优先传输,根据需要传输数据以及保证连续输出数据,使用fifo保证数据在传输过程中不会丢失。
附图说明
构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为本发明实施例所述的基于fpga实现数据间隔选择连续输出的方法原理示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
在本发明的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”等的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以通过具体情况理解上述术语在本发明中的具体含义。
下面将参考附图并结合实施例来详细说明本发明。
如图1所示,一种基于fpga实现数据间隔选择连续输出的方法,包括以下步骤:
s1、在fpga中使用fifo存储器缓存数据;
s2、对fpga接口模块连接fifo存储器的接口进行定义,调节fifo存储器输入的时钟频率和输出的时钟频率,配合相应的控制信号,实现选择需要的数据传输,并实现连续地址输出。
其中,所述步骤s2中,对fpga接口模块连接fifo存储器的接口进行定义,定义方法如下:
data_data[19:0]:fpga需要传输的数据,这路数据为数据信息;
data_cfg[19:0]:fpga需要传输的数据,这路数据为控制信息;
data_state[19:0]:fpga需要传输的数据,这路数据为状态指示信息;
每个定义接口都连接一个fifo存储器,所述fifo存储器的输出端都连接fifo_out存储器的输入端,所述fif_out存储器的输出端连接单片机。其中,所述步骤s2中,所述控制信号控制方法如下:
control_data为传输数据信息的控制信号,当为‘1’时,表示需要给单片机传输;当为‘0’时表示不需要给单片机传输;
control_cfg为传输控制信息的控制信号,当为‘1’时,表示需要给单片机传输;当为‘0’时表示不需要给单片机传输;
control_state为传输状态指示信息的控制信号,当为‘1’时,表示需要给单片机传输;当为‘0’时表示不需要给单片机传输;
data_out[19:0]:fpga给单片机的输出数据。
其中,所述fifo的输出时钟频率快于输入时钟频率。
其中,所述fpga的data_data[19:0]接口连接的fifo存储器,采用两个fifo存储器进行乒乓读写。
如图1所示,fpga内首先使用fifo存储器将数据接收并存储,保证数据不丢失。通过control信号决定数据是否需要传输给单片机。再根据事先定义好的数据输出的优先级将数据按顺序排列到fifo_out存储器中,
为了保证fpga内部能够及时处理数据,并保证数据能够及时的输出,ⅰ、ⅱ、ⅲ三部分的时钟频率是不同的。ⅱ的时钟需要对输入时钟进行分频。为了保证数据能够及时处理不对fifo造成过度的阻塞或者fifo溢出,分频的频率需要慎重考虑。需要根据fpga内部数据速度和control信号控制的有效数据的数量综合考虑决定如何分频。
每个fifo都会有一组信号指示fifo当前的数据情况,fifo_empty表示当前fifo是否为空,信号为‘1’表示fifo空,信号为‘0’表示fifo非空,即有数据;fifo_full表示当前fifo是否为满,信号为‘1’表示fifo满,信号为‘0’表示fifo不满,即还可以输入数据;fifo_rd_en表示是否读取当前fifo的数据,信号为‘1’表示读取fifo,信号为‘0’表示不读取fifo;fifo_wr_en表示是否写入当前fifo,信号为‘1’表示写入fifo,信号为‘0’表示不写入fifo。
如图1所示,fpga将三路数据送到fifo存储器,首先根据数据打包的包头不同(数据传输给fpga之前会按照事先规定的信号类型在信号前插入一个包头,例如数据信息插入包头0x00fff;控制信息插入包头0x00eee等)在内部存入三个fifo中缓存,防止数据丢失。当fifo_out的fifo_full信号为‘0’的时候,表示fifo_out还有空,可以被写入数据。fifo1~fifo3的读信号fifo_rd_en可以有选择的置1,根据control_cfg、control_state、control_data的知识,开始读取数据。3个fifo的读信号要根据优先级顺序data_cfg>data_state>data_data检测,如果data_cfg的fifo的fifo_empty为‘0’,表示有data_cfg信息需要传输,当control_cfg为‘1’时,则现将data_cfg的fifo_rd_en置‘1’,否则置零;以此类推检测data_state是否有数据需要传输,当data_cfg和data_state的数据都传输完毕后,将data_data的fifo_rd_en置1,开始传输数据信息。这样即可保证配置信息和状态信息优先传输,保证系统的高效运行。
当fifo1~fifo3的读信号fifo_rd_en和相应的control信号同时有效时,表示该信号是需要输出的有用信息,这时候fifo_out的写信号fifo_wr_en置1,fifo1~fifo3的数据按顺序读出来。将读出的数据存入到fifo_out中。因为control信号不是连续为1的,因此写入到fifo_out中的数据不是连续写的。通过fifo_out后,这个数据就可以是连续的数据,每个时钟周期连续输出。
因为在ⅱ部分实现的是并行数据转为串行数据,因此还需要对各个fifo的深度和ⅰ、ⅱ、ⅲ部分的时钟速率进行合理设置,要求既要保证fifo深度的合理性,最大限度的节约fpga内部有限的资源,三种数据能够完整储存。对于fifo深度的选择需要根据实际情况进行设置,如fifo1存数数据信息需要深度较深的fifo,fifo2和fifo3存储配置信息和状态信息,则深度比较适中的fifo即可满足要求,fifo深度的具体设置本发明中不详述。对于始终速率的设置,也需要根据数据的特点进行合理安排。比如,如果data_data数据的空闲时间较短,若ⅱ的时钟速率与ⅰ相同,势必会造成fifo1,fifo2,fifo3的数据大量存储,经过一定时间的积累,fifo1会被写满,造成数据的阻塞和丢失。因此ⅱ部分的时钟速率要比ⅰ部分的时钟速率快一些,且读取data_cfg和data_state的频率也应该适当降低,以保证data_data的传输。另外,时钟速率过快会导致fpga内部时钟约束更为严格,fpga的资源消耗过大,对于数据量很大的fifo1来说可以使用两个fifo进行乒乓读写,乒乓fifo的具体设计本发明不详细描述。因此在设计ⅱ部分的时钟频率时要综合考虑上述多种因素,选择合适的时钟频率。ⅲ部分的时钟频率没有太多要求,不需要单独设计时钟频率。如果希望fpga设计方便,可以使用与ⅰ部分相同的时钟频率;如果希望单片机设计方便,可以使用与单片机匹配的时钟频率。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。