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;

然后,如果有人删除了数组中 item 的条目0,则信号的范围将更加有限。请注意,在原始情况下显式初始化为 '0' 并LCD_CMDS'LOW在最一般的情况下显式初始化是不必要的。VHDL 规范保证整数总是初始化为它们允许的最小值。

如果上面的信号只需要上升到数组中的最大值,你可以写得更简洁:

signal lcd_cmd_ptr : integer range LCD_CMDS'range;

同样,不需要显式初始化。

于 2013-10-25T08:46:01.950 回答