它显示了一个错误: 错误:Xst:787-“E:/tumama/tytyty.vhd”第54行:索引值< 4>不在数组范围内。
它是一个“通用”代码,我的嵌入信号A有5位n 我只想在一个案例中使用4位转换。所以我在Y中有4位 注释用于并发代码
但我不明白 谢谢
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity FirstTermExamen is
Generic (n: natural := 4);
Port ( Num : in STD_LOGIC_VECTOR (n-1 downto 0);
Sel : in STD_LOGIC;
Y : out STD_LOGIC_VECTOR (n-1 downto 0)
);
end FirstTermExamen;
architecture Behavioral of FirstTermExamen is
signal A: STD_LOGIC_VECTOR (n downto 0);
begin
-- --Secuencial Description
-- Binary_Gray : process(A, Num, Sel)
-- begin
--
-- --Initial conditions
-- A(0) <= Num(0);
-- A(1) <= Num(0) xor Num(1);
--
-- for i in 1 to n-1 loop
-- if Sel = '1' then A(i+1) <= Num(i) xor Num(i+1);
-- else A(i+1) <= A(i) xor Num(i+1);
--
-- end if;
--
-- end loop;
--
-- for j in 0 to n loop
-- Y(j)<= A(j);
--
-- end loop;
--
--end process Binary_Gray;
--Concurrent Description
A(0) <= Num(0);
A(1) <= Num(0) xor Num(1);
Binary_Gray:
for i in 1 to n-1 generate
begin
A(i+1) <= Num(i) xor Num(i+1) when Sel = '1' else
A(i) xor Num(i+1);
end generate;
output:
for j in 0 to n generate
begin
Y(j)<= A(j);
end generate;
end Behavioral;
答案 0 :(得分:2)
当您的循环索引i
达到值n-1时,您将尝试访问Num(n)
。但是,Num
仅定义为(n-1 downto 0)
。
数字示例适用于n = 4,您的默认情况也是如此:
您生成的i
值为1到3,但访问Num(i+1)
,因此Num(4)
。但是,如上所述,Num
仅在3 downto 0
范围内定义。