Запись с массивом записей в списке чувствительности не работает должным образом

У меня появляется довольно странное предупреждение, когда я пытаюсь синтезировать проект VHDL, который у меня есть. Я пытаюсь построить тетрис, поэтому объект моей модели имеет следующее определение типа:

constant PAIR_WIDTH: natural := 6;
type pair_type is
    record
        x, y: signed(PAIR_WIDTH - 1 downto 0);
    end record; 
type tetromino_shape_type is array(0 to 3) of pair_type;
type tetromino_type is
    record
        shape: tetromino_shape_type;
        color: std_logic_vector(3 downto 0);
    end record;

Эта структура типа дает мне тетромино, которое имеет 4 пары signed для представления положения 4 блоков и std_logic_vector, обозначающее, какой блок следует использовать для рисования тетромино. Единственная «странная» вещь здесь заключается в том, что tetromino_type — это запись с массивом (tetromino_shape_type) записей (pair_type).

Я предположил, что все будет хорошо, используя этот тип для некоторых сигналов, которые действуют как регистры:

signal current_pos_reg, current_pos_next: pair_type; -- position of the current tetromino in grid coordinates
signal current_tetromino_reg, current_tetromino_next: tetromino_type; -- current tetromino piece

Итак, я сделал процесс установки регистров:

process(clk, rst)
begin
    if (rst = '1') then
        state_reg <= idle;
    elsif (clk'event and clk = '1') then
        current_pos_reg <= current_pos_next;
        current_tetromino_reg <= current_tetromino_next;
    end if;
end process;

И еще один процесс для логики следующего состояния:

process(current_pos_reg, current_tetromino_reg)
begin
    --even just keeping the same state as before causes this issue I'm about to show
    current_pos_next <= current_pos_reg;
    current_tetromino_next <= current_tetromino_reg;
end process;

Затем синтезатор (независимо от того, что использует Xilinx ISE (не WebPack)) выдает мне следующее предупреждение:

One or more signals are missing in the process sensitivity list. To enable synthesis of FPGA/CPLD hardware, XST will assume that all necessary signals are present in the sensitivity list. Please note that the result of the synthesis may differ from the initial design specification. The missing signals are:
<current_tetromino_reg.shape<0>.x>, <current_tetromino_reg.shape<0>.y>, <current_tetromino_reg.shape<1>.x>, <current_tetromino_reg.shape<1>.y>, <current_tetromino_reg.shape<2>.x>, <current_tetromino_reg.shape<2>.y>, <current_tetromino_reg.shape<3>.x>, <current_tetromino_reg.shape<3>.y>

По какой-то странной причине члены записей в массиве в записи не включаются в список конфиденциальности. Я ожидал, что они будут включены так же, как будут включены отдельные std_logic членов массива std_logic_vector. Также явно отсутствует в ошибке current_tetromino_reg.block, что также говорит мне о том, что проблемы вызываются только элементами записи массива.

Мой вопрос:

  • Что я делаю неправильно? Я мог бы просто добавить этих отдельных членов в список конфиденциальности, но это кажется утомительным.
  • Это ошибка? Я не эксперт в VHDL (пока я даже не полностью владею языком), но я не могу придумать ни одной причины, по которой это могло бы произойти. Возможно, есть конкретное исключение из правила о том, что автоматически включается в список конфиденциальности, о котором я не знаю?

person Los Frijoles    schedule 04.04.2014    source источник
comment
См. этот вопрос: stackoverflow.com/questions/15091766/ - похоже, это может быть просто незначительный недостаток XST.   -  person fru1tbat    schedule 04.04.2014
comment
Еще одна причина использовать конечные автоматы с одним процессом! Просто поместите всю свою логику следующего состояния в тот же тактовый процесс, что и регистр состояния.   -  person Martin Thompson    schedule 09.04.2014
comment
@MartinThompson Мне показалось, что двухсегментный дизайн более удобочитаем. Используется ли он реже, чем мне хотелось бы думать моим преподавателям? (казалось, у них было довольно негативное мнение о том, чтобы помещать все в один процесс)   -  person Los Frijoles    schedule 09.04.2014
comment
@LosFrijoles - это непрекращающиеся дебаты с мнениями обоих лагерей. Вот один из таких вопросов и ответов: stackoverflow.com/questions/19463359/. По мере совершенствования инструментов кажется, что чисто технических причин для двух процессов становится меньше, но (как вы говорите) некоторые люди находят форму с двумя процессами более читаемой.   -  person Martin Thompson    schedule 10.04.2014


Ответы (1)


Не похоже, что вы делаете что-то не так.

См. AR# 32184 10.1 XST — ПРЕДУПРЕЖДЕНИЕ:Xst:819 — Почему я получаю это сообщение, когда я включаю все сигналы в список чувствительности процесса?

Это известная проблема с XST, если один из ваших сигналов является типом записи другого типа записи.

person Community    schedule 13.08.2014