2016-05-16 45 views
2
module sobel_CI(a,result,clock); 

input clock; 
input [31:0] a[0:3]; 

output [31:0] result; 
assign result= a[0]+a[1]+a[2]+a[3]; 
endmodule 

Ich versuche Array-Deklaration in Verilog zu tun, aber es zeigt einen Fehler:Verilog-Array-Belegungen

function argument with unpacked array required systemverilog extensions.

Was mit meinem Array ist falsch?

Antwort

5

In Verilog können Sie keine mehrdimensionale Entität als Eingabe oder Ausgabe verwenden. Dies ist in SystemVerilog zulässig.

Verilog doesn't allow an I/O port to be a 2-D array.

In Verilog 2001 können Sie Ihr Array in einen Vektor abflachen und passieren, dass durch den Hafen, aber das ist etwas umständlich. Hier ist ein Weg, es zu tun:

module top (in, out); 
input [31:0] in; 
wire  [7:0] array [0:3]; 
output [31:0] out; 

assign {array[3],array[2],array[1],array[0]} = in; 
assign out = {array[3],array[2],array[1],array[0]}; 
endmodule 
+2

Auch, wenn Sie wirklich keinen guten Grund haben, nicht, empfehle ich die Verwendung von SystemVerilog. Die Verilog-Sprache wurde vor 11 Jahren zu SystemVerilog. Die Umgehung in dieser Antwort ist der einzige Weg, dies in Verilog zu tun, aber es ist umständlich und anfällig für Tippfehler, die schwer zu finden sind. – nguthrie