新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 循環格雷碼VHDL源程序

        循環格雷碼VHDL源程序

        作者: 時間:2011-11-24 來源:網絡 收藏

          我們知道格雷碼計數的特點就是相鄰的碼字只有一個比特不同,那么我們在設計格雷碼計數時找到這個比特取反就是了。找到這個比特的思路: 先將格雷碼換算成二進制碼,此二進制碼中從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;



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 湛江市| 镇坪县| 疏勒县| 阿巴嘎旗| 铜山县| 广汉市| 浦江县| 惠东县| 阿拉尔市| 禹城市| 乐亭县| 抚松县| 锦州市| 如东县| 宣化县| 碌曲县| 镇原县| 罗甸县| 安陆市| 虞城县| 磐石市| 叶城县| 紫金县| 高密市| 集贤县| 清水河县| 丹东市| 封开县| 五寨县| 浦北县| 保德县| 上饶市| 绥德县| 溧水县| 嘉鱼县| 安宁市| 蒲城县| 天祝| 盐山县| 辽阳市| 海门市|