2015-08-18 1 views
0

У меня этот снимок кода. Это стандартный экземпляр, но почему используется gen_srl16?
Я всегда думал, что SRL16E srl16e (... должно быть достаточно.Почему «gen_srl16» используется в стандартном экземпляре «SRL16E»?

genvar i; 

generate 
for (i=0;i<WIDTH;i=i+1) 
begin : 
    gen_srl16 
    SRL16E srl16e(
      .Q(dataout[i]), 
      .A0(a[0]),.A1(a[1]),.A2(a[2]),.A3(a[3]), 
      .CE(write),.CLK(clk),.D(datain[i])); // CE -clock enable 
end 
endgenerate 

ответ

2

В этой ситуации gen_srl16 просто имя generate for-loop. Это не имеет никакого отношения к созданию субмодуля.

Следуя Verilog спецификации (IEEE Std 1800-2012, ч 27,4.):

Генерация блоков в цикле генерируют конструкции могут быть названы или безымянный (...) Если генерировать блок называется, это декларация массив экземпляров блоков генерации. Значения индекса в этом массиве являются значениями, принимаемыми генваром во время разработки. Это может быть разреженный массив, потому что значения genvar не должны формировать непрерывный диапазон целых чисел. Массив считается объявленным, даже если схема генерации цикла не привела к экземплярам блока генерации.

+0

Thx! Помог мне много. – AlexTheGalax

+0

Но почему кто-то должен использовать это «объявление массива генерируемых экземпляров блока»? – AlexTheGalax

+0

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

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

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