我找到了这个控制FPGA液晶显示的代码,但是它看不懂其中的一些代码,特别是这一部分。
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;
有人能帮我理解一下这里做了什么吗?
发布于 2013-10-24 19:43:59
正在创建此信号以对所创建的字符串进行索引。常量LCD_CMDS是一个需要索引的数组。信号lcd_cmd_ptr正在对该常量进行索引以驱动显示。在这种情况下,它是一个从0到23的整数。
我敢打赌在某个地方有这样一条线: LCD_CMDS(lcd_cmd_ptr)
发布于 2013-10-25 08:46:01
signal lcd_cmd_ptr : integer range 0 to LCD_CMDS'HIGH + 1 := 0;
这段代码定义了一个信号,其范围从0到‘无论LCD_CMDS数组中的最高索引是+ 1’。
VHDL中的“滴答”属性对于编写通用代码非常有用。为了完全泛化,上面的线应该是:
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;
同样,不需要显式初始化。
https://stackoverflow.com/questions/19574520
复制相似问题