ständig Fehlermeldung bei Verilog Code

Gast #5319895
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...
Moderator (Firma: Titel) Persönliche Seite #5320418
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.
Gast #5321858
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

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.

Formatierung
  • [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 einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.