CN116431079A - 数据读取、写入方法及装置、带宽转换装置和电子设备 - Google Patents

数据读取、写入方法及装置、带宽转换装置和电子设备 Download PDF

Info

Publication number
CN116431079A
CN116431079A CN202310486249.7A CN202310486249A CN116431079A CN 116431079 A CN116431079 A CN 116431079A CN 202310486249 A CN202310486249 A CN 202310486249A CN 116431079 A CN116431079 A CN 116431079A
Authority
CN
China
Prior art keywords
data
out storage
structures
memory
input data
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.)
Pending
Application number
CN202310486249.7A
Other languages
English (en)
Inventor
请求不公布姓名
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Biren Intelligent Technology Co Ltd
Original Assignee
Shanghai Biren Intelligent Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shanghai Biren Intelligent Technology Co Ltd filed Critical Shanghai Biren Intelligent Technology Co Ltd
Priority to CN202310486249.7A priority Critical patent/CN116431079A/zh
Publication of CN116431079A publication Critical patent/CN116431079A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0658Controller construction arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

一种数据读取方法及装置、数据写入方法及装置、带宽转换装置、电子设备和存储介质。该数据写入方法包括:响应于接收到输入数据,根据M个先入先出存储结构的将满信号状态,确定是否写入输入数据;响应于确定写入输入数据,根据输入数据的位宽及每个先入先出存储结构的位宽,从M个先入先出存储结构中确定写入输入数据需要占用的先入先出存储结构;将输入数据写入确定占用的先入先出存储结构。该数据写入方法可以根据不同输入数据宽度的数据根据其宽度进行自适应的存储写入操作,达到调节数据流量的目的,位宽转换的颗粒度更细,提升带宽利用率,该方法可移植性强,可以实现不同协议包之间的带宽转换与流量匹配。

Description

数据读取、写入方法及装置、带宽转换装置和电子设备
技术领域
本公开的实施例涉及一种数据读取方法、数据读取装置、数据写入方法、数据写入装置、带宽转换装置、电子设备和非瞬时性计算机可读存储介质。
背景技术
流量控制决定了各种资源(网络缓冲器和连接)的分配,如资源如何被分配给消息、分配的粒度、资源如何被不同的消息共享等。流量控制可以让发送端根据接收端的实际接受能力控制发送的数据量,例如,数据接口的发送方与接收方之间数据流量/带宽可能不匹配,例如数据接口的发送方和接收方的数据传输频率不同,或者数据接口的发送方或接收方的数据位宽不固定,会发生变化等,此时需要进行流量控制完成带宽转换。
发明内容
本公开至少一实施例提供一种数据写入方法,应用于存储器,其中,所述存储器包括M个先入先出存储结构,所述M个先入先出存储结构用于缓存来自第一接口的输入数据并进行数据流量的带宽转换,将经过所述带宽转换后的输出数据发送至第二接口,所述数据写入方法包括:响应于接收到所述输入数据,根据所述M个先入先出存储结构的将满信号状态,确定是否写入所述输入数据;响应于确定写入所述输入数据,根据所述输入数据的位宽及每个先入先出存储结构的位宽,从所述M个先入先出存储结构中确定写入所述输入数据需要占用的先入先出存储结构;将所述输入数据写入所述确定占用的先入先出存储结构,其中,M基于通过所述存储器进行所述带宽转换的所有输入数据及所有输出数据中的位宽最大值确定,每个先入先出存储结构的位宽为所述所有输入数据的位宽及所述所有输出数据的位宽之间的最大公约数,M为正整数且大于1。
例如,在本公开至少一实施例提供的数据写入方法中,响应于接收到所述输入数据,根据所述M个先入先出存储结构的将满信号状态,确定是否写入所述输入数据,包括:响应于所述M个先入先出存储结构中的任一个先入先出存储结构的将满信号有效,确定不写入所述输入数据;响应于所述M个先入先出存储结构的将满信号均无效,确定写入所述输入数据,其中,所述将满信号有效指示对应的先入先出存储结构中已缓存的数据量大于预设将满阈值。
例如,在本公开至少一实施例提供的数据写入方法中,根据所述输入数据的位宽及每个先入先出存储结构的位宽,从所述M个先入先出存储结构中确定写入所述输入数据需要占用的先入先出存储结构,包括:根据所述输入数据的位宽及所述先入先出存储结构的位宽,确定写入所述输入数据需要占用的先入先出存储结构的数量N,其中,N为正整数且小于等于M;从所述M个先入先出存储结构中选择空闲的N个先入先出存储结构作为写入所述输入数据需要占用的先入先出存储结构。
例如,在本公开至少一实施例提供的数据写入方法中,所述M个先入先出存储结构与M个位置编号一一对应,从所述M个先入先出存储结构中选择空闲的N个先入先出存储结构作为写入所述输入数据需要占用的先入先出存储结构,包括:确定本次写入所述输入数据的写入起始位置,其中,所述写入起始位置对应的先入先出存储结构的位置编号和与本次写入相邻的上一次写入的终止位置对应的先入先出存储结构的位置编号直接相邻,且所述写入起始位置对应的先入先出存储结构不属于所述上一次写入时占用的先入先出存储结构,所述M个位置编号首尾相接,第M个位置编号与第1个位置编号直接相邻;从所述写入起始位置开始,选择位置编号连续的N个先入先出存储结构作为写入所述输入数据需要占用的先入先出存储结构。
例如,在本公开至少一实施例提供的数据写入方法中,所述M个位置编号包括0至M-1,所述写入起始位置对应所述M个先入先出存储结构中位置编号为i的先入先出存储结构,与本次写入相邻的上一次写入的写入起始位置对应所述M个先入先出存储结构中位置编号为i’的先入先出存储结构,与本次写入相邻的上一次写入占用的先入先出存储结构的数量为N’,响应于i’+N’小于等于M-1,i等于i’+N’,响应于i’+N’大于M-1,i等于i’+N’对M的取余结果,其中,i、i’、N’均为正数且小于M。例如,在本公开至少一实施例提供的数据写入方法中,将所述输入数据写入所述确定占用的先入先出存储结构,包括:将所述输入数据按照每个先入先出存储结构的位宽平均划分为N份,其中,N为正整数;将所述N份数据按照预定顺序关系分别写入所述确定占用的先入先出存储结构。
例如,在本公开至少一实施例提供的数据写入方法中,所述先入先出存储结构为基于寄存器的先入先出存储结构,所述基于寄存器的先入先出存储结构的深度大于等于2。
例如,在本公开至少一实施例提供的数据写入方法中,所述先入先出存储结构为基于静态随机存储器的先入先出存储结构。
本公开至少一实施例提供一种数据读取方法,应用于存储器,其中,所述存储器包括M个先入先出存储结构,所述M个先入先出存储结构用于缓存来自第一接口的输入数据并进行数据流量的带宽转换,将经过所述带宽转换后的输出数据发送至第二接口,所述数据读取方法包括:根据所述输出数据的位宽及每个先入先出存储结构的位宽,从所述M个先入先出存储结构中确定读取所述输出数据需要占用的先入先出存储结构;从所述确定占用的先入先出存储结构中读取所述输出数据,其中,M基于通过所述存储器进行所述带宽转换的所有输入数据及所有输出数据中的位宽最大值确定,每个先入先出存储结构的位宽为所述所有输入数据的位宽及所述所有输出数据的位宽之间的最大公约数,M为正整数且大于1。
例如,在本公开至少一实施例提供的数据读取方法中,根据所述输出数据的位宽及每个先入先出存储结构的位宽,从所述M个先入先出存储结构中确定读取所述输出数据需要占用的先入先出存储结构,包括:根据所述输出数据的位宽及所述先入先出存储结构的位宽,确定所述输出数据对应的需要读取的先入先出存储结构的预期数量;根据所述M个先入先出存储结构中存储有数据的先入先出存储结构数量和所述预期数量,从所述M个先入先出存储结构中确定读取所述输出数据需要占用的先入先出存储结构。
例如,在本公开至少一实施例提供的数据读取方法中,所述M个先入先出存储结构与M个位置编号一一对应,根据所述M个先入先出存储结构中存储有数据的先入先出存储结构数量和所述预期数量,从所述M个先入先出存储结构中确定读取所述输出数据需要占用的先入先出存储结构,包括:根据所述M个先入先出存储结构中存储有数据的先入先出存储结构的数量和所述预期数量,确定读取所述输出数据需要占用的先入先出存储结构的实际数量;确定本次读取所述输出数据的读取起始位置,其中,所述读取起始位置对应的先入先出存储结构的位置编号和与本次读取相邻的上一次读取的终止位置对应的先入先出存储结构的位置编号直接相邻,且所述读取起始位置对应的先入先出存储结构不属于所述上一次读取时占用的先入先出存储结构,所述M个位置编号首尾相接,第M个位置编号与第1个位置编号直接相邻;从所述读取起始位置开始,选择位置编号连续的所述实际数量个先入先出存储结构作为读取所述输出数据需要占用的先入先出存储结构。
例如,在本公开至少一实施例提供的数据读取方法中,根据所述M个先入先出存储结构中存储有数据的先入先出存储结构的数量和所述预期数量,确定读取所述输出数据需要占用的先入先出存储结构的实际数量,包括:响应于所述M个先入先出存储结构中存储有数据的先入先出存储结构的数量大于等于所述预期数量,确定所述实际数量等于所述预期数量;响应于所述M个先入先出存储结构中存储有数据的先入先出存储结构的数量小于所述预期数量,确定所述实际数量等于所述M个先入先出存储结构中存储有数据的先入先出存储结构的数量。
例如,在本公开至少一实施例提供的数据读取方法中,根据所述M个先入先出存储结构中存储有数据的先入先出存储结构的数量和所述预期数量,确定读取所述输出数据需要占用的先入先出存储结构的实际数量,包括:从所述读取起始位置开始,确定位置编号连续的所述预期数量个先入先出存储结构作为待判断先入先出存储结构;响应于所述待判断先入先出存储结构中均存储有数据,确定所述实际数量等于所述预期数量;响应于所述待判断先入先出存储结构中有至少一个待判断先入先出存储结构里未存储有数据,确定所述实际数量等于所述待判断先入先出存储结构中存储有数据的先入先出存储结构的数量。
例如,在本公开至少一实施例提供的数据读取方法中,从所述确定占用的先入先出存储结构中读取所述输出数据,包括:响应于所述确定占用的先入先出存储结构的数量等于预期数量,读取所述确定占用的先入先出存储结构中的数据,按照预定顺序关系,将从所述确定占用的先入先出存储结构中读取的数据拼接为所述输出数据;响应于所述确定占用的先入先出存储结构的数量小于所述预期数量,读取所述确定占用的先入先出存储结构的数据,按照预定顺序关系,拼接从所述确定占用的先入先出存储结构中读取的数据,并在位宽相差部分填充第一值,以得到所述输出数据,其中,所述位宽相差部分的位宽由所述预期数量和所述确定占用的先入先出存储结构的数量的差值确定。
例如,在本公开至少一实施例提供的数据读取方法中,在从所述确定占用的先入先出存储结构中读取所述输出数据之前,所述数据读取方法还包括:响应于数据读取请求,确定是否读出所述输出数据;从所述确定占用的先入先出存储结构中读取所述输出数据,包括:响应于确定读出所述输出数据,从所述确定占用的先入先出存储结构中读取所述输出数据。
例如,在本公开至少一实施例提供的数据读取方法中,响应于所述数据读取请求指示所述M个先入先出存储结构中的任一个先入先出存储结构中存储有数据,确定读出所述输出数据。
例如,在本公开至少一实施例提供的数据读取方法中,响应于所述数据读取请求指示所述确定占用的先入先出存储结构中有任一个先入先出存储结构中存储有数据,确定读出所述输出数据。
本公开至少一实施例提供一种带宽转换装置,包括存储器和控制器,其中,所述存储器包括M个先入先出存储结构,所述M个先入先出存储结构用于缓存来自第一接口的输入数据并进行数据流量的带宽转换,将经过所述带宽转换后的输出数据发送至第二接口,所述控制器配置为:响应于接收到所述输入数据,根据所述M个先入先出存储结构的将满信号状态,确定是否写入所述输入数据;响应于确定写入所述输入数据,根据所述输入数据的位宽及每个先入先出存储结构的位宽,从所述M个先入先出存储结构中确定写入所述输入数据需要占用的先入先出存储结构;将所述输入数据写入所述确定占用的先入先出存储结构,其中,M基于通过所述存储器进行所述带宽转换的所有输入数据及所有输出数据中的位宽最大值确定,每个先入先出存储结构的位宽为所述所有输入数据的位宽及所述所有输出数据的位宽之间的最大公约数,M为正整数且大于1。
例如,在本公开至少一实施例提供的带宽转换装置中,所述控制器还配置为:根据所述输出数据的位宽及每个先入先出存储结构的位宽,从所述M个先入先出存储结构中确定读取所述输出数据需要占用的先入先出存储结构;从所述确定占用的先入先出存储结构中读取所述输出数据。
本公开至少一实施例提供一种数据写入装置,用于向存储器写入数据,其中,所述存储器包括M个先入先出存储结构,所述M个先入先出存储结构用于缓存来自第一接口的输入数据并进行数据流量的带宽转换,将经过所述带宽转换后的输出数据发送至第二接口,所述数据写入装置包括:第一确定单元,配置为响应于接收到所述输入数据,根据所述M个先入先出存储结构的将满信号状态,确定是否写入所述输入数据;第二确定单元,配置为响应于确定写入所述输入数据,根据所述输入数据的位宽及每个先入先出存储结构的位宽,从所述M个先入先出存储结构中确定写入所述输入数据需要占用的先入先出存储结构;写入单元,配置为将所述输入数据写入所述确定占用的先入先出存储结构,其中,M基于通过所述存储器进行所述带宽转换的所有输入数据及所有输出数据中的位宽最大值确定,每个先入先出存储结构的位宽为所述所有输入数据的位宽及所述所有输出数据的位宽之间的最大公约数,M为正整数且大于1。
本公开至少一实施例提供一种数据读取装置,用于从存储器读取数据,其中,所述存储器包括M个先入先出存储结构,所述M个先入先出存储结构用于缓存来自第一接口的输入数据并进行数据流量的带宽转换,将经过所述带宽转换后的输出数据发送至第二接口,所述数据读取装置包括:第三确定单元,配置为根据所述输出数据的位宽及每个先入先出存储结构的位宽,从所述M个先入先出存储结构中确定读取所述输出数据需要占用的先入先出存储结构;读取单元,配置为从所述确定占用的先入先出存储结构中读取所述输出数据,其中,M基于通过所述存储器进行所述带宽转换的所有输入数据及所有输出数据中的位宽最大值确定,每个先入先出存储结构的位宽为所述所有输入数据的位宽及所述所有输出数据的位宽之间的最大公约数,M为正整数且大于1。
本公开至少一实施例提供一种电子设备,包括:存储器,非瞬时性地存储有计算机可执行指令;处理器,配置为运行所述计算机可执行指令,其中,所述计算机可执行指令被所述处理器运行时实现本公开任一实施例所述的数据写入方法或本公开任一实施例所述的数据读取方法。
本公开至少一实施例提供一种非瞬时性计算机可读存储介质,其中,所述非瞬时性计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令被处理器执行时实现本公开任一实施例所述的数据写入方法或本公开任一实施例所述的数据读取方法。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
图1为本公开至少一实施例提供的一种数据写入方法的示意性流程图;
图2为本公开一实施例提供的存储器的结构示意图;
图3为本公开一实施例提供的数据写入过程示意图
图4为本公开至少一实施例提供的一种数据读取方法的示意性流程图;
图5为本公开至少一实施例提供的数据读取方法中步骤S40的示意性流程图;
图6为本公开一实施例提供的数据读取过程示意图;
图7为本公开至少一实施例提供的带宽转化装置的示意性框图;
图8为本公开至少一实施例提供的一种数据写入装置的示意性框图;
图9为本公开至少一实施例提供的一种数据读取装置的示意性框图;
图10为本公开至少一实施例提供的一种电子设备的示意性框图;
图11为本公开至少一实施例提供的一种非瞬时性计算机可读存储介质的示意图。
具体实施方式
为了使得本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
为了保持本公开实施例的以下说明清楚且简明,本公开省略了部分已知功能和已知部件的详细说明。
随着高速接口传输带宽的不断升级,为提高接口传输的带宽利用率,如PCIe-Gen6(peripheral component interconnect express-generation 6,第六代高速串行计算机扩展总线标准),CXL(Compute Express Link,高速缓存一致性互连协议)等协议开始使用Flit(flow control unit,流量控制单元)作为传输的基本单位,Flit为固定大小、固定占用传输时间的一种传输包格式,单位传输量校验码占用比例更低,数据对齐更紧凑。例如,当一个消息被注入网络时,它首先被分割成数据包(简称为包),然后被分割成固定长度的Flits发送。
在高速数据接口中,通常以TLP(Transaction LayerPacket,事务层数据包)为单位写入数据,以Flit为单位读出数据。TLP包括包头和数据负载两部分,一个TLP的最小长度为3DW(DW为双字,Double Word,长度为4字节),最大长度为4DW的头部(Header)+1024DW的数据负载,也即TLP的位宽(数据包长度)在3DW至1028DW之间变化。由此,每次写入高速数据接口的TLP数据包的长度是变化的。
但是,高速数据接口通常每次读出数据的长度是固定的,例如,以Flit为单位读出数据,因此,高速数据接口存在不定长度输入与定长输出的带宽匹配问题。
对于数据位宽或数据长度不固定的情况,目前采用数据位宽转换电路或固定位置组包的方式解决。
对于数据位宽转换电路,一种数据位宽转换电路以静态随机存储器为基础,利用数据控制信号实现不同写入位宽的匹配,通过改变时钟频率实现接口位宽的整数倍转换,或者积累多个时钟周期并结合数据控制信号实现数据接口位宽的整数倍转换。但是,这种方式对于非整数倍的位宽变化难以实现,且读写延时较大,需要通过内部计数器计数达到阈值才能输出对应宽度数据。
另一种数据位宽转换电路使用一个先入先出存储结构(First in First out,简称FIFO),在数据位宽变化时,在数据写入侧将数据宽度进行补0操作,且在数据读出侧,需要将这部分补0的数据进行剔除。这种方式会造成先入先出存储结构内部存储的数据之间存在“气泡”(填充的0),即存储空间并非完全被有效数据填满;并且对于数据读出侧的数据位宽是变化的场景,例如在处理AXI总线协议的不同通道数据请求,需要将五种不同宽度的数据信号转化为统一位宽的数据包进行传输的场景时,这种电路结构无法满足需求。
对于固定位置组包方式,其根据上游数据类型结合一定组合逻辑判断最终组包格式,将某类型的数据放入Flit中的固定位置。但这种方式在数据长度变化大的情况下,组包逻辑复杂,且组包的颗粒度较大,在数据长度变化多的情况下不可避免存在Nop包,也即在Flit中存在多处0,带宽利用率被进一步压缩且较低。
本公开至少一实施例提供一种数据写入方法、数据写入装置、数据读取方法、数据读取装置、带宽转换装置、电子设备和非瞬时性计算机可读存储介质。该数据写入方法包括:响应于接收到输入数据,根据M个先入先出存储结构的将满信号状态,确定是否写入输入数据;响应于确定写入输入数据,根据输入数据的位宽及每个先入先出存储结构的位宽,从M个先入先出存储结构中确定写入输入数据需要占用的先入先出存储结构;将输入数据写入确定占用的先入先出存储结构。
在本公开至少一实施例提供的数据写入方法中,对不同数据位宽的输入数据以及输出数据寻找位宽的最大公约数,以该最大公约数作为单个先入先出存储结构的读写位宽,从而可以根据不同输入数据宽度的数据根据其宽度进行自适应的存储写入操作,达到调节数据流量的目的,且可进行相对于输入数据位宽的非整数倍带宽转换,位宽转换的颗粒度更细,在上游数据宽度大于下游数据流量时不存在流量浪费,提升带宽利用率;该数据写入方法对于上游数据类型不敏感,所有的输入数据位宽均可采用相同的基本单元(单个先入先出存储结构)进行带宽转换,可移植性强,能够方便的应用在高速接口与NOC(Network on Chip,片上网络)之间的“桥”模块,实现不同协议包之间的带宽转换与流量匹配。
下面结合附图对本公开的实施例进行详细说明,但是本公开并不限于这些具体的实施例。
图1为本公开至少一实施例提供的一种数据写入方法的示意性流程图。
例如,该数据写入方法用于存储器。例如,该存储器用于数据中转,实现数据流量的带宽转换,也即可以将输入数据以不同的位宽或频率输出。
例如,该存储器包括M个先入先出存储结构(简称FIFO),M个先入先出存储结构用于缓存来自第一接口的输入数据并进行数据流量的带宽转换,将经过带宽转换后的输出数据发送至第二接口。例如,第一接口的输入数据为来自高速传输接口上游的输入数据,经过带宽转换后,输出数据的位宽根据作为接收方的第二接口规定的带宽自适应控制流量而被转换,并发送至第二接口。
例如,M基于通过存储器进行带宽转换的所有输入数据及所有输出数据中的位宽最大值确定,每个先入先出存储结构的位宽为所有输入数据的位宽及所有输出数据的位宽之间的最大公约数,M为正整数且大于1。
例如,预先获取需要利用该存储器进行带宽转换的所有输入数据可能的位宽以及所有输出数据可能的位宽,寻找所有输入数据的位宽及所有输出数据的位宽之间的最大公约数记为Dwidth_Max,将该最大公约数Dwidth_Max作为单个先入先出存储结构的位宽进行读写。
从所有输入数据可能的位宽以及所有输出数据可能的位宽中找到位宽最大值,例如,位宽最大值表示为MAX{W_in,W_out},W_in为所有输入数据可能的位宽,W_out为所有输出数据可能的位宽,MAX表示最大值函数;之后,将该位宽最大值除以Dwidth_Max得到存储器中先入先出存储结构的数量M,即需要例化的FIFO数量。
例如,在一个示例中,高速数据接口以TLP为单位写入数据,以Flit为单位输出数据时,所有输入数据可能的位宽为3DW至1028DW,所有输出数据可能的位宽为128DW,则所有输入数据的位宽及所有输出数据的位宽之间的最大公约数Dwidth_Max为1DW,也即4个字节,设置单个先入先出存储结构的读写位宽为4字节。并且,所有输入数据可能的位宽以及所有输出数据可能的位宽中的位宽最大值为1028DW,则存储器中先入先出存储结构的数量M为1028。
例如,先入先出存储结构的读写位宽为最大公约数Dwidth_Max,深度可根据需求确定。例如,先入先出存储结构的深度和数据量有关,比如存在写入的速度快,读取的速度慢的场景,就可以将深度设置大一些以预留余量,避免所有FIFO都写入满了还没有读取,需要中断写入降低处理效率。
例如,先入先出存储结构可以是基于寄存器的先入先出存储结构(REG FIFO)。基于寄存器的先入先出存储结构的读写速率较高,控制逻辑简单,读写判断的逻辑级数数量小于log2(M),控制复杂度和难度较低,提升处理效率;并且,使用REG FIFO不需要额外的时序逻辑,数据传输的延时为REG_FIFO的读写固有延时,即数据通路在此结构中的延时为2个UI(Unit Interval,比特数据的持续时间)。
例如,基于寄存器的先入先出存储结构的深度大于等于2,也即单个FIFO至少支持写入2个位宽为Dwidth_Max的数据,保证每个FIFO的将满信号水线至少大于1,数据在写入过程中不会溢出导致数据覆盖或丢失。
当然,先入先出存储结构也可以是基于静态随机存储器的先入先出存储结构,即SRAM_FIFO。本公开对先入先出存储结构的具体结构不作限制,能实现先进的数据先出,后进的数据后出功能即可。
图2为本公开一实施例提供的存储器的结构示意图。
如图2所示,每一个方框表示一个FIFO基本单元,其读写位宽为Dwidth_Max,能够存储一个位宽为Dwidth_Max的数据。例如,对于基于寄存器的先入先出存储结构,图2中的FIFO基本单元可以是一个位宽为Dwidth_Max的寄存器。
图2中位于同一列的多个FIFO基本单元组成一个先入先出存储结构,其深度由“Depth”表示,Depth=0表示第一层,Depth=1表示第二层,Depth=2表示第三层。例如,在图2中示出了深度为3的先入先出存储结构,当然,根据实际需要,先入先出存储结构的深度可以更大或更小。
在图2所示的存储器中共有M列,每列表示一个先入先出存储结构(FIFO),因此在图2示出的存储器结构中,共提供了M个先入先出存储结构。
例如,根据先入先出存储结构的读写要求,以FIFO_0为例,假设FIFO_0为空,当第一个位宽为Dwidth_Max的数据写入FIFO_0时,先写入图2中标记为“FIFO_0,Depth_0”的FIFO基本单元,当第二个位宽为Dwidth_Max的数据写入FIFO_0时,若标记为“FIFO_0,Depth_0”的FIFO基本单元中的数据还未读出,则写入图2中标记为“FIFO_0,Depth_1”的FIFO基本单元。在读取时,优先读取图2中标记为“FIFO_0,Depth_0”的FIFO基本单元中的数据,若图2中标记为“FIFO_0,Depth_0”的FIFO基本单元中的数据已被读出,则读取图2中标记为“FIFO_0,Depth_1”的FIFO基本单元中的数据,由此实现“先入先出”功能。
图2所示为存储器的一种示意性结构图,但不构成对存储器中M个FIFO排列结构关系的限制,实践中可以根据需要设置M个FIFO构成的存储阵列的具体结构。
在本公开至少一实施例中,定义了每次读写操作的基本单元为FIFO基本单元,其读写位宽为Dwidth_Max,该位宽不需要区分类型为数据头类型或是数据负载类型,从而也不需要设置复杂的组包逻辑,降低读写控制难度,减少读写延时,提高处理效率。
例如,如图1所示,本公开实施例提供的数据写入方法包括步骤S10至S30。
在步骤S10,响应于接收到输入数据,根据M个先入先出存储结构的将满信号状态,确定是否写入输入数据。
例如,步骤S10可以包括:响应于M个先入先出存储结构中的任一个先入先出存储结构的将满信号有效,确定不写入输入数据;响应于M个先入先出存储结构的将满信号均无效,确定写入输入数据。
这里,将满信号(afull)有效指示对应的先入先出存储结构中已缓存的数据量大于预设将满阈值,例如,当FIFO内包含的数据量大于等于预设将满阈值时,将满信号有效(例如afull为1),将满信号传输给上游模块,通知上游模块停止发送数据,防止FIFO发生溢出。将满信号无效指示对应的先入先出存储结构中已缓存的数据量小于预设将满阈值,还可以继续向先入先出存储结构中写入数据。
例如,由于M基于通过存储器进行带宽转换的所有输入数据及所有输出数据中的位宽最大值确定,因此单次写入一个输入数据最多写入M个FIFO基本单元,例如,写入图2所示存储器结构中的一行FIFO基本单元。因此,各个先入先出存储结构之间最多相差一个存储深度,例如对于图2所示的存储器结构,各个先入先出存储结构之间最多相差一层FIFO基本单元。
预设将满阈值可以根据需要设置。例如,以图2所示的存储器结构为例,每个FIFO的深度为3,可以设置当一个先入先出存储结构中存储至深度为2的FIFO基本单元时,认为该FIFO将满,此时,该FIFO对应的将满信号有效,其它M-1个FIFO的已存储数据的深度为2或1。由于预留了一层深度为3的FIFO基本单元,这种情况下可以尽可能避免由于FIFO将满信号有效引发的写入中断。当然,也可以设置当一个先入先出存储结构中存储至深度为3的FIFO基本单元时,该FIFO对应的将满信号有效,本公开对此不作具体限制。
例如,当存在一个先入先出存储结构的将满信号有效时,其余将满信号无效的先入先出存储结构一定差一个存储深度触发将满信号有效。因此在检测到有先入先出存储结构的将满信号有效时立即停止写入,既能够保证写入的数据不会溢出导致丢失,也不会造成先入先出存储结构存储空间的浪费。当所有的先入先出存储结构的将满信号都为无效时,判定此次可以写入输入数据,否则本次不能写入输入数据。
在该实施例中,利用所有FIFO的将满信号进行组合逻辑运算判断,确定是否可以写入,当FIFO数量为M时,读写判断的逻辑级数数量小于log2(M),大幅简化控制逻辑,降低控制复杂度和难度,提升处理效率。
在步骤S20,响应于确定写入输入数据,根据输入数据的位宽及每个先入先出存储结构的位宽,从M个先入先出存储结构中确定写入输入数据需要占用的先入先出存储结构。
若判断可以写入输入数据,则根据输入数据的位宽及每个先入先出存储结构的位宽,确定写入输入数据需要占用的先入先出存储结构的数量和位置。
例如,步骤S20可以包括:根据输入数据的位宽及先入先出存储结构的位宽,确定写入输入数据需要占用的先入先出存储结构的数量N,这里,N为正整数且小于等于M;从M个先入先出存储结构中选择空闲的N个先入先出存储结构作为写入输入数据需要占用的先入先出存储结构。
例如,在确定写入输入数据需要占用的先入先出存储结构的数量时,假设输入数据的位宽表示为Dwidth_inx,由于每个先入先出存储结构的读写位宽都为Dwidth_Max,且能够被输入数据的位宽Dwidth_inx整除,因此将输入数据的位宽Dwidth_inx除以FIFO的位宽Dwidth_Max得到的N即为本次写入输入数据需要占用的先入先出存储结构的数量。
例如,在确定需要占用的先入先出存储结构的数量N后,可以从M个先入先出存储结构中选择空闲的N个先入先出存储结构作为写入输入数据需要占用的先入先出存储结构,这里,空闲的先入先出存储结构可以是将满信号无效的FIFO,也即还有存储空间用于存储输入数据的FIFO。
例如,在一些实施例中,可以采用连续的“背靠背”方式将数据写入FIFO,各个FIFO之间不穿插“气泡”,也即各个FIFO之间不存在NOP包,每个输入数据在写入时能充分占用存储器中的先入先出存储结构,所有写入的输入数据在存储器中首尾相连,减少存储空间浪费。
例如,可以对存储器中的M个先入先出存储结构进行位置编号以表示其位置信息,例如第几个先入先出存储结构,M个先入先出存储结构与M个位置编号一一对应。
例如,每个位置编号用于指示对应的先入先出存储结构在存储器中的位置,例如可以将M个先入先出存储结构依次编号为0至M-1。例如,以图2所示的存储器结构为例,FIFO_0的位置编号为0,FIFO_1的位置编号为1,...,FIFO_M的编号为M-1。例如,M个位置编号可以是连续的正整数,但其对应的先入先出存储结构并不需要在物理位置上相邻,例如,也可以FIFO_0的位置编号为0,FIFO_1的位置编号为3,FIFO_2的位置编号为1等,本公开对此不作具体限制。
需要说明的是,位置编号也可以采用其它表示形式,各个位置编号能唯一指示相应的先入先出存储结构即可。
例如,从M个先入先出存储结构中选择空闲的N个先入先出存储结构作为写入输入数据需要占用的先入先出存储结构,可以包括:确定本次写入输入数据的写入起始位置,其中,写入起始位置对应的先入先出存储结构的位置编号和与本次写入相邻的上一次写入的终止位置对应的先入先出存储结构的位置编号直接相邻,且写入起始位置对应的先入先出存储结构不属于上一次写入时占用的先入先出存储结构;从写入起始位置开始,选择位置编号连续的N个先入先出存储结构作为写入输入数据需要占用的先入先出存储结构。
例如,在一些实施例中,M个位置编号包括0至M-1,写入起始位置对应M个先入先出存储结构中位置编号为i的先入先出存储结构,与本次写入相邻的上一次写入的终止位置为M个先入先出存储结构中位置编号为j的先入先出存储结构。若j等于M-1,i为0,也即本次写入输入数据时重新从第一个位置的FIFO开始写入;若j不等于M-1,i=j+1,也即本次写入输入数据时从与上一次写入输入数据时的最后一个FIFO相邻的下一个FIFO开始写入。这里,i和j为整数且均小于M。也就是说,在本公开中,M个位置编号首尾相接、循环连续,“直接相邻”包括两个位置编号相差1的情况,并且位置编号M-1(第M个位置编号)与位置编号0(第1个位置编号)也属于直接相邻。
例如,在一些实施例中,M个位置编号包括0至M-1,写入起始位置对应M个先入先出存储结构中位置编号为i的先入先出存储结构,与本次写入相邻的上一次写入的写入起始位置对应M个先入先出存储结构中位置编号为i’的先入先出存储结构,与本次写入相邻的上一次写入占用的先入先出存储结构的数量为N’,若i’+N’小于等于M-1,i等于i’+N’,若i’+N’大于M-1,i等于i’+N’对M的取余结果,这里,i、i’、N’均为正数且小于M。
为实现连续的“背靠背”方式写入,选择位置编号连续的N个先入先出存储结构作为写入输入数据需要占用的先入先出存储结构,并且,在每次写入输入数据时,需要标记本次写入的写入起始位置WStartPoint_x,在每次写入输入数据过程中,不断更新WStartPoint_x。
例如,写入起始位置WStartPoint_x用于指示当前次写入输入数据时的第一个先入先出存储结构的位置编号。例如,M个先入先出存储结构依次编号为0至M-1,写入起始位置WStartPoint_x的取值范围为[0:M-1],写入起始位置与每个先入先出存储结构的位置相对应。写入起始位置WStartPoint_x在初始化时设置为0,表示在初始化后的第一次写入输入数据时需要从第一个位置的FIFO开始存储第一个输入数据。
例如,在确定写入第一个输入数据需要占用的先入先出存储结构的数量N后,将WStartPoint_x更新为WStartPoint_x加上本次写入输入数据需要占用的先入先出存储结构的数量N之和,将其作为下一次写入输入数据时的写入起始位置,也即此时WStartPoint_x更新为N。
例如,在每次写入输入数据时,首先确定上一次写入后更新的写入起始位置WStartPoint_x,从写入起始位置WStartPoint_x开始,选择位置编号连续的N(本次写入输入数据需要占用的先入先出存储结构的数量)个先入先出存储结构作为本次写入输入数据需要占用的先入先出存储结构,例如,选择位置编号为WStartPoint_x(此时为i)、位置编号为WStartPoint_x+1、...、位置编号为WStartPoint_x+N-1作为本次写入输入数据需要占用的先入先出存储结构。
由于M个位置编号首尾相接、循环连续,“位置编号连续”包括位置编号M-1与位置编号0连续。例如,若WStartPoint_x+N-1大于M-1,则选择位置编号为WStartPoint_x、位置编号为WStartPoint_x+1、...、位置编号为0、...、位置编号为(WStartPoint_x+N)%M-1的FIFO作为本次写入输入数据需要占用的先入先出存储结构。
之后,更新写入起始位置WStartPoint_x,计算WStartPoint_x加上本次写入输入数据需要占用的先入先出存储结构的数量N的加和结果,依据该加和结果更新写入起始位置。例如,当WStartPoint_x加上N小于等于M-1时,则写入起始位置WStartPoint_x更新为i+N;当WStartPoint_x加上N大于M-1时,写入起始位置WStartPoint_x更新为i+N对M取余的取余结果。
例如,当前写入的第一个输入数据占用位置编号为0~N1的FIFO,N1为小于M的正整数,若下一个写入的输入数据占用N2个FIFO时,需要优先使用写入第一个输入数据之后剩余的M-N1个FIFO,当N2>M-N1时,多余的数据需要复用第一个写入的输入数据占用的FIFO。
例如,以图2为例,第二个写入的输入数据占用的N2个FIFO包括位置编号为N1至位置编号为M-1的FIFO,以及位置编号为0至位置编号为(N1+N2)%M-1的FIFO,“%”表示取余计算,具体的,例如占用位置编号为N1至位置编号为M-1的FIFO中Depth=0的FIFO基本单元,以及占用位置编号为0至位置编号为(N1+N2)%M-1的FIFO中Depth=1的FIFO基本单元。
由此,可以实现下一次写入输入数据时的写入起始位置与本次写入的写入终止位置(当前次写入输入数据时的最后一个先入先出存储结构的位置编号)相邻,每个输入数据在输入时能充分占用存储器中的FIFO,达到存储数据紧密排列的效果,数据紧密排布并存储在存储器中,每个输入数据之间首尾相连,存储器中无“气泡”,不存在存储空间浪费,最大化利用带宽。
在步骤S30,将输入数据写入确定占用的先入先出存储结构。
例如,步骤S30可以包括:将输入数据按照每个先入先出存储结构的位宽平均划分为N份,其中,N为正整数;将N份数据按照预定顺序关系分别写入确定占用的先入先出存储结构。
例如,将输入数据按照宽度Dwidth_Max平均分成N份,例如,将输入数据的第0位至第Dwidth_Max-1位作为一份数据,输入数据的第Dwidth_Max位至第2*Dwidth_Max-1位作为一份数据,以此类推,得到N份数据。
之后,将N份数据按照预定顺序关系分别写入通过步骤S20得到的确定占用的N个先入先出存储结构,完成一次输入数据的写入。例如,预定顺序关系可以预先规定好,如低位数据写入位置编号小的先入先出存储结构,高位数据写入位置编号大的先入先出存储结构,或者,低位数据写入位置编号大的先入先出存储结构,高位数据写入位置编号小的先入先出存储结构,预定顺序关系可以根据实际需要进行设置,本公开对此不作具体限制。
例如,以图2所示的存储器为例,若输入数据为第一个写入存储器的输入数据,其写入起始位置对应位置编号为0的先入先出存储结构FIFO_0,将输入数据按照FIFO的读写位宽Dwidth_Max平均分成N份后,输入数据的第0位至第Dwidth_Max-1位作为第一份数据写入图2中标记为“FIFO_0,Depth_0”的FIFO基本单元,输入数据的第Dwidth_Max位至第2*Dwidth_Max-1位作为第二份数据写入图2中标记为“FIFO_1,Depth_0”的FIFO基本单元,输入数据的第2*Dwidth_Max位至第3*Dwidth_Max-1位作为第三份数据写入图2中标记为“FIFO_2,Depth_0”的FIFO基本单元,以此类推,直到将第N份数据写入“FIFO_N-1,Depth_0”的FIFO基本单元,完成一轮输入数据的写入。
图3为本公开一实施例提供的数据写入过程示意图。
图3示出的是向图2所示的存储器进行写入时的过程,关于图3中存储器的结构可以参考图2的相关描述,这里不再赘述。
下面结合图3,具体说明本公开至少一实施例提供的数据写入方法的执行过程。
例如,对于第一个写入的输入数据,其对应的写入起始位置WStartPoint_x为0,也即对应位置编号为0的FIFO_0。根据输入数据的位宽及先入先出存储结构的位宽Dwidth_Max计算得到第一个写入的输入数据需要占用4个FIFO。如图3所示,选择位置编号连续的4个先入先出存储结构作为写入第一个输入数据需要占用的先入先出存储结构,例如,选择位置编号为0、1、2、3的先入先出存储结构(图3中的FIFO_0、FIFO_1、FIFO_2、FIFO_3)作为写入第一个输入数据需要占用的先入先出存储结构。之后,将输入数据分成4份,按照预定顺序关系写入FIFO_0、FIFO_1、FIFO_2、FIFO_3中Depth=0的FIFO基本单元中。并且,更新写入起始位置WStartPoint_x=0+4=4,以作为写入第二个输入数据时的写入起始位置。
之后,写入第二个输入数据,其对应的写入起始位置WStartPoint_x为4,根据输入数据的位宽及先入先出存储结构的位宽Dwidth_Max计算得到第二个写入的输入数据需要占用M-2个FIFO。如图3所示,选择位置编号连续的M-2个先入先出存储结构作为写入第二个输入数据需要占用的先入先出存储结构。由于M-2+4=M+2>M-1,多余的数据需要复用第一个写入的输入数据占用的FIFO,如图3所示,第二个写入的输入数据占用的M-2个FIFO包括位置编号为4至位置编号为M-1的FIFO,以及位置编号为0至位置编号为1的FIFO,具体的,占用位置编号为4至位置编号为M-1的FIFO中Depth=0的FIFO基本单元,以及占用位置编号为0至位置编号为1的FIFO中Depth=1的FIFO基本单元。之后,将输入数据分成M-2份,按照预定顺序关系写入图3中由“写入第二个输入数据占用的FIFO”标识的FIFO_4、FIFO_5、...、FIFO_M-1、FIFO_0、FIFO_1中的FIFO基本单元里。并且,更新写入起始位置WStartPoint_x=(M-2+4)%M,以作为写入第三个输入数据时的写入起始位置。
后续写入第三个、第四个输入数据的过程与前述过程相似,这里不再赘述。
在本公开至少一实施例提供的数据写入方法中,可以根据输入数据的宽度进行自适应的存储写入操作,达到调节流量的目的;可以将不同宽度的输入数据进行归一化操作,按照统一的数据位宽(FIFO的读写位宽Dwidth_Max)进行切分,并将不同位宽的数据进行紧密排布传输,减少存储空间的浪费,最大化利用带宽;位宽转换的颗粒度更细,在上游数据宽度大于下游数据流量时不存在流量浪费,带宽利用率高,例如处理读写数据位宽为512bits的AXI4协议,在带宽上限为512Gb/s的链路中传输时,AW、AR、W、R、B五个通道请求均匀分布的情况下,带宽利用率由52.5%提升至87.5%;此外,进行写入操作时,仅需要对能否写入进行判断以及写入起始点的计算,其为不消耗时钟周期的组合逻辑运算,该数据写入方法不需要额外的时序逻辑,通路延迟低,数据传输的延时为FIFO的读写固有延时,例如数据通路在此结构中的延时为2个UI。
与上述数据写入方法相对应,本公开至少一实施例还提供一种数据读取方法。
例如,该数据读取方法用于存储器。例如,该存储器用于数据中转,实现数据流量的带宽转换,也即可以将输入数据以不同的位宽或频率输出。
例如,该存储器包括M个先入先出存储结构,M个先入先出存储结构用于缓存来自第一接口的输入数据并进行数据流量的带宽转换,将经过带宽转换后的输出数据发送至第二接口。例如,第一接口的输入数据为来自高速传输接口上游的输入数据,经过带宽转换后,输出数据的位宽根据作为接收方的第二接口规定的带宽自适应控制流量而被转换,并发送至第二接口。
例如,M基于通过存储器进行带宽转换的所有输入数据及所有输出数据中的位宽最大值确定,每个先入先出存储结构的位宽为所有输入数据的位宽及所有输出数据的位宽之间的最大公约数,M为正整数且大于1。
关于存储器的结构可以参考上述数据写入方法中的相关介绍,重复之处不再赘述。
图4为本公开至少一实施例提供的数据读取方法的示意性流程图。
例如,如图4所示,本公开实施例提供的数据读取方法包括步骤S40至S50。
在步骤S40,根据输出数据的位宽及每个先入先出存储结构的位宽,从M个先入先出存储结构中确定读取输出数据需要占用的先入先出存储结构。
与数据写入不同,数据写入时输入数据的位宽是输入数据本身的属性,根据输入数据的类型有所不同,例如TLP包的位宽是变化的。而数据读出时的输出数据位宽可以依据配置设定从而实现动态调控流量的效果。单次读出的输出数据的位宽不能超过M*Dwidth_Max,并且需要设置为Dwidth_Max的整数倍。
例如,输出数据的位宽可以是固定的,例如输出数据以Flit为单位输出;或者,输出数据的位宽可以是动态可调整的,根据数据流量等的变化而改变,本公开对此不作具体限制。
例如,确定读取输出数据需要占用的先入先出存储结构包括确定需要占用的先入先出存储结构的数量和位置。
图5为本公开至少一实施例提供的数据读取方法中步骤S40的示意性流程图。
如图5所示,步骤S40可以包括步骤S401和步骤S402。
在步骤S401,根据输出数据的位宽及先入先出存储结构的位宽,确定输出数据对应的需要读取的先入先出存储结构的预期数量。
例如,预期数量为根据输出数据的位宽确定的期望读取的先入先出存储结构的数量,例如,预期数量为输出数据的位宽Dwidth_outx除以先入先出存储结构的位宽Dwidth_Max得到的计算结果Dwidth_outx/Dwidth_Max,“/”表示除法。
在步骤S402,根据M个先入先出存储结构中存储有数据的先入先出存储结构数量和预期数量,从M个先入先出存储结构中确定读取输出数据需要占用的先入先出存储结构。
例如,M个先入先出存储结构与M个位置编号一一对应,关于位置编号的概念可以参考上述数据写入方法中的相关描述。
例如,步骤S402可以包括:根据M个先入先出存储结构中存储有数据的先入先出存储结构的数量和预期数量,确定读取输出数据需要占用的先入先出存储结构的实际数量;确定本次读取输出数据的读取起始位置,其中,读取起始位置对应的先入先出存储结构的位置编号和与本次读取相邻的上一次读取的终止位置对应的先入先出存储结构的位置编号直接相邻,且读取起始位置对应的先入先出存储结构不属于上一次读取时占用的先入先出存储结构;从读取起始位置开始,选择位置编号连续的实际数量个先入先出存储结构作为读取输出数据需要占用的先入先出存储结构。
由于写入的输入数据位宽是变化的并且大多数时间与读出的输出数据的位宽不同,因此在读出输出数据时无法保证输出数据的实际宽度为设定的宽度,也即当前存储器中实际能够读取的FIFO数量与预期数量可能不同。例如,在一些实施例中,预期数量可能大于存储器中实际可能能够读取的FIFO数量(即实际数量),此时实际读取的是实际数量个FIFO,而非预期数量个FIFO。
例如,在一些实施例中,根据M个先入先出存储结构中存储有数据的先入先出存储结构的数量和预期数量,确定读取输出数据需要占用的先入先出存储结构的实际数量,可以包括:响应于M个先入先出存储结构中存储有数据的先入先出存储结构的数量大于等于预期数量,确定实际数量等于预期数量;响应于M个先入先出存储结构中存储有数据的先入先出存储结构的数量小于预期数量,确定实际数量等于M个先入先出存储结构中存储有数据的先入先出存储结构的数量。
例如,在该实施例中,统计所有FIFO中空信号无效的FIFO数量,当空信号无效的FIFO数量(非空FIFO数量)大于等于预期数量时,确定实际要读取的FIFO数量(实际数量)等于预期数量;若空信号无效的FIFO数量小于预期数量时,确定实际要读取的FIFO数量(实际数量)等于空信号无效的FIFO数量。
例如,在另一些实施例中,根据M个先入先出存储结构中存储有数据的先入先出存储结构的数量和预期数量,确定读取输出数据需要占用的先入先出存储结构的实际数量,可以包括:从读取起始位置开始,确定位置编号连续的预期数量个先入先出存储结构作为待判断先入先出存储结构;响应于待判断先入先出存储结构中均存储有数据,确定实际数量等于预期数量;响应于待判断先入先出存储结构中有至少一个待判断先入先出存储结构里未存储有数据,确定实际数量等于待判断先入先出存储结构中存储有数据的先入先出存储结构的数量。
例如,读取起始位置RStartpoint_x用于指示当前次读取输出数据时的第一个先入先出存储结构的位置编号。例如,M个先入先出存储结构依次编号为0至M-1,读取起始位置RStartpoint_x的取值范围为[0:M-1],读取起始位置与每个先入先出存储结构的位置相对应。读取起始位置RStartpoint_x在初始化时设置为0,表示在初始化后的第一次读取输出数据时需要从第一个位置的FIFO开始读取第一个输出数据。
例如,待判断先入先出存储结构为位置编号RStartpoint_x至位置编号为RStartpoint_x+G的FIFO,G为本次读取输出数据的预期数量。若RStartpoint_x~RStartpoint+G位置的FIFO的空信号全部无效,说明这部分FIFO均有数据可以读取,则预期数量等于实际数量;若RStartpoint_x~RStartpoint+G位置的FIFO的空信号只有部分无效,这表示这G个FIFO中只有部分是空的,其余部分还有数据供读取,此时实际数量等于G个待判断先入先出存储结构中非空FIFO的数量。
与数据写入相对应,数据读取过程采用连续的“背靠背”读取方式从存储器中读取数据。
例如,可以对存储器中的M个先入先出存储结构进行位置编号以表示其位置信息,例如第几个先入先出存储结构,M个先入先出存储结构与M个位置编号一一对应。
例如,在一些实施例中,M个位置编号包括0至M-1,读取起始位置对应M个先入先出存储结构中位置编号为a的先入先出存储结构,与本次读取相邻的上一次读取的终止位置为M个先入先出存储结构中位置编号为b的先入先出存储结构。若b等于M-1,a为0,也即本次读取输出数据时重新从第一个位置的FIFO开始读取;若b不等于M-1,a=b+1,也即本次读取输出数据时从与上一次读取输出数据时的最后一个FIFO相邻的下一个FIFO开始读取。这里,a和b为整数且均小于M。也就是说,与数据写入相似,在本公开中,M个位置编号首尾相接、循环连续,“直接相邻”包括两个位置编号相差1的情况,并且位置编号M-1(第M个位置编号)与位置编号0(第1个位置编号)也属于直接相邻。
例如,在一些实施例中,M个位置编号包括0至M-1,读取起始位置对应M个先入先出存储结构中位置编号为a的先入先出存储结构,与本次读取相邻的上一次读取的读取起始位置对应M个先入先出存储结构中位置编号为a’的先入先出存储结构,与本次读取相邻的上一次读取占用的先入先出存储结构的数量为H’,若a’+H’小于等于M-1,a等于i’+H’,若a’+H’大于M-1,a等于a’+H’对M的取余结果,这里,a、a’、H’均为正数且小于M。
为实现连续的“背靠背”方式读取,选择位置编号连续的实际数量个先入先出存储结构作为读取输出数据需要占用的先入先出存储结构,并且,在每次读取输出数据时,需要标记本次读取的读取起始位置RStartPoint_x,在每次读取输出数据过程中,不断更新RStartPoint_x。
例如,如前所示,读取起始位置RStartPoint_x在初始化时设置为0,在第一次读取输出数据后,将RStartPoint_x更新为RStartPoint_x加上本次读取输出数据需要占用的先入先出存储结构的数量H(实际数量)之和,将其作为下一次读取输出数据时的读取起始位置,也即此时RStartPoint_x更新为H。
例如,在每次读取输出数据时,首先确定上一次读取后更新的读取起始位置,从读取起始位置开始,选择位置编号连续的H个先入先出存储结构作为读取输出数据需要占用的先入先出存储结构,例如,选择位置编号为RStartPoint_x(此时为a)、位置编号为RStartPoint_x+1、...、位置编号为RStartPoint_x+H-1作为本次读取输出数据需要占用的先入先出存储结构。
由于M个位置编号首尾相接、循环连续,“位置编号连续”包括位置编号M-1与位置编号0连续。例如,若WStartPoint_x+H-1大于M-1,则选择位置编号为RStartPoint_x、位置编号为RStartPoint_x+1、...、位置编号为0、...、位置编号为(RStartPoint_x+H)%M-1的FIFO作为本次读取输出数据需要占用的先入先出存储结构。
之后,更新读取起始位置RStartPoint_x,计算RStartPoint_x加上本次读取输出数据需要占用的先入先出存储结构的数量H(即实际数量)的加和结果,依据该加和结果更新读取起始位置RStartPoint_x。例如,当读取起始位置RStartPoint_x加上H小于等于M-1时,则读取起始位置RStartPoint_x更新为a+H;当RStartPoint_x加上H大于M-1时,读取起始位置RStartPoint_x更新为a+H对M取余的取余结果。
由此,可以实现下一次读取输出数据时的读取起始位置与本次读取的读取终止位置(当前次读取输入数据时的最后一个先入先出存储结构的位置编号)相邻,保证每次读取操作是紧密且中间无“气泡”,最大化利用带宽。
在步骤S50,从确定占用的先入先出存储结构中读取输出数据。
由于写入的输入数据位宽是变化的并且大多数时间与读出的输出数据位宽不同,因此在读取数据时无法保证读出的输出数据的实际宽度为设定的宽度,也即预期数量和实际数量很可能不同。
根据预期数量和实际数量之间的关系,读取时分为两种情况。
例如,在第一种场景下,响应于确定占用的先入先出存储结构的数量等于预期数量,也即实际数量等于预期数量,读取确定占用的先入先出存储结构中的数据,按照预定顺序关系,将从确定占用的先入先出存储结构中读取的数据拼接为输出数据。
例如,若实际数量等于预期数量,读取确定占用的先入先出存储结构中的数据,按照写入时确定的预定顺序关系进行拼接,得到输出数据,完成一轮输出数据的读取操作。
例如,在写入时预定顺序关系为低位数据写入位置编号小的先入先出存储结构,高位数据写入位置编号大的先入先出存储结构时,则在拼接时将从位置编号小的先入先出存储结构读取的数据放入输出数据中的低位,将从位置编号大的先入先出存储结构读取的数据放入输出数据中的高位。预定顺序关系可以根据需要设置,在读取时按照写入时的预定顺序关系拼接即可。
例如,在第二种场景下,响应于确定占用的先入先出存储结构的数量小于预期数量,也即实际数量小于预期数量,读取确定占用的先入先出存储结构的数据,按照预定顺序关系,拼接从确定占用的先入先出存储结构中读取的数据,并在位宽相差部分填充第一值,以得到输出数据,其中,位宽相差部分的位宽由预期数量和确定占用的先入先出存储结构的数量的差值确定。
例如,若实际数量小于预期数量,导致能够读取的有效数据位宽小于期望的输出数据的位宽,对于相差部分可以进行填充第一值的操作。
例如,按照预定顺序关系,将从确定占用的先入先出存储结构中读取的数据放置在输出数据中的相应位置,对于剩余的(预期数量-实际数量)*Dwidth_inx部分,填充第一值,例如第一值可以是0,当然还可以是其它指定的数字、符号等。由此,得到位宽为期望值的输出数据,完成一轮输出数据的读取操作。
例如,可以间隔固定时钟周期执行一次数据读取,或者,数据读取可以响应于数据读取请求触发。
例如,在本公开至少一实施例中,在从确定占用的先入先出存储结构中读取输出数据之前,数据读取方法还包括:响应于数据读取请求,确定是否读出输出数据。
例如,在该实施例中,步骤S50可以包括:响应于确定读出输出数据,从确定占用的先入先出存储结构中读取输出数据。
例如,在一些实施例中,响应于数据读取请求指示M个先入先出存储结构中的任一个先入先出存储结构中存储有数据,确定读出输出数据。
在该实施例中,当有先入先出存储结构的空信号(Empty)无效时则需要进行数据读取,保证存储器中不存在数据残留。例如,每个FIFO具有自身对应的空信号,空信号有效表示该FIFO中未存储有数据,空信号无效表示该FIFO中存储有数据。
例如,在该实施例中,可以在执行步骤S40前先根据数据读取请求判断是否可以读出输出数据,若判断无法读取输出数据,则不再执行步骤S40-S50,以减少资源消耗。
例如,在另一些实施例中,响应于数据读取请求指示确定占用的先入先出存储结构中有任一个先入先出存储结构中存储有数据,确定读出输出数据。
例如,根据步骤S40得到的确定占用的先入先出存储结构的空信号全部有效,表示这些先入先出存储结构内部没有数据可以读取,则确定不读出输出数据;若这些先入先出存储结构中至少有一个先入先出存储结构的空信号无效,则确定读出输出数据。
例如,数据读取请求可以包括自上游或者下游的控制信号,如果来自上游或下游的控制信号指示不能继续读取,否则可能发生溢出时,则数据读取请求指示暂停读取输出数据。
图6为本公开一实施例提供的数据读取过程示意图。
图6示出的是从图2所示的存储器进行读取时的过程,关于图6中存储器的结构可以参考图2的相关描述,这里不再赘述。
下面结合图6,具体说明本公开至少一实施例提供的数据读取方法的执行过程。
首先,响应于数据读取请求,确定是否读出输出数据。
例如,在一个示例中,如图6所示,检测到图6所示的M个FIFO中的FIFO_0至FIFO_4的空信号无效,也即这些FIFO中存储有数据,确定可以读出输出数据。例如,在另一些示例中,也可以先确定需要占用的先入先出存储结构,之后再根据这些需要占用的先入先出存储结构中是否存储有数据,确定是否读出输出数据,具体过程如前所述,这里不再赘述。
例如,对于第一个读取的输入数据,其对应的读取起始位置RStartPoint_x为0,也即对应位置编号为0的FIFO_0。
根据输出数据的位宽及先入先出存储结构的位宽Dwidth_inx计算得到其预期数量,例如为5,之后,根据M个先入先出存储结构中存储有数据的先入先出存储结构的数量和预期数量,确定实际要读取的FIFO的数量。
例如,在一个示例中,如图6所示,M个先入先出存储结构中空信号无效的先入先出存储结构的数量为4(图6中的FIFO_0、FIFO_1、FIFO_2及FIFO_3),小于预期数量,因此确定实际数量等于M个FIFO中存储有数据的FIFO的数量4,也即实际要读取的FIFO的数量为4。
例如,在另一个实例中,从读取起始位置开始,确定FIFO_0、FIFO_1、FIFO_2、FIFO_3和FIFO_4为待判断FIFO,如图6所示,该5个待判断FIFO中的FIFO_4的空信号有效,也即FIFO_4中未存储有数据,因此确定实际数量等于这5个待判断FIFO中存储有数据的FIFO数量,也即实际数量为4。
之后,如图6所示,从位置编号0开始选择位置编号连续的4个先入先出存储结构作为读取第一个输出数据需要占用的先入先出存储结构,例如,选择位置编号为0、1、2、3的先入先出存储结构(图6中的FIFO_0、FIFO_1、FIFO_2、FIFO_3)作为读取第一个输出数据需要占用的先入先出存储结构。
之后,读取FIFO_0、FIFO_1、FIFO_2、FIFO_3中的数据,具体的,读取FIFO_0、FIFO_1、FIFO_2、FIFO_3中Depth=0的FIFO基本单元中的数据,例如读取的FIFO_0中数据为data_0,读取的FIFO_1数据为data_1,读取的FIFO_2中数据为data_2,读取的FIFO_3中数据为data_3,data_0、data_1、data_2、data_3的位宽均为Dwidth_Max。
之后,由于预期数量大于实际数量,按照预定顺序关系拼接data_0、data_1、data_2、data_3,并在位宽相差部分填充第一值,以得到输出数据。
例如,预定顺序关系指示,在写入时位于低位的输入数据写入位置编号小的FIFO,例如第0位至第Dwidth_Max-1位作为第一份数据写入位置编号为0的FIFO_0,以此类推。因此,按照预定顺序关系,将data_0作为输出数据的第0位至第Dwidth_Max-1位,将data_1作为输出数据的第Dwidth_Max位至第2*Dwidth_Max-1位,将data_2作为输出数据的第2*Dwidth_Max位至第3*Dwidth_Max-1位,将data_3作为输出数据的第3*Dwidth_Max位至第4*Dwidth_Max-1位,对于位宽相差部分,也即输出数据的第4*Dwidth_Max位至第5*Dwidth_Max-1位,填充第一值,例如填充0,由此得到输出数据。
此外,更新读取起始位置RStartPoint_x=0+4(实际数量)=4,以作为读取第二个输入数据时的读取起始位置,之后,在读取第二个输入数据时,会从位置编号为4的FIFO_4开始读取,具体过程不再赘述。
由于读取过程和写入过程都采用的“背靠背”方式,中间不产生“气泡”,因此下一次写入输入数据时是从FIFO_4开始写入,而下一次读取输出数据时也是从FIFO_4开始读取,读取/写入的起始位置都紧随上一次读取/写入的终止位置开始,两次相同类型操作(读取操作或写入操作)之间没有空余的FIFO产生,减少存储空间的浪费,最大化利用带宽。
在本公开至少一实施例提供的数据读取方法中,可以根据输出数据的宽度进行自适应的读取操作,达到调节流量的目的;可以将不同宽度的输出数据进行归一化操作,按照统一的数据位宽(FIFO的读写位宽Dwidth_Max)进行切分,并将不同位宽的数据进行紧密排布传输,减少存储空间的浪费,最大化利用带宽;位宽转换的颗粒度更细,在上游数据宽度大于下游数据流量时不存在流量浪费,带宽利用率高,例如处理读写数据位宽为512bits的AXI4协议,在带宽上限为512Gb/s的链路中传输时,AW、AR、W、R、B五个通道请求均匀分布的情况下,带宽利用率由52.5%提升至87.5%;此外,进行读取操作时,仅需要对能否读取进行判断以及读取起始点的计算,其为不消耗时钟周期的组合逻辑运算,该数据读取方法不需要额外的时序逻辑,通路延迟低,数据传输的延时为FIFO的读写固有延时,例如数据通路在此结构中的延时为2个UI。
本公开至少一实施例还提供一种带宽转换装置。图7为本公开至少一实施例提供的带宽转化装置的示意性框图。
如图7所示,带宽转换装置100包括存储器101和控制器102。
例如,存储器101包括M个先入先出存储结构,M个先入先出存储结构用于缓存来自第一接口的输入数据并进行数据流量的带宽转换,将经过带宽转换后的输出数据发送至第二接口。
例如,M基于通过存储器进行带宽转换的所有输入数据及所有输出数据中的位宽最大值确定,每个先入先出存储结构的位宽为所有输入数据的位宽及所有输出数据的位宽之间的最大公约数,M为正整数且大于1。
关于存储器101的结构的相关描述可以参考前述数据写入方法及图2中的相关内容,这里不再赘述。
例如,控制器102配置为:响应于接收到输入数据,根据M个先入先出存储结构的将满信号状态,确定是否写入输入数据;响应于确定写入输入数据,根据输入数据的位宽及每个先入先出存储结构的位宽,从M个先入先出存储结构中确定写入输入数据需要占用的先入先出存储结构;将输入数据写入确定占用的先入先出存储结构。
例如,控制器102还配置为:根据输出数据的位宽及每个先入先出存储结构的位宽,从M个先入先出存储结构中确定读取输出数据需要占用的先入先出存储结构;从确定占用的先入先出存储结构中读取输出数据。
控制器可以通过控制不同数量的FIFO以读取和写入不同位宽的数据,实现了自适应匹配两侧数据传输带宽的要求。
关于控制器进行数据写入的具体过程可以参考前述数据写入方法中步骤S10-S30中的相关描述,这里不再赘述。关于控制器进行数据读取的具体过程可以参考前述数据读取方法中步骤S40-S50中的相关描述,这里不再赘述。
本公开至少一实施例提供的带宽转换装置,应用在数据接口的发送方与接收方之间数据流量不匹配的带宽转换场景,该带宽转化装置可以采用前述的“背靠背”写入及“背靠背”读取方式,实现无论从输入侧或者输出侧而言,数据都是紧密排布得存储在存储器的FIFO阵列当中,实现自适应匹配两侧数据传输带宽的要求。该带宽转换装置能够将不同输入流量的输入数据根据接收方规定的位宽要求进行自适应转换,且通过紧凑型组包传输方式,达到精准控制数据流量且提升传输带宽利用效率的目的。
与上述的数据写入方法相对应,本公开至少一实施例还提供一种数据写入装置。
图8为本公开至少一实施例提供的一种数据写入装置的示意性框图。
例如,该数据写入装置用于向存储器写入数据。
例如,存储器包括M个先入先出存储结构,M个先入先出存储结构用于缓存来自第一接口的输入数据并进行数据流量的带宽转换,将经过带宽转换后的输出数据发送至第二接口。
M基于通过存储器进行带宽转换的所有输入数据及所有输出数据中的位宽最大值确定,每个先入先出存储结构的位宽为所有输入数据的位宽及所有输出数据的位宽之间的最大公约数,M为正整数且大于1。
关于存储器的相关描述可以参考前述数据写入方法及图2的相关描述,这里不再赘述。
例如,如图8所示,数据写入装置200包括:第一确定单元201、第二确定单元202和写入单元203。
第一确定单元201,配置为响应于接收到输入数据,根据M个先入先出存储结构的将满信号状态,确定是否写入输入数据;
第二确定单元202,配置为响应于确定写入输入数据,根据输入数据的位宽及每个先入先出存储结构的位宽,从M个先入先出存储结构中确定写入输入数据需要占用的先入先出存储结构;
写入单元203,配置为将输入数据写入确定占用的先入先出存储结构。
例如,第一确定单元201、第二确定单元202和写入单元203包括存储在存储器中的代码和程序;处理器可以执行该代码和程序以实现如上所述的第一确定单元201、第二确定单元202和写入单元203的一些功能或全部功能。例如,第一确定单元201、第二确定单元202和写入单元203可以是专用硬件器件,用来实现如上所述的第一确定单元201、第二确定单元202和写入单元203的一些或全部功能。例如,第一确定单元201、第二确定单元202和写入单元203可以是一个电路板或多个电路板的组合,用于实现如上所述的功能。在本申请实施例中,该一个电路板或多个电路板的组合可以包括:(1)一个或多个处理器;(2)与处理器相连接的一个或多个非暂时的存储器;以及(3)处理器可执行的存储在存储器中的固件。
需要说明的是,第一确定单元201用于实现图1所示的步骤S10,第二确定单元202用于实现图1所示的步骤S20,写入单元203用于实现图1所示的步骤S30。从而关于第一确定单元201的具体说明可以参考上述数据写入方法的实施例中图1所示的步骤S10的相关描述,关于第二确定单元202的具体说明可以参考上述数据写入方法的实施例中图1所示的步骤S20的相关描述,关于写入单元203的具体说明可以参考上述数据写入方法的实施例中图1所示的步骤S30的相关描述。此外,数据写入装置可以实现与前述数据写入方法相似的技术效果,在此不再赘述。
与上述的数据读取相对应,本公开至少一实施例还提供一种数据读取装置。
图9为本公开至少一实施例提供的一种数据读取装置的示意性框图。
例如,该数据读取装置用于从存储器读取数据。
例如,存储器包括M个先入先出存储结构,M个先入先出存储结构用于缓存来自第一接口的输入数据并进行数据流量的带宽转换,将经过带宽转换后的输出数据发送至第二接口。
M基于通过存储器进行带宽转换的所有输入数据及所有输出数据中的位宽最大值确定,每个先入先出存储结构的位宽为所有输入数据的位宽及所有输出数据的位宽之间的最大公约数,M为正整数且大于1。
关于存储器的相关描述可以参考前述数据读取方法及图2的相关描述,这里不再赘述。
例如,如图9所示,数据读取装置300包括:第三确定单元301和读取单元302。
第三确定单元301,配置为根据输出数据的位宽及每个先入先出存储结构的位宽,从M个先入先出存储结构中确定读取输出数据需要占用的先入先出存储结构。
读取单元302,配置为从确定占用的先入先出存储结构中读取输出数据。
例如,第三确定单元301和读取单元302包括存储在存储器中的代码和程序;处理器可以执行该代码和程序以实现如上所述的第三确定单元301和读取单元302的一些功能或全部功能。例如,第三确定单元301和读取单元302可以是专用硬件器件,用来实现如上所述的第三确定单元301和读取单元302的一些或全部功能。例如,第三确定单元301和读取单元302可以是一个电路板或多个电路板的组合,用于实现如上所述的功能。在本申请实施例中,该一个电路板或多个电路板的组合可以包括:(1)一个或多个处理器;(2)与处理器相连接的一个或多个非暂时的存储器;以及(3)处理器可执行的存储在存储器中的固件。
需要说明的是,第三确定单元301用于实现图4所示的步骤S40,写入单元302用于实现图4所示的步骤S50。从而关于第三确定单元301的具体说明可以参考上述数据读取方法的实施例中图4所示的步骤S40的相关描述,关于读取单元302的具体说明可以参考上述数据读取方法的实施例中图4所示的步骤S50的相关描述。此外,数据读取装置可以实现与前述数据读取方法相似的技术效果,在此不再赘述。
本公开至少一实施例还提供一种电子设备,图10为本公开至少一实施例提供的一种电子设备的示意性框图。
例如,如图10所示,该电子设备包括处理器401、通信接口402、存储器403和通信总线404。处理器401、通信接口402、存储器403通过通信总线404实现相互通信,处理器401、通信接口402、存储器403等组件之间也可以通过网络连接进行通信。本公开对网络的类型和功能在此不作限制。
例如,存储器403用于非瞬时性地存储计算机可执行指令。处理器401用于运行计算机可执行指令时,计算机可执行指令被处理器401运行时实现根据上述任一实施例所述的数据写入方法。关于该数据写入方法的各个步骤的具体实现以及相关解释内容可以参见上述数据写入方法的实施例,在此不作赘述。
例如,存储器403用于非瞬时性地存储计算机可执行指令。处理器401用于运行计算机可执行指令时,计算机可执行指令被处理器401运行时实现根据上述任一实施例所述的数据读取方法。关于该数据读取方法的各个步骤的具体实现以及相关解释内容可以参见上述数据读取方法的实施例,在此不作赘述。
例如,处理器401执行存储器403上所存储的程序而实现数据写入方法的实现方式,与前述数据写入方法的实施例部分所提及的实现方式相同,这里也不再赘述。例如,处理器401执行存储器403上所存储的程序而实现数据读取方法的实现方式,与前述数据读取方法的实施例部分所提及的实现方式相同,这里也不再赘述。
例如,通信总线404可以是外设部件互连标准(PCI)总线或扩展工业标准结构(EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
例如,通信接口402用于实现电子设备与其他设备之间的通信。
例如,处理器401可以控制电子设备中的其它组件以执行期望的功能。处理器401可以是中央处理器(CPU)、网络处理器(NP)等,还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。中央处理元(CPU)可以为X86或ARM架构等。
例如,存储器403可以包括一个或多个计算机程序产品的任意组合,计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(ROM)、硬盘、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器、闪存等。在所述计算机可读存储介质上可以存储一个或多个计算机可执行指令,处理器401可以运行所述计算机可执行指令,以实现电子设备的各种功能。在存储介质中还可以存储各种应用程序和各种数据等。
例如,关于电子设备执行数据写入的过程的详细说明可以参考数据写入方法的实施例中的相关描述,关于电子设备执行数据读取的过程的详细说明可以参考数据读取方法的实施例中的相关描述,重复之处不再赘述。
图11为本公开至少一实施例提供的一种非瞬时性计算机可读存储介质的示意图。例如,如图11所示,在存储介质500上可以非暂时性地存储一个或多个计算机可执行指令501。例如,当计算机可执行指令501由处理器执行时可以执行根据上文所述的数据写入方法中的一个或多个步骤,或者,执行根据上文所述的数据读取方法中的一个或多个步骤。
例如,该存储介质500可以应用于上述电子设备和/或数据写入装置中。例如,存储介质500可以包括电子设备中的存储器403。
例如,关于存储介质500的说明可以参考电子设备的实施例中对于存储器的描述,重复之处不再赘述。
本领域技术人员能够理解,本公开所披露的内容可以出现多种变型和改进。例如,以上所描述的各种设备或组件可以通过硬件实现,也可以通过软件、固件、或者三者中的一些或全部的组合实现。
此外,虽然本公开对根据本公开的实施例的系统中的某些单元做出了各种引用,然而,任何数量的不同单元可以被使用并运行在客户端和/或服务器上。单元仅是说明性的,并且系统和方法的不同方面可以使用不同单元。
本公开中使用了流程图用来说明根据本公开的实施例的方法的步骤。应当理解的是,前面或后面的步骤不一定按照顺序来精确的进行。相反,可以按照倒序或同时处理各种步骤。同时,也可以将其他操作添加到这些过程中。
本领域普通技术人员可以理解上述方法中的全部或部分的步骤可通过计算机程序来指令相关硬件完成,程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本公开并不限制于任何特定形式的硬件和软件的结合。
除非另有定义,这里使用的所有术语具有与本公开所属领域的普通技术人员共同理解的相同含义。还应当理解,诸如在通常字典里定义的那些术语应当被解释为具有与它们在相关技术的上下文中的含义相一致的含义,而不应用理想化或极度形式化的意义来解释,除非这里明确地这样定义。
以上是对本公开的说明,而不应被认为是对其的限制。尽管描述了本公开的若干示例性实施例,但本领域技术人员将容易地理解,在不背离本公开的新颖教学和优点的前提下可以对示例性实施例进行许多修改。因此,所有这些修改都意图包含在权利要求书所限定的本公开范围内。应当理解,上面是对本公开的说明,而不应被认为是限于所公开的特定实施例,并且对所公开的实施例以及其他实施例的修改意图包含在所附权利要求书的范围内。本公开由权利要求书及其等效物限定。

Claims (23)

1.一种数据写入方法,应用于存储器,其中,所述存储器包括M个先入先出存储结构,所述M个先入先出存储结构用于缓存来自第一接口的输入数据并进行数据流量的带宽转换,将经过所述带宽转换后的输出数据发送至第二接口,
所述数据写入方法包括:
响应于接收到所述输入数据,根据所述M个先入先出存储结构的将满信号状态,确定是否写入所述输入数据;
响应于确定写入所述输入数据,根据所述输入数据的位宽及每个先入先出存储结构的位宽,从所述M个先入先出存储结构中确定写入所述输入数据需要占用的先入先出存储结构;
将所述输入数据写入所述确定占用的先入先出存储结构,
其中,M基于通过所述存储器进行所述带宽转换的所有输入数据及所有输出数据中的位宽最大值确定,每个先入先出存储结构的位宽为所述所有输入数据的位宽及所述所有输出数据的位宽之间的最大公约数,M为正整数且大于1。
2.根据权利要求1所述的数据写入方法,其中,响应于接收到所述输入数据,根据所述M个先入先出存储结构的将满信号状态,确定是否写入所述输入数据,包括:
响应于所述M个先入先出存储结构中的任一个先入先出存储结构的将满信号有效,确定不写入所述输入数据;
响应于所述M个先入先出存储结构的将满信号均无效,确定写入所述输入数据,
其中,所述将满信号有效指示对应的先入先出存储结构中已缓存的数据量大于预设将满阈值。
3.根据权利要求1所述的数据写入方法,其中,根据所述输入数据的位宽及每个先入先出存储结构的位宽,从所述M个先入先出存储结构中确定写入所述输入数据需要占用的先入先出存储结构,包括:
根据所述输入数据的位宽及所述先入先出存储结构的位宽,确定写入所述输入数据需要占用的先入先出存储结构的数量N,其中,N为正整数且小于等于M;
从所述M个先入先出存储结构中选择空闲的N个先入先出存储结构作为写入所述输入数据需要占用的先入先出存储结构。
4.根据权利要求3所述的数据写入方法,其中,所述M个先入先出存储结构与M个位置编号一一对应,
从所述M个先入先出存储结构中选择空闲的N个先入先出存储结构作为写入所述输入数据需要占用的先入先出存储结构,包括:
确定本次写入所述输入数据的写入起始位置,其中,所述写入起始位置对应的先入先出存储结构的位置编号和与本次写入相邻的上一次写入的终止位置对应的先入先出存储结构的位置编号直接相邻,且所述写入起始位置对应的先入先出存储结构不属于所述上一次写入时占用的先入先出存储结构,所述M个位置编号首尾相接,第M个位置编号与第1个位置编号直接相邻;
从所述写入起始位置开始,选择位置编号连续的N个先入先出存储结构作为写入所述输入数据需要占用的先入先出存储结构。
5.根据权利要求4所述的数据写入方法,其中,所述M个位置编号包括0至M-1,
所述写入起始位置对应所述M个先入先出存储结构中位置编号为i的先入先出存储结构,
与本次写入相邻的上一次写入的写入起始位置对应所述M个先入先出存储结构中位置编号为i’的先入先出存储结构,与本次写入相邻的上一次写入占用的先入先出存储结构的数量为N’,
响应于i’+N’小于等于M-1,i等于i’+N’,响应于i’+N’大于M-1,i等于i’+N’对M的取余结果,
其中,i、i’、N’均为正数且小于M。
6.根据权利要求1所述的数据写入方法,其中,将所述输入数据写入所述确定占用的先入先出存储结构,包括:
将所述输入数据按照每个先入先出存储结构的位宽平均划分为N份,其中,N为正整数;
将所述N份数据按照预定顺序关系分别写入所述确定占用的先入先出存储结构。
7.根据权利要求1-6任一项所述的数据写入方法,其中,所述先入先出存储结构为基于寄存器的先入先出存储结构,所述基于寄存器的先入先出存储结构的深度大于等于2。
8.根据权利要求1-6任一项所述的数据写入方法,其中,所述先入先出存储结构为基于静态随机存储器的先入先出存储结构。
9.一种数据读取方法,应用于存储器,其中,所述存储器包括M个先入先出存储结构,所述M个先入先出存储结构用于缓存来自第一接口的输入数据并进行数据流量的带宽转换,将经过所述带宽转换后的输出数据发送至第二接口,
所述数据读取方法包括:
根据所述输出数据的位宽及每个先入先出存储结构的位宽,从所述M个先入先出存储结构中确定读取所述输出数据需要占用的先入先出存储结构;
从所述确定占用的先入先出存储结构中读取所述输出数据,
其中,M基于通过所述存储器进行所述带宽转换的所有输入数据及所有输出数据中的位宽最大值确定,每个先入先出存储结构的位宽为所述所有输入数据的位宽及所述所有输出数据的位宽之间的最大公约数,M为正整数且大于1。
10.根据权利要求9所述的数据读取方法,其中,根据所述输出数据的位宽及每个先入先出存储结构的位宽,从所述M个先入先出存储结构中确定读取所述输出数据需要占用的先入先出存储结构,包括:
根据所述输出数据的位宽及所述先入先出存储结构的位宽,确定所述输出数据对应的需要读取的先入先出存储结构的预期数量;
根据所述M个先入先出存储结构中存储有数据的先入先出存储结构数量和所述预期数量,从所述M个先入先出存储结构中确定读取所述输出数据需要占用的先入先出存储结构。
11.根据权利要求10所述的数据读取方法,其中,所述M个先入先出存储结构与M个位置编号一一对应,
根据所述M个先入先出存储结构中存储有数据的先入先出存储结构数量和所述预期数量,从所述M个先入先出存储结构中确定读取所述输出数据需要占用的先入先出存储结构,包括:
根据所述M个先入先出存储结构中存储有数据的先入先出存储结构的数量和所述预期数量,确定读取所述输出数据需要占用的先入先出存储结构的实际数量;
确定本次读取所述输出数据的读取起始位置,其中,所述读取起始位置对应的先入先出存储结构的位置编号和与本次读取相邻的上一次读取的终止位置对应的先入先出存储结构的位置编号直接相邻,且所述读取起始位置对应的先入先出存储结构不属于所述上一次读取时占用的先入先出存储结构,所述M个位置编号首尾相接,第M个位置编号与第1个位置编号直接相邻;
从所述读取起始位置开始,选择位置编号连续的所述实际数量个先入先出存储结构作为读取所述输出数据需要占用的先入先出存储结构。
12.根据权利要求11所述的数据读取方法,其中,根据所述M个先入先出存储结构中存储有数据的先入先出存储结构的数量和所述预期数量,确定读取所述输出数据需要占用的先入先出存储结构的实际数量,包括:
响应于所述M个先入先出存储结构中存储有数据的先入先出存储结构的数量大于等于所述预期数量,确定所述实际数量等于所述预期数量;
响应于所述M个先入先出存储结构中存储有数据的先入先出存储结构的数量小于所述预期数量,确定所述实际数量等于所述M个先入先出存储结构中存储有数据的先入先出存储结构的数量。
13.根据权利要求11所述的数据读取方法,其中,根据所述M个先入先出存储结构中存储有数据的先入先出存储结构的数量和所述预期数量,确定读取所述输出数据需要占用的先入先出存储结构的实际数量,包括:
从所述读取起始位置开始,确定位置编号连续的所述预期数量个先入先出存储结构作为待判断先入先出存储结构;
响应于所述待判断先入先出存储结构中均存储有数据,确定所述实际数量等于所述预期数量;
响应于所述待判断先入先出存储结构中有至少一个待判断先入先出存储结构里未存储有数据,确定所述实际数量等于所述待判断先入先出存储结构中存储有数据的先入先出存储结构的数量。
14.根据权利要求10所述的数据读取方法,其中,从所述确定占用的先入先出存储结构中读取所述输出数据,包括:
响应于所述确定占用的先入先出存储结构的数量等于预期数量,读取所述确定占用的先入先出存储结构中的数据,按照预定顺序关系,将从所述确定占用的先入先出存储结构中读取的数据拼接为所述输出数据;
响应于所述确定占用的先入先出存储结构的数量小于所述预期数量,读取所述确定占用的先入先出存储结构的数据,按照预定顺序关系,拼接从所述确定占用的先入先出存储结构中读取的数据,并在位宽相差部分填充第一值,以得到所述输出数据,其中,所述位宽相差部分的位宽由所述预期数量和所述确定占用的先入先出存储结构的数量的差值确定。
15.根据权利要求9-14任一项所述的数据读取方法,其中,在从所述确定占用的先入先出存储结构中读取所述输出数据之前,所述数据读取方法还包括:
响应于数据读取请求,确定是否读出所述输出数据;
从所述确定占用的先入先出存储结构中读取所述输出数据,包括:
响应于确定读出所述输出数据,从所述确定占用的先入先出存储结构中读取所述输出数据。
16.根据权利要求15所述的数据读取方法,其中,响应于所述数据读取请求指示所述M个先入先出存储结构中的任一个先入先出存储结构中存储有数据,确定读出所述输出数据。
17.根据权利要求15所述的数据读取方法,其中,响应于所述数据读取请求指示所述确定占用的先入先出存储结构中有任一个先入先出存储结构中存储有数据,确定读出所述输出数据。
18.一种带宽转换装置,包括存储器和控制器,其中,所述存储器包括M个先入先出存储结构,所述M个先入先出存储结构用于缓存来自第一接口的输入数据并进行数据流量的带宽转换,将经过所述带宽转换后的输出数据发送至第二接口,
所述控制器配置为:
响应于接收到所述输入数据,根据所述M个先入先出存储结构的将满信号状态,确定是否写入所述输入数据;
响应于确定写入所述输入数据,根据所述输入数据的位宽及每个先入先出存储结构的位宽,从所述M个先入先出存储结构中确定写入所述输入数据需要占用的先入先出存储结构;
将所述输入数据写入所述确定占用的先入先出存储结构,
其中,M基于通过所述存储器进行所述带宽转换的所有输入数据及所有输出数据中的位宽最大值确定,每个先入先出存储结构的位宽为所述所有输入数据的位宽及所述所有输出数据的位宽之间的最大公约数,M为正整数且大于1。
19.根据权利要18所述的带宽转换装置,所述控制器还配置为:
根据所述输出数据的位宽及每个先入先出存储结构的位宽,从所述M个先入先出存储结构中确定读取所述输出数据需要占用的先入先出存储结构;
从所述确定占用的先入先出存储结构中读取所述输出数据。
20.一种数据写入装置,用于向存储器写入数据,其中,所述存储器包括M个先入先出存储结构,所述M个先入先出存储结构用于缓存来自第一接口的输入数据并进行数据流量的带宽转换,将经过所述带宽转换后的输出数据发送至第二接口,
所述数据写入装置包括:
第一确定单元,配置为响应于接收到所述输入数据,根据所述M个先入先出存储结构的将满信号状态,确定是否写入所述输入数据;
第二确定单元,配置为响应于确定写入所述输入数据,根据所述输入数据的位宽及每个先入先出存储结构的位宽,从所述M个先入先出存储结构中确定写入所述输入数据需要占用的先入先出存储结构;
写入单元,配置为将所述输入数据写入所述确定占用的先入先出存储结构,
其中,M基于通过所述存储器进行所述带宽转换的所有输入数据及所有输出数据中的位宽最大值确定,每个先入先出存储结构的位宽为所述所有输入数据的位宽及所述所有输出数据的位宽之间的最大公约数,M为正整数且大于1。
21.一种数据读取装置,用于从存储器读取数据,其中,所述存储器包括M个先入先出存储结构,所述M个先入先出存储结构用于缓存来自第一接口的输入数据并进行数据流量的带宽转换,将经过所述带宽转换后的输出数据发送至第二接口,
所述数据读取装置包括:
第三确定单元,配置为根据所述输出数据的位宽及每个先入先出存储结构的位宽,从所述M个先入先出存储结构中确定读取所述输出数据需要占用的先入先出存储结构;
读取单元,配置为从所述确定占用的先入先出存储结构中读取所述输出数据,
其中,M基于通过所述存储器进行所述带宽转换的所有输入数据及所有输出数据中的位宽最大值确定,每个先入先出存储结构的位宽为所述所有输入数据的位宽及所述所有输出数据的位宽之间的最大公约数,M为正整数且大于1。
22.一种电子设备,包括:
存储器,非瞬时性地存储有计算机可执行指令;
处理器,配置为运行所述计算机可执行指令,
其中,所述计算机可执行指令被所述处理器运行时实现根据权利要求1-8任一项所述的数据写入方法或权利要求9-17任一项所述的数据读取方法。
23.一种非瞬时性计算机可读存储介质,其中,所述非瞬时性计算机可读存储介质存储有计算机可执行指令,
所述计算机可执行指令被处理器执行时实现根据权利要求1-8任一项所述的数据写入方法或权利要求9-17任一项所述的数据读取方法。
CN202310486249.7A 2023-04-28 2023-04-28 数据读取、写入方法及装置、带宽转换装置和电子设备 Pending CN116431079A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310486249.7A CN116431079A (zh) 2023-04-28 2023-04-28 数据读取、写入方法及装置、带宽转换装置和电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310486249.7A CN116431079A (zh) 2023-04-28 2023-04-28 数据读取、写入方法及装置、带宽转换装置和电子设备

Publications (1)

Publication Number Publication Date
CN116431079A true CN116431079A (zh) 2023-07-14

Family

ID=87092689

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310486249.7A Pending CN116431079A (zh) 2023-04-28 2023-04-28 数据读取、写入方法及装置、带宽转换装置和电子设备

Country Status (1)

Country Link
CN (1) CN116431079A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116795763A (zh) * 2023-07-31 2023-09-22 摩尔线程智能科技(北京)有限责任公司 基于axi协议的数据分组传输的方法、片上系统和芯片
CN116991330A (zh) * 2023-09-25 2023-11-03 苏州元脑智能科技有限公司 数据存储装置、数据读写方法及电子设备
CN117111859A (zh) * 2023-10-23 2023-11-24 北京紫光芯能科技有限公司 一种数据写入方法、装置及设备
CN117149092A (zh) * 2023-10-24 2023-12-01 湖南高至科技有限公司 Fpga自适应位宽数据传输方法、装置、设备和介质

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116795763A (zh) * 2023-07-31 2023-09-22 摩尔线程智能科技(北京)有限责任公司 基于axi协议的数据分组传输的方法、片上系统和芯片
CN116795763B (zh) * 2023-07-31 2023-11-21 摩尔线程智能科技(北京)有限责任公司 基于axi协议的数据分组传输的方法、片上系统和芯片
CN116991330A (zh) * 2023-09-25 2023-11-03 苏州元脑智能科技有限公司 数据存储装置、数据读写方法及电子设备
CN117111859A (zh) * 2023-10-23 2023-11-24 北京紫光芯能科技有限公司 一种数据写入方法、装置及设备
CN117111859B (zh) * 2023-10-23 2024-03-19 北京紫光芯能科技有限公司 一种数据写入方法、装置及设备
CN117149092A (zh) * 2023-10-24 2023-12-01 湖南高至科技有限公司 Fpga自适应位宽数据传输方法、装置、设备和介质

Similar Documents

Publication Publication Date Title
CN116431079A (zh) 数据读取、写入方法及装置、带宽转换装置和电子设备
US8225026B2 (en) Data packet access control apparatus and method thereof
US8533388B2 (en) Scalable multi-bank memory architecture
US9170753B2 (en) Efficient method for memory accesses in a multi-core processor
US6941426B2 (en) System for head and tail caching
CN107783727B (zh) 一种内存设备的访问方法、装置和系统
JP2016195375A (ja) 複数のリンクされるメモリリストを利用する方法および装置
CN112543925A (zh) 用于使用专用低延迟链路的多个硬件加速器的统一地址空间
US8886741B2 (en) Receive queue models to reduce I/O cache consumption
WO2002079971A1 (en) Programmable cpu/interface buffer structure using dual port ram
US6526068B2 (en) Interface control of communication between a control processor and a digital signal processor
CN113900974B (zh) 一种存储装置、数据存储方法及相关设备
US20050038946A1 (en) System and method using a high speed interface in a system having co-processors
CN115934625B (zh) 一种用于远程直接内存访问的敲门铃方法、设备及介质
US10031884B2 (en) Storage apparatus and method for processing plurality of pieces of client data
CN111970213A (zh) 排队系统
US11811897B2 (en) Method for data processing of frame receiving of an interconnection protocol and storage device
KR102338872B1 (ko) 다수의 클라이언트 데이터를 처리하는 저장 장치 및 방법
CN114490459A (zh) 数据传输方法、装置、设备、接收机和存储介质
CN108881061B (zh) 通信设备和通信方法
KR20110014988A (ko) 메모리 영역으로의 복수의 프로세서의 액세스를 제어하는 방법 및 상기 방법을 구현하기 위한 메시지 메모리를 구비한 통신 모듈
CN111831209A (zh) 数据存取装置及系统
AU624745B2 (en) Packet/fast packet switch for voice and data
CN115833920B (zh) 一种解调数据的传输方法和装置
CN114296918B (zh) 资源分配系统及方法

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
CB02 Change of applicant information

Country or region after: China

Address after: 201100 room 1302, 13 / F, building 16, No. 2388, Chenhang highway, Minhang District, Shanghai

Applicant after: Shanghai Bi Ren Technology Co.,Ltd.

Address before: 201100 room 1302, 13 / F, building 16, No. 2388, Chenhang highway, Minhang District, Shanghai

Applicant before: Shanghai Bilin Intelligent Technology Co.,Ltd.

Country or region before: China

CB02 Change of applicant information