«Шаблоны» и разработка в Verilog? - PullRequest
1 голос
/ 19 февраля 2012

Я читаю и пытаюсь понять какой-то verilog, и выскочила директива компилятора:

// synopsys template

Но я не знаю, что это такое и что он делает.Мой Google Fu при изучении вариантов «шаблонов verilog» привел к большему количеству примеров кода verilog, чем ответов.

Я нашел это краткое руководство пользователя: http://acms.ucsd.edu/info/documents/dc/syn3.pdf,, которое на p282 предоставляет некоторую информацию, директивукажется, влияет на эту переменную:

hdlin_auto_save_templates

Controls whether HDL designs containing parameters are read in as templates.
...

Это подразумевает, что эта директива влияет на "разработку" (возможно, задерживает ее? с какой целью?),Какое мое текущее понимание слабо аналогично шагу выдачи кода традиционной компиляции, когда verilog преобразуется в «фактическое» аппаратное представление?

Я был бы признателен за объяснение того, что шаблоны / делают в Verilog и, возможно,исправление моего понимания «разработки» в этом контексте - спасибо!

Ответы [ 2 ]

3 голосов
/ 20 февраля 2012

Далее подразумевается, что эта директива влияет на «разработку» (возможно, задерживает ее? С какой целью?), Что мое текущее понимание в значительной степени аналогично шагу выдачи кода традиционной компиляции, когда verilog конвертируется в«фактическое» аппаратное представление?

Не совсем.Разработка является частью спецификации языка и является обязательным шагом для обработки проекта.Обработка Verilog обычно требует двух отдельных шагов, которые спецификация описывает как разбор и уточнение .SystemVerilog более точно определяет их и называет их компиляция и разработка .

1364-2005: Разработка - это процесс, который происходит между анализом и моделированием.Он связывает модули с экземплярами модулей, строит иерархию модели, вычисляет значения параметров, разрешает иерархические имена, устанавливает сетевое соединение и подготавливает все это для моделирования.С добавлением генерирующих конструкций порядок выполнения этих задач становится существенным.

В Verilog есть некоторые конструкции, которые делают невозможным полное построение модуля, а затем «связывание» его с более крупным проектом позже.Рассмотрим следующий код:

module mod1 #(parameter WIDTH = 0) (output [WIDTH:0] port1);

generate
if(WIDTH > 3)
  assign port1 = {WIDTH{1'b1}};
else
  assign port1 = {WIDTH{1'b0}}; 
endgenerate

endmodule

Когда читается вышеупомянутый модуль, синтаксический анализатор не знает, каким будет WIDTH, потому что данное значение может быть переопределено при создании экземпляра.Это предотвращает разрешение кода внутри блока генерации, пока не будет прочитан весь исходный текст Verilog.Ситуация усложняется с помощью defparams, предварительных объявлений функций и иерархических ссылок.

Команда // synopsys template и термин «шаблоны» не являются частью verilog.Учитывая ответ инструмента и документ, который вы связали, он говорит инструменту, что любой модуль, читаемый после команды, будет нуждаться в определении параметра, поэтому его не следует разрабатывать при чтении.Например, список соединений не будет иметь никаких переопределений параметров в экземплярах, поэтому, если вы хотите поместить экземпляр RTL в список соединений, вам нужно будет напрямую сообщить инструменту синтеза, какими должны быть параметры.

1 голос
/ 19 февраля 2012

Комментарий // synopsys template используется инструментом Synopsys Design Compiler при синтезировании RTL-кода Verilog в список соединений шлюза. Прагма влияет только на код Verilog, который содержит parameters. Это особенно полезно при синтезе нескольких экземпляров одного и того же модуля Verilog, каждый из которых имеет свое значение переданного параметра.

Например, если у вас есть FIFO, который использует parameter для указания глубины слова:

parameter DEPTH = 4;

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

Использование прагмы template также позволяет контролировать имена синтезированных экземпляров, используя другие переменные сценария Design Compiler.

Прагма template имеет значение только для инструмента синтеза; это не влияет на симуляцию.

...