Vivado HLS if Синтез условий

Я хочу синтезировать следующий код в Vivado HLS:

if (x == 1) regA = 1;

При синтезе этого кода соответствующий блок VHDL выглядит примерно так:

if (not(x_synth = logic_0)) regA_synth = logic_1

Проблема с этим кодом заключается в том, что regA присваивается логическая единица, если x не является логическим 0, то есть даже если это U или Z . Есть ли другой способ переписать исходный оператор if, чтобы он был синтезирован таким образом, что regA присваивается логическая единица только в том случае, если x Логика 1?


person wahab    schedule 29.03.2018    source источник


Ответы (1)


Я не думаю, что есть способ сделать это. Возможно, вы можете достичь этого с помощью экспериментов.

Я согласен с тем, что значения U и Z должны распространяться по всему проекту, чтобы гарантировать их перехват на выходе при моделировании в пакетном режиме, но, к сожалению, это не так. Поскольку эти значения не должны исходить из самого вашего кода C, вы, возможно, можете отслеживать входные данные для своего блока. Мне также не нравится тот факт, что Vivado HLS помещает X значений в шины между транзакциями. Это затрудняет обнаружение проводов, которые имеют несколько источников. В любом случае, я хотел бы предоставить Xilinx ваши отзывы, чтобы они могли улучшить инструмент.

person Gyzuh    schedule 11.05.2018
comment
Я пробовал писать код на C по-разному, но всегда получалась одна и та же синтезированная форма. Возможно, это то, на что Xilinx нужно обратить внимание. - person wahab; 14.05.2018