2014-10-09 176 views
0

我已經writen一個8位寄存器模塊是這樣的: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 

我怎樣才能具有ff_8每個具有不同的Q0參數的多個(128)的實例,而不必到128倍寫相同的代碼?

+0

查找Verilog的生成/ Genvar。 – Russell 2014-10-09 13:53:26

+0

好的,但我應該如何聲明128參數?作爲一個整數數組? – 2014-10-09 14:12:52

+1

如果您的參數是常規的,例如1,2,3 ...,你在生成循環中使用genvar。否則,定義一個參數數組並用genvar變量對其進行索引。看到這裏:http://stackoverflow.com/questions/23507629/parameter-array-in-verilog – Ari 2014-10-09 20:55:44

回答

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