循环格雷码VHDL源程序

循环格雷码VHDL源程序,第1张

 

  我们知道格雷码计数的特点就是相邻的码字只有一个比特不同,那么我们在设计格雷码计数时找到这个比特取反就是了。找到这个比特的思路: 先将格雷码换算成二进制码,此二进制码中从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;

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2514842.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-05
下一篇 2022-08-05

发表评论

登录后才能评论

评论列表(0条)

保存