2009-09-04 4 views
10

Можем ли мы иметь массив экземпляров для настраиваемого модуля?Можем ли мы иметь набор пользовательских модулей?

Например: у нас есть input [15:0] a; - это создает автобус. Можем ли мы сделать то же самое для пользовательских модулей, то есть DFF [15:0] d;, где DFF - это настраиваемый модуль? Здесь я намереваюсь создать 16 экземпляров модуля DFF.

ответ

8

это не возможно сделать это непосредственно (обновления: теперь после ответа mark4o, я знаю, что есть способ), но то, что вы можете сделать, это с помощью generate оператора для создания нескольких экземпляров пользовательского модуля и крюка их до ваших сигналов. Должно выглядеть примерно так:

wire DFF_i[15:0]; 
wire DFF_o[15:0]; 

generate 
    genvar i; 
    for (i=0; i<15; i=i+1) begin : dff 
    custom i_custom(
     .clk(clk) 
     ,.input(DFF_i[i]) 
     ,.output(DFF_o[i]) 
    ); 
    end 
endgenerate 

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

Приветствия, Дэниел

20

Verilog массивы экземпляров были добавлены в Verilog-1995 (IEEE 1364-1995). Они могут использоваться с воротами, определяемыми пользователем примитивами и модулями. В Verilog-2001 добавлены более мощные, но более сложные.

Ниже приведен пример массив экземпляров модуля:

DFF d[15:0] (clk, DFF_i, DFF_o); 

Для каждого соединения порта, если размер совпадает с формальным параметром, то он подключен к каждому экземпляру. В противном случае каждый экземпляр подключается к выбору части (или выбору бита) выражения.

+0

Привет Mark4o, круто Я этого не знал! Узнали что-то новое снова :) Cheers, Daniel – danielpoe

+0

Являются ли эти модули экземплярами параллельно или один за другим? – eldos

+0

@eldos: Если размер портового соединения соответствует размеру формального параметра, он подключается параллельно каждому экземпляру. Используя вектор, вы можете подключать экземпляры в последовательном порядке. – mark4o