在VHDL

时间:2016-04-19 11:24:35

标签: vhdl

我有一个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;

或者我可以编写一个循环遍历所有位的函数,但这似乎很容易做到这一点。

如果没有简单的方法,因为我需要多次这样做,我可能会定义一个常量并使用它。

1 个答案:

答案 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;

您可以像处理信号一样处理别名。 (它们完全可以合成)。