基于片上系统的数据交换方法

文档序号:68102 发布日期:2021-10-01 浏览:39次 >En<

阅读说明:本技术 基于片上系统的数据交换方法 (Data exchange method based on system on chip ) 是由 曹平 黄锡汝 张可立 李超 郑佳俊 袁建辉 岳琼申 于 2021-07-01 设计创作,主要内容包括:本发明公开了一种基于片上系统的数据交换方法,该方法包括:接收到系统处理器发送的数据写入信号后,获取先进先出存储器的状态;在所述先进先出存储器的状态为空时,获取目标存储地址中预设数量的待写入数据,以将所述待写入数据缓存至所述先进先出存储器;将所述先进先出存储器缓存的所述待写入数据以字节流的方式输出至可编程逻辑端,通过一种软硬件数据交互接口,解决了现有技术中多模块挂载同一条总线的访问要抢占片上互连总线导致数据传输效率下降的问题,通过消耗少量的物理地址空间资源和充分利用了片上互连总线的传输带宽,提高了数据的传输效率。(The invention discloses a data exchange method based on a system on chip, which comprises the following steps: after receiving a data writing signal sent by a system processor, acquiring the state of a first-in first-out memory; when the state of the first-in first-out memory is empty, acquiring a preset number of data to be written in a target memory address so as to cache the data to be written in the first-in first-out memory; the data to be written cached by the first-in first-out memory is output to a programmable logic terminal in a byte stream mode, through a software and hardware data interaction interface, the problem that in the prior art, the data transmission efficiency is reduced because a plurality of modules mount the same bus and access of the same bus needs to preempt an on-chip interconnection bus is solved, and the data transmission efficiency is improved by consuming a small amount of physical address space resources and fully utilizing the transmission bandwidth of the on-chip interconnection bus.)

基于片上系统的数据交换方法

技术领域

本发明涉及数据通信

技术领域

,尤其涉及一种基于片上系统的数据交换方法。

背景技术

随着微电子技术的进步以及应用需求的多样化,具有可编程逻辑的片上系统获得了高速发展,伴随着出现多种比较成熟的片上系统的微处理器(Central ProcessingUnit,CPU)与可编程逻辑器件(Programmable Logic Device,可编程逻辑端)之间的数据交换方法,其中,现有的数据交换方式有CPU与可编程逻辑端之间通过片上互联总线(如AXI总线)与可编程逻辑端内部的RAM存储器实现数据交换,该方法基于一大片连续物理地址空间来访问RAM存储器以实现数据交换,在同等地址空间资源条件下,无法提供更多的数据交换通道以适应更多的应用场合;也有CPU与可编程逻辑端之间通过将可编程逻辑端内部多个功能模块直接挂载到同一条片上互联总线上以实现CPU与各功能模块之间的数据交换,功能模块之间抢占片上互连总线影响了数据传输效率。

发明内容

本申请实施例通过提供一种基于片上系统的数据交换方法,旨在解决多模块挂载同一条总线的访问要抢占片上互连总线导致数据传输效率下降的问题

本申请实施例提供了一种基于片上系统的数据交换方法,在一实施例中,所述基于片上系统的数据交换方法,包括:

接收到系统处理器发送的数据写入信号后,获取先进先出存储器的状态;

在所述先进先出存储器的状态为空时,获取目标存储地址中预设数量的待写入数据,以将所述待写入数据缓存至所述先进先出存储器;

将所述先进先出存储器缓存的所述待写入数据以字节流的方式输出至可编程逻辑端。

在一实施例中,所述接收到系统处理器发送的数据写入信号后,获取先进先出存储器的状态的步骤之前包括:

获取来自写操作的写字节数;

确定所述写字节数是否小于或等于先进先出存储器的最大缓存字节数;

在所述写字节数小于或等于所述最大缓存字节数时,执行接收到系统处理器发送的数据写入信号后,获取先进先出存储器的状态的步骤。

在一实施例中,所述在所述先进先出存储器的状态为空时,获取目标存储地址中预设数量的待写入数据,以将所述待写入数据缓存至所述先进先出存储器的步骤包括:

在所述先进先出存储器的状态为空时,以中断方式获取目标存储地址中预设数量的待写入数据,以将所述待写入数据缓存至所述先进先出存储器。

在一实施例中,所述获取目标存储地址中预设数量的待写入数据,并将所述待写入数据缓存至所述先进先出存储器的步骤包括:

根据写字节数及片上互联总线的数据位宽确定写次数;

根据所述写次数循环执行获取目标存储地址中的字节数量为片上互联总线数据位宽的待写入数据以写入到写数据寄存器,并将所述写数据寄存器中的所述待写入数据缓存至先进先出存储器,直至获取完预设数量的所述待写入数据。

在一实施例中,所述将所述先进先出存储器缓存的所述待写入数据以字节流的方式输出至可编程逻辑端的步骤包括:

确定数据拆分状态机中数据字节拆分状态;

基于所述数据字节拆分状态以及片上互联总线数据位宽将所述先进先出存储器中的待写入数据拆分为字节流数据;

将拆分后的所述字节流数据依次输入可编程逻辑端。

在一实施例中,所述数据交换方法包括:

接收到系统处理器发送的数据读取信号后,获取先进先出存储器的状态;

基于片上互联总线数据位宽对可编程逻辑端的字节流数据进行拼接以得到待读取数据,以将拼接后的所述待读取数据缓存至先进先出存储器;

在所述先进先出存储器的状态为可读状态时,将预知数量的待读取数据从所述先进先出存储器发送至目标存储地址。

在一实施例中,所述接收到系统处理器发送的数据读取信号后,获取先进先出存储器的状态的步骤之前包括:

获取来自读操作的读字节数;

确定所述读字节数是否小于或等于先进先出存储器的最大缓存字节数;

在所述读字节数小于或等于所述最大缓存字节数时,执行接收到系统处理器发送的数据读取信号后,获取先进先出存储器的状态的步骤。

在一实施例中,所述基于片上互联总线数据位宽对可编程逻辑端的字节流数据进行拼接以得到待读取数据,以将拼接后的待读取数据缓存至先进先出存储器的步骤包括:

确定数据拼接状态机中数据字节拼接状态;

基于所述数据字节拼接状态以及片上互联总线数据位宽对可编程逻辑端输入的字节流数据进行拼接以得到待读取数据;

将拼接后的所述待读取数据依次输入所述先进先出存储器。

在一实施例中,所述在所述先进先出存储器的状态为可读状态时,将预知数量的待读取数据从所述先进先出存储器发送至目标存储地址的步骤包括:

在所述先进先出存储器的状态为可读状态时,以中断方式将预知数量的待读取数据从所述先进先出存储器中发送至目标存储地址。

在一实施例中,所述在所述先进先出存储器的状态为可读状态时,以中断方式将预知数量的待读取数据从所述先进先出存储器中发送至目标存储地址的步骤包括:

在所述先进先出存储器的状态为可读状态时,确定所述先进先出存储器里待读取数据的有效读字节数;

根据所述待读取数据的有效字节数及片上互联总线的数据位宽确定读次数;

根据所述读次数循环执行将所述待读取数据从先进先出存储器输出至读数据寄存器,并将所述读数据寄存器中的所述待读取数据发送至目标存储地址,直至发送完预知数量的所述待读取数据。

本申请实施例中提供的一种基于片上系统的数据交换方法的技术方案,至少具有如下技术效果或优点:

由于采用了接收到系统处理器发送的数据写入信号后,获取先进先出存储器的状态;在所述先进先出存储器的状态为空时,获取目标存储地址中预设数量的待写入数据,以将所述待写入数据缓存至所述先进先出存储器;将所述先进先出存储器缓存的所述待写入数据以字节流的方式输出至可编程逻辑端。接收到系统处理器发送的数据读取信号后,获取先进先出存储器的状态;基于片上互联总线数据位宽对可编程逻辑端的字节流数据进行拼接以得到待读取数据,以将拼接后的所述待读取数据缓存至先进先出存储器;在所述先进先出存储器的状态为可读状态时,将预设数量的待读取数据从所述先进先出存储器发送至目标存储地址的技术方案,解决了多模块挂载同一条总线的访问要抢占片上互连总线导致数据传输效率下降的问题,通过消耗少量的物理地址空间资源和充分利用了片上互连总线的传输带宽,提高了数据的传输效率。

附图说明

图1为本发明实施例方案涉及的硬件运行环境的结构示意图;

图2为本发明中数据写入功能的结构示意图;

图3为本发明中数据读取功能的结构示意图;

图4为本发明基于片上系统的数据交换方法第一实施例的流程示意图;

图5为本发明基于片上系统的数据交换方法第二实施例的流程示意图;

图6为本发明基于片上系统的数据交换方法第四实施例的流程示意图;

图7为本发明基于片上系统的数据交换方法第五实施例的流程示意图;

图8为本发明基于片上系统的数据交换方法第六实施例的流程示意图;

图9为本发明基于片上系统的数据交换方法第七实施例的流程示意图;

图10为本发明基于片上系统的数据交换方法第八实施例的流程示意图;

图11为本发明基于片上系统的数据交换方法第十实施例的流程示意图;

具体实施方式

为了更好的理解上述技术方案,下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

如图1所示,图1为本发明实施例方案涉及的硬件运行环境的结构示意图。

需要说明的是,本申请是基于片上系统进行开发的,片上系统将微处理器(Central Processing Unit,CPU)、可编程逻辑器件(Programmable Logic Device,PLD)、模拟IP核、数字IP核等集成在单一芯片上,使得其既拥有了CPU灵活高效的数据运算和事务处理能力,同时又集成了PLD的高速并行处理优势,具有可编程逻辑的片上系统芯片内部拥有连接CPU端与PLD端的片上互联结构,使用时,可以将PLD端上的通用逻辑资源经过配置,映射为CPU端的一个或多个具有特定功能的外设,片上互联结构一般为制造商设计的片内互联总线(包含地址总线、数据总线及控制总线),例如AXI(Advanced eXtensibleInterface)总线,在芯片里,CPU端为片内互联总线分配了一段地址空间,可以通过访问寄存器方式与PLD端进行数据交互。

具体的,图1包含3个部分:可编程逻辑端(PLD端)的传输逻辑接口、系统处理器(CPU端)的传输逻辑驱动、以及两者之间的片上互联结构。所述片上互联结构包含1条片上互联结构总线、1根读中断线、1根写中断线。所述可编程逻辑端通过所述片上互联结构总线以及所述写中断线以与所述系统处理器连接,以实现将系统处理器目标存储地址的待写入数据写入所述可编程逻辑端,所述可编程逻辑端通过所述片上互联总线以及所述读中断线以与所述系统处理器连接,以实现将可编程逻辑端的待读取数据发送至系统处理器目标存储地址。

所述传输逻辑接口包含2个功能模块:数据写入模块和数据读取模块。

其中,如图2所示,图2为数据写入模块的详细设计结构框图,数据写入模块实现将CPU端往可编程逻辑端中用户逻辑写入的数据块转换成字节数据流的接口功能,其中,数据写入模块与CPU互连的接口信号为1条数据位宽为32位的片上互联结构总线interfacebus和1根写中断线wrirq;与可编程逻辑端用户逻辑互连的接口信号为8位数据信号data、1位数据有效信号valid、1位接收准备好信号ready;所述数据写入模块包括10个功能模块:写启动寄存器、写长度寄存器、写数据寄存器、写入中断产生、FIFO空检测状态机、缓存FIFO(即先进先出存储器)、传输数量计算、读出控制、数据拆分状态机、以及数据拆分,所述先进先出存储器用于缓存CPU端往可编程逻辑端中用户逻辑写入的待写入数据。

如图3所示,图3为数据读取模块的详细设计结构框图,数据读取模块实现将可编程逻辑端的字节数据流转换成能够被CPU端以数据块读取的接口功能。其中,所述数据读取模块与CPU端互连的接口信号为1条数据位宽为32位的片上互联结构总线interfacebus和1根读中断线rdirq;与可编程逻辑端用户逻辑互连的接口信号为8位数据信号data、1位数据有效信号valid、1位数据准备好信号ready、1位数据读请求信号rdreq;所述数据读取模块包含10个功能模块:读启动寄存器、读长度寄存器、读数据寄存器、读取中断产生、超时监测状态机、缓存FIFO、读取长度计算、读请求控制、数据拼接状态机、以及数据拼接,其中,所述先进先出存储器用于缓存CPU端从可编程逻辑端中用户逻辑读取的待读取数据。

CPU端的传输逻辑驱动包含4个文件操作函数:xxx_open()、xxx_release()、xxx_read()、xxx_write(),xxx_open函数实现设备的打开功能,xxx_release函数实现设备的关闭功能,xxx_read函数实现从可编程逻辑端读取数据功能,xxx_write函数实现往可编程逻辑端写入数据功能。

本领域技术人员可以理解,图2或图3中示出的片上系统结构并不构成对片上系统限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

另外,本发明实施例提供了基于片上系统的数据交换方法的实施例,需要说明的是,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,该基于片上系统的数据交换方法应用于片上系统。

如图4所示,在本申请的第一实施例中,本申请的基于片上系统的数据交换方法,包括以下步骤:

步骤S110,接收到系统处理器发送的数据写入信号后,获取先进先出存储器的状态;

步骤S120,在所述先进先出存储器的状态为空时,获取目标存储地址中预设数量的待写入数据,以将所述待写入数据缓存至所述先进先出存储器;

步骤S130,将所述先进先出存储器缓存的所述待写入数据以字节流的方式输出至可编程逻辑端。

在本实施例中,为了解决现有技术中多模块挂载同一条总线的访问要抢占片上互连总线导致数据传输效率下降,本申请提供了基于片上互联结构构建一个全双工的数据传输通道,实现CPU端与PLD端之间高效、可靠的双向数据传输,具体的,通过在该传输逻辑接口中增加两个缓存FIFO,即先进先出存储器,系统处理器将目标存储地址的待写入数据存储至其中一个先进先出存储器或将另一个先进先出存储器的待读取数据存储至目标存储地址,PLD端中用户逻辑从所述先进先出存储器接收待写入数据或发送待读取数据,实现单次读/写操作的批量数据传输,使得读/写有效数据所花时间占据了绝大部分读/写操作花费的总时间,达到很高的传输效率及速率。

在本实施例中,所述系统处理器为CPU端的处理器,所述目标存储地址为从操作系统的用户空间分配的存储地址。操作系统将虚拟存储空间划分为两部分,一部分为内核空间,一部分为用户空间。内核空间能够执行底层I/O读写操作,而用户空间不能执行底层I/O读写操作,运行在用户空间的进程需要通过系统调用来访问操作系统内核,进而能够间接地完成对底层硬件的I/O读写操作,因此,用户空间与底层硬件之间的数据读写操作需要内核空间的参与,完成相互之间的数据传递,且在进行对底层硬件的数据读写的过程中需要在内核空间中进行。

在本实施例中,写启动寄存器在接收到系统处理器内核空间发送的数据写入信号后,将所述待写入数据写入到可编程逻辑端,具体的,首先,启动写启动寄存器模块,所述写启动寄存器模块用于实时检测片上互联结构总线的地址是否与写启动寄存器匹配且总线的写控制信号有效,若是,则依据当前片上互联结构总线的数据来产生写启动标志信号(start_flag),写启动寄存器用于驱动程序发起一次写传输;接着,获取所述先进先出存储器的状态,在所述先进先出存储器的状态为空时,以中断方式通知系统处理器从内核空间发送预设数量的待写入数据;然后,启动写长度寄存器模块,所述写长度寄存器用于寄存所述目标存储地址的待写入数据的写字节数,具体的,所述写长度寄存器模块用于实时检测片上互联结构总线的地址是否与写长度寄存器匹配且总线的写控制信号有效,若是,则将当前片上互联结构总线的数据保存于写长度寄存器(wr_length_reg),并产生写长度标志信号(wr_length_flag),写长度寄存器用于驱动程序发起一次写传输实际写入数据的字节数;最后,启动写数据寄存器模块,将所述目标存储地址的待写入数据存储至先进先出存储器,具体的,所述写数据寄存器模块用于实时检测片上互联结构总线的地址是否与写数据寄存器匹配且总线的写控制信号有效,若是,则将当前片上互联结构总线的数据保存于写数据寄存器(wr_data_reg),接着立即将寄存于写数据寄存器的数据输入到先进先出存储器,直至存储完预设数量的所述待写入数据。同时,将所述先进先出存储器缓存的所述待写入数据以字节流的方式实时输出至可编程逻辑端,在将所述待写入数据输入到先进先出存储器以及从所述先进先出存储器中读出所述待写入数据的过程是同时进行的。

在本实施例中,如图2所示,所述先进先出存储器是一种先进先出的数据缓存器,没有外部读写地址线,顺序地写入数据以及顺序地读出数据,所述先进先出存储器用于缓存一次写传输的数据,且所述先进先出存储器的写入端和读出端的数据位宽都与片上互联结构总线的数据位宽一样,而缓存深度根据需要设置,例如缓存深度可设置为1024,该缓存深度决定一次写传输的最大字节数(缓存深度*数据位宽/8),在一次写入所述先进先出存储器的写字节数与一次从所述先进先出存储器中读取的写字节数相等,在进行将所述待写入数据往先进先出存储器写入之前,已经确保所述先进先出存储器的状态为空,即所述先进先出存储器能够缓存一次写传输的所有所述待写入数据,不会发生先进先出存储器写入溢出而引起数据丢失。

在本实施例中,采用FIFO空检测状态机模块检测先进先出存储器是否为空,初始时刻,本模块处于空闲状态,当写启动标志信号(start_flag)有效后,触发本模块跳到检测状态;在检测状态,本模块检测先进先出存储器的空标志信号(rdempty)是否为真,若是,则表示先进先出存储器为空,并跳回空闲状态;当FIFO空检测状态机模块处于检测状态且检测到先进先出存储器的空标志信号(rdempty)为真时,则产生写入中断信号(wrirq),表示准备好接收数据了,开始进行新一轮系统处理器将内核空间中所述待写入数据写入至预设的先进先出存储器。

本实施例根据上述技术方案,由于采用了接收到系统处理器发送的数据写入信号后,获取先进先出存储器的状态,在所述先进先出存储器的状态为空时,获取目标存储地址中预设数量的待写入数据,以将所述待写入数据缓存至所述先进先出存储器;将所述先进先出存储器缓存的所述待写入数据以字节流的方式输出至可编程逻辑端的技术手段,解决了现有技术中多模块挂载同一条总线的访问要抢占片上互连总线导致数据传输效率下降的问题,提高数据的传输效率。

如图5所示,在本申请的第二实施例中的步骤S210-步骤S230位于第一实施例中步骤S110之前,所述第二实施例包括以下步骤:

步骤S210,获取来自写操作的写字节数;

步骤S220,确定所述写字节数是否小于或等于先进先出存储器的最大缓存字节数;

步骤S230,在所述写字节数小于或等于所述最大缓存字节数时,执行接收到系统处理器发送的数据写入信号后,获取先进先出存储器的状态的步骤。

在本实施例中,所述在接收到系统处理器发送的数据写入信号之前,系统处理器端的用户空间写函数,即写操作没有被执行,用户空间没有启动写函数的系统调用,与之对应的内核空间写函数未被执行,表示此时内核空间处于空闲状态,当系统处理器端的用户空间写函数被执行时,用户空间启动写函数的系统调用,接着启动与之对应的内核空间写函数,内核空间写函数获取用户空间写函数的写字节数,接着,判断所述写字节数是否小于或者等于先进先出存储器的最大缓存字节数,在所述写字节数小于或者等于先进先出存储器的最大缓存字节数时,再通过内核空间写函数将所述用户空间写函数的待写入数据从用户空间拷贝到内核空间。当所述待写入数据拷贝完成后,内核空间写函数将数据写入信号写入到数据写入模块内的写启动寄存器,以通知可编程逻辑端的数据写入模块准备开始一次写传输,接着内核空间写函数进入休眠,等待中断唤醒。

本实施例根据上述技术方案,由于采用了获取来自写操作的写字节数,确定所述写字节数是否小于或等于先进先出存储器的最大缓存字节数,在所述写字节数小于或等于所述最大缓存字节数时,在接收到系统处理器发送的数据写入信号后,将目标存储地址的待写入数据存储至先进先出存储器的技术手段,实现了对写入先进先出存储器的写字节数进行实时判断,以避免在写字节数多的时候,无法往所述先进先出存储器写入数据的情况。

以下为本申请的第三实施例,本申请第三实施例中的步骤S121是第二实施例中步骤S120的细化步骤,包括:

步骤S121,在所述先进先出存储器的状态为空时,以中断方式获取目标存储地址中预设数量的待写入数据,以将所述待写入数据缓存至所述先进先出存储器。

在本实施例中,当FIFO空检测状态机模块处于检测状态且检测到先进先出存储器的空标志信号为真时,则在写中断线wrirq上产生一个写入中断信号,表示准备好接收待写入数据了,系统处理器在写中断线上检测到写入中断信号后,以中断方式通知系统处理器端的内核空间写函数执行将预设数量的待写入数据发送至可编程逻辑端的数据写入模块,以将所述待写入数据缓存至所述先进先出存储器。

在本实施例的技术方案中,通过采用在所述先进先出存储器的状态为空时,以中断方式获取目标存储地址中预设数量的待写入数据,以将所述待写入数据缓存至所述先进先出存储器的技术方案,提高了片上互连总线的传输带宽利用率和一次写传输的有效数据传输效率。

如图6所示,在本申请的第四实施例中的步骤S221-步骤S222为第二实施例中步骤S120的另一细化步骤,本申请的第四实施例包括以下步骤:

步骤S221,根据写字节数及片上互联总线的数据位宽确定写次数;

步骤S222,根据所述写次数循环执行获取目标存储地址中的字节数量为片上互联总线数据位宽的待写入数据以写入到写数据寄存器,并将所述写数据寄存器中的所述待写入数据缓存至先进先出存储器,直至获取完预设数量的所述待写入数据。

在本实施例中,当系统处理器端的内核空间写函数被中断唤醒之后,内核空间写函数将所述待写入数据的写字节数写入到数据写入模块内的写长度寄存器中;接着根据写字节数及片上互联总线的数据位宽确定写次数,所述写次数根据所述待写入数据的写字节数以及片上互联总线的数据位宽确定的,若片上互联总线的数据位宽字节数为4,写字节数能被4整除,则写次数=(写入字节数/4),否则写次数=(写入字节数/4)+1;然后根据所述写次数循环执行将单次写入字节数量为片上互联总线数据位宽的待写入数据写入到写数据寄存器,直至写入完预设数量的所述待写入数据。

在本实施例中,所述写长度寄存器模块用于实时检测片上互联结构总线的地址是否与写长度寄存器匹配且总线的写控制信号有效,若是,将当前片上互联结构总线的数据(即写字节数)保存于写长度寄存器(wr_length_reg),并产生写长度标志信号(wr_length_flag),写长度寄存器用于寄存驱动程序发起一次写传输实际写入数据的字节数;所述写数据寄存器模块用于实时检测片上互联结构总线的地址是否与写数据寄存器匹配且总线的写控制信号有效,若是,则将当前片上互联结构总线的数据,即待写入数据保存于写数据寄存器(wr_data_reg),接着立即将寄存于写数据寄存器的数据输入到先进先出存储器,直至存储完预设数量的所述待写入数据。

在本实施例的技术方案中,通过中断唤醒系统处理器端的内核空间写函数;在所述内核空间写函数被唤醒后,将所述待写入数据的写字节数写入到写长度寄存器;根据所述待写入数据的写字节数以及片上互联总线的数据位宽确定写次数;根据所述写次数循环执行将单次写入字节数量为片上互联总线数据位宽的待写入数据写入到写数据寄存器,并将所述写数据寄存器中的所述待写入数据缓存至先进先出存储器,直至获取完预设数量的所述待写入数据,实现将目标存储地址中的待写入数据写入先进先出存储器。

如图7所示,在本申请的第五实施例中的步骤S131-步骤S133为第一实施例中步骤S130的细化步骤,本申请的第五实施例包括以下步骤:

步骤S131,确定数据拆分状态机中数据字节拆分状态;

步骤S132,基于所述数据字节拆分状态以及片上互联总线数据位宽将所述先进先出存储器中的待写入数据拆分为字节流数据;

步骤S133,将拆分后的所述字节流数据依次输入可编程逻辑端。

在本实施例中,如图2所示,当写长度标志信号(wr_length_flag)有效后,计数寄存器(wr_count)装载写长度数值(wr_length_reg),即一次写传输实际写入数据的字节数,然后依据数据拆分状态机给出的某些状态(wr_state)进行计数递减。所述数据拆分状态机模块用于进行先进先出存储器的数据读出控制以及读出的4字节(片上互联总线数据位宽/8)数据的拆分控制。数据拆分状态机有6个状态,分为空闲状态、读取状态、字节一状态、字节二状态、字节三状态、字节四状态,以wr_state形式通知数据拆分模块进行数据拆分。所述数据拆分模块根据wr_state是否处于字节一状态、字节二状态、字节三状态、字节四状态,将从先进先出存储器读出的4字节(片上互联总线数据位宽/8)数据依次拆分成4个1字节数据并输出给可编程逻辑端中的用户逻辑,若wr_state提前从某字节状态跳回空闲状态,则不输出剩余的字节数据。

在本实施例中,当数据拆分状态机在空闲状态,若写长度标志信号(wr_length_flag)有效,则跳到读取状态。在读取状态,若读请求信号(rdreq)有效,则跳到字节一状态;若计数寄存器(wr_count)为“0”,则跳回空闲状态。在字节一状态,若计数寄存器(wr_count)不为“0”,则跳到字节二状态,否则跳回空闲状态(表示只输出字节一数据,剩余的3个字节数据丢弃)。字节二状态、字节三状态跟字节一状态的处理方式一样。在字节四状态,若计数寄存器(wr_count)不为“0”,则跳到读取状态,否则跳回空闲状态。

在本实施例中,在从所述先进先出存储器读数据的时候,需要先判断所述先进先出存储器的状态是否为空,在所述先进先出存储器的状态不为空时,才能从所述先进先出存储器中读取数据,具体的,通过读控制模块生成先进先出存储器读出端的读请求信号(rdreq),其中,读请求信号(rdreq)通过判断先进先出存储器读出端的空标志信号(rdempty)、用户逻辑的接收准备好信号ready、以及数据拆分状态机的状态信号(wr_state)而生成,在所述先进先出存储器的状态不为空时,读取所述先进先出存储器的数据以写入可编程逻辑端,直至读完所有的所述先进先出存储器的数据。

在本实施例的技术方案中,通过采用确定数据拆分状态机中数据字节拆分状态;基于所述数据字节拆分状态以及片上互联总线数据位宽将所述先进先出存储器中的待写入数据拆分为字节流数据;将拆分后的所述字节流数据依次输入可编程逻辑端的技术方案,实现对先进先出存储器中的待写入数据进行拆分并以发送至可编程逻辑端。

如图8所示,本申请的第六实施例包括以下步骤:

步骤S310,接收到系统处理器发送的数据读取信号后,获取先进先出存储器的状态;

步骤S320,基于片上互联总线数据位宽对可编程逻辑端的字节流数据进行拼接以得到待读取数据,以将拼接后的所述待读取数据缓存至先进先出存储器;

步骤S330,在所述先进先出存储器的状态为可读状态时,将预知数量的待读取数据从所述先进先出存储器发送至目标存储地址。

在本实施例中,读启动寄存器在接收到系统处理器内核空间发送的数据读取信号后,将预知数量的待读取数据从可编程逻辑端发送至目标存储地址,所述预知数量是表示系统处理器端的内核空间读函数从数据读取模块内的读长度寄存器读取所述待读取数据的有效读字节数后,内核空间读函数获知所述先进先出存储器缓存的数据量;具体的,首先,启动读启动寄存器模块,所述读启动寄存器模块用于实时检测片上互联结构总线的地址是否与读启动寄存器匹配且总线的写控制信号有效,若是,则依据当前片上互联结构总线的数据来产生读启动标志信号(start_flag),读启动寄存器用于驱动程序发起一次读传输;接着,获取所述先进先出存储器的状态,在所述先进先出存储器的状态为可读时,以中断方式通知系统处理器端的内核空间读函数执行从所述先进先出存储器中获取预知数量的待读取数据;然后,启动读长度寄存器模块,所述读长度寄存器用于寄存所述先进先出存储器的待读取数据的有效读字节数,具体的,所述读长度寄存器模块用于实时检测片上互联结构总线的地址是否与读长度寄存器匹配且总线的读控制信号有效,若是,则将读长度寄存器的数值,即有效读字节数送到片上互联结构总线的数据总线上;最后,启动读数据寄存器模块,将所述先进先出存储器的待读取数据存储至目标存储地址,具体的,所述读数据寄存器模块用于实时检测片上互联结构总线的地址是否与读数据寄存器匹配且总线的读控制信号有效,若是,则将一个所述待读取数据从先进先出存储器读出至读数据寄存器,接着立即将读数据寄存器的数值,即待读取数据送到片上互联结构总线的数据总线上;另一方面,内核空间读函数将待读取数据从读数据寄存器读取到内核空间,直至读取完预知数量的所述待读取数据,当所述待读取数据读取完成后,将所述待读取数据从内核空间拷贝到用户空间的目标存储地址。并行地,基于片上互联总线数据位宽对可编程逻辑端用户逻辑输入的字节流数据进行拼接以得到待读取数据,并将拼接后的所述待读取数据依次输入所述先进先出存储器中。

在本实施例中,如图3所示,所述系统处理器从所述可编程逻辑端读取数据的过程包括以下几个模块,其中:

读启动寄存器模块:时刻检测片上互联结构总线的地址是否与读启动寄存器匹配且总线的写控制信号有效。若是,则依据当前片上互联结构总线的数据来产生读启动标志信号(start_flag),然后送给超时监测状态机模块。读启动寄存器用于驱动程序发起一次读传输。

读长度寄存器模块:时刻检测片上互联结构总线的地址是否与读长度寄存器匹配且总线的读控制信号有效。若是,则将读长度寄存器的值送到片上互联结构总线的数据总线上。读长度寄存器用于驱动程序发起一次读传输实际读取数据的字节数。

读数据寄存器模块:时刻检测片上互联结构总线的地址是否与读数据寄存器匹配且总线的读控制信号有效。若是,则从先进先出存储器读出一个数据并送到片上互联结构总线的数据总线上。读数据寄存器用于驱动程序将需要传输的数据从可编程逻辑端读取到CPU端。

先进先出存储器:用于缓存一次读传输的数据。其写入端和读出端的数据位宽都与片上互联结构总线的数据位宽一样,而缓存深度根据需要设置(如1024),该深度决定一次读传输的最大字节数(缓存深度*片上互联总线数据位宽/8)。

超时监测状态机模块:用于监测从用户逻辑到先进先出存储器的一次数据传输是否超时,若是,则读取最后一个数据信号(read_last)有效,以提前结束本次数据传输。初始时刻,本模块处于空闲状态且读开始信号(rdstart)有效,当读启动标志信号(start_flag)有效后,触发本模块跳到判断状态;在判断状态,通过先进先出存储器读出端的已存数据个数(rd_count)和数据拼接状态机模块输出状态(read_state)判断是否存入数据,若是,则跳到检测状态,否则一直处于本状态;在检测状态,若检测到先进先出存储器写入端的满标志信号(wrfull)有效,则跳回空闲状态,若满标志信号(wrfull)无效并且检测到数据准备好信号(ready)一直无效超过预设时间,则跳到等待状态,否则一直处于本状态;在等待状态,让读开始信号(rdstart)无效,表示暂停接收外部数据,经过几个时钟周期后,跳回空闲状态,并让读取最后一个数据信号(read_last)有效。

读请求控制模块:用于生成读请求信号(rdreq)。当数据准备好信号(ready)有效且先进先出存储器写入端的满标志信号(wrfull)无效且超时监测状态机的读开始信号(rdstart)有效时,则读请求信号(rdreq)有效。

读取中断产生模块:判断超时监测状态机模块是否从其他状态跳回空闲状态,若是,则在读中断线rdirq上产生读取中断信号,表示准备好一次读取传输所需数据量了。

读取长度计算模块:用于计算一次读传输实际读取数据的有效字节数。

在本实施例的技术方案中,由于采用接收到系统处理器发送的数据读取信号后,获取先进先出存储器的状态;基于片上互联总线数据位宽对可编程逻辑端的字节流数据进行拼接以得到待读取数据,以将拼接后的所述待读取数据缓存至先进先出存储器;在所述先进先出存储器的状态为可读状态时,将预知数量的待读取数据从所述先进先出存储器发送至目标存储地址的技术方案,解决了现有技术中多模块挂载同一条总线的访问要抢占片上互连总线导致数据传输效率下降的问题,提高数据的传输效率。

如图9所示,在本申请的第七实施例中的步骤S410-步骤S430位于第六实施例中步骤S310之前,所述第七实施例包括以下步骤:

步骤S410,获取来自读操作的读字节数;

步骤S420,确定所述读字节数是否小于或等于先进先出存储器的最大缓存字节数;

步骤S430,在所述读字节数小于或等于所述最大缓存字节数时,执行接收到系统处理器发送的数据读取信号后,获取先进先出存储器的状态的步骤。

在本实施例中,所述在接收到系统处理器发送的数据读取信号之前,系统处理器端的用户空间读函数,即读操作没有被执行,用户空间没有启动读函数的系统调用,与之对应的内核空间读函数未被执行,表示此时内核空间处于空闲状态,当系统处理器端的用户空间读函数被执行时,用户空间启动读函数的系统调用,接着启动与之对应的内核空间读函数,内核空间读函数获取用户空间读函数的读字节数,接着,判断所述读字节数是否小于或者等于先进先出存储器的最大缓存字节数,在所述读字节数小于或者等于先进先出存储器的最大缓存字节数时,内核空间读函数将数据读取信号写入到数据读取模块内的读启动寄存器,以通知可编程逻辑端的数据读取模块准备开始一次读传输,然后内核空间读函数进入休眠,等待中断唤醒。

本实施例根据上述技术方案,由于采用了获取来自读操作的读字节数;确定所述读字节数是否小于或等于先进先出存储器的最大缓存字节数;在所述读字节数小于或等于所述最大缓存字节数时,接收到系统处理器发送的数据读取信号后,获取先进先出存储器的状态的技术手段,实现了对读操作的一次数据读取的最大读字节数进行限制,以避免读取越界。

如图10所示,在本申请的第八实施例中的步骤S321-步骤S323是第六实施例中步骤S320的细化步骤,所述第八实施例包括以下步骤:

步骤S321,确定数据拼接状态机中数据字节拼接状态;

步骤S322,基于所述数据字节拼接状态以及片上互联总线数据位宽对可编程逻辑端输入的字节流数据进行拼接以得到待读取数据;

步骤S323,将拼接后的所述待读取数据依次输入所述先进先出存储器。

在本实施例中,如图3所示,图3中字节流数据从用户逻辑输入到数据读取模块后,需要将字节流数据进行拼接形成待读取数据,再将所述待读取数据缓存至先进先出存储器,在这个过程中,首先,确定数据拼接状态机中数据字节拼接状态;接着,基于所述数据字节拼接状态以及片上互联总线位宽对可编程逻辑端用户逻辑输入的字节流数据进行拼接以得到待读取数据;最后,将拼接后的所述待读取数据依次输入所述先进先出存储器中;具体的,在字节流数据的拼接以及待读取数据缓存至先进先出存储器经历以下几个模块:

数据拼接状态机模块:用于控制可编程逻辑端用户逻辑输入的1字节数据拼接成4字节(片上互联总线数据位宽/8)数据;该状态机有4个状态,分为字节一状态、字节二状态、字节三状态、字节四状态,以read_state形式通知数据拼接模块进行数据拼接。

数据拼接模块:用于将用户逻辑输入的1字节数据拼接成4字节数据,即待读取数据,然后将所述待读取数据写入到先进先出存储器。其中,以数据拼接状态机模块输出状态(read_state)进行1字节数据到4字节数据的拼接。当读取最后一个数据信号(read_last)有效后,不管数据是否拼接完成也要将4字节数据写入到先进先出存储器,从而提前完成本次数据传输,因此该4字节数据含有无效字节数据,这些无效字节数据将不会被读取长度计算模块记录,从而保证传输正确。

在本实施例中,在初始时刻,数据拼接状态机模块的状态处于字节一状态;当用户逻辑输入的数据有效信号(valid)有效时,则以轮询方式跳到下一个状态,否则处于本状态;在字节二状态、字节三状态、字节四状态,若数据有效信号(valid)无效且读取最后一个数据信号(read_last)有效,则跳回字节一状态。

本实施例根据上述技术方案,由于采用了确定数据拼接状态机中数据字节拼接状态;基于所述数据字节拼接状态以及片上互联总线数据位宽对可编程逻辑端输入的字节流数据进行拼接以得到待读取数据;将拼接后的所述待读取数据依次输入所述先进先出存储器的技术手段,实现了将可编程逻辑端用户逻辑的字节流数据进行拼接以得到待读取数据。

以下为本申请的第九实施例,第九实施例中的步骤S331是第六实施例中步骤S330的细化步骤,包括:

步骤S331,在所述先进先出存储器的状态为可读状态时,以中断方式将预知数量的待读取数据从所述先进先出存储器发送至目标存储地址。

在本实施例中,判断所述先进先出存储器的状态是否为可读状态,在所述先进先出存储器的状态为不可读即无数据时,一直等待所述先进先出存储器的状态为可读,所述可读状态的判断依据为:所述先进先出存储器缓存足够数据或者缓存部分数据但等待读取时间超时,具体的,判断超时监测状态机模块是否从其他状态跳回空闲状态,若是,则在读中断线rdirq上产生一个读取中断信号,表示准备好一次读取传输所需的待读取数据了,系统处理器在读中断线上检测到读取中断信号后,以中断方式通知系统处理器端的内核空间读函数执行从所述先进先出存储器中获取预知数量的待读取数据,将所述待读取数据发送至目标存储地址。

在本实施例的技术方案中,通过采用在所述先进先出存储器的状态为可读状态时,以中断方式将预知数量的待读取数据从所述先进先出存储器中发送至目标存储地址的技术方案,提高了片上互连总线的传输带宽利用率和一次读传输的有效数据传输效率。

如图11所示,在本申请的第十实施例中的步骤S531-步骤S533是第六实施例中步骤S330的细化步骤,所述第十实施例包括以下步骤:

步骤S531,在所述先进先出存储器的状态为可读状态时,确定所述先进先出存储器里待读取数据的有效读字节数;

步骤S532,根据所述待读取数据的有效字节数及片上互联总线的数据位宽确定读次数;

步骤S533,根据所述读次数循环执行将所述待读取数据从先进先出存储器输出至读数据寄存器,并将所述读数据寄存器中的所述待读取数据发送至目标存储地址,直至发送完预知数量的所述待读取数据。

在本实施例中,在所述先进先出存储器的状态为可读状态时,读取长度计算模块计算出所述先进先出存储器里待读取数据的有效读字节数,并将该数值寄存于读长度寄存器(rd_length_reg),具体的,读取长度计算模块通过检测超时监测状态机模块的输出状态(out_state)和所述先进先出存储器写入端的满标志信号(wrfull)或者数据拼接状态机模块的输出状态(read_state)和读取最后一个数据信号(read_last)来计算所述先进先出存储器里待读取数据的有效读字节数,并将该数值寄存于读长度寄存器。

在本实施例中,所述读长度寄存器模块用于实时检测片上互联结构总线的地址是否与读长度寄存器匹配且总线的读控制信号有效,若是,则将读长度寄存器的数值(即有效读字节数)送到片上互联结构总线的数据总线上,读长度寄存器用于寄存驱动程序发起一次读传输实际读取数据的有效字节数;所述读数据寄存器模块用于实时检测片上互联结构总线的地址是否与读数据寄存器匹配且总线的读控制信号有效,若是,则将一个所述待读取数据从先进先出存储器读出至读数据寄存器,接着立即将读数据寄存器的数值(即待读取数据)送到片上互联结构总线的数据总线上。

在本实施例中,当系统处理器端的内核空间读函数被中断唤醒之后,内核空间读函数从数据读取模块内的读长度寄存器读取所述待读取数据的有效读字节数;接着根据有效读字节数及片上互联总线的数据位宽确定读次数,所述读次数根据所述待读取数据的有效读字节数以及片上互联总线的数据位宽确定的,若片上互联总线的数据位宽字节数为4,有效读字节数能被4整除,则读次数=(有效读字节数/4),否则读次数=(有效读字节数/4)+1;然后根据所述读次数循环执行将单次读取字节数量为片上互联总线数据位宽的待读取数据从数据读取模块内的读数据寄存器读取到内核空间,直至读取完预知数量的所述待读取数据;当所述待读取数据读取完成后,内核空间读函数将所述待读取数据从内核空间拷贝到用户空间的目标存储地址,并将所述待读取数据的有效读字节数返回给用户空间读函数。

在本实施例的技术方案中,通过中断唤醒系统处理器端的内核空间读函数;在所述内核空间读函数被唤醒后,内核空间读函数从读长度寄存器读取所述待读取数据的有效读字节数;根据所述待读取数据的有效读字节数以及片上互联总线的数据位宽确定读次数;根据所述读次数循环执行将单次读取字节数量为片上互联总线数据位宽的待读取数据从读数据寄存器读取到内核空间,直至读取完预知数量的所述待读取数据,并将所述待读取数据从内核空间拷贝到用户空间的目标存储地址的技术方案,实现将可编程逻辑端的待读取数据读取至目标存储地址。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

应当注意的是,在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的部件或步骤。位于部件之前的单词“一”或“一个”不排除存在多个这样的部件。本发明可以借助于包括有若干不同部件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

23页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种安全访问方法、集成电路及计算机可读存储介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!