用于产生偶数精简格雷码的方法

文档序号:7509143阅读:268来源:国知局
专利名称:用于产生偶数精简格雷码的方法
技术领域
本发明一般地涉及产生格雷码(Gray code)的方法,更具体地说,本发明涉及用于产生偶数精简(even numbered reduced)格雷码的方法。
背景技术
格雷码是其中所有的二进制整数都具有相同比特数的二进制整数的有序集合,该集合具有这样的特性按照与该集合相关联的排序来看不同的整数时,只有一比特发生变化。尽管在集合中的项中的那些比特的数值可以被解析为阿拉伯二进制数字,但是通常不是通过对集合中的项加1来寻找该项的后继而生成排序。实际上,格雷码是将二进制整数序列安排到上述具体类型排序中的“人为”安排,并且存在多于一种格雷码。尽管编程执行的算法和逻辑操作可以用来产生格雷码,并且然后对其进行操作,在硬件中实现的选通(gating)也可以“加”和“减”格雷码计数器,并且也可以在格雷码和真正的二进制之间转换,但通常认为这些操作在本质上不是算术的。
格雷码在限制编码器中的不定性(ambiguity)、以及跨过由不同时钟信号控制的机构的边界进行通信的接口中的不定性方面是有用的,对于限制可能由大量逻辑元件同时改变状态(例如,从001111转变到010000)所可能导致的电源和地信号上的噪声或假信号(glitch)的产生也是有用的。在高速数据通信电路中,通常所使用的格雷码是在硬件中实现的;所述硬件例如是使用具体格雷码计数并用于有限状态机寻址的计数器。
有一种具体的格雷码常常被称作“标准”格雷码;其是一类被恰当地称作反射二进制码的码的流行实例。反射二进制码是一种循环码,并且对于n个位大多都具有完整的2n个不同的项。(“循环”的意思是排序中的“第一”和“最后”项仍旧只差一位,因而该排序“环绕”来从头再开始)。这些反射二进制码可能是在1953年3月17日授权的题为PULSECODE COMMUNICATION的美国专利2,632,058中由贝尔电话实验室的Frank Gray首先描述的。随后,相当多的注意力集中到了格雷码上,无论是“标准”格雷码还是其他格雷码。例如,参见1966年由John Wiley&Sons出版的Montgomery Phister,Jr.所著LOGICAL DESIGN OF DIGITALCOMPUTERS第8版中的附录II;1977年由Prentice-Hall出版的Reingold、Nieverglet和Deo所著Combinatorial AlgorithmsTheory andPractice(ISBN 0-13-152447-X)中的§5.2(节的小节);以及1992年由Cambridge University Press出版的NUMERICAL RECIPES IN CTHE ARTOF SCIENTIFIC COMPUTING(ISBN 0-521-43108-5)中的§20.2。正如下面的网址的内容所示,格雷码在各种不同的领域中不断得到日益广泛的应用http//www.nist.gov/dads/HTML/graycode.html,以及http//www.cs.bham.ac.uk/Mirrors/ftp.de.uu.net/EC/clife/www/Q21.htm。
用于发现或产生格雷码的传统技术受限于具有2n个项的码,其中n是每个整数的比特数。这很不幸,因为存在一些应用,在这些应用中,具有较少项数的格雷码就足够了。但是,2n格雷码的大多子集都是非循环的,而这是可能极大地妨碍了它们的有用性的缺点。对于那些不需要完整的2n个项的应用来说,用于产生具有少于2n个项的循环格雷码的可靠方法能节省硬件和功耗。当然,少于2n个项的意思是n比特格雷码中的完整的2的幂个项比实际需要的多,并且某个数目m(其中2(n-1)<m<2n)个条目就足够了。所以问题是“如何找到具有m个项的n比特循环格雷码?”发明内容本发明公开了对于任何自然数k,允许产生具有2k个项的n比特循环格雷码(“2k格雷码”)的算法,从而提供了一种解决方案,解决了寻找具有少于2n个项的n比特循环格雷码的问题,其中2(n-1)<2k<2n,并且n是正整数。我们把这种格雷码称作“精简”格雷码。简而言之,该方法包括用反射二进制技术来构造2n个项的n比特码,然后选择整个反射二进制码的前一半中的后k个有序项,接着是整个反射二进制码的后一半中的前k个有序项。这些选出的有序的2k个项是缩短了但仍旧循环的(精简的)n比特格雷码。或者,也可以选择整个反射二进制码的前一半中的前k个有序项,接着是整个反射二进制码的后一半中的后k个有序项。如果将格雷码表示为这样的表,该表的列是比特位置而行是码项,则可以在选择2k个之前或者在选择2k个之后随意交换整个列,以产生表面看起来不是“反射”格雷码的其他不同的循环精简格雷码。一旦识别出循环精简格雷码,就可以利用例如下述Verilog描述驱动的标准综合工具(例如Synopsys或Simplify),轻易获得该格雷码在硬件中的门级电路实现(例如,计数器、格雷-二进制转换器),其中所述Verilog描述描述了码中的项如何相互关联(例如,顺序、映射),以及如何与任何被施加的控制信号(例如,增、减)相关联。


图1是产生4比特10状态精简2k格雷码的示例;图2是产生4比特12状态精简格雷码的示例,但是该格雷码的列已被重安排为不同于反射二进制码;并且图3是图示了在下述数据通信环境中可以怎样使用精简格雷码的简化硬件方框图在该数据通信环境中,通过FIFO(先进先出)系统对输入输出数据进行排队和取回。
具体实施例方式
首先考虑如何构造n比特并且具有2n个状态的反射二进制格雷码。尽管有各种解释或诀窍,但是我们还是从前述的web站点www.nist.gov直接获得下面的方法。
一种构造n比特格雷码的方法以n-1比特的格雷码开始。现在我们从2比特格雷码开始(在本示例和随后的那些示例中,状态序号(Si)被图示在每个格雷码项的左侧)
(a)S000S101S211S310现在在n-1比特的格雷码下面重复其自身,但是是以反序重复S000S101S211S310S410S511S601S700现在在前一半(或上半部分)的左边添0或1,并且在后一半(或下半部分)的左边添加在第一部分的左边添加的数的补数(c) 或(d)S0000S0100S1001S1101S2011S2111S3010S3110S4110S4010S5111S5011S6101S6001S7100S7000结果是两个反射二进制3比特格雷码。当然,也可以从不同的2比特格雷码(00,10,11,01)开始。并且为了以免读者误信反射二进制格雷码是唯一的格雷码,这里给出两个非反射3比特格雷码
(e) 和(f)S0000S0000S1100S1001S2101S2101S3111S3100S4110S4110S5010S5111S6011S6011S7001S7010但是,(e)或(f)都可以用作创建4比特反射二进制格雷码的起点。很清楚,存在一大族格雷码,而反射二进制格雷码仅仅是该族的子集。(不难从反射格雷码得到非反射格雷码—只将最左列与某一其他列交换。那就是如何从(c)得到(f)的方法。最左列和中间列被交换了。)现在,在进一步前进之前,存在一些应当指出的东西。我们从其开始的各种格雷码的示例(a)、(c)和(d)共有令人感兴趣的性质。注意可以怎样将码放置到关于有序集合的中部对称的成对对应位置中的。即,(a)的S1与S2、、以及S0与S3,同样,(c)和(d)的S3/S4、S2/S5、S1/S6、S0/S7。这种对应的实质是所涉及的码项在格雷码中可以互为前序或者后继。这并不意味着可以用一个码项交换另一个码项,但是的确意味着这种对可以成为“连接点”,该“连接点”能连接在其他部分被丢弃之后剩余的精简格雷码的两个其他片段。即,这种性质提供了一种方法来缩短格雷码,并保持其循环。我们称这种成对对应的性质为关于中点“平衡”,并且把示例(a)、(c)和(d)称作平衡格雷码的实例。
实际的格雷码的任何实例都是有限的,并且正如旋转球体的轴具有两个极,“平衡”的概念确保存在第二种转变,关于该转变也可以遵守平衡条件。所以,(c)不仅关于中点转变S3/S4平衡,而且也关于S7/S0平衡。可以说在这种平衡位置的任一一端都存在码对,形成被称作“对称翻转序列”的序列。所以,提前看看图1,格雷码1中的S0/S15、S1/S4和S2/S13是对称翻转序列,而图2中的格雷码9的S7/S8和S6/S9也是对称翻转序列。
本申请的读者稍加思考便能相信任何反射二进制格雷码都是如上所述平衡的,并且包含有对称翻转序列。这之所以如此,是由于在一个码自身之下以反序重复该码的镜像动作所致。但是,绝对不能认为所有的格雷码都是平衡的。在示例(e)中,S2/S5就不能成为格雷码中相邻的对。很明显,(e)也不是通过反射得来的。但是,3比特8状态格雷码(e)仍旧可以用作反射二进制格雷码构造过程(a)-(d)的开始位置,以产生平衡的16状态4比特格雷码,并且该格雷码包含有对称翻转序列。
现在参考图1,图1图示了产生下述格雷码的方法的代表,该格雷码是在每个4比特的码项中表示的具有10个状态的精简偶数格雷码(reduced even numbered Gray code)。该格雷码从“标准”格雷码1开始,在该示例中,其是用来播种如上所示的反射二进制格雷码构造过程的(c)。注意,作为反射码,格雷码1是关于其中部对称的,所述中部是S7和S8之间的转变2。由于希望得到10状态精简格雷码,所以选择就在转变2之前的5个状态S3-S3和就在转变2之后的5个状态S8-S12,总共10个状态S3-S12。这留下3个最前的状态5S0-S2和3个最后的状态6S13-S15未使用。由于格雷码1是平衡的,所以所选择的多个状态3和4的并集也是循环格雷码。即,(旧的)S3和(旧的)S12可以是格雷码中的相邻项。将这10个状态重新编号为(新的)S0-S9,并且将其作为期望的精简格雷码8,如10状态4比特精简格雷码表7所示。
现在参考图2,其中图示了图1的方法的另一种表示。在这种情形中,寻求4比特的12状态精简格雷码,尽管使用了相同的一般方法,但是还是存在某些差别。首先,在图2中用作起点的的格雷码9与在图1中使用的格雷码1不同。该格雷码不是在介绍性课本和文章中的解释性示例中常常使用的“标准”格雷码。相反,它是从前述的3比特非反射格雷码(e)得来的。我们也可以选择从(f)开始。无论如何,反射二进制码技术被应用到(e)来产生4比特16状态的平衡循环格雷码9。为了产生12状态精简格雷码,丢弃了4个状态在原始格雷码9中的中间(S7/S8)转变之上的两个状态10,以及在其下的两个状态11。结果就是12状态精简格雷码12。
读者将会理解,图1和图2之间的本质差别不是所产生的精简格雷码中的状态数目,而是所丢弃的状态的位置。相对于将码图示为表的通常方式,通过将下述对称翻转序列的成员丢弃来形成不同的精简格雷码,其中所述对称翻转序列关于位于(原始未精简的)表中不同位置的作为“平衡点”的转变对称。由于反射二进制格雷码是循环的,所以平衡点位于表格排列中的何处只取决于在原始表中选择那个码项作为第一码项。当然,由于作为结果的精简格雷码是循环的,所以其具有数种表格排列。
这样,一般而言,为了寻找n比特2k个码项的精简格雷码,可以从(n-1)比特的格雷码开始,从而产生2n个项的相关循环反射二进制码。然后,对称地丢弃属于对称翻转序列的某一数目q对码项,而留下2k个项的循环精简格雷码,其中2(q+k)=2n。
最后,现在参考图3。图3是包含精简格雷码的具体硬件装置的简化方框图。在某些光纤信道数据通信部署中,弹性FIFO(先进先出)是重要的元件。该弹性FIFO跨越时钟域边界连接10比特宽的数据。FIFO由12组触发器的排列组成,每组都足够大,以包含一个数据字。12状态二进制写计数器18响应于FIFO写时钟来为输入数据确定FIFO位置。12状态读计数器响应于FIFO读时钟来确定用于数据输出的FIFO位置。这两个计数器在方框17被相互比较17来产生涉及操作的其他方面的控制信号(未示出)。
为了减少跨越时钟域边界的电噪声和亚稳度错误,二进制读计数在方框14被转换成12状态精简格雷码,此后,其在方框15被与FIFO写时钟同步化。同步化之后,该格雷码在方框16被转换回二进制以用于在方框17处进行比较。
应当理解,这种相同的硬件功能也可以用以格雷码进行计数的计数器作为开始的计数器的相关部署实现,并且不用格雷码和二进制之间的转换。但是,如果认为实现二进制数值比较比格雷码容易,则转换是有用的。
权利要求
1.一种产生对于自然数k具有2k个项的n比特精简格雷码的方法,所述方法包括以下步骤(a)对其r个有序项为(a、b、c、…、i、j)的(n-1)比特格雷码进行反射操作,以产生2r个有序项为(a、b、c、…、i、j、j、i、…、c、b、a)的中间循环码,r大于k,并且多个项(…、b、a、a、b、…)和(…、i、j、j、i、…)代表所述项的排序中的对称翻转序列;(b)向所述中间码的前一半中的有序项(a、b、c、…、j)中的每一个中的所选位置添加第一比特值来产生n比特的项,向所述中间码的后一半中的有序项(j、…、c、b、a)中的每一个中的所述所选位置添加所述第一比特值的补数来产生n比特的项,所述中间码的所述前一半和所述后一半的添加后的版本的组合形成2r个项的循环反射二进制格雷码;和(c)从步骤(b)的2r个项的所述循环反射二进制格雷码对称地丢弃对应于对称翻转序列的2(r-k)个连续项,留下2k个项的n比特循环精简格雷码。
2.如权利要求1所述的方法,其中,步骤(a)的所述(n-1)比特格雷码自身是反射二进制格雷码。
3.如权利要求1所述的方法,其中,步骤(a)的所述(n-1)比特格雷码自身是精简格雷码,其中2k小于2(n-1)。
4.如权利要求1所述的方法,其中2k小于2(n)并大于2(n-1)。
5.包含根据权利要求1产生的格雷码的装置。
全文摘要
通过下述步骤建立具有2k个项的n比特循环精简格雷码,其中对任何自然数k,文档编号H03M7/14GK1744443SQ20051007512
公开日2006年3月8日 申请日期2005年6月8日 优先权日2004年8月30日
发明者格诚·彼得·林, 周羽 申请人:安捷伦科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1