一种在多个数据中比较大小的电路的制作方法

文档序号:13331874阅读:348来源:国知局
一种在多个数据中比较大小的电路的制作方法

本电路涉及微电子数字电路设计领域,具体涉及一种在多个数据中比较大小的电路,可用于比较多个数据的相对大小。



背景技术:

在效果上,本电路与排序电路有所不同。排序电路是将一组数据从无序排列转换为有序的排列(从大到小或者从小到大),数据的相对位置发生了变化;而本电路不改变数据的相对位置,而只是对每个数据加了一个序号。

本文中的“序号”是指,某个数据在所在的组或帧中,该数据大于其它所有数据中的多少个——序号越大表明该数据越大,或者小于其它所有数据中的多少个——序号越大表明该数据越小。例如,输入4个数据{a,b,c,d}={8,6,9,7},则输出序号{2,0,3,1}。这些序号解释为:2说明8大于其它数中的两个(8大于6,7),0说明6比其它三个数都小,3说明9大于其它三个数,1说明7比另外一个数大(7大于6)。这其中序号3最大,说明对应的9是最大的数;2次之,说明8是第二大的数,以此类推。

这种情况适用于一些不能打乱数据次序但又需要得到各个数据相对大小的场合。

该电路在通信和图像处理等领域可以使用。几个典型场景是:

(1)通信中一帧数据中修改几个最大数据的值而不改变数据的位置和大小;

(2)一个图像中去掉最亮的和最暗的点,图像其它部分不变;

(3)一组数据在fft变换后,每个频点上的幅值可以用该电路获得相对大小,进而对幅值较大或较小的频点进行处理,处理后还可以通过ifft反变换得到处理后的数据。例如,四个数{x1,x2,x3,x4}可以fft得到频点{f1,f2,f3,f4}上的幅值{x1,x2,x3,x4},如果经比较得幅值x3最大,则根据需要处理为x'3,然后将{x1,x2,x'3,x4}反变换得新的数据{x'1,x'2,x'3,x'4}。

对一段数据流进行比较和排序,在硬件电路中主流的是yasuura提出的bca电路及其变种。相比之下,本电路针对上述应用场合,只给出比较后的结果而不改变数据相对位置;本电路可以处理连续到来的多组数据,而不必在组与组之间插入间隔。



技术实现要素:

它的基本思路是在一帧数据中,每一个数据都有自己的序号,这个序号表示该数据在一帧数据中的相对大小。一帧数据比较完成之后,将数据和序号通过各自的输出总线一起同步输出。请参考图1和2。

一个数据的序号,指该数据比其它多少个数大(或小)。序号越大就说明这个数越大(或越小)。比如,一个数据帧中有n个数,经过本电路的比较后:(1)如果按大于多少个数来算,那么最大的数的序号为(n-1),说明它比其它n-1个数都要大;次大的数的序号为(n-2),说明它比另外n-2个数要大;以此类推;最小的数的序号为0。(2)如果按小于多少个数来算,那么最小的数的序号为(n-1),说明它比其它n-1个数都要小;次小的数的序号为(n-2),说明它比另外n-2个数要小;以此类推;最大的数的序号为0。如果有两个数相等,则可根据实际应用归并到大于或小于的情况。

本电路的思路是,一组数据(设为n个),顺序经过n级流水线。在这个过程中,每一个数据通过选择器和比较器可以跟所有其它n-1个数据进行比较,比较的结果通过加法器累计得到该数据对应的序号。加法器每次累加的结果都跟随流水线同步流动,最后与相应数据一起输出。后续电路只要读到这个序号,就知道对应这个数据的相对大小。

如图3,本电路由两部分组成:选择信号生成电路、n级流水线。具体如下:

选择信号生成电路,与帧起始信号输入端、数据有效信号输入端相连,用于生成n-1个选择信号,其中第i个选择信号(i=1,2,……,n-1)与第i级流水线中的选择器的选择端相连;

n级流水线的第1级,包括一个数据寄存器、一个选择器、一个比较器,其中数据寄存器的输入端与本电路的数据输入端相连,输出端既与比较器的一个输入端相连,又与第二级流水线相连,比较器的另一个输入端与选择器的输出端相连,比较器的输出端连接到下一级流水线;

n级流水线的第i级(i=2,3,……,n-1),包括一个数据寄存器、一个选择器、一个比较器,一个序号寄存器、一个加法器,其中数据寄存器的输入端与上一级的数据寄存器输出端相连,输出端既与比较器的一个输入端相连,又与下一级流水线相连,比较器的另一个输入端与选择器的输出端相连,比较器的输出端连接到加法器的一个输入端,加法器的另一个输入端接到序号寄存器的输出端,加法器的输出端连到下一级流水线,序号寄存器的输入端在第2级流水线中是连到第1级流水线的比较器的输出端,序号寄存器的输入端在第i级流水线(i=3,……,n)中是连到上一级流水线的加法器的输出端;

n级流水线的第n级,包括一个数据寄存器、一个序号寄存器,其中数据寄存器的输入端与上一级的数据寄存器输出端相连,数据寄存器的输出端与本电路的数据输出端相连,序号寄存器的输入端连到上一级流水线的加法器的输出端,序号寄存器的输出端连到本电路的序号输出端;

每一级流水线的选择器的两个输入端分别连接到本电路的数据输入端和数据输出端。

其中的数据位宽可以是任何正整数,在电路中只要保证数据寄存器、选择器输入端、比较器输入端的位宽都等于输入数据位宽即可。

其中各级流水线的序号寄存器、加法器可以做成统一规格的,也可以按如下方式进行细化以节省硬件资源:

(1)位宽由以下方式确定(假设每次处理n个数据):保证每一级流水线的序号寄存器和加法器不溢出即可。参考图6,第1级流水线中仅积累了1次比较的结果,第2级积累2次结果,第i级积累i次结果(i=1,2,……,n-1),则第i级的序号寄存器和加法器(i=2,……,n-1)的位宽分别为最少log2(i-1)向下取整并加1、最少log2(i)向下取整并加1。即,第2级的序号寄存器和加法器分别为最少1比特、2比特;第3级为2比特、2比特;第4级为2比特、3比特;以此类推。

(2)每个加法器的一个输入端是接比较器的输出的,这是一个1比特的信号,所以加法器具体可以简化为有一个输入是1比特,这可以进一步节省资源。

选择信号生成电路的工作机制是,可利用计数器,计算当前这组数据中已经进到流水线的数据个数(设为k),从0计到n-1,然后可利用组合电路根据这个个数生成选择信号,即当k=0时所有选择信号为一种逻辑电平(不失一般性,设为0),当k=1,……,n-1时第1至k个选择信号为另外一种逻辑电平(设为1),而第k+1至n-1个选择信号为逻辑电平0。

相应的,在每个选择器中,当选择信号为0时选通本电路输出端的数据,可以认为是前一帧(或组)的数据,而当选择信号为1时选通本电路输入端的数据,即当前帧(或组)的数据。

这些选择信号的电平随计数值k的变化而变化,与选择器配合,可以保证流水线中前一帧的数据跟前一帧的数据比较,本帧的数据跟本帧比较,不会在帧与帧之间混淆。并且还能保证每个数据都能跟本帧中的其它所有数据各进行一次比较。最终由这些比较的结果累计得到序号。

详细的工作过程请参看后面的具体实施例。

其有益效果是:

(1)纯硬件处理,流水线随时钟而动,延时为n个时钟周期(n为待比较的数据的个数),这是这类处理所需延迟的最小值。以100mhz时钟来算,10万个数据仅需1毫秒。

(2)能够连续处理。该方法不需要存入一个完整帧之后再做比较。而是随来随比,一帧来完也随即比完。而且对于持续的多个数据帧传输的情况,不管是这些帧之间有间隔的还是连续的,电路都能工作,而帧与帧之间互不影响。这一特点很好的适配了信号处理和数据传输的常见接口特征。

以上效果,使得它特别适合高速、实时信号处理领域。

上述两点可参见图1和2。

(3)该电路规整,可扩展性好,适合在集成电路或fpga里大规模实现。

(4)该电路加上一块缓存,即可完成排序。即乱序写入、顺序读出:每次将序号作为缓存地址索引,写入对应数据,写完一帧后按地址从高到低或从低到高读出数据,即完成排序。适合于软硬件结合处理大量数据的场合,由于排序工作由硬件完成,而软件只负责控制简单的读写,将极大减轻软件工作量。

附图说明

图1为当两个数据帧有间隔时,电路的输出情况;

图2为当前后数据帧没有间隔时,电路的输出情况;

图3为本电路的方框图;

图4为本电路的一个具体实施例;

图5为本电路的一个具体实施例的选择信号时序图;

图6为本电路的一个具体实施例的流水线时序图。

具体实施方式

下面结合具体例子说明本电路。不失一般性,假设传输过程中多个数据帧中每一帧有4个数据。其中一帧的数据依次为a,b,c,d;其后续一帧的数据为a',b',c',d';再后面一帧的数据为a'',b'',c'',d''。如图1和图2,分别表示相邻两帧之间有空闲时钟周期的情况,和没有空闲周期的情况。这两种情况,以及由这两种情况组合而成的情况,都可以在本电路中处理。这里以第二种情况为例做具体说明,这样更能清楚的表明本电路对连续到来的多组数据的处理能力(这是前面提到的有益效果之一)。

电路框图如图4。电路由四级流水线和一个选择信号生成电路构成。其中:

第一级流水线:数据寄存器1、选择器1、比较器1,生成信号s1(代表计算序号的中间结果);

第二级流水线:数据寄存器2、选择器2、比较器2、序号寄存器2、加法器2,生成信号s2(代表计算序号的中间结果);

第三级流水线:与第二级的结构一样;

第四级流水线:数据寄存器4、序号寄存器4,生成信号s4(代表计算得到的序号);

(可以看出,除了第一级和最后一级,其它各级流水线的电路结构是一样的)

选择信号生成电路:对每一帧内的有效数据进行计数,每一帧的帧起始信号到来后计数器都从零开始计数,根据数据有效信号,每来一个数据就增加1;根据每一个计数状态由组合电路生成一系列的选择信号sel1~3,用于相应的选择器选择当前的数据输入还是数据输出作为比较器的一个输入(seli为逻辑1时选输入数据,为0时选输出数据,i=1,2,3)。

下面结合时序图(图5和6)说明本例子中电路的工作过程。

(1)第一步,当输入某帧第一个数据a时,电路未对当前数据做任何比较。计数器为0,sel1~3都是0,所有选择器选择的都是输出数据,这是以前帧的数据,与本帧无关。

(2)第二步,输入数据为b时,数据寄存器1中为a,sel1为1,故a与选择的输入数据b作比较,结果体现在信号s1上,简记为a(b);sel2,sel3为0,选择的是输出端的数据,与本帧无关。

(3)第三步,输入数据为c时,

数据寄存器1中为b,sel1为1,故b与选择的输入数据c作比较,结果体现在信号s1上,简记为b(c);

数据寄存器2中为a,sel2为1,故a与选择的输入数据c作比较,结果与上次的结果a(b)累加,体现在信号s2上,简记为a(bc);

sel3为0,选择的是输出端的数据,与本帧无关。

(4)第四步,输入数据为d时,

数据寄存器1中为c,sel1为1,故c与选择的输入数据d作比较,结果体现在信号s1上,简记为c(d);

数据寄存器2中为b,sel2为1,故b与选择的输入数据d作比较,结果与上次的结果b(c)累加,体现在信号s2上,简记为b(cd);

数据寄存器3中为a,sel3为1,故a与选择的输入数据d作比较,结果与上次的结果a(bc)累加,体现在信号s3上,简记为a(bcd);

(5)第五步,输入数据为下一帧数据a'时,

数据寄存器1中为d,sel1为0,故d与选择的输出数据a作比较,结果体现在信号s1上,简记为d(a);

数据寄存器2中为c,sel2为0,故c与选择的输出数据a作比较,结果与上次的结果c(d)累加,体现在信号s2上,简记为c(da);

数据寄存器3中为b,sel3为0,故b与选择的输出数据a作比较,结果与上次的结果b(cd)累加,体现在信号s3上,简记为b(cda);

数据寄存器4中为a,输出数据为a,同时序号寄存器4(波形图中未列出,参见电路图)存储了a与其它3个数据的比较结果a(bcd),体现在“序号输出”s4上;

可见,当a出现在输出数据线上时,它对应的序号也出现在输出s4上。此时,后续电路可以取走结果(数据和对应的序号)

(6)第六步,输入数据为下一帧数据b'时,

数据寄存器1中为a',sel1为1,故a'与选择的输入数据b'作比较,结果体现在信号s1上,简记为a'(b');

数据寄存器2中为d,sel2为0,故d与选择的输出数据b作比较,结果与上次的结果d(a)累加,体现在信号s2上,简记为d(ab);

数据寄存器3中为c,sel3为0,故c与选择的输出数据b作比较,结果与上次的结果c(da)累加,体现在信号s3上,简记为c(dab);

数据寄存器4中为b,输出数据为b,同时“序号输出”s4上给出b与其它3个数据的比较结果b(cda);

(7)以此类推。

从第五步可以看出,当数据a出现在输出端时,它也恰好累计完成跟其它3个数的比较,对应的序号输出在s4上。

从第六步可以看出,当下一帧数据b'和a'出现时,流水线中同时存在着相继两帧的部分数据,但两部分数据互不干扰——受sel1~3的控制,流水线中第一级(数据寄存器1、比较器1等)是处理下一帧数据b'和a',而第二到第四级是处理当前帧的数据d,c,b。由此可知,对于连续到来的多帧数据,该电路可以相应的连续处理,无需在帧之间加入额外的等待。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1