CN115481079A - 一种数据调度系统、可重构处理器及数据调度方法 - Google Patents
一种数据调度系统、可重构处理器及数据调度方法 Download PDFInfo
- Publication number
- CN115481079A CN115481079A CN202110659480.2A CN202110659480A CN115481079A CN 115481079 A CN115481079 A CN 115481079A CN 202110659480 A CN202110659480 A CN 202110659480A CN 115481079 A CN115481079 A CN 115481079A
- Authority
- CN
- China
- Prior art keywords
- fifo
- write
- address
- pointer
- read
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7867—Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
- G06F15/7871—Reconfiguration support, e.g. configuration loading, configuration switching, or hardware OS
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0811—Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开一种数据调度系统、可重构处理器及数据调度方法,数据调度系统包括第一FIFO、第一写指针控制模块、第二FIFO、第二写指针控制模块、读指针控制模块、空状态判断控制模块和满状态判断控制模块;每当待处理数据由第一FIFO传输至可重构阵列时,第一写指针控制模块预先分配第一写缓存地址;每当可重构阵列向第二FIFO写入处理结果时,第二写指针控制模块分配第二写缓存地址;每当第二FIFO内缓存的处理结果被系统总线读取时,读指针控制模块分配读缓存地址;空状态判断控制模块根据第二写缓存地址与读缓存地址确定第二FIFO的空状态;满状态判断控制模块根据第一写缓存地址与读缓存地址确定第二FIFO的满状态。
Description
技术领域
本发明涉及集成电路的技术领域,尤其涉及一种用于可重构计算的数据调度系统、可重构处理器及数据调度方法。
背景技术
随着人工智能、大数据、云计算、5G通信等应用的迅速兴起,其带来的更加密集的数据和更加密集的运算,这就提出了对芯片计算能力的挑战。粗粒度可重构处理器架构以其低能耗、高性能和高能效和灵活动态可重构的特性,正得到越来越多的关注。粗粒度可重构计算架构是一种综合了通用处理器的灵活性和专用集成电路的高性能计算架构,非常适用于对于数据和计算密集型等并行度非常高的应用的处理。
在粗粒度的可重构体系结构中,可重构阵列包括功能完整的计算单元,如加减法器、乘法器、除法器、开方器、三角函数计算器等。为了保证可重构处理器较高的时钟频率与计算效率,这些计算单元大都采用流水化设计。由于要实现的计算复杂度不同,不同计算单元的计算流水深度往往不同。可重构阵列中不同流水深度的计算单元,重构为不同的计算通路后,仍然要保证可重构阵列的数据处理整体流水化,以充分发挥可重构处理器的运算性能。
可重构阵列根据不同的应用需求,灵活的改变自身的计算单元通路结构,从而可重构阵列总的流水深度,也根据不同应用动态调整。在可重构阵列动态调整流水深度的前提下,经过可重构阵列的计算处理后,可重构阵列处理输出的一帧或多帧的数据在写入存储器时,可能会因为没有足够的缓存空间而容易丢失。
发明内容
针对以上问题,本发明提供了一种用于可重构计算的数据调度系统、可重构处理器及数据调度方法。针对可重构阵列的总流水深度动态调整的特点,对向系统总线传输数据的FIFO采用双写地址指针控制方法,保证这个FIFO不发生溢出或读空的状态。具体的技术方案如下:
一种数据调度系统,数据调度系统用于与其外部的可重构阵列进行数据传输,数据调度系统还用于与其外部的系统总线进行数据传输;数据调度系统包括第一FIFO、第一写指针控制模块、第二FIFO、第二写指针控制模块、读指针控制模块、空状态判断控制模块和满状态判断控制模块;第一写指针控制模块,用于每当一个待处理数据由第一FIFO传输至可重构阵列时,利用地址指针递增的方式,在第二FIFO内为同一个待处理数据经可重构阵列处理输出的处理结果预先分配一个第一写缓存地址;第二写指针控制模块,用于每当可重构阵列向第二FIFO写入一个处理结果时,利用地址指针递增的方式,在第二FIFO内为可重构阵列当前输出的处理结果分配一个第二写缓存地址;读指针控制模块,用于每当第二FIFO内缓存的一个处理结果被系统总线读取时,利用地址指针递增的方式,在第二FIFO内为待读取的处理结果分配一个读缓存地址;空状态判断控制模块,用于根据第二写缓存地址与读缓存地址的地址值关系确定第二FIFO的空状态,再在判断到第二FIFO为空状态时,触发所述读指针控制模块控制所述第二FIFO不被所述系统总线读取数据,以控制第二FIFO不发生读空;满状态判断控制模块,用于根据第一写缓存地址与读缓存地址的地址值关系确定第二FIFO的满状态,再在判断到第二FIFO为满状态时,触发所述第一写指针控制模块控制所述第一FIFO不向所述可重构阵列写入待处理数据,以控制第二FIFO不发生溢出。
与现有技术相比,该技术方案在数据写入可重构阵列但还没被处理并传输至所述第二FIFO的阶段,通过地址指针跟随数据由第一FIFO传输至可重构阵列的时序而递增的计数方式分配第一写缓存地址,根据数据由第二FIFO传输给系统总线时分配的读缓存地址与数据写入可重构阵列时分配的第一写缓存地址的地址值关系,提前判断第二FIFO作为发送FIFO是否有足够空间来缓存所述可重构阵列送过来的数据,实现在第二FIFO内为可重构阵列即将写入数据提前计数圈定数据写满的地址范围,以适应可重构阵列动态变化的流水线所产生的流水深度情况;不需在所述可重构阵列给第二FIFO传输数据时才开始判断第二FIFO是否有足够的数据缓存空间,控制所述第二FIFO在被完全填满之前标志出满状态信号,有效地防止第二FIFO在可重构阵列内部的流水线深度动态变化过程中发生溢出。
该技术方案还根据数据由第二FIFO传输给系统总线时递增变化的读缓存地址与可重构阵列向第二FIFO写入数据时递增变化的第二写缓存地址的数值关系,判断第二FIFO作为发送FIFO在被系统总线读走数据的过程中是否变为空,及时掌握第二FIFO的数据缓存情况;
综上,本技术方案利用两个写缓存地址和一个读缓存地址在读写数据过程中的递增控制,保证待处理数据传输到可重构阵列中经过动态变化的流水深度的计算处理后,能在合理的存储条件下准确高效地写入第二FIFO和由第二FIFO发送给外部的系统总线,保证多级流水可重构阵列的数据流传输控制的正确性与高效性。提高可重构阵列的数据吞吐率。
进一步地,所述满状态判断控制模块,用于当判断到第一写缓存地址的最高位与读缓存地址的最高位是不同,且第一写缓存地址中除了最高位之外的其余位等于读缓存地址中除了最高位之外的其余位时,确定第二FIFO为满状态;利用第一写缓存地址(相应的写指针递增)多写一圈并追上读缓存地址(相应的读指针递增)的方式来判断第二FIFO是否为满状态,实现在待处理数据在写入可重构阵列处理但同一个待处理数据没写入第二FIFO时就可以在第二FIFO内预留好允许写数据的地址空间,以避免第二FIFO发生溢出;所述空状态判断控制模块,用于当判断到第二写缓存地址与读缓存地址是相同时,确定第二FIFO为空状态;从而在对第二FIFO进行读写操作的过程中实时判断第二FIFO是否变为空状态,避免第二FIFO被系统总线读空而影响总线数据流的传输正确性。其中,第一写缓存地址、第二写缓存地址和读缓存地址都是二进制地址。
进一步地,所述第一写指针控制模块的地址指针递增方式包括:当当前待处理数据由所述第一FIFO开始传输给所述可重构阵列时,所述第一写指针控制模块用于输出第一写指针,再将第一写指针所指向的属于所述第二FIFO内的下一个写入地址配置为所述第一写缓存地址;在当前待处理数据由所述第一FIFO完全传输给所述可重构阵列后,所述第一写指针控制模块用于对第一写指针加一,再将加一后的第一写指针更新为第一写指针,然后,在下一个待处理数据由所述第一FIFO开始传输给所述可重构阵列时,将更新后的第一写指针所指向的属于所述第二FIFO内的下一个写入地址更新为所述第一写缓存地址,并将下一个待处理数据更新为当前待处理数据,如此迭代更新,直到所述第一FIFO变为空状态或第二FIFO变为满状态;使得经所述可重构阵列处理得到的结果传输给所述第二FIFO之前,所述第一写指针控制模块输出的第一写指针完成提前加一,实现在所述第二FIFO内预留写数据的地址空间。相对于现有技术的FIFO满判断方法,增加一个用于提前递增的所述第一写指针,在待处理数据在写入可重构阵列处理但同一个待处理数据没写入第二FIFO时就可以在第二FIFO内预留好允许写数据的地址空间,从而让所述第二FIFO在被完全填满之前就确定出写满状态对应的地址信息,避免第二FIFO在可重构阵列内部的流水线深度动态变化过程中发生溢出,保证流水深度动态调整变化的可重构阵列的数据吞吐率。
进一步地,所述第二写指针控制模块的地址指针递增方式包括:当所述第二FIFO被所述可重构阵列开始将当前输出的处理结果写入时,所述第二写指针控制模块用于输出第二写指针,再将第二写指针所指向的属于所述第二FIFO内的下一个写入地址配置为所述第二写缓存地址;在所述第二FIFO被所述可重构阵列完全将当前输出的处理结果写入后,所述第二写指针控制模块用于对第二写指针加一,再将加一后的第二写指针更新为第二写指针,然后,在所述第二FIFO被所述可重构阵列开始将下一个输出的处理结果写入时,将更新后的第二写指针所指向的属于所述第二FIFO内的下一个写入地址更新为所述第二写缓存地址,并将下一个输出的处理结果更新为当前输出的处理结果。该技术方案通过设置第二FIFO对应的所述第二写指针,来指示可重构阵列输出的处理结果在第二FIFO内所需的缓存地址,对于同一批待处理数据,无论所述可重构阵列的流水深度对应的延迟时间是较长还是较短,从所述第二写指针通过递增指向第二FIFO内最后一个目标缓存地址的时间是晚于所述第一写指针通过递增指向第二FIFO内最后一个目标缓存地址的时间,从而能够在传输并由所述可重构阵列处理同一批待处理数据时,所述第一写指针总是抢先所述第二写指针移动至第二FIFO内最后一个地址空间并触发写满信号,实现在第二FIFO内预留空间,防止所述第二写指针在移动过程中被写满所述第二FIFO。
进一步地,所述读指针控制模块的地址指针递增方式包括:当第二FIFO内缓存的当前发送一个处理结果被所述系统总线开始读取时,所述读指针控制模块用于输出读指针,再将读指针所指向的属于所述第二FIFO内的下一个读取地址配置为所述读缓存地址;在第二FIFO内缓存的当前一个处理结果被所述系统总线完全读取后,所述读指针控制模块用于对读指针加一,再将加一后的读指针更新为读指针,然后,在第二FIFO内缓存的下一个处理结果被所述系统总线开始读取时,将更新后的读指针所指向的属于所述第二FIFO内的下一个读取地址更新为所述读缓存地址,并将下一个处理结果更新为当前一个处理结果,如此迭代更新,直到所述第二FIFO变为空状态。该技术方案公开的读指针用于指向下一个读出地址,并在读完后自动加1,结合前述技术方案,当读指针读出第二FIFO内缓存的数据过程中,追赶上第一写指针或被第一写指针追赶上时,触发第二FIFO的读空信号有效,避免系统总线读出的数据是无效数据。
进一步地,所述第一写指针控制模块和所述第二写指针控制模块都是由计数器实现;所述第一写指针控制模块和所述第二写指针控制模块都将其计数值输出为写指针,计数器的位宽与所述第二FIFO的深度存在2的幂次方关系,使得所述第一写指针控制模块输出的写指针和所述第二写指针控制模块输出的写指针都支持指向所述第二FIFO内的任一缓存地址;其中,所述写指针对应的地址位宽等于所述计数器的位宽,所述写指针对应的地址位宽是所述第二FIFO的地址位宽与1的和值;其中,所述写指针所指向的地址的最高位设置为折回标志位,用于指示所述写指针是否递增并越过所述第二FIFO的最后一个缓存地址。提高硬件执行效率。
进一步地,所述第一写指针控制模块将一个待处理数据写入所述可重构阵列至所述可重构阵列将同一个待处理数据的处理结果写入所述第二FIFO的时间差等于所述可重构阵列的流水深度对应的延迟时间,使得所述第一写指针在所述第二FIFO内为同一个待处理数据指向的待写入地址是超前于所述第二写指针在所述第二FIFO内为同一个待处理数据在所述可重构阵列中的处理结果指向同一个待写入地址。
进一步地,所述可重构阵列包括至少两级级联的计算阵列,可重构阵列用于利用外部软件配置生成的重构信息,将相邻两级的计算阵列连接出满足当前应用场景匹配的算法的算力需求的流水线结构;其中,所述流水线结构的每一级流水线分别对应一级计算阵列,每一级计算阵列的内部设置至少一个计算单元;所述流水深度对应的延迟时间是数据流经所述流水线结构内相应的数据通路所耗费的时间;所述第一FIFO的输出端与所述可重构阵列的相匹配的输入端连接,所述可重构阵列用于接收来自所述第一FIFO传输的待处理数据,并将待处理数据传输给所述流水线结构上的计算阵列以进行计算处理;所述第二FIFO的输入端与所述可重构阵列的相匹配的输出端连接,所述可重构阵列还用于根据所述重构信息向所述第二FIFO提供所述流水线结构的最后一级流水线所对应的一级计算阵列计算输出的结果。
与现有技术相比,所述可重构阵列以用于执行计算指令的相邻互连的计算模块为基础,重构调节数据经过每一级计算阵列的流水深度都相同且满足算法的计算需求的数据通路流水线结构,从而让可重构阵列根据不同的算法配置出适应的流水深度,并在此基础上配合外部相连接的数据调度系统,实现可重构阵列的数据处理操作的整体流水化,提高了可重构阵列的吞吐率,充分发挥可重构阵列的计算性能,也减小现有技术的流水线设计所需配置的硬件资源。
进一步地,所述读指针控制模块是由计数器实现;所述读指针控制模块将其计数值输出为读指针,计数器的位宽与所述第二FIFO的深度存在2的幂次方关系,使得所述读指针控制模块输出的读指针在递增变化的过程中,支持指向所述第二FIFO内的任一缓存地址;其中,所述读指针对应的地址位宽等于所述计数器的位宽,所述读指针对应的地址位宽是所述第二FIFO的地址位宽与1的和值;其中,所述读指针所指向的地址的最高位设置为折回标志位,用于指示所述读指针是否递增并越过所述第二FIFO的最后一个缓存地址。
进一步地,所述第一FIFO,用于依次接收所述系统总线输入的待处理数据,并保存,以及,将保存的待处理数据逐个输出至所述可重构阵列,其中,每输出一个所述待处理数据至所述可重构阵列,则反馈给所述第一写指针控制模块以控制所述第一写指针加一;所述第二FIFO,用于逐个接收所述可重构阵列写入的处理结果,并保存,以及,将保存的处理结果依次传输给所述系统总线,其中,每输出一个处理结果至所述系统总线,则反馈给所述读指针控制模块以控制所述读指针加一;每从所述可重构阵列接收一个处理结果,则反馈给所述第二写指针控制模块以控制所述第二写指针加一;其中,所述第二FIFO和所述第一FIFO都属于同步FIFO。本技术方案设置第一FIFO组作为系统总线输入的数据进入所述可重构阵列的缓存,设置第二FIFO组作为所述可重构阵列向系统总线输出数据的缓存,再合本技术方案设置的第一写指针和读指针就可以提前知道第一FIFO往所述可重构阵列写多少数据会让第二FIFO写满,从而保证所述可重构阵列与外部的系统元件的数据吞吐率和系统总线的数据传输效率,以充分发挥可重构阵列的运算性能。
一种可重构处理器,可重构处理器集成所述的可重构阵列,以及所述的数据调度系统。所述的数据调度系统基于设置的两个写指针和一个读指针组合出高效的数据调度和预判系统,以避免往系统总线发送所述可重构阵列的计算结果的FIFO出现溢出或读空,保证动态调整流水深度的可重构阵列的数据吞吐率,以提高可重构计算数据流控制的正确性与高效性。
一种数据调度方法,通过数据调度系统安排其与外部的可重构阵列进行数据传输,还通过数据调度系统安排其与外部的系统总线进行数据传输;其中,所述数据调度系统包括第一FIFO和第二FIFO;所述数据调度方法包括:步骤A、每当一个待处理数据由第一FIFO传输至可重构阵列时,对同一个待处理数据经可重构阵列处理输出的处理结果在第二FIFO内预先分配的第一写缓存地址进行加一更新处理;步骤B、每当第二FIFO接收可重构阵列输出的一个处理结果时,对可重构阵列当前输出的处理结果在第二FIFO内所需的第二写缓存地址进行加一更新处理;步骤C、每当第二FIFO内缓存的一个处理结果被系统总线读取时,对第二FIFO内缓存的待读取的处理结果所需的读缓存地址进行加一更新处理;步骤D、根据第二写缓存地址与读缓存地址的地址值关系确定第二FIFO的空状态,再在判断到第二FIFO为空状态时,控制所述第二FIFO不被所述系统总线读取数据,以控制第二FIFO不发生读空;步骤E、根据第一写缓存地址与读缓存地址的地址值关系确定第二FIFO的满状态,再在判断到第二FIFO为满状态时,控制所述第一FIFO不向所述可重构阵列写入待处理数据,以使得第二FIFO不发生溢出。
与现有技术相比,该技术方案在数据写入可重构阵列但还没被处理并传输至所述第二FIFO的阶段,通过地址指针跟随数据由第一FIFO传输至可重构阵列的时序而递增的计数方式,提前分配第一写缓存地址,根据数据由第二FIFO传输给系统总线时分配的读缓存地址与数据写入可重构阵列时分配的第一写缓存地址的地址值关系,判断第二FIFO作为发送FIFO是否有足够空间来缓存所述可重构阵列送过来的数据,实现为待写入第二FIFO内的数据提前计数圈定数据写满的地址范围,以避免可重构阵列动态变化的流水线所产生的流水深度条件下输出至第二FIFO的数据发生溢出。
该技术方案还根据数据由第二FIFO传输给系统总线时递增变化的读缓存地址与可重构阵列向第二FIFO写入数据时递增变化的第二写缓存地址的数值关系,判断第二FIFO作为发送FIFO在被系统总线读走数据的过程中是否变为空,及时掌握第二FIFO的数据被总线读走的情况;
综上,本技术方案利用两个写缓存地址和一个读缓存地址在读写数据过程中完成第二FIFO的空满判断,保证待处理数据传输到可重构阵列中经过动态变化的流水深度的计算处理后,能在合理的存储条件下准确高效地写入第二FIFO和由第二FIFO发送给外部的系统总线,保证多级流水可重构阵列的数据流传输控制的正确性与高效性。提高可重构阵列的数据吞吐率。
进一步地,当判断到第一写缓存地址的最高位地址值与读缓存地址的最高位是不同,且第一写缓存地址中除了最高位之外的其余位等于读缓存地址中除了最高位之外的其余位时,确定第二FIFO为满状态;当判断到第二写缓存地址与读缓存地址是相同时,确定第二FIFO为空状态;其中,第一写缓存地址、第二写缓存地址和读缓存地址都用二进制地址表示。本技术方案利用第一写缓存地址多写一圈并追上读缓存地址的方式来提前判断第二FIFO是否为满状态,实现在待处理数据在写入可重构阵列处理但同一个待处理数据没写入第二FIFO时就可以在第二FIFO内预留好允许写数据的地址空间,以避免可重构阵列向第二FIFO写入数据过程中,第二FIFO发生溢出;另一方面,在对第二FIFO进行读写操作的过程中实时判断第二FIFO是否变为空状态,避免第二FIFO被系统总线读空而影响总线数据流的传输正确性。
进一步地,所述步骤A的具体方法包括:步骤A1、当当前待处理数据由所述第一FIFO开始传输给所述可重构阵列时,所述数据调度系统产生第一写指针,再将第一写指针所指向的属于所述第二FIFO内的下一个写入地址配置为所述第一写缓存地址;然后进入步骤A2;步骤A2、在当前待处理数据由所述第一FIFO完全传输给所述可重构阵列后,对第一写指针加一,再将加一后的第一写指针更新为第一写指针;然后进入步骤A3;步骤A3、在下一个待处理数据由所述第一FIFO开始传输给所述可重构阵列时,将更新后的第一写指针所指向的属于所述第二FIFO内的下一个写入地址更新为所述第一写缓存地址,并将下一个待处理数据更新为当前待处理数据,再返回步骤A2,如此迭代,直到所述第一FIFO变为空状态或第二FIFO变为满状态,使得经所述可重构阵列处理得到的结果传输给所述第二FIFO之前,所述第一写指针完成提前加一,实现在所述第二FIFO内预留写数据的地址空间。
相对于现有技术的FIFO满判断方法,增加一个用于提前递增的所述第一写指针,在待处理数据在写入可重构阵列处理但同一个待处理数据没写入第二FIFO时就可以在第二FIFO内预留好允许写数据的地址空间,从而让所述第二FIFO在被完全填满之前就确定出写满状态对应的地址信息,避免第二FIFO在可重构阵列内部的流水线深度动态变化过程中发生溢出,保证流水深度动态调整变化的可重构阵列的数据吞吐率。
进一步地,所述步骤B的具体方法包括:步骤B1、当所述第二FIFO被所述可重构阵列开始将当前输出的处理结果写入时,产生第二写指针,再将第二写指针所指向的属于所述第二FIFO内的下一个写入地址配置为所述第二写缓存地址;然后进入步骤B2;步骤B2、在所述第二FIFO被所述可重构阵列完全将当前输出的处理结果写入后,对第二写指针加一,再将加一后的第二写指针更新为第二写指针;然后进入步骤B3;步骤B3、在所述第二FIFO被所述可重构阵列开始将下一个输出的处理结果写入时,将更新后的第二写指针所指向的属于所述第二FIFO内的下一个写入地址更新为所述第二写缓存地址,并将下一个输出的处理结果更新为当前输出的处理结果,然后返回步骤B2,如此迭代,直到所述可重构阵列没有输出处理结果或所述可重构阵列的内部不存在需要处理的数据。
该技术方案通过设置第二FIFO对应的所述第二写指针,来指示可重构阵列输出的处理结果在第二FIFO内所需的缓存地址,对于同一批待处理数据,无论所述可重构阵列的流水深度对应的延迟时间是较长还是较短,从所述第二写指针通过自动递增指向第二FIFO内最后一个目标缓存地址的时间是晚于所述第一写指针通过自动递增指向第二FIFO内最后一个目标缓存地址的时间,从而能够在传输并由所述可重构阵列处理同一批待处理数据时,所述第一写指针总是抢先所述第二写指针移动至第二FIFO内最后一个地址空间并触发写满信号,实现在第二FIFO内预留空间,防止所述第二写指针在移动过程中被写满所述第二FIFO。
进一步地,所述步骤C的方法包括:步骤C1、当所述第二FIFO内缓存的当前一个处理结果被所述系统总线开始读取时,产生读指针,再将读指针所指向的属于所述第二FIFO内的下一个读取地址配置为所述读缓存地址;然后进入步骤C2;步骤C2、当所述第二FIFO内缓存的当前一个处理结果被所述系统总线完全读取后,对读指针加一,再将加一后的读指针更新为读指针;然后进入步骤C3;步骤C3、在所述第二FIFO内缓存的下一个处理结果被所述系统总线开始读取时,将更新后的读指针所指向的属于所述第二FIFO内的下一个读取地址更新为所述读缓存地址,并将下一个处理结果更新为当前一个处理结果,然后返回步骤C2,如此迭代,直到所述第二FIFO变为空状态。
该技术方案公开的读指针用于指向下一个读出地址,并在读完后自动加1,结合前述技术方案,当读指针读出第二FIFO内缓存的数据过程中,读指针追赶上第一写指针或读指针被第一写指针追赶上时,触发第二FIFO的读空信号有效,避免系统总线读出的数据是无效数据。
附图说明
图1为本发明一实施例公开的一种数据调度系统的模块示意图。
图2是本发明另一实施例公开的一种数据调度方法的流程图。
具体实施方式
下面结合附图对本发明的具体实施方式作进一步说明。以下实施方式中所涉及到的各单元模块均为逻辑电路,一个逻辑电路可以是一个物理单元、也可以是由多个逻辑器件按照一定的读写时序和信号逻辑变化组合而成的状态机,也可以是一个物理单元的一部分,还可以以多个物理单元的组合实现。此外,为了突出本发明的创新部分,本发明实施方式中并没有将与解决本发明所提出的技术问题关系不太密切的单元引入,但这并不表明本发明实施方式中不存在其它的单元。
FIFO是一种在集成电路领域得到广泛应用的存储器器件。通常的FIFO存储器由写控制模块、读控制模块和FIFO存储模块组成。FIFO的工作原理如下:以独立的读写地址指针在读写脉冲的控制下顺序地从/向存储模块读/写数据,读写指针均从第一个地址单元开始,顺序读/写到最后一个地址单元,然后又回到第一个地址单元。通过对读指针和写指针的比较,给出存储模块的空与满的判断。FIFO的溢出(Overrun)是由于读、写双方速度差异过大,在FIFO已经写满的情况下又试图写入新的数据造成的。对于FIFO的溢出现象,通常的处理方法是丢弃新的数据,并把溢出(Overrun)标志写到写地址对应的位置,写地址不递增。该方法的不足之处是:这样可能造成数据损失并带来一定的性能浪费。 这是因为FIFO发生溢出的原因是由于数据读取的一侧不能及时读走FIFO中的数据造成的,比如,当读指针指向地址0x3 ,外部又有新的数据H申请写入FIFO,此时由于读指针与写指针均指向地址0x3,因此发生数据溢出现象,按照现有的处理方法,新的数据H 将被抛弃,同时在地址0x3对应条目的数据的溢出标志位被置为有效,即地址0x3 中的数据C的溢出标志位置l。在接下来的数据读取过程中,要读取的数据首先是从读指针指向的地址0x3开始的,此时,读控制模块将会发现数据C的溢出标志位有效,现有的处理方法会认为从这个字节开始到该帧数据结束都是无效数据而丢弃。但事实上这一帧数据其实是完好无损的,在这种情况下,现有的处理方法就造成了效率的浪费。
如图1所示,本发明一实施例公开一种数据调度系统的模块示意图,所述数据调度系统包括第一FIFO、第一写指针控制模块、第二FIFO、第二写指针控制模块、读指针控制模块、空状态判断控制模块和满状态判断控制模块,如图1所示,数据调度系统用于与其外部的可重构阵列进行数据传输,数据调度系统还用于与其外部的系统总线进行数据传输。第一FIFO在本实施例中被配置为接收FIFO,用于接收系统总线传输过来的数据并缓存起来,第一FIFO还配置有专门的写控制模块和读控制模块,图1中未表示出;可重构阵列可以看成是流水深度动态可调整的级联的计算单元,构成多级流水线可重构阵列,可以与数据调度系统集成为一个可重构处理器。第二FIFO在本实施例中被配置为发送FIFO,作为发送向系统总线的数据的缓存,第二FIFO对应配置有第一写指针控制模块、第二写指针控制模块和读指针控制模块,即同一个FIFO存储模块对应连接有两个写控制模块和一个读控制模块,其中,第一写指针控制模块分别与第二FIFO和第一FIFO存在写命令联系,第二写指针控制模块和读指针控制模块都是第二FIFO专用的控制模块,满状态判断控制模块分别与第一写指针控制模块和读指针控制模块存在命令交互关系,空状态判断控制模块分别与第二写指针控制模块和读指针控制模块存在命令交互关系;在一些实施场景中,第二FIFO、第二写指针控制模块、读指针控制模块、空状态判断控制模块和满状态判断控制模块都集成在同一个存储器内,再与第一FIFO、可重构阵列建立电性连接。
本领域技术人员基于现有技术可以理解的是,可重构阵列若从系统总线获取待处理数据,则所述系统总线先将待处理数据先存放到所述第一FIFO中,然后这些待处理数据经过多级流水的可重构阵列处理后送到所述第二FIFO,最后,系统总线通过所述第二FIFO将处理出的数据读走。为了保证可重构阵列的数据吞吐率,只要所述第一FIFO不为空,且所述第二FIFO有剩余缓存空间,就要从所述第一FIFO(接收FIFO)读取数据送到可重构阵列处理。由于可重构阵列为流水线深度动态变化的多级流水结构,所以送到可重构阵列的数据不能马上写到所述第二FIFO,传输期间产生一个流水深度L的时间延迟。具体地,可重构阵列在T1时刻读取所述第一FIFO写入的待处理数据,再经过流水深度的时间延迟,到T2时刻,同一个待处理数据在可重构阵列内的处理结果才能送到所述第二FIFO,其中,T2大于T1。在一些实施例中,在可重构阵列中处理的数据(假设为M个(M=<L)),经过计算流水深度L的时间延迟,逐一送到所述第二FIFO。综上,如果在T2时刻才开始判断所述第二FIFO是否有足够空间来缓存所述可重构阵列依次送过来的数据,就有可能因为流水深度L的变化而导致时刻T2提前到来,导致所述第二FIFO没有足够的空间而发生数据溢出。
需要说明的是,在为多级流水的可重构阵列传输数据的应用场景下,为了保证数据正确的写入或读出,避免FIFO发生溢出或FIFO读空状态出现,必须保证FIFO在满的情况下不能进行写操作、在空的状态下不能进行读操作。很明显,当FIFO写满时,就不能再写新数据了,否则就导致数据的溢出;而在空状态即之前写入的数据已经读完,就不能再读取了,否则读出的数据就是无效数据。
为了克服上述问题,如图1所示,本发明实施例在第一FIFO(作为所述数据调度系统的接收FIFO)和第二FIFO(作为所述数据调度系统的发送FIFO)的基础上,设计第一写指针控制模块、第二写指针控制模块、读指针控制模块、空状态判断控制模块和满状态判断控制模块,尤其是相对于现有技术增加第一写指针控制模块。
在本发明实施例中,第一写指针控制模块,用于每当一个待处理数据由第一FIFO传输至可重构阵列时,即每当第一FIFO将一个待处理数据写入所述可重构阵列时,利用地址指针递增的方式,在第二FIFO内为同一个待处理数据经可重构阵列处理输出的处理结果预先分配一个第一写缓存地址,其中,第一写缓存地址与地址指针相对应,地址指针是指示第二FIFO内待写入的数据缓存地址的指针,地址指针自动加一后所指向的地址也加一变化,使得预先分配一个第一写缓存地址也发生加一变化,为可重构阵列对应输出的处理结果规划出可写入的地址空间范围。具体地,所述第一写指针控制模块的地址指针递增方式包括:在相关联的使能信号的控制下,当当前待处理数据由所述第一FIFO开始传输给所述可重构阵列时,所述第一写指针控制模块用于输出第一写指针,再将第一写指针所指向的属于所述第二FIFO内的下一个写入地址配置为所述第一写缓存地址。
对于第一写指针控制模块,在当前待处理数据由所述第一FIFO完全传输给所述可重构阵列后,所述第一写指针控制模块用于对第一写指针加一,再将加一后的第一写指针更新为第一写指针,此时,更新后的第一写指针指向的二进制地址值相对于更新前的增加1;然后,在下一个待处理数据由所述第一FIFO开始传输给所述可重构阵列时,将更新后的第一写指针所指向的属于所述第二FIFO内的下一个写入地址更新为所述第一写缓存地址,并将下一个待处理数据更新为当前待处理数据,如此迭代更新,即每次下一个待处理数据由所述第一FIFO完全传输给所述可重构阵列后,所述下一个待处理数据与每次更新前的所述第一写缓存地址相对应,每次更新前的所述第一写缓存地址可以作为所述下一个待处理数据经所述可重构阵列处理而得到的处理结果在所述第二FIFO内的缓存地址;所述第一写指针控制模块继续对第一写指针进行加一处理,直到所有的待处理数据依次通过所述第一FIFO传输给所述可重构阵列或所述第一FIFO变为空状态;需要补充的是,在本实施例中,所述第一FIFO不变为空状态时,所述第一FIFO的对应标志位上没有标记出空状态指示信号时,所述第一写指针可以从所述第二FIFO的第一个地址单元开始遍历,顺序遍历到其最后一个地址单元,然后又回到第一个地址单元。
本实施例中,经所述可重构阵列处理得到的结果传输给所述第二FIFO之前,所述第一写指针控制模块输出的第一写指针完成提前加一,实现在所述第二FIFO内预留写数据的地址空间。因此,相对于现有技术的FIFO满判断方法,增加一个用于提前递增的所述第一写指针,在待处理数据在写入可重构阵列处理但同一个待处理数据没写入第二FIFO时就可以在第二FIFO内预留好允许写数据的地址空间,从而让所述第二FIFO在被完全填满之前就确定出写满状态对应的地址信息,避免第二FIFO在可重构阵列内部的流水线深度动态变化过程中发生溢出,保证流水深度动态调整变化的可重构阵列的数据吞吐率。
在本发明实施例中,第二写指针控制模块,用于每当可重构阵列向第二FIFO写入一个处理结果时,利用地址指针递增的方式,在第二FIFO内为可重构阵列当前输出的处理结果分配一个第二写缓存地址;其中,第二写缓存地址与第二FIFO对应的写地址指针相对应,写地址指针是指示第二FIFO内待写入的数据缓存地址的写指针,写地址指针自动加一后所指向的地址也加一变化,使得为第二FIFO当前获取的处理结果(即可重构阵列当前输出的处理结果)分配的供其写入的缓存地址也发生加一变化。具体地,所述第二写指针控制模块的地址指针递增方式包括:在相关联的写使能信号的控制下,当所述第二FIFO被所述可重构阵列开始将当前输出的处理结果写入时,即所述可重构阵列开始将当前输出的处理结果写入所述第二FIFO,所述第二写指针控制模块用于输出第二写指针(属于写地址指针),再将第二写指针所指向的属于所述第二FIFO内的下一个写入地址配置为所述第二写缓存地址。
对于第二写指针控制模块,在所述第二FIFO被所述可重构阵列完全将当前输出的处理结果写入后,即所述可重构阵列完全将当前输出的处理结果完全写入所述第二FIFO后,所述第二写指针控制模块用于对第二写指针加一,再将加一后的第二写指针更新为第二写指针,然后,在所述第二FIFO被所述可重构阵列开始将下一个输出的处理结果写入时,将更新后的第二写指针所指向的属于所述第二FIFO内的下一个写入地址更新为所述第二写缓存地址,此时,更新前的所述第二写缓存地址是所述下一个输出的处理结果在所述第二FIFO内的写入缓存地址,并将下一个输出的处理结果更新为当前输出的处理结果;如此迭代更新,所述第二写指针控制模块继续对第二写指针进行加一处理,直到所述第二FIFO变为满状态;需要补充的是,若所述第二FIFO没有标记出满状态指示信号时,所述第二写指针可以从所述第二FIFO的第一个地址单元开始,顺序写到其最后一个地址单元,然后又回到第一个地址单元。
基于前述实施例,通过设置第二FIFO对应的所述第二写指针,来指示可重构阵列输出的处理结果在第二FIFO内所需的缓存地址,对于同一批待处理数据,无论所述可重构阵列的流水深度对应的延迟时间是较长还是较短,从所述第二写指针通过递增指向第二FIFO内最后一个目标缓存地址的时间是晚于所述第一写指针通过递增指向第二FIFO内最后一个目标缓存地址的时间,从而能够在传输并由所述可重构阵列处理同一批待处理数据时,所述第一写指针总是抢先所述第二写指针移动至第二FIFO内最后一个地址空间并触发写满信号,使得所述第二写指针在本实施例中只用于判断所述第二FIFO的空状态。
在本发明实施例中,读指针控制模块,用于每当第二FIFO内缓存的一个处理结果被系统总线读取时,即每当第二FIFO将当前待发送的处理结果传输给系统总线时,利用地址指针递增的方式,在第二FIFO内为待读取的处理结果分配一个读缓存地址,其中,读缓存地址与第二FIFO对应的读地址指针相对应,读地址指针是指示第二FIFO内待读取的数据缓存地址的读指针,读地址指针自动加一后所指向的地址也加一变化,使得为第二FIFO当前发送的处理结果分配的供系统总线读取的缓存地址也发生加一变化。具体地,所述读指针控制模块的地址指针递增方式包括:在相关联的读使能信号的控制下,当第二FIFO内缓存的当前一个处理结果(当前待发送的处理结果)被所述系统总线开始读取时,即第二FIFO开始将其内缓存的一个处理结果传输给所述系统总线时,所述读指针控制模块用于输出读指针(即读地址指针),再将读指针所指向的属于所述第二FIFO内的下一个读取地址配置为所述读缓存地址。
对于读指针控制模块,在第二FIFO内缓存的当前一个处理结果被所述系统总线完全读取后,即第二FIFO将当前待发送的一个处理结果完全传输给所述系统总线后,所述读指针控制模块用于对读指针加一,再将加一后的读指针更新为读指针,然后,在第二FIFO内缓存的下一个处理结果被所述系统总线开始读取时,即所述系统总线开始读取第二FIFO内部缓存的下一个待发送的处理结果时,将更新后的读指针所指向的属于所述第二FIFO内的下一个读取地址更新为所述读缓存地址,此时,更新前的所述读缓存地址是所述下一个处理结果的读缓存地址,即下一个待发送的处理结果在所述第二FIFO内的存储地址,并将下一个处理结果更新为当前一个处理结果,如此迭代更新,所述读指针控制模块继续对读指针进行加一处理,直到所述第二FIFO变为空状态;需要补充的是,所述第二FIFO没有标出空状态指示信号时,所述读指针可以从所述第二FIFO的第一个地址单元开始,顺序读到其最后一个地址单元,然后又回到第一个地址单元。
本实施例公开的读指针用于指向下一个读出地址,并在读完后自动加1,结合前述技术方案,当读指针读出第二FIFO内缓存的数据过程中,追赶上第一写指针或被第一写指针追赶上时,触发第二FIFO的读空信号有效,避免系统总线读出的数据是无效数据。
基于前述实施例,还公开空状态判断控制模块,用于根据第二写缓存地址与读缓存地址的地址值关系确定第二FIFO的空状态,再在判断到第二FIFO为空状态时,触发所述读指针控制模块控制所述第二FIFO不被所述系统总线读取数据,即所述系统总线不从所述第二FIFO内读取数据,以控制第二FIFO不发生读空;在本实施例中,所述空状态判断控制模块,用于当判断到第二写缓存地址与读缓存地址是相同时,确定第二FIFO为空状态,即所述第二写指针控制模块配置的第二写指针等于所述读指针控制模块配置的读指针时,将第二FIFO内相应的存储空间中设置的读空标志位置为有效,确定第二FIFO为空状态。从而在对第二FIFO进行读写操作的过程中实时判断第二FIFO是否变为空状态,避免第二FIFO被系统总线读空而影响总线数据流的传输正确性。第二写缓存地址与读缓存地址的地址值关系在本实施例中实际上是比较第二写缓存地址的对应的二进制地址与读缓存地址对应的二进制地址是否相同。
基于前述实施例,还公开满状态判断控制模块,用于根据第一写缓存地址与读缓存地址的地址值关系确定第二FIFO的满状态,再在判断到第二FIFO为满状态时,触发所述第一写指针控制模块控制所述第一FIFO不向所述可重构阵列写入待处理数据,以控制第二FIFO不发生溢出,此时,在一些实施场景内,所述可重构阵列还可以向所述第二FIFO写入所述处理结果。具体地,所述满状态判断控制模块,用于当判断到第一写缓存地址的最高位与读缓存地址的最高位是不同,且第一写缓存地址中除了最高位之外的其余位等于读缓存地址中除了最高位之外的其余位时,确定第二FIFO为满状态;其中,地址值是二进制数;即所述第一写指针所指向的地址的MSB(第一写缓存地址的最高位)不等于所述读指针所指向的地址的MSB(读缓存地址的最高位)、且所述第一写指针所指向的地址的其余位等于所述读指针所指向的地址的其余位时,将第二FIFO对应的满状态指示信号置为有效(可以置为1),在待处理数据由第一FIFO写入可重构阵列的阶段就提前确定第二FIFO为写满状态。所述满状态判断控制模块利用第一写缓存地址(第一写指针递增刷新)多写一圈并追上读缓存地址(读指针递增刷新)的方式来判断第二FIFO是否为满状态,实现在待处理数据在写入可重构阵列处理但同一个待处理数据没写入第二FIFO时就可以在第二FIFO内预留好允许写数据的地址空间,以避免第二FIFO发生溢出。
综上,前述实施例在数据写入可重构阵列但还没被处理并传输至所述第二FIFO的阶段,通过地址指针跟随数据由第一FIFO传输至可重构阵列的时序而递增的计数方式分配第一写缓存地址,根据数据由第二FIFO传输给系统总线时分配的读缓存地址与数据写入可重构阵列时分配的第一写缓存地址的地址值关系,提前判断第二FIFO作为发送FIFO是否有足够空间来缓存所述可重构阵列送过来的数据,实现在第二FIFO内为可重构阵列即将写入数据提前计数圈定数据写满的地址范围,以适应可重构阵列动态变化的流水线所产生的流水深度情况;不需在所述可重构阵列给第二FIFO传输数据时才开始判断第二FIFO是否有足够的数据缓存空间,控制所述第二FIFO在被完全填满之前标志出满状态信号,有效地防止第二FIFO在可重构阵列内部的流水线深度动态变化过程中发生溢出。另一方面还根据数据由第二FIFO传输给系统总线时递增变化的读缓存地址与可重构阵列向第二FIFO写入数据时递增变化的第二写缓存地址的数值关系,判断第二FIFO作为发送FIFO在被系统总线读走数据的过程中是否变为空,及时掌握第二FIFO的数据缓存情况。因此,本发明利用两个写缓存地址和一个读缓存地址在读写数据过程中的递增控制,保证待处理数据传输到可重构阵列中经过动态变化的流水深度的计算处理后,能在合理的存储条件下准确高效地写入第二FIFO和由第二FIFO发送给外部的系统总线,保证多级流水可重构阵列的数据流传输控制的正确性与高效性。提高可重构阵列的数据吞吐率。
作为一种实施例,所述第一写指针控制模块和所述第二写指针控制模块都是由计数器实现;所述第一写指针控制模块和所述第二写指针控制模块都将其计数值输出为写指针,其中,所述第一写指针控制模块输出的计数值可以配置为第一写指针(第一写缓存地址对应的地址值),所述第二写指针控制模块输出的计数值可以配置为第二写指针(第二写缓存地址对应的地址值)。计数器的位宽与所述第二FIFO的深度存在2的幂次方关系,在本实施例中,所述第二FIFO的深度等于:以计数器的位宽与1的差值为指数、2为底数的幂;使得所述第一写指针控制模块输出的写指针和所述第二写指针控制模块输出的写指针都支持指向所述第二FIFO内的任一缓存地址,特别是以自动递增的方式完成所述第二FIFO内的缓存地址的遍历,计数器通过计数的方式驱动写指针递增变化并能够遍历所述第二FIFO内的缓存地址,这一过程中写指针可以递增变化至使其指向的地址的最高位发生变化,此时,所述写指针所指向的地址的最高位地址值设置为折回标志位,用于指示所述写指针是否递增并越过所述第二FIFO的最后一个缓存地址,进而用于表示所述第二FIFO的满状态;其中,所述写指针对应的地址位宽等于所述计数器的位宽,所述写指针对应的地址位宽是所述第二FIFO的地址位宽与1的和值。在本实施例中,所述写指针所指向的地址的最高位设置为折回标志位,用于指示所述写指针是否递增并越过所述第二FIFO的最后一个缓存地址。之所以选择在所述写指针所指向的地址的最高位(即指针地址最左边的二进制位)设置为折回标志位,是因为对于硬件来说,二进制地址的最高位比较容易判断,提高了硬件执行的效率。
作为一种实施例,所述读指针控制模块是由计数器实现;所述读指针控制模块将其计数值输出为读指针,计数器的位宽与所述第二FIFO的深度存在2的幂次方关系,所述第二FIFO的深度等于2^(计数器的位宽与1的差值),使得所述读指针控制模块输出的读指针在递增变化的过程中,支持指向所述第二FIFO内的任一缓存地址;其中,所述读指针对应的地址位宽等于所述计数器的位宽,计数器通过计数的方式驱动读指针递增变化并能够遍历所述第二FIFO内的缓存地址,这一过程中读指针可以递增变化至使其指向的地址的最高位发生变化,在本实施例中,所述读指针对应的地址位宽是所述第二FIFO的地址位宽与1的和值,其中,相对于所述第二FIFO的地址位宽,所述读指针所指向的地址的最高位地址值设置为折回标志位,用于指示所述读指针是否递增并越过所述第二FIFO的最后一个缓存地址,进而用于表示所述第二FIFO的空状态。之所以选择在所述读指针所指向的地址的最高位(即指针地址最左边的二进制位)设置为折回标志位,是因为对于硬件来说,二进制地址的最高位比较容易判断,提高了硬件执行的效率。
所述满状态判断控制模块在判断到第一写指针的MSB与读指针的MSB不同,确定第一写指针比读指针多折回一次,且判断到其余位都相等,如:读指针r_addr[3:0]=0000,且第一写指针w_addr[3:0]=1000,其中,r_addr[3]=0,w_addr[3]=1,所以,r_addr对应的最高位为二进制0,不等于w_addr对应的最高位(二进制1),则所述满状态判断控制模块判定所述第二FIFO为满;所述空状态判断控制模块在判断到第二写指针的MSB与读指针的MSB相同,确定第二写指针与读指针折回次数相等,同时判断到其余位相等,则所述空状态判断控制模块判定所述第二FIFO为空。在一些实施例中,所述满状态判断控制模块和所述空状态判断控制组合为一个模块,完成空满状态判断,即:在所述第二FIFO为空时,控制所述系统总线不对所述第二FIFO执行读操作;在所述第二FIFO为满时,控制所述第一FIFO不向所述可重构阵列写入所述待处理数据,由于第一写指针已经在第二FIFO内预留好允许写数据的地址空间,所以只要所述可重构阵列没有继续接收新的待处理数据,所述可重构阵列就算将其内部存在的待处理数据处理完成并输出至所述第二FIFO,也不会导致第二FIFO发生溢出。若判断到所述第二FIFO为空时,也控制所述第一FIFO不向所述可重构阵列写入所述待处理数据,以保证向所述可重构阵列写入有效的数据。
作为一种实施例,所述可重构阵列包括至少两级级联的计算阵列,可重构阵列用于利用外部软件配置生成的重构信息,将相邻两级的计算阵列连接出满足当前应用场景匹配的算法的算力需求的流水线结构;其中,所述流水线结构的每一级流水线分别对应一级计算阵列,每一级计算阵列的内部设置至少一个计算单元;所述流水深度对应的延迟时间是数据流经所述流水线结构内相应的数据通路所耗费的时间。在一个可重构阵列内,至少存在两个计算阵列分级排列,即至少存在两个计算阵列级联连接,或者理解为至少存在两列相邻的计算阵列,或者理解为至少存在相邻两级的计算阵列,其中,在一个可重构阵列的每一列上只设置有一个计算阵列,每列上的一个计算阵列是一级计算阵列;在这个可重构阵列内的计算阵列的数目是预先设定的,这些计算阵列是以级联的结构存在于可重构阵列。下面为与流水线对应描述,都是使用一级计算阵列来描述一列计算阵列。从而便于后续在硬件上连接成所述可重构阵列的互连架构。需要强调的是,在当前一级计算阵列内,只有接入数据通路的计算模块才视为所述流水线结构的当前一级流水线,因为计算阵列的级数或计算阵列的数目是预先设定的,计算阵列是预先存在于可重构阵列内的硬件资源,而所述流水线结构是在已有的计算阵列的基础上,根据所述重构信息配置相邻的计算阵列之间的互连逻辑形成的。在一个可重构阵列内,将相邻两级的计算阵列通过两两相邻互连(等同于两两互联)的方式连接出满足算法的计算需求的流水线结构。当所述重构信息发生变化时,相对应执行算法的计算需求也发生相应的改变,则基于变化后的所述重构信息对相邻列的计算阵列进行重新连线,实现以硬件电路的方式执行当前应用场景匹配的算法。同时,相邻两级的计算阵列连接出流水线结构的流水深度也自动调整,即流水线结构的流水深度可以是发生变化,使得所述流水线结构的流水深度跟随所述重构信息的变化而自适应变化。
实际上所述可重构阵列针对当前数据处理应用场景,接受外部的用于改变计算模块的互联逻辑的重构信息(包括逻辑电路的组合参数、时序参数),所述可重构阵列再基于重构信息改变多个计算模块连接组成的物理架构,然后所述可重构阵列输出处理结果,等效于在当前数据处理应用场景下软件编程调用算法(算法库函数)去计算出相应的处理结果,对不同的应用需求,当可重构阵列从一种配置变为另一种配置时,可重构阵列可根据不同的应用需求连接出与之相匹配的计算结构,从而不仅可以面对特定领域的几种算法而设计,而且接受移植入其他领域算法的重构信息。
在本实施例中,所述第一FIFO的输出端与所述可重构阵列的相匹配的输入端连接,所述可重构阵列用于接收来自所述第一FIFO传输的待处理数据,并将待处理数据传输给所述流水线结构上的计算阵列以进行计算处理;所述第二FIFO的输入端与所述可重构阵列的相匹配的输出端连接,所述可重构阵列还用于根据所述重构信息向所述第二FIFO提供所述流水线结构的最后一级流水线所对应的一级计算阵列计算输出的结果。与现有技术相比,所述可重构阵列以用于执行计算指令的相邻互连的计算模块为基础,重构调节数据经过每一级计算阵列的流水深度都相同且满足算法的计算需求的数据通路流水线结构,从而让可重构阵列根据不同的算法配置出适应的流水深度,并在此基础上配合外部相连接的数据调度系统,实现可重构阵列的数据处理操作的整体流水化,提高了可重构阵列的吞吐率,充分发挥可重构阵列的计算性能,也减小现有技术的流水线设计所需配置的硬件资源。
因此,所述第一写指针控制模块将一个待处理数据写入所述可重构阵列至所述可重构阵列将同一个待处理数据的处理结果写入所述第二FIFO的时间差等于所述可重构阵列的流水深度对应的延迟时间,使得在所述满状态判断控制模块的控制作用下,无论所述可重构阵列内互联形成的流水线结构的流水深度如何变化,所述第一写指针在所述第二FIFO内为同一个待处理数据指向的待写入地址总是超前于所述第二写指针在所述第二FIFO内为同一个待处理数据在所述可重构阵列中的处理结果指向同一个待写入地址,其中,超前的时间是等于所述可重构阵列的流水深度对应的延迟时间。相对于现有技术的FIFO满判断方法,增加一个用于提前递增的所述第一写指针,在待处理数据在写入可重构阵列处理但同一个待处理数据没写入第二FIFO时就可以在第二FIFO内预留好允许写数据的地址空间,从而让所述第二FIFO在被完全填满之前就确定出写满状态对应的地址信息,避免第二FIFO在可重构阵列内部的流水线深度动态变化过程中发生溢出,实现在第二FIFO内为可重构阵列即将写入数据提前计数圈定数据写满的地址范围,以适应可重构阵列动态变化的流水线所产生的流水深度情况;保证流水深度动态调整变化的可重构阵列的数据吞吐率。
作为一种实施例,所述第一FIFO,用于依次接收所述系统总线输入的待处理数据,并保存,以及,将保存的待处理数据逐个输出至所述可重构阵列,其中,每输出一个所述待处理数据至所述可重构阵列,即所述第一FIFO每将一个所述待处理数据写入所述可重构阵列,则反馈信号给所述第一写指针控制模块,控制所述第一写指针自动加一,以按顺序指向所述第二FIFO内的相邻的待写入的缓存地址。所述第二FIFO,用于逐个接收所述可重构阵列写入的处理结果,并保存,以及,将保存的处理结果依次传输给所述系统总线,其中,每输出一个处理结果至所述系统总线,即所述第二FIFO每从所述可重构阵列接收一个处理结果,则反馈相关信号给所述第二写指针控制模,控制所述第二写指针自动加一,以按顺序指向所述第二FIFO内的相邻的新的待写入的缓存地址。需要说明的是,为了方便控制读写指针,本实施例将所述第二FIFO和所述第一FIFO都设置为同步FIFO。本实施例设置第一FIFO组作为系统总线输入的数据进入所述可重构阵列的缓存,设置第二FIFO组作为所述可重构阵列向系统总线输出数据的缓存,再合本技术方案设置的第一写指针和读指针就可以提前知道第一FIFO往所述可重构阵列写多少数据会让第二FIFO写满,从而保证所述可重构阵列与外部的系统元件的数据吞吐率和系统总线的数据传输效率,以充分发挥可重构阵列的运算性能。
需要说明的是,前述涉及的各个指针控制模块、状态判断控制模块和FIFO都可以是但不限于由设计者使用硬件描述语言Verilog HDL进行编译形成的一种数字电路模块,或者是由设计者在具备电路绘制或编译功能的软件上进行电路绘制或编译形成的数字电路模块。此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。
基于前述实施例,本发明还公开一种可重构处理器,可重构处理器集成所述的可重构阵列,以及所述的数据调度系统。在所述可重构处理器内,所述的数据调度系统基于设置的两个写指针和一个读指针组合出高效的数据调度和预判系统,以避免往系统总线发送所述可重构阵列的计算结果的FIFO出现溢出或读空,保证动态调整流水深度的可重构阵列的数据吞吐率,以提高可重构计算数据流控制的正确性与高效性。
本发明还公开一种数据调度方法,通过数据调度系统安排其与外部的可重构阵列进行数据传输,还通过数据调度系统安排其与外部的系统总线进行数据传输;其中,所述数据调度系统包括第一FIFO和第二FIFO,其中,第一FIFO连接有与之对应的读控制模块和写控制模块,第二FIFO对应配置有第一写指针控制模块、第二写指针控制模块和读指针控制模块,数据调度系统利用第一写指针控制模块输出的第一写指针对应的缓存地址值和读指针控制模块输出的读指针对应的缓存地址值完成第二FIFO的满状态的判断,另一方面,数据调度系统利用第二写指针控制模块输出的第二写指针对应的缓存地址值和读指针控制模块输出的读指针对应的缓存地址值完成第二FIFO的空状态的判断。
所述数据调度方法包括:
步骤A、每当一个待处理数据由第一FIFO传输至可重构阵列时,对同一个待处理数据经可重构阵列处理输出的处理结果在第二FIFO内预先分配的第一写缓存地址进行加一更新处理,实现每当一个待处理数据由第一FIFO传输至可重构阵列时,所述第一写指针控制模块利用地址指针递增的方式,在第二FIFO内为同一个待处理数据经可重构阵列处理输出的处理结果预先分配一个第一写缓存地址;步骤A中的地址指针是指示第二FIFO内待写入的数据缓存地址的指针,与第一写缓存地址相对应,每当一个待处理数据由第一FIFO传输至可重构阵列但该待处理数据还没被可重构阵列处理时,地址指针自动加一,预先分配的第一写缓存地址也自动加一,为同一个待处理数据经可重构阵列处理对应输出的处理结果提前规划出可写入的地址位置。
如图2所示,所述步骤A的具体方法包括:
步骤A1、当当前待处理数据由所述第一FIFO开始传输给所述可重构阵列时(可能是在相关的使能信号的控制下执行),所述数据调度系统产生第一写指针,具体是所述第一写指针控制模块产生第一写指针,再将第一写指针所指向的属于所述第二FIFO内的下一个写入地址配置为所述第一写缓存地址;然后进入步骤A2。
步骤A2、在当前待处理数据由所述第一FIFO完全传输给所述可重构阵列后,第一写指针控制模块对第一写指针加一,第一写指针控制模块再将加一后的第一写指针更新为第一写指针,此时,更新后的第一写指针指向的二进制地址值相对于更新前的增加1;然后进入步骤A3。
步骤A3、在下一个待处理数据由所述第一FIFO开始传输给所述可重构阵列时,将更新后的第一写指针所指向的属于所述第二FIFO内的下一个写入地址更新为所述第一写缓存地址,并将下一个待处理数据更新为当前待处理数据;然后进入步骤A4。此时,更新前的所述第一写缓存地址是所述下一个输出的处理结果在所述第二FIFO内的写入缓存地址。
步骤A4、判断所述第一FIFO是否变为满状态,是则控制所述第一FIFO不向所述可重构阵列写入待处理数据,否则进入步骤A5;在本实施例中,由于第一写指针已经在第二FIFO内预留好允许写数据的地址空间,所以只要所述可重构阵列没有继续接收新的待处理数据,就算控制所述可重构阵列将其内部存在的待处理数据都处理完成并输出至所述第二FIFO,也不会导致第二FIFO发生溢出。
步骤A5、判断所述第一FIFO是否变为空状态,是则确定所述第一FIFO内没有缓存所述当前待处理数据,并控制所述第一FIFO不向所述可重构阵列写入待处理数据;否则返回步骤A2,所述第一写指针控制模块继续对第一写指针进行加一处理,如此迭代,使得经所述可重构阵列处理得到的结果传输给所述第二FIFO之前,所述第一写指针完成提前加一,实现在所述第二FIFO内预留写数据的地址空间。
需要补充的是,在本实施例中,所述第一FIFO不变为空状态时,所述第一FIFO的对应标志位上没有标记出空状态指示信号时,所述第一写指针可以从所述第二FIFO的第一个地址单元开始遍历,顺序遍历到其最后一个地址单元,然后又回到第一个地址单元。
前述步骤相对于现有技术的FIFO满判断方法,增加一个用于提前递增的所述第一写指针,在待处理数据在写入可重构阵列处理但同一个待处理数据没写入第二FIFO时就可以在第二FIFO内预留好允许写数据的地址空间,从而让所述第二FIFO在被完全填满之前就确定出写满状态对应的地址信息,避免第二FIFO在可重构阵列内部的流水线深度动态变化过程中发生溢出,保证流水深度动态调整变化的可重构阵列的数据吞吐率。
步骤B、每当第二FIFO接收可重构阵列输出的一个处理结果时,对可重构阵列当前输出的处理结果在第二FIFO内所需的第二写缓存地址进行加一更新处理,实现:每当第二FIFO接收可重构阵列输出的一个处理结果时,所述第二写指针控制模块利用地址指针递增的方式,在第二FIFO内为当前获取的处理结果(即可重构阵列当前输出的处理结果)分配一个第二写缓存地址。其中,第二写缓存地址与第二FIFO对应的写地址指针相对应,写地址指针是指示第二FIFO内待写入的数据缓存地址的写指针,写地址指针自动加一后所指向的地址也加一变化,使得为第二FIFO当前获取的处理结果分配的供其写入的缓存地址也发生加一变化,即可重构阵列当前输出的处理结果在第二FIFO内待写入缓存地址值偏移一个二进制1的数值。
具体地,所述步骤B的具体方法包括:
步骤B1、当所述第二FIFO被所述可重构阵列开始将当前输出的处理结果写入时,所述第二写指针控制模块产生第二写指针,所述第二写指针控制模块再将第二写指针所指向的属于所述第二FIFO内的下一个写入地址配置为所述第二写缓存地址;然后进入步骤B2。
步骤B2、在所述第二FIFO被所述可重构阵列完全将当前输出的处理结果写入后,所述第二写指针控制模块对第二写指针加一,再将加一后的第二写指针更新为第二写指针;然后进入步骤B3。
步骤B3、在所述第二FIFO被所述可重构阵列开始将下一个输出的处理结果写入时,即所述第二FIFO开始接收所述可重构阵列的下一个输出的处理结果时,所述第二写指针控制模块将更新后的第二写指针所指向的属于所述第二FIFO内的下一个写入地址更新为所述第二写缓存地址,此时,更新前的所述第二写缓存地址是所述下一个输出的处理结果在所述第二FIFO内的写入缓存地址,并将下一个输出的处理结果更新为当前输出的处理结果,然后返回步骤B2,如此迭代,如此迭代,直到所述可重构阵列没有输出处理结果或所述可重构阵列的内部不存在需要处理的数据。
步骤B1至步骤B3通过设置第二FIFO对应的所述第二写指针,来指示可重构阵列输出的处理结果在第二FIFO内所需的缓存地址,对于同一批待处理数据,无论所述可重构阵列的流水深度对应的延迟时间是较长还是较短,从所述第二写指针通过自动递增指向第二FIFO内最后一个目标缓存地址的时间是晚于所述第一写指针通过自动递增指向第二FIFO内最后一个目标缓存地址的时间,从而能够在传输并由所述可重构阵列处理同一批待处理数据时,所述第一写指针总是抢先所述第二写指针移动至第二FIFO内最后一个地址空间并触发写满信号,使得所述第二写指针只能用于判断所述第二FIFO的空状态。也配合第一写指针实现在第二FIFO内预留空间,防止所述第二写指针在移动过程中被写满所述第二FIFO。
需要补充的是,若所述第二FIFO没有标记出满状态指示信号时,所述第二写指针可以从所述第二FIFO的第一个地址单元开始,顺序写到其最后一个地址单元,然后又回到第一个地址单元。
步骤C、每当第二FIFO内缓存的一个处理结果被系统总线读取时,对第二FIFO内缓存的待读取的处理结果所需的读缓存地址进行加一更新处理,实现:每当第二FIFO内缓存的一个处理结果被系统总线读取时,利用地址指针递增的方式,在第二FIFO内为待读取的处理结果分配一个读缓存地址。其中,读缓存地址与第二FIFO对应的读地址指针相对应,读地址指针是指示第二FIFO内待读取的数据缓存地址的读指针,读地址指针自动加一后所指向的地址也加一变化,使得为第二FIFO当前发送的处理结果分配的供系统总线读取的缓存地址也发生加一变化。
具体地,所述步骤C的方法包括:
步骤C1、当所述第二FIFO内缓存的当前一个处理结果被所述系统总线开始读取时,即每当第二FIFO将当前待发送的处理结果传输给系统总线时,所述读指针控制模块产生读指针,所述读指针控制模块再将读指针所指向的属于所述第二FIFO内的下一个读取地址配置为所述读缓存地址;然后进入步骤C2。
步骤C2、当所述第二FIFO内缓存的当前一个处理结果(当前待发送的处理结果)被所述系统总线完全读取后,所述读指针控制模块对读指针加一,所述读指针控制模块再将加一后的读指针更新为读指针;然后进入步骤C3;
步骤C3、在所述第二FIFO内缓存的下一个处理结果被所述系统总线开始读取时,即所述系统总线开始读取第二FIFO内部缓存的下一个待发送的处理结果时,所述读指针控制模块将更新后的读指针所指向的属于所述第二FIFO内的下一个读取地址更新为所述读缓存地址,此时,更新前的所述读缓存地址是所述下一个处理结果的读缓存地址,即下一个待发送的处理结果在所述第二FIFO内的存储地址,并将下一个处理结果更新为当前一个处理结果(下一个待发送的处理结果更新为当前待发送的处理结果),然后返回步骤C2,如此迭代,所述读指针控制模块继续对读指针进行加一处理,直到所述第二FIFO变为空状态。需要补充的是,所述第二FIFO没有标出空状态指示信号时,所述读指针可以从所述第二FIFO的第一个地址单元开始,顺序读到其最后一个地址单元,然后又回到第一个地址单元。
步骤C1至步骤C3公开的读指针用于指向下一个读出地址,并在读完后自动加1,结合前述技术方案,当读指针读出第二FIFO内缓存的数据过程中,读指针追赶上第一写指针或读指针被第一写指针追赶上时,触发第二FIFO的读空信号有效,避免系统总线读出的数据是无效数据。
步骤D、根据第二写缓存地址与读缓存地址的地址值关系确定第二FIFO的空状态,再在判断到第二FIFO为空状态时,控制所述第二FIFO不被所述系统总线读取数据,以控制第二FIFO不发生读空;具体地,当判断到第二写缓存地址与读缓存地址是相同时,确定第二FIFO为空状态,即所述第二写指针控制模块配置的第二写指针等于所述读指针控制模块配置的读指针时,将第二FIFO内相应的存储空间中设置的读空标志位置为有效,确定第二FIFO为空状态。从而在对第二FIFO进行读写操作的过程中实时判断第二FIFO是否变为空状态,避免第二FIFO被系统总线读空而影响总线数据流的传输正确性。第二写缓存地址与读缓存地址的地址值关系在本实施例中实际上是比较第二写缓存地址的对应的二进制地址与读缓存地址对应的二进制地址是否相同。
步骤E、根据第一写缓存地址与读缓存地址的地址值关系确定第二FIFO的满状态,再在判断到第二FIFO为满状态时,控制所述第一FIFO不向所述可重构阵列写入待处理数据,以使得第二FIFO不发生溢出。具体地,当判断到第一写缓存地址的最高位与读缓存地址的最高位是不同,且第一写缓存地址中除了最高位之外的其余位等于读缓存地址中除了最高位之外的其余位时,确定第二FIFO为满状态;其中,地址值是二进制数;即所述第一写指针所指向的地址的MSB(第一写缓存地址的最高位)不等于所述读指针所指向的地址的MSB(读缓存地址的最高位)、且所述第一写指针所指向的地址的其余位等于所述读指针所指向的地址的其余位时,将第二FIFO内对应的满状态指示信号置为有效(可以置为1),在在待处理数据由第一FIFO写入可重构阵列的阶段就提前确定第二FIFO为写满状态。步骤E利用第一写缓存地址(第一写指针递增刷新)多写一圈并追上读缓存地址(读指针递增刷新)的方式来判断第二FIFO是否为满状态,实现在待处理数据在写入可重构阵列处理但同一个待处理数据没写入第二FIFO时就可以在第二FIFO内预留好允许写数据的地址空间,以避免第二FIFO发生溢出。
与现有技术相比,前述步骤A至步骤E在数据写入可重构阵列但还没被处理并传输至所述第二FIFO的阶段,通过地址指针跟随数据由第一FIFO传输至可重构阵列的时序而递增的计数方式,提前分配第一写缓存地址,根据数据由第二FIFO传输给系统总线时分配的读缓存地址与数据写入可重构阵列时分配的第一写缓存地址的地址值关系,判断第二FIFO作为发送FIFO是否有足够空间来缓存所述可重构阵列送过来的数据,实现为待写入第二FIFO内的数据提前计数圈定数据写满的地址范围,以避免可重构阵列动态变化的流水线所产生的流水深度条件下输出至第二FIFO的数据发生溢出。还根据数据由第二FIFO传输给系统总线时递增变化的读缓存地址与可重构阵列向第二FIFO写入数据时递增变化的第二写缓存地址的数值关系,判断第二FIFO作为发送FIFO在被系统总线读走数据的过程中是否变为空,及时掌握第二FIFO的数据被总线读走的情况。综上,本实施例利用两个写缓存地址和一个读缓存地址在读写数据过程中完成第二FIFO的空满判断,保证待处理数据传输到可重构阵列中经过动态变化的流水深度的计算处理后,能在合理的存储条件下准确高效地写入第二FIFO和由第二FIFO发送给外部的系统总线,保证多级流水可重构阵列的数据流传输控制的正确性与高效性。提高可重构阵列的数据吞吐率。
需要说明的是,第一写缓存地址、第二写缓存地址和读缓存地址都用二进制地址表示。
在本申请所提供的实施例中,应该理解到,所揭露的系统、芯片,可以通过其它的方式实现。例如,以上所描述的系统实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目。
Claims (16)
1.一种数据调度系统,其特征在于,数据调度系统用于与其外部的可重构阵列进行数据传输,数据调度系统还用于与其外部的系统总线进行数据传输;
数据调度系统包括第一FIFO、第一写指针控制模块、第二FIFO、第二写指针控制模块、读指针控制模块、空状态判断控制模块和满状态判断控制模块;
第一写指针控制模块,用于每当一个待处理数据由第一FIFO传输至可重构阵列时,利用地址指针递增的方式,在第二FIFO内为同一个待处理数据经可重构阵列处理输出的处理结果预先分配一个第一写缓存地址;
第二写指针控制模块,用于每当可重构阵列向第二FIFO写入一个处理结果时,利用地址指针递增的方式,在第二FIFO内为可重构阵列当前输出的处理结果分配一个第二写缓存地址;
读指针控制模块,用于每当第二FIFO内缓存的一个处理结果被系统总线读取时,利用地址指针递增的方式,在第二FIFO内为待读取的处理结果分配一个读缓存地址;
空状态判断控制模块,用于根据第二写缓存地址与读缓存地址的地址值关系确定第二FIFO的空状态,再在判断到第二FIFO为空状态时,触发所述读指针控制模块控制所述第二FIFO不被所述系统总线读取数据,以控制第二FIFO不发生读空;
满状态判断控制模块,用于根据第一写缓存地址与读缓存地址的地址值关系确定第二FIFO的满状态,再在判断到第二FIFO为满状态时,触发所述第一写指针控制模块控制所述第一FIFO不向所述可重构阵列写入待处理数据,以控制第二FIFO不发生溢出。
2.根据权利要求1所述数据调度系统,其特征在于,所述满状态判断控制模块,用于当判断到第一写缓存地址的最高位与读缓存地址的最高位是不同,且第一写缓存地址中除了最高位之外的其余位等于读缓存地址中除了最高位之外的其余位时,确定第二FIFO为满状态;
所述空状态判断控制模块,用于当判断到第二写缓存地址与读缓存地址是相同时,确定第二FIFO为空状态;
其中,第一写缓存地址、第二写缓存地址和读缓存地址都是二进制地址。
3.根据权利要求2所述数据调度系统,其特征在于,所述第一写指针控制模块的地址指针递增方式包括:
当当前待处理数据由所述第一FIFO开始传输给所述可重构阵列时,所述第一写指针控制模块用于输出第一写指针,再将第一写指针所指向的属于所述第二FIFO内的下一个写入地址配置为所述第一写缓存地址;
在当前待处理数据由所述第一FIFO完全传输给所述可重构阵列后,所述第一写指针控制模块用于对第一写指针加一,再将加一后的第一写指针更新为第一写指针,然后,在下一个待处理数据由所述第一FIFO开始传输给所述可重构阵列时,将更新后的第一写指针所指向的属于所述第二FIFO内的下一个写入地址更新为所述第一写缓存地址,并将下一个待处理数据更新为当前待处理数据,如此迭代更新,直到所述第一FIFO变为空状态或第二FIFO变为满状态,使得经所述可重构阵列处理得到的结果传输给所述第二FIFO之前,所述第一写指针控制模块输出的第一写指针完成提前加一,实现在所述第二FIFO内预留写数据的地址空间。
4.根据权利要求3所述数据调度系统,其特征在于,所述第二写指针控制模块的地址指针递增方式包括:
当所述第二FIFO被所述可重构阵列开始将当前输出的处理结果写入时,所述第二写指针控制模块用于输出第二写指针,再将第二写指针所指向的属于所述第二FIFO内的下一个写入地址配置为所述第二写缓存地址;
在所述第二FIFO被所述可重构阵列完全将当前输出的处理结果写入后,所述第二写指针控制模块用于对第二写指针加一,再将加一后的第二写指针更新为第二写指针,然后,在所述第二FIFO被所述可重构阵列开始将下一个输出的处理结果写入时,将更新后的第二写指针所指向的属于所述第二FIFO内的下一个写入地址更新为所述第二写缓存地址,并将下一个输出的处理结果更新为当前输出的处理结果。
5.根据权利要求4所述数据调度系统,其特征在于,所述读指针控制模块的地址指针递增方式包括:
当第二FIFO内缓存的当前发送一个处理结果被所述系统总线开始读取时,所述读指针控制模块用于输出读指针,再将读指针所指向的属于所述第二FIFO内的下一个读取地址配置为所述读缓存地址;
在第二FIFO内缓存的当前一个处理结果被所述系统总线完全读取后,所述读指针控制模块用于对读指针加一,再将加一后的读指针更新为读指针,然后,在第二FIFO内缓存的下一个处理结果被所述系统总线开始读取时,将更新后的读指针所指向的属于所述第二FIFO内的下一个读取地址更新为所述读缓存地址,并将下一个处理结果更新为当前一个处理结果,如此迭代更新,直到所述第二FIFO变为空状态。
6.根据权利要求4至5任一项所述数据调度系统,其特征在于,所述第一写指针控制模块和所述第二写指针控制模块都是由计数器实现;
所述第一写指针控制模块和所述第二写指针控制模块都将其计数值输出为写指针,计数器的位宽与所述第二FIFO的深度存在2的幂次方关系,使得所述第一写指针控制模块输出的写指针和所述第二写指针控制模块输出的写指针都支持指向所述第二FIFO内的任一缓存地址;
其中,所述写指针对应的地址位宽等于所述计数器的位宽,所述写指针对应的地址位宽是所述第二FIFO的地址位宽与1的和值;
其中,所述写指针所指向的地址的最高位设置为折回标志位,用于指示所述写指针是否递增并越过所述第二FIFO的最后一个缓存地址。
7.根据权利要求6所述数据调度系统,其特征在于,所述第一写指针控制模块将一个待处理数据写入所述可重构阵列至所述可重构阵列将同一个待处理数据的处理结果写入所述第二FIFO的时间差等于所述可重构阵列的流水深度对应的延迟时间,使得所述第一写指针在所述第二FIFO内为同一个待处理数据指向的待写入地址是超前于所述第二写指针在所述第二FIFO内为同一个待处理数据在所述可重构阵列中的处理结果指向同一个待写入地址。
8.根据权利要求7所述数据调度系统,其特征在于,所述可重构阵列包括至少两级级联的计算阵列,可重构阵列用于利用外部软件配置生成的重构信息,将相邻两级的计算阵列连接出满足当前应用场景匹配的算法的算力需求的流水线结构;其中,所述流水线结构的每一级流水线分别对应一级计算阵列,每一级计算阵列的内部设置至少一个计算单元;所述流水深度对应的延迟时间是数据流经所述流水线结构内相应的数据通路所耗费的时间;
所述第一FIFO的输出端与所述可重构阵列的相匹配的输入端连接,所述可重构阵列用于接收来自所述第一FIFO传输的待处理数据,并将待处理数据传输给所述流水线结构上的计算阵列以进行计算处理;
所述第二FIFO的输入端与所述可重构阵列的相匹配的输出端连接,所述可重构阵列还用于根据所述重构信息向所述第二FIFO提供所述流水线结构的最后一级流水线所对应的一级计算阵列计算输出的结果。
9.根据权利要求3至5任一项所述数据调度系统,其特征在于,所述读指针控制模块是由计数器实现;
所述读指针控制模块将其计数值输出为读指针,计数器的位宽与所述第二FIFO的深度存在2的幂次方关系,使得所述读指针控制模块输出的读指针在递增变化的过程中,支持指向所述第二FIFO内的任一缓存地址;
其中,所述读指针对应的地址位宽等于所述计数器的位宽,所述读指针对应的地址位宽是所述第二FIFO的地址位宽与1的和值;
其中,所述读指针所指向的地址的最高位设置为折回标志位,用于指示所述读指针是否递增并越过所述第二FIFO的最后一个缓存地址。
10.根据权利要求3至5任一项所述数据调度系统,其特征在于,所述第一FIFO,用于依次接收所述系统总线输入的待处理数据,并保存,以及,将保存的待处理数据逐个输出至所述可重构阵列,其中,每输出一个所述待处理数据至所述可重构阵列,则反馈给所述第一写指针控制模块以控制所述第一写指针加一;
所述第二FIFO,用于逐个接收所述可重构阵列写入的处理结果,并保存,以及,将保存的处理结果依次传输给所述系统总线,其中,每输出一个处理结果至所述系统总线,则反馈给所述读指针控制模块以控制所述读指针加一;每从所述可重构阵列接收一个处理结果,则反馈给所述第二写指针控制模块以控制所述第二写指针加一;
其中,所述第二FIFO和所述第一FIFO都属于同步FIFO。
11.一种可重构处理器,其特征在于,可重构处理器集成权利要求7所述的可重构阵列,以及权利要求1至10任一项所述的数据调度系统。
12.一种数据调度方法,其特征在于,通过数据调度系统安排其与外部的可重构阵列进行数据传输,还通过数据调度系统安排其与外部的系统总线进行数据传输;其中,所述数据调度系统包括第一FIFO和第二FIFO;
所述数据调度方法包括:
步骤A、每当一个待处理数据由第一FIFO传输至可重构阵列时,对同一个待处理数据经可重构阵列处理输出的处理结果在第二FIFO内预先分配的第一写缓存地址进行加一更新处理;
步骤B、每当第二FIFO接收可重构阵列输出的一个处理结果时,对可重构阵列当前输出的处理结果在第二FIFO内所需的第二写缓存地址进行加一更新处理;
步骤C、每当第二FIFO内缓存的一个处理结果被系统总线读取时,对第二FIFO内缓存的待读取的处理结果所需的读缓存地址进行加一更新处理;
步骤D、根据第二写缓存地址与读缓存地址的地址值关系确定第二FIFO的空状态,再在判断到第二FIFO为空状态时,控制所述第二FIFO不被所述系统总线读取数据,以控制第二FIFO不发生读空;
步骤E、根据第一写缓存地址与读缓存地址的地址值关系确定第二FIFO的满状态,再在判断到第二FIFO为满状态时,控制所述第一FIFO不向所述可重构阵列写入待处理数据,以使得第二FIFO不发生溢出。
13.根据权利要求12所述数据调度方法,其特征在于,当判断到第一写缓存地址的最高位地址值与读缓存地址的最高位是不同,且第一写缓存地址中除了最高位之外的其余位等于读缓存地址中除了最高位之外的其余位时,确定第二FIFO为满状态;
当判断到第二写缓存地址与读缓存地址是相同时,确定第二FIFO为空状态;
其中,第一写缓存地址、第二写缓存地址和读缓存地址都用二进制地址表示。
14.根据权利要求13所述数据调度方法,其特征在于,所述步骤A的具体方法包括:
步骤A1、当当前待处理数据由所述第一FIFO开始传输给所述可重构阵列时,所述数据调度系统产生第一写指针,再将第一写指针所指向的属于所述第二FIFO内的下一个写入地址配置为所述第一写缓存地址;然后进入步骤A2;
步骤A2、在当前待处理数据由所述第一FIFO完全传输给所述可重构阵列后,对第一写指针加一,再将加一后的第一写指针更新为第一写指针;然后进入步骤A3;
步骤A3、在下一个待处理数据由所述第一FIFO开始传输给所述可重构阵列时,将更新后的第一写指针所指向的属于所述第二FIFO内的下一个写入地址更新为所述第一写缓存地址,并将下一个待处理数据更新为当前待处理数据,再返回步骤A2,如此迭代,直到所述第一FIFO变为空状态或第二FIFO变为满状态,使得经所述可重构阵列处理得到的结果传输给所述第二FIFO之前,所述第一写指针完成提前加一,实现在所述第二FIFO内预留写数据的地址空间。
15.根据权利要求14所述数据调度方法,其特征在于,所述步骤B的具体方法包括:
步骤B1、当所述第二FIFO被所述可重构阵列开始将当前输出的处理结果写入时,产生第二写指针,再将第二写指针所指向的属于所述第二FIFO内的下一个写入地址配置为所述第二写缓存地址;然后进入步骤B2;
步骤B2、在所述第二FIFO被所述可重构阵列完全将当前输出的处理结果写入后,对第二写指针加一,再将加一后的第二写指针更新为第二写指针;然后进入步骤B3;
步骤B3、在所述第二FIFO被所述可重构阵列开始将下一个输出的处理结果写入时,将更新后的第二写指针所指向的属于所述第二FIFO内的下一个写入地址更新为所述第二写缓存地址,并将下一个输出的处理结果更新为当前输出的处理结果,然后返回步骤B2。
16.根据权利要求15所述数据调度方法,其特征在于,所述步骤C的方法包括:
步骤C1、当所述第二FIFO内缓存的当前一个处理结果被所述系统总线开始读取时,产生读指针,再将读指针所指向的属于所述第二FIFO内的下一个读取地址配置为所述读缓存地址;然后进入步骤C2;
步骤C2、当所述第二FIFO内缓存的当前一个处理结果被所述系统总线完全读取后,对读指针加一,再将加一后的读指针更新为读指针;然后进入步骤C3;
步骤C3、在所述第二FIFO内缓存的下一个处理结果被所述系统总线开始读取时,将更新后的读指针所指向的属于所述第二FIFO内的下一个读取地址更新为所述读缓存地址,并将下一个处理结果更新为当前一个处理结果,然后返回步骤C2,如此迭代,直到所述第二FIFO变为空状态。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110659480.2A CN115481079B (zh) | 2021-06-15 | 2021-06-15 | 一种数据调度系统、可重构处理器及数据调度方法 |
PCT/CN2022/081524 WO2022262341A1 (zh) | 2021-06-15 | 2022-03-17 | 一种数据调度系统、可重构处理器及数据调度方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110659480.2A CN115481079B (zh) | 2021-06-15 | 2021-06-15 | 一种数据调度系统、可重构处理器及数据调度方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115481079A true CN115481079A (zh) | 2022-12-16 |
CN115481079B CN115481079B (zh) | 2023-07-07 |
Family
ID=84419436
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110659480.2A Active CN115481079B (zh) | 2021-06-15 | 2021-06-15 | 一种数据调度系统、可重构处理器及数据调度方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN115481079B (zh) |
WO (1) | WO2022262341A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116107763B (zh) * | 2023-04-12 | 2023-06-20 | 北京燧原智能科技有限公司 | 一种数据发送方法、装置、设备及存储介质 |
CN117215520B (zh) * | 2023-11-08 | 2024-02-13 | 中电科申泰信息科技有限公司 | 一种基于双端口fifo的交叉开关广播路由结构 |
CN117354256B (zh) * | 2023-12-05 | 2024-03-19 | 鹏城实验室 | 速率匹配方法、装置、设备及存储介质 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6578093B1 (en) * | 2000-01-19 | 2003-06-10 | Conexant Systems, Inc. | System for loading a saved write pointer into a read pointer of a storage at desired synchronization points within a horizontal video line for synchronizing data |
CN1545031A (zh) * | 2003-11-17 | 2004-11-10 | 中兴通讯股份有限公司 | 一种fifo存储器的数据处理方法 |
US6920526B1 (en) * | 2000-07-20 | 2005-07-19 | Silicon Graphics, Inc. | Dual-bank FIFO for synchronization of read data in DDR SDRAM |
US20080244237A1 (en) * | 2007-03-26 | 2008-10-02 | James Wilson | Compute unit with an internal bit FIFO circuit |
CN103677732A (zh) * | 2012-09-03 | 2014-03-26 | 上海贝尔股份有限公司 | Fifo装置及其方法 |
US20140310466A1 (en) * | 2001-03-05 | 2014-10-16 | Pact Xpp Technologies Ag | Multi-processor bus and cache interconnection system |
CN104778025A (zh) * | 2015-04-16 | 2015-07-15 | 浪潮电子信息产业股份有限公司 | 基于随机访问存储器的先入先出存储器的电路结构 |
US20150261474A1 (en) * | 2001-09-07 | 2015-09-17 | Pact Xpp Technologies Ag | Methods and Systems for Transferring Data between a Processing Device and External Devices |
CN111367495A (zh) * | 2020-03-06 | 2020-07-03 | 电子科技大学 | 一种异步先入先出的数据缓存控制器 |
CN112416823A (zh) * | 2020-11-15 | 2021-02-26 | 珠海市一微半导体有限公司 | 一种突发模式下的传感器数据读写控制方法、系统及芯片 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2020009146A (ja) * | 2018-07-09 | 2020-01-16 | 株式会社東芝 | 共有型fifo装置 |
-
2021
- 2021-06-15 CN CN202110659480.2A patent/CN115481079B/zh active Active
-
2022
- 2022-03-17 WO PCT/CN2022/081524 patent/WO2022262341A1/zh active Application Filing
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6578093B1 (en) * | 2000-01-19 | 2003-06-10 | Conexant Systems, Inc. | System for loading a saved write pointer into a read pointer of a storage at desired synchronization points within a horizontal video line for synchronizing data |
US6920526B1 (en) * | 2000-07-20 | 2005-07-19 | Silicon Graphics, Inc. | Dual-bank FIFO for synchronization of read data in DDR SDRAM |
US20140310466A1 (en) * | 2001-03-05 | 2014-10-16 | Pact Xpp Technologies Ag | Multi-processor bus and cache interconnection system |
US20150261474A1 (en) * | 2001-09-07 | 2015-09-17 | Pact Xpp Technologies Ag | Methods and Systems for Transferring Data between a Processing Device and External Devices |
CN1545031A (zh) * | 2003-11-17 | 2004-11-10 | 中兴通讯股份有限公司 | 一种fifo存储器的数据处理方法 |
US20080244237A1 (en) * | 2007-03-26 | 2008-10-02 | James Wilson | Compute unit with an internal bit FIFO circuit |
CN103677732A (zh) * | 2012-09-03 | 2014-03-26 | 上海贝尔股份有限公司 | Fifo装置及其方法 |
CN104778025A (zh) * | 2015-04-16 | 2015-07-15 | 浪潮电子信息产业股份有限公司 | 基于随机访问存储器的先入先出存储器的电路结构 |
CN111367495A (zh) * | 2020-03-06 | 2020-07-03 | 电子科技大学 | 一种异步先入先出的数据缓存控制器 |
CN112416823A (zh) * | 2020-11-15 | 2021-02-26 | 珠海市一微半导体有限公司 | 一种突发模式下的传感器数据读写控制方法、系统及芯片 |
Also Published As
Publication number | Publication date |
---|---|
WO2022262341A1 (zh) | 2022-12-22 |
CN115481079B (zh) | 2023-07-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115481079B (zh) | 一种数据调度系统、可重构处理器及数据调度方法 | |
US8166214B2 (en) | Shared storage for multi-threaded ordered queues in an interconnect | |
US10318468B2 (en) | FPGA-based interface signal remapping method | |
US8001510B1 (en) | Automated method of architecture mapping selection from constrained high level language description via element characterization | |
CN109219805B (zh) | 一种多核系统内存访问方法、相关装置、系统及存储介质 | |
US20170294913A1 (en) | Method apparatus for high-level programs with general control flow | |
JP4007483B2 (ja) | 高位合成装置および高位合成方法 | |
CN208283943U (zh) | 一种基于fpga的cnn加速优化装置 | |
US20100318345A1 (en) | System and Method Implementing Full-Rate Writes For Simulation Acceleration | |
CN110659114A (zh) | 用于端到端服务质量期限感知的i/o调度的技术 | |
US8943240B1 (en) | Direct memory access and relative addressing | |
US20040123249A1 (en) | Apparatus and method for estimating power consumption | |
CN114879584B (zh) | 一种基于fpga的dma控制器边界对齐方法及其电路 | |
US11782760B2 (en) | Time-multiplexed use of reconfigurable hardware | |
US8861517B2 (en) | Petaflops router | |
CN105549899A (zh) | 用于维持嵌入式存储器块中的存储器访问相干性的系统和方法 | |
CN100365592C (zh) | 基于mcs-51架构的16m字节程序存储器寻址空间扩充方法 | |
CN111625180B (zh) | 数据写入方法及装置、存储介质 | |
CN111770342A (zh) | 一种视频无级缩放方法 | |
US10637780B2 (en) | Multiple datastreams processing by fragment-based timeslicing | |
CN116757150A (zh) | 时钟树构建方法、系统、芯片、电子设备及存储介质 | |
US11308025B1 (en) | State machine block for high-level synthesis | |
CN112463218A (zh) | 指令发射控制方法及电路、数据处理方法及电路 | |
CN117422024B (zh) | 数据位宽转换方法、装置、计算机设备及介质 | |
Pande et al. | Performance optimization for system-on-chip using network-on-chip and data compression |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |