CN106126435B - 一种实现链表流水操作的电路结构及操作方法 - Google Patents

一种实现链表流水操作的电路结构及操作方法 Download PDF

Info

Publication number
CN106126435B
CN106126435B CN201610492922.8A CN201610492922A CN106126435B CN 106126435 B CN106126435 B CN 106126435B CN 201610492922 A CN201610492922 A CN 201610492922A CN 106126435 B CN106126435 B CN 106126435B
Authority
CN
China
Prior art keywords
chain
status0
chain head
head
storage
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.)
Expired - Fee Related
Application number
CN201610492922.8A
Other languages
English (en)
Other versions
CN106126435A (zh
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.)
Z Bond Tongli Wuhan Technology Co ltd
Original Assignee
Wuhan Leading 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 Wuhan Leading Technology Co Ltd filed Critical Wuhan Leading Technology Co Ltd
Priority to CN201610492922.8A priority Critical patent/CN106126435B/zh
Publication of CN106126435A publication Critical patent/CN106126435A/zh
Application granted granted Critical
Publication of CN106126435B publication Critical patent/CN106126435B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供一种实现链表流水操作的电路结构,包括链表存储区和链表队列,链表存储区包括下一跳指针和下一跳指针有效指示,链表队列包括链头、链尾和链头的非空指示;其特征在于:所述的下一跳指针有效指示status0[1:0]用2比特表示,它的2个比特位分别表示为status0[0]和status0[1];所述的链表队列还包括重起链头和重起链头的指示状态,重起链头的指示状态status1[1:0]用2比特表示;链尾包含有对应链表存储区的status0[0]信息。本发明解决了软件、通用硬件链表无法做到每个时钟周期同时处理入链和出链的问题,并提高了处理带宽。

Description

一种实现链表流水操作的电路结构及操作方法
技术领域
本发明涉及链表操作领域,具体涉及一种实现链表流水操作的电路结构及操作方法。
背景技术
基于软件的链表操作方法已经很成熟,像Lisp和Scheme这样的语言的内建数据类型中就包含了链表的存取和操作。目前芯片技术中用到的片内缓存RAM,灵活性最大的为真正双端口RAM,它具有两个独立的可读可写的操作口,流水操作电路结构如图1所示,流水操作波形如图2所示。由于首次入链在更新链尾的同时也需要更新链头和链表非空指示,入链需要更新链表存储区的有效指示,而出链需要更新链头和链表非空指示和清除当前链头指向的下一跳指针有效指示。也就是说,多块RAM会有入链和出链同时进行读写操作的需求,这是目前芯片技术中RAM的操作特性无法达到的。因此,普通链表电路的入链和出链是分时操作的,如图3所示,无法做到入链和出链同时处理进行。
发明内容
本发明要解决的技术问题是:提供一种实现链表流水操作的电路结构,解决软件、通用链表电路无法做到每个时钟周期同时处理入链和出链的问题,并提高了处理带宽。
本发明为解决上述技术问题所采取的技术方案为:一种实现链表流水操作的电路结构,包括链表存储区和链表队列,链表存储区包括下一跳指针和下一跳指针有效指示,链表队列包括链头、链尾和链头的非空指示;其特征在于:所述的下一跳指针有效指示用2比特表示,记为status0[1:0],它的2个比特位分别表示为status0[0]和tatus0[1],定义status0[0]入链侧可读可写、出链侧只能读,status0[1]出链侧可读可写、入链侧只能读;
所述的链表队列还包括重起链头和重起链头的指示状态,重起链头的指示状态用2比特表示,记为status1[1:0],它的2个比特位分别表示为status1[0]和status1[1],定义status1[0]入链侧可读可写、出链侧只能读,status1[1]出链侧可读可写、入链侧只能读;链尾包含有对应链表存储区的status0[0]信息。
按上述方案,所述的链表存储区的下一跳指针、链表队列的链头、重起链头、链尾、链尾的status0[0]信息和链头的非空指示分别对应一块RAM,链表存储区的下一跳指针有效指示的2个比特位status0[0]和status0[1]分别各对应一块RAM,链表队列的重起链头的指示状态的2个比特位status1[0]和status1[1]分别各对应一块RAM。
按上述方案,对链表存储区的下一跳指针有效指示status0[1:0]进行如下定义:当status0[1:0]等于2’b00或者2’b11时,表示该链下一跳为空;当status0[1:0]等于2’b01或者2’b10时,表示该链下一跳为非空。
按上述方案,对链表队列的重起链头的指示状态status1[1:0]进行如下定义:当status1[1:0] 等于2’b00或者2’b11时,表示该重起链头为空;当status1[1:0]等于2’b01或者2’b10时,表示该重起链头为非空。
上述一种实现链表流水操作的电路结构的操作方法,其特征在于:它包括入链操作和出链操作;其中,
入链操作:电路解复位后,所有的状态位默认为0,即所有的链表为空,链表存储区的每个下一跳指针所对应的下一跳指针有效指示都为空;第一个入链请求进来后,用目标队列号QID来查询该队列的重起链头是否为空,如果重起链头是空,那么该入链请求就进入重起链头,同时新指针SID_NEW挂到链表存储区的RAM读地址上;
第一拍:1)QID作为链表队列RAM的读地址,准备获得重起链头的空状态;2)QID作为链表队列RAM的读地址,准备获得链尾指针值SID_OLD;3)SID_NEW作为链表存储区RAM的读地址,准备获得status0[0];
第三拍从下一跳指针有效指示status0[1:0]中获得重起链头的空状态、旧链尾指针SID_OLD和链表存储区status0[0]的值;
第三拍入重起链头操作:
1)将SID_NEW写入QID对应的链尾,同时将status0[0]写入链尾的相应位置;
2)将SID_NEW写入QID对应的重起链头,同时将重起链头的空状态取反,写入重起链头的指示状态status1[0];
3)将相关信息写入SID_NEW对应的位置;
第三拍入链尾操作:
1)将SID_NEW写入QID对应的链尾区域,同时将新的status0[0]写入链尾的相应位置;
2)将SID_NEW写入SID_OLD的下一跳指针,同时将链尾中存储的原来的status0[0]取反,写入到SID_OLD对应的状态位status0[0];链表存储区的旧链尾下一跳就有效了;
第四拍,入队成功;
出链操作:
第一拍:QID作为链表队列RAM的读地址,获得链头和重起链头的空状态;
第三拍获得链头的空状态、链头指针、重起链头的空状态、重起链头指针;
如果链头非空,则操作链头;如果链头为空,则看重起链头是否为空;如果重起链头非空,则操作重起链头;如果重起链头为空,则不动作;
第三拍重起链头出队:
1)将重起链头的指示状态status1[1]取反,写入重起链头的指示状态status1[1];
2)用重起链头指针去链表存储区读取下一跳指针和对应的status0[1:0];
第五拍重起链头出队:
1)如果链表存储区的status0[1:0]为空,则置链头状态位为空;
2)如果链表存储区的status0[1:0]为非空,则将下一跳指针写入链头,将status0[1]取反写入链表存储区的status0[1],将链头状态位置为非空;
第三拍链头出队:用链头指针去链表存储区读取下一跳指针和对应的status0[1:0];
第五拍链头出队:
1)如果status0[1:0]为空,则置链头状态位为空;
2)如果status0[1:0]为非空,则将下一跳指针写入链头,将status0[1]取反写入链表存储区的status0[1],将链头状态位置为非空;
第六拍:出队成功。
本发明的有益效果为:链表队列区增加重起链头,将原有的单条链拆分为双条链,使得入链和出链区分开来,重起链头的指示状态和链表存储区的下一跳指针有效指示由1比特改为2比特,使得链表状态的更新可以流水操作;从而解决了软件、通用链表无法做到每个时钟周期同时处理入链和出链的问题,并提高了处理带宽。
附图说明
图1为RAM流水操作电路结构图。
图2为RAM流水操作时序图。
图3为普通硬件电路链表的结构框图。
图4为本发明一实施例的结构示意框图。
具体实施方式
下面结合具体实例和附图对本发明作进一步说明。
本发明提供一种实现链表流水操作的电路结构,如图4所示,包括链表存储区和链表队列,链表存储区包括下一跳指针和下一跳指针有效指示,链表队列包括链头、链尾和链头的非空指示;所述的下一跳指针有效指示用2比特表示,记为status0[1:0],它的2个比特位分别表示为status0[0]和status0[1],定义status0[0]入链侧可读可写、出链侧只能读,status0[1]出链侧可读可写、入链侧只能读;所述的链表队列还包括重起链头和重起链头的指示状态,重起链头的指示状态用2比特表示,记为status1[1:0],它的2个比特位分别表示为status1[0]和status1[1],定义status1[0]入链侧可读可写、出链侧只能读,status1[1]出链侧可读可写、入链侧只能读;链尾包含有对应链表存储区的status0[0]的信息。
进一步的,所述的链表存储区的下一跳指针、链表队列的链头、重起链头、链尾、链尾的status0[0]信息和链头的非空指示分别对应一块RAM,链表存储区的下一跳指针有效指示的2个比特位status0[0]和status0[1]分别对应一块RAM,链表队列的重起链头的指示状态的2个比特位status1[0]和status1[1]分别对应一块RAM。
再进一步的,对链表存储区的下一跳指针有效指示status0[1:0]进行如下定义:当status0[1:0]等于2’b00或者2’b11时,表示该链下一跳为空;当status0[1:0]等于2’b01或者2’b10时,表示该链下一跳为非空。
同理,对链表队列的重起链头的指示状态status1[1:0]进行如下定义:当status1[1:0] 等于2’b00或者2’b11时,表示该重起链头为空;当status1[1:0]等于2’b01或者2’b10时,表示该重起链头为非空。
下面具体描述流水操作的详细过程,假设链表所有的信息都是存储在FPGA RAM中,RAM读地址后2拍能取到数据。
上述一种实现链表流水操作的电路结构的操作方法,包括入链操作和出链操作;其中,
入链操作:电路解复位后,所有的状态位默认为0,即所有的链表为空,链表存储区的每个下一跳指针所对应的下一跳指针有效指示都为空;第一个入链请求进来后,用目标队列号QID来查询该队列的重起链头是否为空,如果重起链头是空,那么该入链请求就进入重起链头,同时新指针SID_NEW挂到链表存储区的RAM读地址上,目的是为了获得status0[0],该值可能为0,可能为1;
第一拍:1)QID作为链表队列RAM的读地址,准备获得重起链头的空状态;2)QID作为链表队列RAM的读地址,准备获得链尾指针值SID_OLD;3)SID_NEW作为链表存储区RAM的读地址,准备获得status0[0];
第三拍从下一跳指针有效指示status0[1:0]中获得重起链头的空状态、旧链尾指针SID_OLD和链表存储区status0[0]的值;
第三拍入重起链头操作:
4)将SID_NEW写入QID对应的链尾,同时将status0[0]写入链尾的相应位置;
5)将SID_NEW写入QID对应的重起链头,同时将重起链头的空状态取反,写入重起链头的指示状态status1[0];
6)将相关信息写入SID_NEW对应的位置;
第三拍入链尾操作:
1)将SID_NEW写入QID对应的链尾区域,同时将新的status0[0]写入链尾的相应位置;
2)将SID_NEW写入SID_OLD的下一跳指针,同时将链尾中存储的原来的status0[0]取反,写入到SID_OLD对应的状态位status0[0];链表存储区的旧链尾下一跳就有效了;
第四拍,入队成功;
出链操作:
第一拍:QID作为链表队列RAM的读地址,获得链头和重起链头的空状态;
第三拍获得链头的空状态、链头指针、重起链头的空状态、重起链头指针;
如果链头非空,则操作链头;如果链头为空,则看重起链头是否为空;如果重起链头非空,则操作重起链头;如果重起链头为空,则不动作;
第三拍重起链头出队:
1)将重起链头的指示状态status1[1]取反,写入重起链头的指示状态status1[1];
2)用重起链头指针去链表存储区读取下一跳指针和对应的status0[1:0];
第五拍重起链头出队:
3)如果链表存储区的status0[1:0]为空,则置链头状态位为空;
4)如果链表存储区的status0[1:0]为非空,则将下一跳指针写入链头,将status0[1]取反写入链表存储区的status0[1],将链头状态位置为非空;
第三拍链头出队:用链头指针去链表存储区读取下一跳指针和对应的status0[1:0];
第五拍链头出队:
3)如果status0[1:0]为空,则置链头状态位为空;
4)如果status0[1:0]为非空,则将下一跳指针写入链头,将status0[1]取反写入链表存储区的status0[1],将链头状态位置为非空;
第六拍:出队成功。
本发明保护的是链表的特殊电路实现结构、链表队列状态位的表示方式、链表缓存区下一跳状态的表达方式;本发明不局限于用FPGA实现,也可以用ASIC等其他硬件电路实现。
以上实施例仅用于说明本发明的设计思想和特点,其目的在于使本领域内的技术人员能够了解本发明的内容并据以实施,本发明的保护范围不限于上述实施例。所以,凡依据本发明所揭示的原理、设计思路所作的等同变化或修饰,均在本发明的保护范围之内。

Claims (5)

1.一种实现链表流水操作的电路结构,包括链表存储区和链表队列,链表存储区包括下一跳指针和下一跳指针有效指示,链表队列包括链头、链尾和链头的非空指示;其特征在于:所述的下一跳指针有效指示用2比特表示,记为status0[1:0],它的2个比特位分别表示为status0[0]和status0[1],定义status0[0]入链侧可读可写、出链侧只能读,status0[1]出链侧可读可写、入链侧只能读;
所述的链表队列还包括重起链头和重起链头的指示状态,重起链头的指示状态用2比特表示,记为status1[1:0],它的2个比特位分别表示为status1[0]和status1[1],定义status1[0]入链侧可读可写、出链侧只能读,status1[1]出链侧可读可写、入链侧只能读;链尾包含有对应链表存储区的status0[0]信息。
2.根据权利要求1所述的一种实现链表流水操作的电路结构,其特征在于:所述的链表存储区的下一跳指针、链表队列的链头、重起链头、链尾、链尾的status0[0]信息和链头的非空指示分别对应一块RAM,链表存储区的下一跳指针有效指示的2个比特位status0[0]和status0[1]分别对应一块RAM,链表队列的重起链头的指示状态的2个比特位status1[0]和status1[1]分别对应一块RAM。
3.根据权利要求1所述的一种实现链表流水操作的电路结构,其特征在于:对链表存储区的下一跳指针有效指示status0[1:0]进行如下定义:当status0[1:0]等于2’b00或者2’b11时,表示该链下一跳为空;当status0[1:0]等于2’b01或者2’b10时,表示该链下一跳为非空。
4.根据权利要求1所述的一种实现链表流水操作的电路结构,其特征在于:对链表队列的重起链头的指示状态status1[1:0]进行如下定义:当status1[1:0] 等于2’b00或者2’b11时,表示该重起链头为空;当status1[1:0]等于2’b01或者2’b10时,表示该重起链头为非空。
5.权利要求1所述的一种实现链表流水操作的电路结构的操作方法,其特征在于:它包括入链操作和出链操作;其中,
入链操作:电路解复位后,所有的状态位默认为0,即所有的链表为空,链表存储区的每个下一跳指针所对应的下一跳指针有效指示都为空;第一个入链请求进来后,用目标队列号QID来查询该队列的重起链头是否为空,如果重起链头是空,那么该入链请求就进入重起链头,同时新指针SID_NEW挂到链表存储区的RAM读地址上;
第一拍:1)QID作为链表队列RAM的读地址,准备获得重起链头的空状态;2)QID作为链表队列RAM的读地址,准备获得链尾指针值SID_OLD;3)SID_NEW作为链表存储区RAM的读地址,准备获得status0[0];
第三拍从下一跳指针有效指示status0[1:0]中获得重起链头的空状态、旧链尾指针SID_OLD和链表存储区status0[0]的值;
第三拍入重起链头操作:
将SID_NEW写入QID对应的链尾,同时将status0[0]写入链尾的相应位置;
将SID_NEW写入QID对应的重起链头,同时将重起链头的空状态取反,写入重起链头的指示状态status1[0];
将相关信息写入SID_NEW对应的位置;
第三拍入链尾操作:
1)将SID_NEW写入QID对应的链尾区域,同时将新的status0[0]写入链尾的相应位置;
2)将SID_NEW写入SID_OLD的下一跳指针,同时将链尾中存储的原来的status0[0]取反,写入到SID_OLD对应的状态位status0[0];链表存储区的旧链尾下一跳就有效了;
第四拍,入队成功;
出链操作:
第一拍:QID作为链表队列RAM的读地址,获得链头和重起链头的空状态;
第三拍获得链头的空状态、链头指针、重起链头的空状态、重起链头指针;
如果链头非空,则操作链头;如果链头为空,则看重起链头是否为空;如果重起链头非空,则操作重起链头;如果重起链头为空,则不动作;
第三拍重起链头出队:
1)将重起链头的指示状态status1[1]取反,写入重起链头的指示状态status1[1];
2)用重起链头指针去链表存储区读取下一跳指针和对应的status0[1:0];
第五拍重起链头出队:
如果链表存储区的status0[1:0]为空,则置链头状态位为空;
如果链表存储区的status0[1:0]为非空,则将下一跳指针写入链头,将status0[1]取反写入链表存储区的status0[1],将链头状态位置为非空;
第三拍链头出队:用链头指针去链表存储区读取下一跳指针和对应的status0[1:0];
第五拍链头出队:
如果status0[1:0]为空,则置链头状态位为空;
如果status0[1:0]为非空,则将下一跳指针写入链头,将status0[1]取反写入链表存储区的status0[1],将链头状态位置为非空;
第六拍:出队成功。
CN201610492922.8A 2016-06-28 2016-06-28 一种实现链表流水操作的电路结构及操作方法 Expired - Fee Related CN106126435B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610492922.8A CN106126435B (zh) 2016-06-28 2016-06-28 一种实现链表流水操作的电路结构及操作方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610492922.8A CN106126435B (zh) 2016-06-28 2016-06-28 一种实现链表流水操作的电路结构及操作方法

Publications (2)

Publication Number Publication Date
CN106126435A CN106126435A (zh) 2016-11-16
CN106126435B true CN106126435B (zh) 2019-07-23

Family

ID=57285219

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610492922.8A Expired - Fee Related CN106126435B (zh) 2016-06-28 2016-06-28 一种实现链表流水操作的电路结构及操作方法

Country Status (1)

Country Link
CN (1) CN106126435B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110806986B (zh) * 2019-11-04 2022-02-15 苏州盛科通信股份有限公司 提高网络芯片报文存储效率的方法、设备及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101030168A (zh) * 2007-02-15 2007-09-05 华为技术有限公司 一种实现高可靠性链表的方法及装置
CN101635682A (zh) * 2009-08-05 2010-01-27 中兴通讯股份有限公司 一种存储管理的方法和系统
CN104598194A (zh) * 2014-12-09 2015-05-06 中国航空工业集团公司第六三一研究所 一种头尾指针链表存储器的初始化方法及电路

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030056073A1 (en) * 2001-09-18 2003-03-20 Terachip, Inc. Queue management method and system for a shared memory switch

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101030168A (zh) * 2007-02-15 2007-09-05 华为技术有限公司 一种实现高可靠性链表的方法及装置
CN101635682A (zh) * 2009-08-05 2010-01-27 中兴通讯股份有限公司 一种存储管理的方法和系统
CN104598194A (zh) * 2014-12-09 2015-05-06 中国航空工业集团公司第六三一研究所 一种头尾指针链表存储器的初始化方法及电路

Also Published As

Publication number Publication date
CN106126435A (zh) 2016-11-16

Similar Documents

Publication Publication Date Title
CN103514261B (zh) 一种应用于工业控制系统的数据异步存储及访问方法
CN105677580B (zh) 访问缓存的方法和装置
CN105283855B (zh) 一种寻址方法及装置
CN105183662B (zh) 一种无cache一致性协议的分布式共享片上存储架构
CN106776362B (zh) 存储器的控制方法及装置
CN107038123A (zh) 用于数据处理系统中的缓存一致性的探听过滤器
US9678891B2 (en) Efficient search key controller with standard bus interface, external memory interface, and interlaken lookaside interface
CN102064977A (zh) 基于gpu的高速网络报文内容检测方法
EP2530598B1 (en) Data supply device, cache device, data supply method, and cache method
US11042642B2 (en) Method and apparatus for data transmission in a TEE system
CN106126435B (zh) 一种实现链表流水操作的电路结构及操作方法
WO2016070668A1 (zh) 一种实现数据格式转换的方法、装置及计算机存储介质
CN110058816A (zh) 一种基于ddr的高速多用户队列管理器及方法
CN101206614A (zh) 仿真特殊功能寄存器的仿真器
CN105677491B (zh) 一种数据传输方法及装置
CN109446147A (zh) 一种网络存储设备与pcie设备的数据交互方法
US10096081B2 (en) Adaptive filtering of packets in a graphics processing system
CN101866277A (zh) 数据排序方法和装置
CN102750245A (zh) 报文接收方法、报文接收模块、装置及系统
CN105164636B (zh) 一种虚拟化环境中的数据通信的方法、装置及处理器
CN110990169B (zh) 一种利用共享内存进行进程间字节流通信的结构及方法
CN102571609B (zh) 快速串行接口pci‑e协议数据完成包的重组排序方法
CN111831587A (zh) 数据写入方法、装置和电子设备
CN108108148A (zh) 一种数据处理方法和装置
CN109656838A (zh) 处理器系统及其存储器控制方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information

Address after: 430074 Guandong Technology Industrial Park, East Lake New Technology Development Zone, Wuhan, Hubei

Applicant after: WUHAN Z-BOND TECHNOLOGY Co.,Ltd.

Address before: 430074 Wuhan City, Wuhan, Hubei, Wuchang, Guan Shan Road

Applicant before: WUHAN NEC FIBER OPTIC COMMUNICATIONS INDUSTRY Co.,Ltd.

CB02 Change of applicant information
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20191216

Address after: 430074 the 2 level -3 of 2 Kanto Industrial Park, East Lake New Technology Development Zone, Wuhan, Hubei.

Patentee after: Z-BOND TONGLI (WUHAN) TECHNOLOGY Co.,Ltd.

Address before: 430074 Kanto science and Technology Industrial Zone, East Lake New Technology Development Zone, Hubei, Wuhan

Patentee before: WUHAN Z-BOND TECHNOLOGY Co.,Ltd.

TR01 Transfer of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20190723