【问题标题】:Controlling an LCD in VHDL on spartan 6在 spartan 6 上用 VHDL 控制 LCD
【发布时间】:2013-10-24 19:09:18
【问题描述】:

我找到了这个控制 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;

谁能帮我理解这里做了什么

【问题讨论】:

    标签: vhdl lcd


    【解决方案1】:

    正在创建此信号以索引到已创建的字符串。常量 LCD_CMDS 是一个需要索引的数组。信号 lcd_cmd_ptr 正在索引该常数以驱动显示器。在这种情况下,它是一个整数,范围为 0 到 23。

    我敢打赌,某处有一条线: LCD_CMDS(lcd_cmd_ptr)

    【讨论】:

    • 是的,'JB(4)
    • 因此 lcd_cmd_ptr 充当遍历数组字符串的方法,就像例如 'int i, for (i=0,i
    • 我不确定 JA 和 JB 的用途,我假设是 LCD。 Tick High ('high) 是一个 VHDL 属性。以下是所有 VHDL 属性的列表:csee.umbc.edu/portal/help/VHDL/attribute.html。它用于获取最高值并将其插入代码中。是的,你的第二个问题,它就像 C 中的一个 for 循环。
    【解决方案2】:
    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;
    

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

    【讨论】:

    • 感谢您的解释。
    猜你喜欢
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    相关资源
    最近更新 更多