Разница между RTL и поведенческим верилогом

10

Может кто-нибудь сказать мне, в чем разница между RTL и поведенческим кодом Verilog? Есть ли четкое разграничение между проектами на этих двух уровнях?

Акаш Сингх
источник

Ответы:

5

Поведенческий код более высокого уровня и обычно не может быть синтезирован. Такие конструкции, как циклы, задержки и «начальные» операторы являются поведенческими.

Код RTL является низкоуровневым и предназначен для синтеза. Он определяет схему как комбинацию взаимосвязанных регистров и операций, выполняемых над сигналами между этими регистрами.

Взято с Yahoo Ответы и найдено сразу с Google!

Леон Хеллер
источник
1
Циклы могут быть использованы в коде RTL при условии, что количество итераций ограничено. Некоторые инструменты также поддерживают использование встроенных блоков для определения условий включения.
Питер Грин
Этот вопрос / ответ был фактически первым ответом, который Google дал мне
Drewster
3

Код «Уровень передачи регистра» - это код, описанный в терминах регистров и комбинаторной логики, который расположен между ними и предназначен для использования в качестве входных данных для инструмента синтеза. Код придерживается синтезируемого подмножества [1] языка. Там нет явных задержек, все сроки в терминах фронта часов. Структуры, представляющие защелки, управляемые уровнем, как правило, избегают. Регистры, как правило, синхронизируются с небольшим количеством часов, подробности которых могут быть переданы анализатору времени. Обычно предполагается, что комбинаторная логика [2] располагается в одном такте, что ограничивает ее сложность. Это более высокий уровень, чем модель уровня затвора, но он все еще определяет, какое значение имеет каждый регистр в каждом такте.

«Поведенческий» код - это, как правило, код, описывающий beviour на более высоком уровне для использования в симуляции, но он не предназначен для синтеза. Он может использоваться для описания среды, окружающей ваш дизайн, в симуляции. Он может использоваться в качестве начального этапа проектирования для создания общего проекта до того, как детальный дизайн RTL отдельных модулей будет пройден.

[1] Точное допустимое подмножество варьируется в зависимости от инструментов синтеза.
[2] Если это не происходит в течение одного цикла, тогда симуляция и синтез могут дать разные результаты, и анализатор синхронизации покажет нарушение, если явно не сказано не делать этого.

Питер Грин
источник
2

Более обобщенное определение.

Поведенческий код: по определению он определяет поведение цифрового компонента. Он не дает информации о том, как он будет реализован в реальном HW (синтез). Он не предоставит информацию о том, как будут реализованы регистры и вентили для выполнения требуемой операции. Это больше похоже на написание алгоритма или FSM на C.

RTL: это более точная форма цифрового компонента. Он дает информацию о том, как код будет реализован как фактическое HW (после синтеза). Также это дает информацию, как данные будут переданы между регистрами и воротами.

Digeek
источник
1

Это один и тот же язык, но используются разные стили. С опытом вы можете отличить их быстро, вот несколько особенностей каждого:

Поведенческий код verilog, как правило, больше похож на последовательную компьютерную программу, выполняющуюся сверху вниз в initial beginблоке. Вы можете обнаружить, что в поведенческих модулях верхнего уровня не определено никаких портов ввода / вывода, так как выходные данные могут быть в средствах моделирования, таких как консоль $display()или файловая система с $openили дампер формы волны с $dumpfileи $dumpvars. Следите за задержками между утверждениями, реализованными с использованием, например, длительного времени ожидания моделирования #4000и вызова задач wishbone_master.checked_read(addr, value). Для этих конструкций более высокого уровня не очевидно, каким будет / может быть синтезированный технологический эквивалент.

Verilog для синтеза всегда имеет порты ввода / вывода, так как без подключенных портов модуль не имеет побочных эффектов и может быть устранен [1]. Задержки, вероятно, реализуются путем подсчета циклов некоторых конкретных часов. Обратите внимание, что некоторые функции системы Verilog, например, $clog2(PARAMETER)могут быть разрешены в коде для синтеза, поэтому присутствие в $functionлюбом случае не является гарантией. Код для синтеза имеет тенденцию включать в себя множество независимых «процессов», каждый из которых имеет список чувствительности. Некоторые технологии допускают initial beginблоки для инициализации памяти, поэтому это не является гарантией.

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

[1] за исключением некоторых IP-блоков, которые могут подключаться к внутренним микросхемам, например JTAG

shuckc
источник