2016-10-12 7 views
0
  1. Когда есть "GENERATE BLOCK", выполненный в модуле Verilog?
  2. Будет ли код внутри Generate Block выполнять последовательно?
+0

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

+0

@MortenZilmer Я читал о «Generate» из IEEE-Verilog pdf. В нем говорится, что «Генерируемый блок выполняется во время разработки, а не во время моделирования». Что подразумевается под этим заявлением? –

+0

Разработка - это когда все модули объединены в последовательный дизайн, который затем можно моделировать, и где, например, параметрам в модулях назначаются определенные значения в зависимости от конфигурации модуля в том месте, где он используется. –

ответ

0

Генерируемый блок не может быть выполнен как всегда или начальные блоки, он оценивается на этапе разработки. Генерирование обычно используется для создания экземпляра множественного экземпляра модуля или же логики, например:

module and_mod (input bit a, input bit b, output out); 
    assign out = a & b; 
endmodule 


module test #( 
    parameter NUM_INSTANCES = 3 
) (
    input bit [NUM_INSTANCES - 1 : 0] a, 
    input bit [NUM_INSTANCES - 1 : 0] b, 
    output bit [NUM_INSTANCES - 1 : 0] a_and_b, 
    output bit [NUM_INSTANCES - 1 : 0] a_or_b, 
    output bit [NUM_INSTANCES - 1 : 0] a_xor_b 
); 


    genvar i; 
    generate 
     for(i = 0; i < NUM_INSTANCES; i++) 
     begin 
     //module instance 
     and_mod and_inst (.a(a[i]),.b(b[i]), .out(a_and_b[i])); 
     //contionous assignement       
     assign a_xor_b[i] = a[i]^b[i]; 

     //always block 
     always @(*) 
     begin 
      a_or_b[i] = a[i] | b[i]; 
     end 
     end 
    endgenerate 
endmodule 

В этом генерируют блок будет вычисляться NUM_INSTANCES копии кода внутри блока генерируют. Как вы можете видеть, вы можете иметь экземпляр модуля, назначения, всегда/начальные блоки внутри блока генерации. Обратите внимание на то, что and_mod имеет только 1-битные порты, поэтому нам нужно 3 экземпляра для вычисления и трехбитовых регистров, но благодаря генерации блока вам не нужно писать 3 экземпляра в вашем коде.

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

Вы можете проверить его here.

+0

спасибо за ответ. –

0

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

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

Генерирующий блок представляет собой набор из одного или нескольких элементов модуля. Блок генерации может не содержать объявления порта, указывать блоки или объявления specparam. Параметры, объявленные в блоках генерации, должны рассматриваться как локальные. Все остальные элементы модуля, включая другие генерирующие конструкции, допускаются в блоке генерации.

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

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

Обратитесь к теме 27, в SV1800-2012 LRM для получения более подробной информации.

+0

спасибо за ответ –