考虑以下 VHDL 代码:
constant c : std_logic_vector(7 downto 0) := (7 downto 6 => '1', others => '0');
在这里,索引 7 和 6 很重要:它们指示哪些元素应该为 1,编译器可以从中推导出哪些元素应该为 0。
问题 1
如果我理解正确,这也可以写成
constant c : std_logic_vector(7 downto 0) := (7 downto 6 => '1') & (5 downto 0 => '0');
现在我想知道这到底是如何工作的,以及索引是否仍然重要或只是它们之间的差异。按照我的理解,表达式(x downto y => z)
创建了一个带有 indices 的数组x downto y
,其元素都等于z
(并且具有相同的类型)。但是当数组连接时,这些索引重要吗?即,我是否还可以编写以下任何内容:
constant c : std_logic_vector(7 downto 0) := (1 downto 0 => '1') & (5 downto 0 => '0');
constant c : std_logic_vector(7 downto 0) := (99 downto 98 => '1') & (4 downto -1 => '0');
当然,人们可以说那些陈述,尤其是。最后一个,不是很清楚,但我的问题是:他们会有相同的结果吗?或者它们会导致某种错误或错误?
我想知道这个的原因是你也可以写
constant c : std_logic_vector(7 downto 0) := "11" & "000000";
并且文字"11"
没有指定任何范围,所以我不确定这个文字的确切类型是什么,但肯定不是std_logic_vector(7 downto 6)
.
问题2
最后,我想知道两者之间有什么区别
constant c : std_logic_vector(7 downto 0) := (7 downto 6 => '1') & (5 downto 0 => '0');
和
constant c : std_logic_vector(7 downto 0) := (7 downto 6 => '1', 5 downto 0 => '0');
我的意思是:你有什么理由想要/需要写前者(这似乎更容易出错,因为如果你交换两个聚合,它会产生意想不到的结果)而不是后者?还是只是口味问题?