一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于RAM的移位寄存器及其存储方法与流程

2021-08-03 14:29:00 来源:中国专利 TAG:寄存器 传输 方法 综合 移位寄存器
一种基于RAM的移位寄存器及其存储方法与流程

本发明属于寄存器传输级综合技术领域,具体涉及一种基于ram的移位寄存器及其存储方法。



背景技术:

srl(shiftregisterleft,左移移位寄存器)是rtl(registertransistorlevel,寄存器传输级)设计中常用的电路,srl的综合和优化实现是面向fpga(fieldprogrammablegatearray,现场可编程门阵列)的rtl综合的重要组成部分。当srl电路设计的规模比较大,或者综合库中没有srl工艺库单元时,基于ram(randomaccessmemory,随机存储器)的电路优化实现是srl综合必须解决的问题。以两个主流的国外商用综合软件为例阐述现有技术的srl方案。

第一种是xilinx的综合工具(ise或vivado),该综合工具中对于用户的srl设计只生成基于其srl工艺库单元的网表。然而,当用户的srl的规模比较大(传播链长度比较长)时,其生成的网表必然是很多级srl工艺库单元的级联。相比于基于ram的电路实现,这样电路结果的性能就会比较差。

第二种是fpga通用eda工具,例如synplify,对于xilinxfpga,可以生成基于srl工艺库单元的网表;对于latticefpga,由于其工艺库中没有srl工艺库单元,对于用户静态srl,可以生成基于dram(distributedram,分布存储器)的网表。但是存在下述问题:

(1)当库中有srl工艺库单元时,仅生成srl工艺库单元网表,而没有对srl/ram做权衡,这必然存在上述和xilinx的综合工具相同的问题;

(2)对于规模较大的用户srl,应当基于ram实现。然而synplify只处理静态srl,而不能处理动态srl;对于动态srl,它只是生成基于ff(触发器)的级联网表;而ff属于fpga的通用逻辑单元,这就会造成了对通用逻辑单元的“浪费”;

(3)即使对于静态srl,synplify也只是能生成基于dram的网表,而不能根据用户srl的本身特点生成基于bram(blockram,块存储器)的网表。而使用dram实际上相当于使用了通用逻辑单元(lut),当用户srl比较大时,这对通用逻辑单元的“浪费”会很严重。



技术实现要素:

为了解决现有技术中存在的上述问题,本发明提供了一种基于ram的移位寄存器及其存储方法。本发明要解决的技术问题通过以下技术方案实现:

第一方面,本发明提供的一种基于ram的移位寄存器包括:第一加法器、第二加法器、第一触发器以及双端口ram,所述第一加法器以及第二加法器包括地址输入端口、第一输入端口以及输出端口,所述第一触发器包括输入数据端口、clk端口、使能端口以及输出端口,所述双端口ram包括写地址逻辑端口、读地址逻辑端口、数据输入端口、使能端口以及clk端口,所述触发器的数据输入端口与所述第二加法器的输出端口相连,所述第一触发器的输出端口分别与第一加法器的地址输入端口、第二加法器的地址输入端口以及双端口ram的写地址逻辑端口相连,所述第一加法器的输出端口与所述ram的读地址逻辑端口相连,所述双端口ram的输出端口(d0)输出数据,所述第一触发器的clk端口以及所述双端口ram的clk端口输入时钟信号,所述第一触发器的使能端口以及所述双端口ram的使能端口输入使能信号,所述第一加法器的地址输入端输入常量或者动态数据。

可选的,所述双端口ram的输出端口的宽度为m,所述第一加法器的地址输入端的宽度为n。

第二方面,本发明提供的一种基于ram的移位寄存器,包括:第二触发器、第三加法器以及单端口ram,所述第二触发器包括输入数据端口、clk端口以及输出端口,所述第三加法器包括地址输入端口、第一输入端口以及输出端口,所述单端口ram包括地址输入端口、数据输入端口、clk端口以及数据输出端口,所述第二触发器的数据输入端口连接所述第三加法器的输出端口,所述第二触发器的输出端口与所述第三加法器的地址输入端以及单端口ram的地址输入端相连,所述第二触发器以及所述单端口ram的clk端输入时钟信号,所述单端口ram的数据输入端输入数据,所述单端口ram的输出端输出数据。

可选的,所述单端口ram为同步写、异步读的移位寄存器,所述单端口ram由第二触发器通过自身的输出端输入信号至所述单端口ram的地址输入端口驱动。

第三方面,本发明提供的一种基于ram的移位寄存器的存储方法,提供移位寄存器,所述存储方法包括:

获取用户需求;

使用所述移位寄存器对用户需求中的待存储数据进行存储;

其中,所述移位寄存器包括:第一加法器、第二加法器、第一触发器以及双端口ram,所述第一加法器以及第二加法器包括地址输入端口、第一输入端口以及输出端口,所述第一触发器包括输入数据端口、clk端口、使能端口以及输出端口,所述双端口ram包括写地址逻辑端口、读地址逻辑端口、数据输入端口、使能端口以及clk端口,所述触发器的数据输入端口与所述第二加法器的输出端口相连,所述第一触发器的输出端口分别与第一加法器的地址输入端口、第二加法器的地址输入端口以及双端口ram的写地址逻辑端口相连,所述第一加法器的输出端口与所述ram的读地址逻辑端口相连,所述双端口ram的输出端口(d0)输出数据,所述第一触发器的clk端口以及所述双端口ram的clk端口输入时钟信号,所述第一触发器的使能端口以及所述双端口ram的使能端口输入使能信号,所述第一加法器的地址输入端输入常量或者动态数据。

第四方面,本发明提供的一种基于ram的移位寄存器的存储方法,提供移位寄存器,所述存储方法包括:

获取用户需求;所述用户需求包括待存储数据;

基于所述用户需求,确定所需静态移位寄存器的长度;

当所需静态移位寄存器的长度为2n时,使用所述移位寄存器对数据进行存储;

当所需静态移位寄存器的长度大于2n时,基于所述静态移位寄存器的长度确定所述移位寄存器的个数;

将多个移位寄存器依次串联;

使用串联后的多个移位寄存器对数据进行存储;

其中,移位寄存器包括:第二触发器、第三加法器以及单端口ram,所述第二触发器包括输入数据端口、clk端口以及输出端口,所述第三加法器包括地址输入端口、第一输入端口以及输出端口,所述单端口ram包括地址输入端口、数据输入端口、clk端口以及数据输出端口,所述第二触发器的数据输入端口连接所述第三加法器的输出端口,所述第二触发器的输出端口与所述第三加法器的地址输入端以及单端口ram的地址输入端相连,所述第二触发器以及所述单端口ram的clk端输入时钟信号,所述单端口ram的数据输入端输入数据,所述单端口ram的输出端输出数据,n为ram的地址输入端口的宽度。

可选的,所述当所需静态移位寄存器的长度大于2n时,基于所述静态移位寄存器的长度确定所述移位寄存器的个数的步骤包括:

当所需静态移位寄存器的长度大于2n,将所述静态移位寄存器的长度转化为2的幂数之和;

统计所述2的幂数个数,将该个数确定为所述移位寄存器的个数。

本发明提供的一种基于ram的移位寄存器,包括第一加法器、第二加法器、第一触发器以及双端口ram,触发器的数据输入端口与第二加法器的输出端口相连,第一触发器的输出端口分别与第一加法器的地址输入端口、第二加法器的地址输入端口以及双端口ram的写地址逻辑端口相连,第一加法器的输出端口与ram的读地址逻辑端口相连,双端口ram的输出端口d0输出数据,第一触发器的clk端口以及双端口ram的clk端口输入时钟信号,第一触发器的使能端口以及双端口ram的使能端口输入使能信号,第一加法器的地址输入端输入常量或者动态数据。相比于现有技术,本发明可以节约fpga的逻辑资源。

以下将结合附图及实施例对本发明做进一步详细说明。

附图说明

图1是本发明实施例提供的一种基于ram的移位寄存器的内部结构示意图;

图2是本发明实施例提供的一种基于ram的移位寄存器的外部结构示意图;

图3是本发明实施例提供的另一种基于ram的移位寄存器的结构示意图;

图4是本发明实施例提供的ff吸收和bram生成的移位寄存器内部电路变化示意图;

图5是本发明实施例提供的一种基于ram的移位寄存器的存储方法的流程图;

图6是本发明实施例提供的另一种基于ram的移位寄存器的存储方法的流程图。

具体实施方式

下面结合具体实施例对本发明做进一步详细的描述,但本发明的实施方式不限于此。

实施例一

如图1所示,本发明提供的一种基于ram的移位寄存器,包括:第一加法器、第二加法器、第一触发器以及双端口ram,所述第一加法器以及第二加法器包括地址输入端口a、第一输入端口b以及输出端口s,所述第一触发器包括输入数据端口d、clk端口、使能端口ce以及输出端口q,所述双端口ram包括写地址逻辑端口waddr、读地址逻辑端口raddr、数据输入端口di、使能端口we、clk端口以及输出端口d0,所述触发器的数据输入端口与所述第二加法器的输出端口相连,所述第一触发器的输出端口分别与第一加法器的地址输入端口、第二加法器的地址输入端口以及双端口ram的写地址逻辑端口相连,所述第一加法器的输出端口与所述ram的读地址逻辑端口相连,所述双端口ram的输出端口d0输出数据,所述第一触发器的clk端口以及所述双端口ram的clk端口输入时钟信号,所述第一触发器的使能端口以及所述双端口ram的使能端口输入使能信号,所述第一加法器的地址输入端输入常量或者动态数据。

其中,所述双端口ram的输出端口的宽度为m,所述第一加法器的地址输入端的宽度为n。

参考图2,本发明提供的一种基于ram的移位寄存器的可以抽象为一个通用的、抽象的srl模型。在图2中,数据输入端口d、数据输出端口q的宽度是m;地址输入端口addr的宽度是n,则srl的长度2n;clk为时钟输入端口;时钟使能ce端口可选。若addr的输入是一个常量,则srl是静态srl;否则是动态srl。

参考图1,本发明提供的一种基于ram的移位寄存器的内部结构电路包括三部分:

1、双端口ram部分。这是一个同步写、异步读的dpr(dual-portram,双端口ram,有两个独立的地址或两个独立的时钟的ram);

2、触发器ff和实现waddr 1的加法器。它们用于生成ram的写地址;

3、实现waddr addr–1的加法器。它们用于生成ram的读地址

上述网表实际上模拟了srl的行为:写地址逻辑(waddr)实际上是一个计数器,实现q*=q 1,从而周期性地、递增地写每个存储器位,就如srl把每个原始数据d从初始ff逐渐传递到最后一个ff;读地址逻辑(raddr)生成waddr addr–1,从而和ram一起,实现q=ram[addr]功能。

本发明提供的一种基于ram的移位寄存器存在以下特点:

1、~addr的由来

注意到读地址逻辑是waddr addr–1,而逻辑上addr-1=~addr。这里~addr表示是addr的按位取反。因此上图中读地址加法器(raddr)的一个输入是~addr。相比于waddr addr–1,这个转换/化简更节约逻辑资源。

2、粘结逻辑的面积仅正比于srl的长度

这里粘结逻辑是指图1中除ram部分外的电路,即两个加法器和ff。

在基于ram的实现中,粘结逻辑的面积仅仅正比于srl的addr的宽度,即上图中的“n”。

例如,假设一个srl的长度是42,则addr的宽度是6(32<42<64=26),则两个加法器都是6位宽,ff也是6位。

3、ram的面积,正比于数据宽度和srl的长度

在基于ram的实现中,ram的面积正比于srl的大小,即数据宽度和srl的长度。

例如,对于srl32x42,即宽度是32,长度是42的srl,则图1中的ram将是ram32x64,这里32是ram的数据宽度,64是ram的深度。假设用某fpga工艺库中有ram库单元dpr4x16并用其实现此ram32x64,则最后将使用32个dpr4x16:(ram的数据宽度)32=(dpr4x16的数据宽度)4x8,(ram的深度)64=(dpr4x16的深度)16x4,则dpr4x16数是32=8x4。

4、srl的ce要同时作用于生成的ff的ce和ram的写使能we

当srl存在ce时,这个ce必须同时作用于生成电路中的ff和ram:ff的ce和ram的we。如此才能保证生成电路和原始srl逻辑的一致性。

当静态srl的长度是2n时,则图1中的基于dpr方案可以“退化”为spr(single-portram,单端口ram,只有一个地址和一个时钟的ram)方案。这样,不但ram本身可以节省资源,而且粘结逻辑中生成读地址的加法器可以去掉,从而可以减少所需的粘结逻辑资源。更进一步,若srl的长度比较大,从而导致生成的ram本身比较大时,由于此方案的ff直接驱动ram的addr端口,则可以先把spr拆分成dpr,其中的异步读端口吸收其扇入ff,则原本生成的dram可以变成bram,从而有效利用fpga中的bram资源而进一步节约逻辑资源。

本发明提供的一种基于ram的移位寄存器,包括第一加法器、第二加法器、第一触发器以及双端口ram,触发器的数据输入端口与第二加法器的输出端口相连,第一触发器的输出端口分别与第一加法器的地址输入端口、第二加法器的地址输入端口以及双端口ram的写地址逻辑端口相连,第一加法器的输出端口与ram的读地址逻辑端口相连,双端口ram的输出端口d0输出数据,第一触发器的clk端口以及双端口ram的clk端口输入时钟信号,第一触发器的使能端口以及双端口ram的使能端口输入使能信号,第一加法器的地址输入端输入常量或者动态数据。相比于现有技术,本发明可以节约fpga的逻辑资源。

实施例二

如图3所示,本发明提供的一种基于ram的移位寄存器包括:第二触发器、第三加法器以及单端口ram,所述第二触发器包括输入数据端口、clk端口以及输出端口,所述第三加法器包括地址输入端口、第一输入端口以及输出端口,所述单端口ram包括地址输入端口、数据输入端口、clk端口以及数据输出端口,所述第二触发器的数据输入端口连接所述第三加法器的输出端口,所述第二触发器的输出端口与所述第三加法器的地址输入端以及单端口ram的地址输入端相连,所述第二触发器以及所述单端口ram的clk端输入时钟信号,所述单端口ram的数据输入端输入数据,所述单端口ram的输出端输出数据。

其中,所述单端口ram为同步写、异步读的移位寄存器,所述单端口ram由第二触发器通过自身的输出端输入信号至所述单端口ram的地址输入端口驱动。

当静态srl的长度是2n时,例如length=16,图1中的addr的值是15(16-1),则~addr=~(’b1111)=’b0000=0,则raddr=waddr 0=waddr,则读地址加法器可以省略,而原dpr由于raddr和waddr相同而变成spr。

图3中的ram是同步写、异步读,而其addr由ff驱动,因此这个ff可以被吸收,从而使得此时生成的dram变成bram,具体变化过程参考图4所示,由于ram的addr被ff驱动,则首先通过端口拆分,spr变成dpr,且每个端口的addr都被原ff所驱动,如图3中(b)所示;之后异步读端口吸收其扇入ff变成同步读端口,从而原dram变成bram,如图3中(c)所示。

相对于一般srl而言,bram规模都比较大。因此仅当srl的规模到达一定门槛时,才可以把dram变成bram,否则是对bram资源的浪费。而当静态srl规模不够大时,仍会用dram来生成。

本发明提供的一种基于ram的移位寄存器包括:第二触发器、第三加法器以及单端口ram,所述第二触发器包括输入数据端口、clk端口以及输出端口,所述第三加法器包括地址输入端口、第一输入端口以及输出端口,所述单端口ram包括地址输入端口、数据输入端口、clk端口以及数据输出端口,所述第二触发器的数据输入端口连接所述第三加法器的输出端口,所述第二触发器的输出端口与所述第三加法器的地址输入端以及单端口ram的地址输入端相连,所述第二触发器以及所述单端口ram的clk端输入时钟信号,所述单端口ram的数据输入端输入数据,所述单端口ram的输出端输出数据,本发明通过变换可以用bram实现,可以极大地节省srl对一般fpga逻辑资源的占用。

实施例三

如图5所示,本发明提供的一种基于ram的移位寄存器的存储方法,提供移位寄存器,所述存储方法包括:

s51,获取用户需求;

s52,使用所述移位寄存器对用户需求中的待存储数据进行存储;

其中,所述移位寄存器包括:第一加法器、第二加法器、第一触发器以及双端口ram,所述第一加法器以及第二加法器包括地址输入端口、第一输入端口以及输出端口,所述第一触发器包括输入数据端口、clk端口、使能端口以及输出端口,所述双端口ram包括写地址逻辑端口、读地址逻辑端口、数据输入端口、使能端口以及clk端口,所述触发器的数据输入端口与所述第二加法器的输出端口相连,所述第一触发器的输出端口分别与第一加法器的地址输入端口、第二加法器的地址输入端口以及双端口ram的写地址逻辑端口相连,所述第一加法器的输出端口与所述ram的读地址逻辑端口相连,所述双端口ram的输出端口(d0)输出数据,所述第一触发器的clk端口以及所述双端口ram的clk端口输入时钟信号,所述第一触发器的使能端口以及所述双端口ram的使能端口输入使能信号,所述第一加法器的地址输入端输入常量或者动态数据。

本发明提供的一种基于ram的移位寄存器的存储方法,使用本发明提供的移位寄存器,该移位寄存器的转换/化简更节约逻辑资源。

实施例四

对于移位寄存器的长度,有以下分析过程:

一、若srl长度=2n,则用spr实现,而无需dpr,从而节省粘结逻辑的面积;

二、若spr足够大,此spr可用bram实现,而不是dram,如此可以极大地节约一般逻辑资源。

三、对于静态srl,不同于动态srl,其实质就只是一个常量长度的级联ff链,而没有任何其它的逻辑。

一般而言,srl的长度很少正好是2n。但基于以上三点,如果一个srl的长度比较大却不是2n,可以对它进行拆分,即把原来的ff链拆成一系列不同长度的、但长度为2n的子srl,进而这些子srl可以分别用bram或spr来实现。我们把这个过程称为srl的长度拆分。

如此一个原来大的、一般长度的srl的主要部分就可以用bram和/或spr来实现,相比于完全用dpr实现,可以有效地节省逻辑资源。

如图6所示,本发明提供的一种基于ram的移位寄存器的存储方法,提供移位寄存器,存储方法包括:

s61,获取用户需求;所述用户需求包括待存储数据;

s62,基于所述用户需求,确定所需静态移位寄存器的长度;

s63,当所需静态移位寄存器的长度为2n时,使用所述移位寄存器对数据进行存储;

s64,当所需静态移位寄存器的长度大于2n时,基于所述静态移位寄存器的长度确定所述移位寄存器的个数;

s65,将多个移位寄存器依次串联;

s66,使用串联后的多个移位寄存器对数据进行存储;

其中,移位寄存器包括:第二触发器、第三加法器以及单端口ram,所述第二触发器包括输入数据端口、clk端口以及输出端口,所述第三加法器包括地址输入端口、第一输入端口以及输出端口,所述单端口ram包括地址输入端口、数据输入端口、clk端口以及数据输出端口,所述第二触发器的数据输入端口连接所述第三加法器的输出端口,所述第二触发器的输出端口与所述第三加法器的地址输入端以及单端口ram的地址输入端相连,所述第二触发器以及所述单端口ram的clk端输入时钟信号,所述单端口ram的数据输入端输入数据,所述单端口ram的输出端输出数据。

关于面积、延迟和功耗

拆分一般是有利于减少面积的:

1、bram的使用可以极大减少dram的使用,从而减少最后占用的lut数,因为dram一般是等同于使用lut的;

2、即使不使用bram而用dram,拆分也意味着更多的spr的使用,而不是dpr,而一般而言,同等规模的dpr的面积是spr的2倍;更何况,spr的使用还意味着在粘结逻辑中减少一个加法器的使用;

3、但拆分会造成ff数的略略增加,因为每一级的出现都意味着一套粘结逻辑,多级之和必然造成稍多的ff的生成。

拆分意味着串行实现,必不利用延时。因为当仅用dpr实现时,ram部分只是一个ram块,则最后的实现就是一些并联的库单于ram和一个mux。而相对的,当拆分成多个级联的子srl时,每个子srl就对应着一个ram块,则这些级联的ram块必会造成延时的相对变差。尤其是当bram被使用时,延时会变差得更多一些。

而另一方面,ram的使用,无论是dram还是bram,都有助于节省功耗,尤其是相对于当srl都用ff实现且长度比较大时。

本发明提供的一种基于ram的移位寄存器的存储方法,使用实施例二的移位寄存器,通过获取用户需求;所述用户需求包括待存储数据;基于所述用户需求,确定所需静态移位寄存器的长度;当所需静态移位寄存器的长度为2n时,使用所述移位寄存器对数据进行存储;当所需静态移位寄存器的长度大于2n时,基于所述静态移位寄存器的长度确定所述移位寄存器的个数;将多个移位寄存器依次串联;使用串联后的多个移位寄存器对数据进行存储。相比于现有技术,本发明根据用户所需的srl的长度确定是否进行拆分,最后拆分结果确定移位寄存器的个数,以此串联完成存储。因此可以节约资源。

实施例四

作为本发明一种可选的实施例,所述当所需静态移位寄存器的长度大于2n时,基于所述静态移位寄存器的长度确定所述移位寄存器的个数的步骤包括:

步骤a:当所需静态移位寄存器的长度大于2n,将所述静态移位寄存器的长度转化为2的幂数之和;

步骤b:统计所述2的幂数个数,将该个数确定为所述移位寄存器的个数。

例如,假设一个静态srl的长度是4998,则可以做如下拆分:

4998=4096(212) 512(29) 256(28) 128(27) 6

如果bram的门槛深度是512,则长度4096和512的两个子srl可以用2个bram实现,而256、128的两个子srl可以用spr实现。

以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。

再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜