Verilog создает несколько регистров

Я написал 8-битный регистровый модуль следующим образом:

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 раз?


person k k    schedule 09.10.2014    source источник
comment
Найдите Verilog Generate/Genvar.   -  person Russell    schedule 09.10.2014
comment
Хорошо, но как мне объявить 128 параметров? Как целочисленный массив?   -  person k k    schedule 09.10.2014
comment
Если ваши параметры являются регулярными, например. 1, 2, 3..., вы используете genvar в своем цикле генерации. В противном случае определите массив параметров и проиндексируйте его с помощью переменной genvar. См. здесь: stackoverflow.com/questions/23507629/parameter-array-in -верилог   -  person Ari    schedule 10.10.2014


Ответы (1)


В 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
person campkeith    schedule 15.10.2014