- Это зависит от того, как последовательно или параллельно вы хотите использовать аппаратную реализацию вашего алгоритма.
В блоке всегда есть различие между назначением блокировки "<=" (неблокирующим) и "=". Назначение блокировки похоже на то, что у вас есть в программном обеспечении, все оценивается построчно, что имеет тенденцию к синтезу для последовательной логики с кодированием приоритета с более низкой производительностью. С неблокирующим оператором все назначения в блоке всегда оцениваются одновременно, что имеет тенденцию создавать больше параллельных структур. Скорее всего, именно на этой части вы будете концентрироваться при переносе программного обеспечения на оборудование. </p>
В RTL-дружественном Verilog у вас есть комбинационная логика (непрерывное назначение логического уравнения) и память (регистры и защелки) для сохранения состояния во времени. Ваши структуры данных, закодированные как RTL, вероятно, будут выводить регистры и защелки во время логического синтеза. Ваши структуры данных, вероятно, будут работать при правильном кодировании в Verilog, но то, что имеет смысл выполнять на микропроцессоре, может быть не лучшим способом встроить его в аппаратное обеспечение. Опять же, это зависит.
«if» может использоваться как для комбинационной логики, так и для логики памяти (состояние удержания)
«если», когда записано как троичный оператор (Verilog имеет тот же синтаксис, что и C для этого), синтезируется в мультиплексор (мультиплексор).
«if» также может использоваться в описании логики для регистра, чтобы увидеть, был ли установлен вывод сброса после срабатывания всегда списка заблокированных событий (это только один пример).
Будьте осторожны с «Если»: когда намереваетесь создать комбинационную логику с всегда блоком (список событий не содержит posedge clk или negedge clk, posedge reset, negedge reset и т. Д.) И присвойте комбинационную логическую переменную как часть оператор «если», но затем забудьте о «другом» выражении, которое будет зафиксировано во время синтеза. Отсутствие соответствующего оператора «else» для оператора «if» означает, что ничего не нужно делать (удерживайте значение).
Тип "reg" используется для описания как комбинационной логики, так и логики памяти; То, какая логика синтезируется, зависит от списка событий всегда блока и наличия полного регистра. Код на C обычно переводится в стиль, используемый всегда в блоках.
Тип «провод» используется для непрерывного назначения (комбинационная логика).
ImpulseC - это программно-аппаратный компилятор, который выглядит интригующе.
HDL Coder является сопутствующим продуктом для MATLAB / Simulink для автоматической генерации описания вашего оборудования.
Даже если вы используете эти программные средства для создания описания аппаратного обеспечения, вам все равно захочется понять, что они сгенерировали.