Verilog unterstützt keine mehrdimensionalen Arrays über Ports. SystemVerilog unterstützt mehrdimensionale Array-Ports. Allerdings unterstützen nicht alle SystemVerilog-Synthesizer diese Funktion.
Vor der Adressierung der mehrdimensionalen Portbeschränkung möchte ich darauf hinweisen, dass probe
als wire
, nicht als reg
deklariert werden sollte. In Verilog sollte eine Variable als reg
deklariert werden, wenn sie von einem prozeduralen Block (d. H. always
oder initial
) im aktuellen Modul zugewiesen wird (nicht dessen Untermodul oder Elternmodul), andernfalls sollte sie als wire
deklariert werden. Mit SystemVerilog können Sie auch logic
verwenden und den Typ logic
großzügiger verwenden; Alle Orte, an denen Sie reg
verwenden und die meisten Orte, an denen Sie wire
verwenden (schließen Sie wires
aus, die mehrere Laufwerke haben).
Wenn Sie probe
von reg
zu wire
ändern, kann es Ihren Synthesizer glücklich machen, aber es wird wahrscheinlich nicht.
Eine Möglichkeit besteht darin, prob
zu einem einzigen Vektor zu reduzieren: Ändern Sie output reg [m-1:0] prob [0:Ir-1]
in output wire [Ir*m-1:0] prob
. Dann ändern Sie die Verbindungen zwischen out und Sonde in eine Scheibe von neuen Prob Vektor: .out(prob[i])
bis .out(prob[i*m +: m])
(Siehe Indexing vectors and arrays with +:). Dieser Ansatz funktioniert mit SystemVerilog und Verilog (IEEE1364-2001 und höher).
module prob_calculator #(parameter n=32,parameter m=6,parameter Ir=14) (input
[n-1:0]b,input clk,input reset,output wire [Ir*m-1:0] prob);
genvar i;
generate
for (i=0;i<Ir;i=i+1) begin:x1
counter #(.m(m)) count_blck(.en(1),.clk(clk),.reset(reset),.out(prob[i*m +: m]));
end
endgenerate
endmodule
SystemVerilog bietet andere Möglichkeiten, wie mit (typedef
, verpackt struct
, interface
, modport
), die um als Arbeits arbeiten kann, wenn mehrdimensionale Port wird nicht direkt unterstützt. Es empfiehlt sich, auf das Handbuch Ihres Synthesizers zu verweisen, sicherzustellen, dass die Option SystemVerilog aktiviert ist, und zu prüfen, welche Funktionen unterstützt werden.
FYI: Mit SystemVerilog seine wieder aufgenommen [email protected](posedge clk)
statt [email protected](posedge clk)
Vielen Dank für Ihre Antwort zu verwenden. Das Reduzieren der 'prob'-Variablen funktioniert. Ich werde in andere Möglichkeiten schauen, die Sie erwähnt haben. – Snigdha203