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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren