我有一个用VHDL编写的简单状态机。每个向量和变量的大小由通用常数" n"确定。我的想法是:当我改变" n"时,我想立即能够合成。部分设计是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;
然而,由于&#34;选择不是恒定的,因此不能合成。错误。我被其中一个州改变了,它可以在任何模式中改变,因此问题。
答案 0 :(得分:2)
相反,你可以这样做:
process(I)
begin
tester <= (others => '0');
tester(I) <= '1';
end process;