2013-09-26 60 views
0

它显示一个错误: 错误:Xst:787 - “E:/tumama/tytyty.vhd”第54行:索引值< 4>不在范围内数组。通用二进制灰色,灰色二进制转换器,逻辑错误

它是一个“通用”代码,我的嵌入信号A有5位n 我只想用4位来转换一个案例。所以,我有4位Y中 的意见是对的并发代码

,但我不明白 感谢

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; 

回答

2

当你的循环索引i达到值N-1,那么您尝试访问Num(n)。但是,Num仅限于(n-1 downto 0)的范围。

一个数字的例子是对于n = 4,因为是默认情况下:
您生成从1至3 i值,但访问Num(i+1),因此Num(4)。但是,如上所述,Num仅在3 downto 0范围内定义。