2016-09-03 1 views
0

Ich habe Probleme mit dem Finden der kleinsten Werte von X und xfind und Y und yfind in `Costcalculator xfind (X, xcost); Kostenrechner yfind (Y, ycost);Verilog-Code Bewegungsschätzer

in Code unten. kann bitte jemand kommentieren. Aus irgendeinem Grund konnte ich den gesamten Code nicht importieren. Es erkennt nur diese Zeilen als Codes. Tut mir leid, wenn es nicht klar ist.

always @(posedge clk) // sequential circuit 

    begin 

    Costcalculator xfind (X,xcost); 
    Costcalculator yfind (Y,ycost); 

    if(reset) 
     begin 
     i=0; 
     R<=0; 
     xcost<=0; 
     ycost<=0; 
     mode0<=0; 
     mode1<=0; 
     mode2<=0; 
     mode3<=0; 
     mode4<=0; 
     mode5<=0; 
     mode6<=0; 
     end //if end 
     else 
     begin 
      for (i=1; i<43; i=i+1) 
     begin 
       R<=xcost+ycost; 
     costholder <= SAD+(lambda*R); // Here we calculate the cost of a sub-blocks As the clock 
       if (i<17) 
     mode0<=costholder+mode0; 
     else if(i>16 && i<25) 
     mode1<=costholder+mode1; 
     else if(i>24 && i<33) 
     mode2<=costholder+mode2; 
     else if(i==33 || i==34 || i==35 || i==36) 
     mode3<=costholder+mode3; 
     else if(i==37 || i==38) 
     mode4<=costholder+mode4; 
     else if(i==39 || i==40) 
     mode5<=costholder+mode5; 
     else if(i==41) 
     mode6<=costholder+mode6; 

     end //for end 
    end //else end 
    end //always end  

Modul Costcalculator:

//**********************************************************‌​** 
module Costcalculator (motionvector, cost); // X AND Y COST CALCULATOR 
input [4:0]motionvector; 
output [2:0]cost; 
reg [2:0]cos; 
wire [3:0] vector; 
assign vector = {motionvector[3:0] }; 

always @* begin 
case (vector) 0 : cos=0; 
1,2 : cos=1; 
3,4,5,6 : cos=2; 
7,8,9,10,11,12,13,14 : cos=3; 
15 : cos=4; 
endcase 
end 
assign cost = cos; 
endmodule 
//**********************************************************‌​** 
+2

Was ist der Fehler? Ich glaube, 'Constcalculator' ist ein Modul. Sie können ein Modul in einem prozeduralen Block nicht instanziieren. – sharvil111

+0

Sie sollten versuchen, 1) ein minimales (nicht) funktionierendes Design zu erstellen, 2) sicherzustellen, dass wir alle relevanten Codes haben und 3) einen Hinweis darauf geben, was falsch ist. Sie sollten also alle irrelevanten Code entfernen, sagen Sie uns, was ist "Costcalculator", wahrscheinlich ein Modul wie von sharvil111 unter Berücksichtigung der Syntax, die Sie verwendet haben und 3) geben Sie uns den Fehlercode/sagen Sie uns, was ist falsch? Unmöglich, anders zu antworten ... – chrisvp

+0

Hier ist der Rest des Codes: –

Antwort

1

Nachdem das Modul außerhalb des always Block nehmen, fahren Sie xconst und yconst von zwei Stellen. Auf der anderen Seite sehe ich keine Treiber von X und Y.

Da Costcalculator ist ein rein kombinatorische Modul, Sie müssen nur die Eingänge bietenX und Y als Null von oben/Wrapper-Modul.

//.. some stuff 
if(reset) begin 
//... some other signals 
X <= 0; 
Y <=0; 
//... 

Als Fehler sagt über mehrere Treiber, Sie xconst und yconst bilden zwei Module sind die treibende Kraft. Wenn Sie beim Zurücksetzen X und Y als 0 vom Umhüllungsmodul angeben, wird automatisch vector auf Zero gesetzt, und letztendlich wird cost, was der Ausgang des Moduls ist, Null werden. Dadurch werden die Variablen xconst und yconst Null.

Weitere Informationen finden Sie unter this similar forum question.