VHDL 中的通用向量,赋值位置由变量确定

Generic vector in VHDL, with position of assignment determined by variable

我有一个用 VHDL 编写的简单状态机。每个向量和变量的大小由通用常量 "n" 确定。思路是:当我改成"n"的时候,我想马上就可以合成了。部分设计是“1 of N”代码中的矢量。

端口和信号定义:

tester: out std_logic_vector(n-1 downto 0); -- port
signal I: integer range 0 to n-1:=0;  -- signal

我有:

process(I)
begin
    if I=0 then
        tester<="0001";
        elsif I=1 then
        tester<="0010";
        elsif I=2 then
        tester<="0100";
        else
        tester<="1000";
    end if;
end process;

这显然只适用于 n=4。 我想要的:

process(I)
begin
    tester<=(I=>'1', others=>'0');
end process;

然而,由于 "choice is not constant" 错误,这并没有合成。我被其中一种状态改变了,它可以以任何模式改变,因此出现了问题。

相反,您可以这样做:

process(I)
begin
    tester    <= (others => '0');
    tester(I) <= '1';
end process;