0

FPGA の LCD ディスプレイを制御するこのコードを見つけましたが、コードの一部、特にこの部分を理解できません。

    type LCD_CMDS_T is array(integer range <>) of std_logic_vector(9 downto 0);
    constant LCD_CMDS : LCD_CMDS_T := ( 0 => "00"&X"3C",            --Function Set
                        1 => "00"&X"0C",                --Display ON, Cursor OFF, Blink OFF
                        2 => "00"&X"01",                --Clear Display
                        3 => "00"&X"02",            --return home

                        4 => "10"&X"48",            --H 
                        5 => "10"&X"65",            --e
                        6 => "10"&X"6C",            --l
                        7 => "10"&X"6C",            --l
                        8 => "10"&X"6F",            --o
                        9 => "10"&X"20",            --blank
                        10 => "10"&X"46",           --F
                        11 => "10"&X"72",           --r
                        12 => "10"&X"6F",           --o
                        13 => "10"&X"6D",           --m

                        14 => "10"&X"20",           --blank

                        15 => "10"&X"44",           --D
                        16 => "10"&X"69",           --i
                        17 => "10"&X"67",           --g
                        18 => "10"&X"69",           --i
                        19 => "10"&X"6C",           --l
                        20 => "10"&X"65",           --e
                        21 => "10"&X"6E",           --n
                        22 => "10"&X"74",           --t
                        23 => "00"&X"18");          --Shift left


signal lcd_cmd_ptr : integer range 0 to LCD_CMDS'HIGH + 1 := 0;

ディスプレイに表示する文字の値を保持するために配列が作成されていることがわかりました。しかし、私はこの行を理解していません。

signal lcd_cmd_ptr : integer range 0 to LCD_CMDS'HIGH + 1 := 0;

ここで何が行われたかを理解するのを手伝ってくれる人はいますか

4

2 に答える 2

2

このシグナルは、作成された文字列にインデックスを付けるために作成されています。定数 LCD_CMDS は、インデックスが必要な配列です。信号 lcd_cmd_ptr は、ディスプレイを駆動するためにその定数にインデックスを付けています。この場合、0 から 23 までの整数です。

LCD_CMDS(lcd_cmd_ptr) という行がどこかにあるはずです。

于 2013-10-24T19:43:59.337 に答える
1
signal lcd_cmd_ptr : integer range 0 to LCD_CMDS'HIGH + 1 := 0;

このコードは、0 から「LCD_CMDS 配列の最大インデックス + 1」までの範囲の信号を定義します。

VHDL の「tick」属性は、汎用コードを記述するのに非常に役立ちます。完全に一般的なものにするには、上記の行は次のようにする必要があります。

signal lcd_cmd_ptr : integer range LCD_CMDS'low  to LCD_CMDS'HIGH + 1;

その後、誰か0が配列内のアイテムのエントリを削除すると、信号の範囲がより制限されます。元のケースでは明示的に '0' に初期化しLCD_CMDS'LOW、最も一般的なケースでは に初期化する必要がないことに注意してください。VHDL 仕様では、整数が常に許容される最小値に初期化されることが保証されています。

上記の信号が配列内の最大値まで上昇するだけでよい場合は、より簡潔に書くことができます。

signal lcd_cmd_ptr : integer range LCD_CMDS'range;

繰り返しますが、明示的な初期化は必要ありません。

于 2013-10-25T08:46:01.950 に答える