2014-10-09 2 views
0

Я прописан модуль регистра 8bit так:Verilog экземпляр несколько регистров

module ff_8 #(
    parameter q0=0 
)(
    input clk, 
    input rst_n, 
    input enable, 
    input [7:0] d, 
    output reg[7:0] q, 
    ); 

always @ (posedge clk) 
if (!rst_n) begin 
    q <= q0; 
end else if(enable) begin 
    q <= d; 
end 

endmodule 

Как можно иметь несколько (128) экземпляров ff_8 друг с другом параметром q0 без необходимости писать тот же код 128 раз?

+0

Посмотрите Verilog Сформировать/Genvar. – Russell

+0

Хорошо, но как я должен объявить 128 параметров? Как целочисленный массив? –

+1

Если ваши параметры являются регулярными, например. 1, 2, 3 ..., вы используете genvar в вашем генерации цикла. В противном случае определите массив параметров и проиндексируйте его с помощью переменной genvar. См. Здесь: http://stackoverflow.com/questions/23507629/parameter-array-in-verilog – Ari

ответ

0

В SystemVerilog, вы можете создать модуль для всего массива регистров со следующими требованиями:

module flop_array #(
    parameter int unsigned depth = 128, 
    parameter int unsigned width = 8, 
    parameter bit [width-1:0] q0[depth] = '{default:0} 
)(
    input clk, 
    input rst_n, 
    input enable, 
    input [width-1:0] d[depth], 
    output logic [width-1:0] q[depth] 
); 

always_ff @(posedge clk) 
if (!rst_n) begin 
    q <= q0; 
end else if(enable) begin 
    q <= d; 
end 

endmodule