2017-12-06 14 views
0

ich versuche, in VerilogHerstellung Zähler in Verilog, Modelsim

module rr_arbiter (
clk, // positive edge trigger 
reset, // negative edge trigger 
req0, req1, req2, req3, 
grant0, grant1, grant2, grant3, 
priority, priority_req); 

input clk, reset; 
input req0, req1, req2, req3; 
input priority; 
input [1:0] priority_req; 

output grant0, grant1, grant2, grant3; 

reg x 

always(posedge clk or negedge reset) begin 
pirority_req = priority; 

if (reset) begin 
    grant0 <= 1'b0; 
    grant1 <= 1'b0; 
    grant2 <= 1'b0; 
    grant3 <= 1'b0; 
    end 
else 
begin 
    if(priority == 1) 
     if (priority req == 2b'00) 
      begin 
      x=1; 
      grant0 <= (grant0*(~x))+(grant1*x);  
      x=0; 
      grant0 <= (grant0*(~x))+(grant1*x); 
      grant1 <= grant2; 
      grant2 <= grant3; 
      grant3 <= grant1; 
      // counter 0
      end 
     else if (priority req == 2b'01) 
      begin 
      grant0 <= grant1; 
      x=1; 
      grant1 <= (grant1*(~x))+(grant2*x); 
      x=0; 
      grant1 <= (grant1*(~x))+(grant2*x); 
      grant2 <= grant3; 
      grant3 <= grant1; 
      // counter 0112301123 
      end 
     else if (priority req == 2b'10) 
      begin 
      grant0 <= grant1; 
      grant1 <= grant2; 
      x=1; 
      grant2 <= (grant2*(~x))+(grant3*x); 
      x=0; 
      grant2 <= (grant2*(~x))+(grant3*x); 
      grant3 <= grant1; 
      // counter 0122301223 
      end 
     else if (priority req == 2b'11) 
      begin 
      grant0 <= grant1; 
      grant1 <= grant2; 
      grant2 <= grant3; 
      x=1; 
      grant3 <= (grant3*(~x))+(grant1*x); 
      x=0; 
      grant3 <= (grant3*(~x))+(grant1*x); 
      // counter
      end 
    end 

    else 
    begin 
     grant0 <= ~grant2 * grant3; 
     grant1 <= grant0; 
     grant2 <= grant1; 
     grant3 <= grant2; 
     //counter
    end 
end 
end 

end 

endmodule 

wie Sie sehen können Round-Robin-Zähler zu machen, ich versuche, Round-Robin-Zähler zu machen. jeden Fall ist es wie (Zuschuss).., .. 0, 0112301123 .., .. 0122301223,...

** Error: (vlog-13069) C:/Modeltech_pe_edu_10.4a/examples/rr_arbiter.v(17): near "always": syntax error, unexpected always, expecting ';' or ','.

** Error: (vlog-13069) C:/Modeltech_pe_edu_10.4a/examples/rr_arbiter.v(22): near "<=": syntax error, unexpected <=.

** Error: C:/Modeltech_pe_edu_10.4a/examples/rr_arbiter.v(22): (vlog-13205) Syntax error found in the scope following 'grant0'. Is there a missing '::'?

Antwort

3

Die Fehlermeldung für Zeile 17 ist selbsterklärend. Es erwartet ein ";". Sie vermissen ein ';' in Zeile 15.

Wenn eine Fehlermeldung keinen Sinn ergibt, sollten Sie immer auf den Bildschirm schauen, um zu sehen, ob das Problem mit einer vorherigen Zeile zu tun hat.

+0

Thx. Ich habe es gefunden und repariert, aber was ich wirklich machen will, ist ein RR-Counter und es funktioniert überhaupt nicht. Würdest du mir helfen? –

+0

es soll wie folgt sein: wenn Reset-== 1 alle Zuschüsse = 0 Priorität == 0 Zähler: 0 1 2 3 0 1 2 3 ... Priorität == 1 und priority_req == 0 Zähler: 0 0 1 2 3 0 0 1 2 3 ... Priorität == 1 und priority_req == 1 Zähler: 0 1 1 2 3 0 1 1 2 3 ... Priorität = 1 und priority_req == 2 Zähler: 0 1 2 2 3 0 1 2 2 3 ... Priorität = 1 und Priorität_req = 3 Zähler: 0 1 2 3 3 0 1 2 3 3 ... Wie kann Ich mache dieses Gegensystem ..! –

+0

Sie müssen das Problem lösen und überlegen, welche Blöcke Sie benötigen. eine FSM mit zwei Zuständen, um die Doppelzählung zu verfolgen; ein Zähler, der 0-3 zählt, aber mit der FSM interagiert, um die Doppelzählung durchzuführen; ein 4-2-Encoder, um req0-req3 in eine 2-Bit-Binärzahl umzuwandeln, um sie mit dem Zählerausgang zu vergleichen (Sie müssen überlegen, was zu tun ist, wenn mehr als ein req 1 ist); ein 2-4 Decoder, um den Zählerausgang in grant0-grant3 zu konvertieren. Wenn Sie das Problem so lösen, könnten Sie es einfacher finden, es in einem massiven "Immer" -Block zu programmieren. –