2014-01-21 4 views
2

Может ли кто-нибудь сказать мне, почему этот код нельзя моделировать. Синтаксис проверки поведения правильный. Я пытаюсь создать 2D-массив целых чисел, который является постоянным.VHDL 2D массив целых чисел

library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 
use IEEE.STD_LOGIC_UNSIGNED.all; 
use IEEE.STD_LOGIC_ARITH.all; 

--selection function 1 

entity S1 is 
    Port ( 
    i : in STD_LOGIC_VECTOR (5 downto 0); 
    o : out STD_LOGIC_VECTOR (3 downto 0)); 
end S1; 

architecture Behavioral of S1 is 

    type matrix is array(0 downto 3, 0 downto 15) of INTEGER range 0 to 15; 
    constant m : matrix := 
     ((14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7), 
     (0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8), 
     (4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0), 
     (15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13)); 

    signal row : STD_LOGIC_VECTOR(1 downto 0); 
    signal col : STD_LOGIC_VECTOR(3 downto 0); 

begin 

    row <= i(5) & i(0); 
    col <= i(4 downto 1); 
    o <= conv_std_logic_vector(m(conv_integer(row), conv_integer(col)), 4); 

end Behavioral; 

Решение: Оно должно быть от 0 до N, а не (0 до N). Сообщение об ошибке было не столь ясным.

+0

Когда вы говорите, что это не может быть смоделировано, что вы имеете в виду? Это не работает? Или это приводит к недействительным результатам? Одна вещь, которую я вижу, это то, что вы определили свой 2D-вектор как 0 вниз 3. Это должно быть 3 до 0. Я не уверен, что произойдет, когда вы сделаете это назад. – Russell

ответ

7

Вам нужна лучшая проверка синтаксиса.

отчеты GHDL:

ghdl -a --ieee=synopsys nullrange.vhd 
nullrange.vhd:18:7: too many elements associated 
nullrange.vhd:18:7: range length is beyond subtype length 
nullrange.vhd:18:7: too many elements associated 
nullrange.vhd:18:7: range length is beyond subtype length 
nullrange.vhd:19:6: too many elements associated 
nullrange.vhd:19:6: subaggregate length mismatch 
nullrange.vhd:20:6: too many elements associated 
nullrange.vhd:20:6: subaggregate length mismatch 
nullrange.vhd:21:6: too many elements associated 
nullrange.vhd:21:6: subaggregate length mismatch 
nullrange.vhd:17:10: default value length does not match object type length 
ghdl: compilation error 

(0 Downto 3) называется "нулевой диапазон", который является законным, но не имеет членов. Таким образом, в агрегации инициализации слишком много элементов ...

+0

Спасибо. Тогда я должен реализовать его с аргументом case. – crow

+1

Не обязательно. Возможно, было бы проще отменить диапазоны '(3 downto 0)' или их направление '(от 0 до 3)'. –

+0

Спасибо, я понял, в чем проблема. Сообщение об ошибке не очень ясно. – crow

Смежные вопросы