循环格雷码VHDL源程序

来源:本站
导读:目前正在解读《循环格雷码VHDL源程序》的相关信息,《循环格雷码VHDL源程序》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《循环格雷码VHDL源程序》的详细说明。
简介:我们知道格雷码计数的特点就是相邻的码字只有一个比特不同,那么我们在设计格雷码计数时找到这个比特取反就是了。找到这个比特的思路: 先将格雷码换算成二进制码,此二进制码中从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;

提醒:《循环格雷码VHDL源程序》最后刷新时间 2024-03-14 01:14:56,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《循环格雷码VHDL源程序》该内容的真实性请自行鉴别。