2016-04-02 12 views
1
module median_five(out1,a[0],a[1],a[2],a[3],a[4],en,clka);    
    input [7:0] a[0:4];    
    output out1;    
    endmodule    

** Es gibt Fehler.Ist es möglich, Eingangsport als Array in Verilog zu nehmen?

module median_five(out1,a,b,c,d,e,en,clka);    
     input [7:0] a,b,c,d,e;    
     output out1;    
     endmodule 

** Es ist richtig.

Aber ich will Eingang a, b, c, d, e in Array wie:

array[0]<=a;    
array[1]<=b;    
array[2]<=c;    
array[3]<=d;    
array[4]<=e;    

Antwort

2

Verilog unterstützt keine zweidimensionalen Anordnungen als Ports von Modulen. Diese Funktion wird nur von SystemVerilog unterstützt.

Im ersten Schnipsel werden Passieren Sie zweidimensionale Anordnunga als Eingang, der nicht unterstützt wird. In dem letzteren Fall wird ein eindimensionaler Vektor an das Modul übergeben, das gut funktioniert.

Es ist nicht klar was Sie mit array tun möchten. Hier sind einige Optionen. Sie können zweidimensionalen Array innerhalb des Moduls selbst deklarieren. So etwas wie folgt:

module median_five(out1,a,b,c,d,e,en,clka); 
input [7:0] a,b,c,d,e; 
output out1; 

ref [7:0] array [5]; // array local to module 

//always @(posedge clka) // use non blocking assignments 
always @(*)    // use blocking assignments 
begin 
// .. Some stuff 
array[0]=a;    
array[1]=b;    
array[2]=c;    
array[3]=d;    
array[4]=e;  
//..  
end 

//.. some other stuff 

endmodule 

Eine andere Sache, die Sie tun können, um ist das Array glätten und es als Eingänge passieren. Dabei habe ich jeweils 8-Bit-Eingang abgeflachte (a, b, c usw. Jeden) in einen einzigen Vektor (in) und jedes einzelnes Element des Arrays zugeordnet entsprechend.

module top (in, out); 
    input [31:0] in; // flattened array as input 
    output [31:0] out; 

    wire  [7:0] array [0:3]; // local array 

    assign {array[3],array[2],array[1],array[0]} = in; 
    //... some operations/procedural blocks etc. 
    assign out = {array[3],array[2],array[1],array[0]}; 
endmodule 

Eine ähnliche Frage finden Sie unter Inputs as two dimensional array Link. Es gibt auch eine similar blog post.

+0

Ich wollte die Sortierung tun. Das ist y Ich brauchte Elemente in einem Array. Danke –

+0

reg [3: 0] r = 1; r <= r+ ((e> a) + (e> b) + (e> c) + (e> d)); es gibt einen unbekannten Wert in der Ausgabe. Aber als ich schrieb reg [3: 0] r = 1; r <= ((e> a) + (e> b) + (e> c) + (e> d)); Es gibt die Ausgabe entsprechend, aber ich wollte den ersten Ausdruck r <= r+ ((e> a) + (e> b) + (e> c) + (e> d)); benötigt um richtig zu simulieren. Bitte geben Sie einen Hinweis. –

+0

Mit der ersten Gleichung erstellen Sie möglicherweise eine [kombinatorische Schleife] (http://fpga-hdl.blogspot.in/2012/07/test.html), und die Ausgabe entspricht möglicherweise nicht der Anforderung. Eine Methode zur Vermeidung von kombinatorischen Schleifen wird beschrieben [http://electronics.stackexchange.com/questions/121161/understanding-combinational-feedback-loops]. Ich habe eine Probe in [EDAPlayground] (http://www.edaplayground.com/x/eke) erstellt. – sharvil111

Verwandte Themen