Forum: FPGA, VHDL & Co. ständig Fehlermeldung bei Verilog Code


von Detlef (Gast)


Lesenswert?

Hallo Leute, ich bekomme ständig die Fehlermeldung:

"Line 66: Assignment under multiple single edges is not supported for 
synthesis"

für den folgenden Codeabschnitt:
1
always @(negedge clk or posedge ss)
2
   begin: PARITY
3
    if (rst) begin
4
      parityBit_q <= 0;
5
    end else begin
6
      if (dIn) begin
7
      parityBit_q <= parityBit_d + 1'b1;
8
      end
9
    end
10
   end

Dabei zeigt er auf die "if(dIn) begin" Zeile. Und wenn ich die if 
Bedingung auskommentiere zeigt er auf die "parityBit_q <= parityBit_d + 
1'b1" Zeile.

Die Lösungsvorschläge bei Google haben nicht geklappt und ich weiss nun 
echt nicht woran es liegen könnte...

Ich hoffe ihr könnte mir helfen...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Detlef schrieb:
> always @(negedge clk or posedge ss)
Sieh dir diese Zeile und besonders das darin enthaltene ss doch mal 
genauer an. Kann es sein, dass für eine valide Verilog-Beschreibung dort 
rst stehen müsste?

> Ich hoffe ihr könnte mir helfen...
Was willst du denn machen?

: Bearbeitet durch Moderator
von Detlef (Gast)


Lesenswert?

Lothar M. schrieb:
> Sieh dir diese Zeile und besonders das darin enthaltene ss doch mal
> genauer an. Kann es sein, dass für eine valide Verilog-Beschreibung dort
> rst stehen müsste?

verstehe ich nicht genau... heisst das es ist in verilog nicht erlaubt 
statt rst, ss zu nehmen??

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Detlef schrieb:
> heisst das es ist in verilog nicht erlaubt statt rst, ss zu nehmen??
Es geht hier nicht um die Buchstaben ss oder rst. Die Sensitivliste 
(heißt das in Verilog auch so?) muss zum Code passen. Zeig mir ein 
beliebiges Beispiel im Netz, wo es so gemacht wird, wie du es tust.

Oder andersrum: warum ist bei den meisten synchronen Beschreibungen nur 
der Takt und der Reset in der Sensitivliste?
Ganz einfach: weil sich nur solche Beschreibungen auf die Flipflops im 
FPGA abbilden lassen. Diese Flipflops haben einen Reset- und einen 
Takteingang. Und wenn du den ss in die Sensitivliste aufnimmst,  dann 
darfst du nicht den rst abfragen.

: Bearbeitet durch Moderator
von ElKo (Gast)


Lesenswert?

Lothar hat da durchaus recht: Nicht jedes Konstrukt, was Verilog oder 
VHDL zulässt, kann der Synthesizer in Hardware umsetzen. Gerade bei 
FlipFlops gibt es eine Syntax, die einzuhalten ist, damit eben dieser 
Typ FF entsteht. Einer davon ist das D-FlipFlop mit asynchronem Reset. 
(Siehe auch hier: http://www.asic-world.com/examples/verilog/d_ff.html)
1
always @ ( posedge clk or negedge reset)
2
if (~reset) begin
3
  q <= 1'b0;
4
end  else begin
5
  q <= data;
6
end

Das FF ist asynchron, weil der Reset auch in der Sensitivitätsliste 
auftaucht. Und als erstes wird Reset geprüft, und das eigentliche FF im 
else-Zweig verarbeitet. Dafür gibt es auch andere Schreibweisen, die das 
gleiche FF erzeugen, aber die hier ist verbreitet und schnell lesbar.

In deinem Fall sagt die Sensitivitätsliste, dass du auf clk und ss 
reagieren willst. Es soll also ein D-FF mit async. Reset erzeugt werden. 
Aber du fragst nicht das Resetsignal 'ss' ab, sondern 'if (rst) begin'. 
Das kann der Synthesizer nicht in ein ihm passendes FF umsetzen.

Tipp: Zeichne dir das FF als Symbol mit allen Leitungen auf, evtl. noch 
die Wahrheitstabelle dazu. Das hilft evtl. den Fehler zu sehen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.