我们知道格雷码计数的特点就是相邻的码字只有一个比特不同,那么我们在设计格雷码计数时找到这个比特取反就是了。找到这个比特的思路: 先将格雷码换算成二进制码,此二进制码中从LSB到MSB第一个为''0''的比特对应的格雷码位置即为所需位置,如果全''1''则MSB的位置为所需位置。
下面以循环格雷码为例,给出一个VHDL程序。
Library Ieee;
Use Ieee.Std_logic_1164.All;
EnTIty Demo Is Port(
Clock :In Std_logic;
Q : Out Std_logic_vector(3 Downto 0)); --Vector的长度随用户而定,这里只是一个示例。
End Demo;
Architecture MyFavor Of Demo Is
FuncTIon NxG(Argv :Std_logic_vector) Return Std_logic_vector Is --此函数完成输入一个格雷码返回下一个数的格雷码
Alias GV :Std_logic_vector(1 To Argv''Length) Is Argv;
Variable BV,GC :Std_logic_vector(1 To Argv''Length);
Begin
BV(1) := GV(1);
For I In 2 To Argv''Length Loop
BV(I) := GV(I) Xor BV(I - 1);
End Loop;
GC := GV;
For I In Argv''Length Downto 1 Loop
If BV(I) = ''0'' Or I = 1 Then
GC(I) := Not GC(I);
Exit;
End If;
End Loop;
Return GC;
End NxG;
Signal GC :Std_logic_vector(3 Downto 0);
Begin
Process(Clock) Begin
If Rising_edge(Clock) Then
GC <= NxG(GC);
End If;
End Process;
Q <= GC;
End MyFavor;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)