vhdl quartus:范围的左边界必须是常数

时间:2014-06-12 19:07:44

标签: signals vhdl

有没有办法在std_logic_vector中使用变量(信号)而不是使用常量,例如:

dout((8*index + 7) downto 8*index) <= "00000001";

在此示例中,信号为index
提前谢谢

1 个答案:

答案 0 :(得分:0)

假设信号或变量index是整数类型,那应该可以正常工作。如果index是std_logic_vector类型的信号或变量,则需要将其转换为整数。

请参阅以下简单示例(刚刚在我的模拟器中快速编译):

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
library work;
entity thingy is
    port(clk : in std_logic;
           I : in std_logic_vector(3 downto 0);
           O : out std_logic_vector(15 downto 0);
           P : in std_logic_vector(1 downto 0));
end entity thingy;

architecture behav of thingy is
begin
    process (clk)
    begin
      if (clk = '1' and clk'event) then
        O(to_integer(unsigned(P))*4 + 3 downto to_integer(unsigned(P))*4) <= I;
      end if;
    end process;
end architecture behav; --thingy

请注意,此示例依赖于使用numeric_std而不是概要包。

布莱恩·德拉蒙德(Brian Drummond)指出它可能不会合成,但如果没有合成,那么你应该提交错误报告。