色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 循環(huán)格雷碼VHDL源程序

          循環(huán)格雷碼VHDL源程序

          作者: 時間:2011-11-24 來源:網(wǎng)絡(luò) 收藏

            我們知道格雷碼計數(shù)的特點就是相鄰的碼字只有一個比特不同,那么我們在設(shè)計格雷碼計數(shù)時找到這個比特取反就是了。找到這個比特的思路: 先將格雷碼換算成二進(jìn)制碼,此二進(jìn)制碼中從LSB到MSB第一個為''0''的比特對應(yīng)的格雷碼位置即為所需位置,如果全''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 --此函數(shù)完成輸入一個格雷碼返回下一個數(shù)的格雷碼

            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;



          評論


          技術(shù)專區(qū)

          關(guān)閉