我有一个std_logic_vector,x: std_logice_vector(A+B-1 downto 0)
,我希望将最高A
位设置为'1'
,将B
位设置为'0'
,有一个简单的方法吗?
我想做这样的事情:
x <= (A+B-1 downto B <= (others => '1'),
B-1 downto 0 <= (others => '0'));
我的其他计划是定义子信号并加入它们:
signal top: std_logic_vector(A-1 downto 0);
signal bottom: std_logic_vector(B-1 downto 0);
...
top <= (others => '0');
bottom <= (others => '1');
x <= top & bottom;
或者我可以编写一个循环遍历所有位的函数,但这似乎很容易做到这一点。
如果没有简单的方法,因为我需要多次这样做,我可能会定义一个常量并使用它。
答案 0 :(得分:2)
另一种选择是使用别名。例如:
architecture test of foo is
signal x: std_logic_vector(A+B-1 downto 0);
alias x_upper is x(A+B-1 downto B);
alias x_lower is x(B-1 downto 0);
begin
x_upper <= (others => '1');
x_lower <= (others => '0');
end architecture test;
您可以像处理信号一样处理别名。 (它们完全可以合成)。