2016-03-23 6 views
0
module ff(fv,a,b,c); 
output [9:0]fv; 
input [4 : 0] a,b,c; 
reg [4 : 0] x[9 : 0]; 
reg [9 : 0] np[9 : 0]; 
reg [4:0] newpop; 
reg [4 : 0] y; 

genvar i; 

initial 
begin 
    x = { 4, 7, 2, 5, 4, 5, 9, 3, 0, 2 }; 
end 

    //assign fv = ((a*x*x)-(b*x)+c); 

for (i=0; i<10; i=i+1) 
begin 
    y = x[i]; 
    always @ (y) 
    newpop <= fitf(y,a,b,c); 
    assign np[i] = newpop; 
end 
function automatic integer fitf;  
input [4:0] Y,A,B,C; 
begin 
    fitf = ((A*Y*Y)-(B*Y)-C); 
end 
endfunction 
endmodule 

Ich versuche, die Funktion zu bewerten und Werte in einem Array zu speichern. Dies ist der Code, den ich schrieb, aber ich erhalte eine Fehlermeldung in Zeile keine 19. Sie mir bitteFehler in der Funktionsbewertung

+1

Ok, welcher Fehler? –

+0

Ihr Code scheint sehr unklar. Update-Code und sagen Sie uns, was Sie wollen eigentlich –

+0

** Fehler: E:/Softwares/installiert/Neuer Ordner/modelsim_ase/examples/Fun_prac.v (19): in der Nähe von "=": Syntaxfehler, unerwartete '=', erwartet " IDENTIFIER“oder‚TYPE_IDENTIFIER‘oder‚#‘oder‚(‘i in Zeile diesem Fehler habe keine 19‚y = x [i];‘ –

Antwort

1

y = x[i]; eine prozedurale Anweisung helfen ist. Es gehört innerhalb ein initial oder always Block. Du hast es draußen. Was mehr ist, y ist ein reg; Sie können einem reg nicht von außen einen initial oder Block zuweisen.

+0

dank euch beiden das Problem gelöst ist, aber Code funktioniert noch nicht jetzt bin vor i Fehler in der array.Ilegal Verweis auf x –

+0

Ich denke, Sie müssen eine neue Frage - das ist nicht genug, um fortzufahren. Bitte geben Sie ein [Minimal, vollständige und überprüfbare Beispiel] (http://StackOverflow.com/Help/mcve), damit wir Ihren Fehler leicht reproduzieren können –

2

generieren for-Schleifen bei der Kompilierung entwirrt werden. Zuordnungen müssen sich in einem prozeduralen Block befinden oder eine Anweisung zuweisen. Die begin - end einer Generate-Anweisung zählen nicht als prozeduraler Block. Daher ist y = x[i]; eine unzulässige Syntax. reg Typen müssen nur in einem immer zu synthetisierenden Block aktualisiert werden, sie können nicht mit assign Anweisungen in Verilog zugewiesen werden (in Ordnung in SystemVerilog).

Versuchen Sie, alles auf eine immer blockieren setzen.

integer i; 
always @* begin 
    for (i=0; i<10; i=i+1) begin 
    np[i] = fitf(x[i],a,b,c); 
    end 
end 
+0

Gut gemacht - Sie haben es geschafft, diesen Code _unravel_ zu entwickeln und eine viel hilfreichere Antwort zu erzeugen, als ich verwalten könnte. –