假设我在声明的std_logic_vector中有一个位或一个位的别名,如下所示:
signal CR : std_logic_vector(7 downto 0);
alias CR_ARM : std_logic is CR(0);
alias CR_PS : std_logic_vector(3 downto 0) is CR(7 downto 4);
如何访问别名的范围或位置,例如:
singal tmp : std_logic_vector(7 downto 0); -- output bus vector
tmp(CR_ARM'range) <= CR_ARM; -- does not compile
答案 0 :(得分:1)
仅为数组类型定义范围。即使VHDL-2017将为标量类型添加范围,它也不会解决您的问题,因为您想知道别名是在哪个位创建的。
别名在VHDL中是透明的。没有机制来反映别名。
您可以使用此解决方法,它看起来不太好:
signal CR : std_logic_vector(7 downto 0);
alias CR_ARM : std_logic_vector is CR(0 downto 0);
signal tmp : std_logic_vector(7 downto 0); -- output bus vector
-- now a slice name works
tmp(CR_ARM'range) <= CR_ARM;
你的第二个例子没有按预期工作。您应该使用相同的范围约束声明别名,否则在使用CR_PS'range
时将分配其他位。