2015-11-26 2 views
3

Я пытаюсь получить yosys, чтобы синтезировать мой проект в структурном verilog для инструмента, который не понимает синтаксис {A, B}, чтобы указать конкатенацию значений A и B.Как упростить составные назначения в yosys

Так, например, когда yosys генерирует операторы, как

assign C = {A,B}; 
assign {D,E} = F; 

инструмент дроссели. Я думал об использовании прохода splitnets для устранения многодиапазонных проводов, но многобайтовые порты все еще вызывают yosys для генерации синтаксиса {}. Даже работает splitnets -ports оставляет некоторые задания как

assign {A, B} = {C, D} 

я, наконец, смог получить эти задания, чтобы исчезнуть с помощью дополнительного пробега opt. Но это, по-видимому, очень грязный способ устранения конструкции {}.

Есть ли какой-нибудь лучший способ устранить эту конструкцию без разделения всех входных портов?

+0

Вы можете включить код для полного модуля Verilog, который демонстрирует эту проблему? Также: '{..}' с правой стороны задания действительно является проблемой? – CliffordVienna

+0

https://github.com/jeremysalwen/combinatorial_aes read_verilog aes_128.v table.v round.v; сглаживаются; удалить aes_128% n; синт; write_verilog -noattr -noexpr out.v; Теперь, когда я думаю об этом, {} может быть проблемой только в левой части назначений. Не уверен, хотя, потому что оба типа всегда появляются вместе. –

ответ

1

Не существует универсально применимого способа для этого. Оператор {..} является частью verilog, и, таким образом, верительный сервер использует его, когда это необходимо.

Однако в примере, который вы указали на все ячейки в verilog, есть однобитовые входы и выходы, поэтому оператор {..} не нужен для назначения портов ячеек, только для назначения проводов друг другу.

Я использовал следующий сценарий (выполняемый в вашем rtl/ directory) в качестве основы:

read_verilog aes_128.v table.v round.v 
hierarchy -top aes_128 
proc; flatten; synth 
# opt_clean -purge 
write_verilog -noattr -noexpr out.v 

Это будет производить файл Verilog со следующими назначениями в нем, которые используют {..} оператор:

$ grep '{' out.v 
assign \a1.S4_0.in = { key[23:0], key[31:24] }; 
assign { \a1.k0a [31:25], \a1.k0a [23:0] } = { key[127:121], key[119:96] }; 
assign \a1.v0 = { key[127:121], \a1.k0a [24], key[119:96] }; 

Однако сигналы a1.S4_0.in, и a1.v0 присутствуют только в дизайне, потому что yosys пытается сохранить как можно больше оригинальных имен сигналов, t o упростить отладку дизайна.

Un-комментирование команда opt_clean -purge позволит yosys удалить эти сигналы, что дает выходной файл, который не использует {..} оператора:

$ grep -c '{' out.v 
0 

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

  • Нет связанных вопросов^_^