Verilog 格雷计数器

17 Mar 2025 | 6 分钟阅读

格雷码是一种二进制数字系统,其中一次只有一个位会改变。如今,格雷码已广泛应用于数字世界。它将有助于纠错和信号传输。格雷计数器在 VLSI 领域的设计和验证中也很有用。

Verilog Gray Counter

格雷码将整数编码为位序列,其属性是相邻整数的表示形式仅在一个二进制位置上有所不同。

格雷码有不同的类型,例如平衡、二进制反射、最大间隙和对映格雷码。

计数器的主要功能是产生指定的输出序列,有时也称为模式生成器。

设计

在格雷码中,一次只有一个位发生变化。此设计代码有两个输入:时钟和复位信号,以及一个将生成格雷码的 4 位输出。

首先,如果rstn信号为高电平,则输出将为零,并且一旦rstn变为低电平,在clk的上升沿,该设计将生成一个四位格雷码,并在clk信号的每个上升沿继续生成。

可以升级此设计代码并将二进制数作为输入,并且此设计将用作二进制到格雷码转换器。

硬件原理图

Verilog Gray Counter

测试平台

它产生以下输出,例如

ncsim> run
T=0 rstn=0 out=0xx
T=10 rstn=0 out=0x0
T=30 rstn=1 out=0x0
T=50 rstn=1 out=0x1
T=70 rstn=1 out=0x3
T=90 rstn=1 out=0x2
T=110 rstn=1 out=0x6
T=130 rstn=1 out=0x7
T=150 rstn=1 out=0x5
T=170 rstn=1 out=0x4
T=190 rstn=1 out=0xc
T=210 rstn=1 out=0xd
T=230 rstn=1 out=0xf
T=250 rstn=1 out=0xe
T=270 rstn=1 out=0xa
T=290 rstn=1 out=0xb
T=310 rstn=1 out=0x9
T=330 rstn=1 out=0x8
T=350 rstn=1 out=0x0
T=370 rstn=1 out=0x1
T=390 rstn=1 out=0x3
T=410 rstn=1 out=0x2
Simulation complete via $finish(1) at time 430 NS + 0

平衡格雷码

在平衡格雷码中,不同坐标位置的变化次数尽可能接近。

如果格雷码的转换计数全部相等,则它是均匀的或均匀平衡的。

如果格雷码的所有转换计数都是相邻的 2 的幂,则它们也可以是指数平衡的,并且对于 2 的每个幂都存在这样的代码。

例如,一个平衡的 4 位格雷码有 16 个转换,可以均匀地分布在所有四个位置(每个位置四个转换),使其均匀平衡。

n 元格雷码

除了二进制反射格雷码之外,还有许多特殊类型的格雷码。一种这样的格雷码是 n 元格雷码,也称为非布尔格雷码。顾名思义,这种类型的格雷码在其编码中使用非布尔值。

例如,3 元三进制格雷码将使用值 {0, 1 和 2}。(n, k)-格雷码是具有 k 位数的 n 元格雷码。 (3, 2)-格雷码中的元素序列是:{00, 01, 02, 12, 11, 10, 20, 21 和 22}。

(n, k)-格雷码可以像 BRGC 一样递归构造,也可以迭代构造。

单调格雷码

单调码在互连网络理论中很有用,尤其是在最小化处理器线性阵列的膨胀方面。

如果我们将二进制字符串的权重定义为字符串中 1 的数量,那么尽管我们显然不能拥有具有严格递增权重的格雷码,但我们可能希望通过使代码在达到下一个权重之前运行通过两个相邻权重来近似这一点。

贝克特-格雷码

另一种类型的格雷码,贝克特-格雷码,以爱尔兰剧作家塞缪尔·贝克特的名字命名,他对对称性感兴趣。他的戏剧四重奏以四位演员为特色,分为十六个时间段。每个时期都以四位演员之一进入或离开舞台而结束。

该剧以一个空舞台开始,贝克特希望演员的每个子集都恰好出现一次。一个 4 位二进制格雷码可以代表当前在舞台上的演员集合。

然而,

贝克特对剧本提出了额外的限制:他希望演员的进出方式是,在舞台上时间最长的演员总是离开的演员。

然后,演员可以用先进先出 (FIFO) 队列表示,这样,出队的演员始终是最先入队的演员。

贝克特未能为他的戏剧找到贝克特-格雷码,事实上,对所有可能序列的详尽列举表明,对于 n = 4 不存在这样的代码。今天已知对于 n = 2、5、6、7 和 8 存在这样的代码,而对于 n = 3 或 4 不存在。

盒中蛇码

盒中蛇码或蛇是在 n 维超立方体图中感应路径的节点序列,而盒中线圈码或线圈是在超立方体中感应循环的节点序列。

从格雷码的角度来看,这些序列具有检测任何单比特编码错误的功能。

单磁道格雷码

另一种格雷码是由Norman B. Spedding 开发并由Hiltgen、PatersonBrandestini 在“单磁道格雷码”(1996 年)中改进的单磁道格雷码 (STGC)。

STGC 是 P 个长度为 n 的唯一二进制编码的循环列表,因此两个连续的单词仅在一个位置上不同。当将列表作为 P × n 矩阵检查时,每列都是第一列的循环移位。

该名称来自它们在旋转编码器中的使用,其中许多磁道由触点感应,从而在每个磁道中产生 0 或 1 的输出。为了减少由于不同触点没有在同一时间切换而产生的噪声,优选设置磁道,以便触点的数据输出采用格雷码。

为了获得高角度精度,需要大量的触点;要实现至少 1 度的精度,每次旋转至少需要 360 个不同的位置,这至少需要 9 位数据和相同数量的触点。

如果所有触点都放置在相同的角度位置,则需要 9 个磁道才能获得具有至少 1 度精度的标准 BRGC。但是,如果制造商将触点移动到不同的角度位置但在距中心轴相同距离的位置,则需要将相应的“环形图案”旋转相同的角度才能给出相同的输出。

二维格雷码

二维格雷码用于通信,以最小化正交幅度调制星座图中相邻点的误码数。

在标准编码中,水平和垂直相邻的星座点相差一位,而相邻的对角点相差 2 位。


下一个主题文件操作