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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Detlef (Gast)


Bewertung
0 lesenswert
nicht 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. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.