Forum: FPGA, VHDL & Co. Addition nicht rechtzeitig fertig - kann das sein?


von Bronco (Gast)


Lesenswert?

Hallo,

ich hatte vor kurzem eine Diskussion mit einem Kollegen, der deutlich 
mehr Berufserfahrung mit FPGAs hat als ich.
Er will in seinem Modul drei 16-Bit-Zahlen (A,B,C) addieren und hat dazu 
eine State-Machine gebastelt, die zuerst A und B addiert (mit 
Adder-IP-Core), dann einen Wait-State einlegt, und dann das Ergebnis und 
C addiert und wieder einen Wait-State einlegt.
Ich hab ihn gefragt, warum er nicht einfach "A+B+C" hingeschrieben hat 
und er sagt, er glaubt beobachtet zu haben, daß die Additionsergebnisse 
nicht immer rechtzeitig zum nächsten Takt (48MHz, Spartan3) fertig sind. 
Aber so richtig sicher ist er sich nicht.

Nun kann ich mir beim besten Willen nicht vorstellen, daß das sein kann. 
Meiner Meinung nach muß das funktionieren, solange die Toolchain keinen 
Fehler meldet. Aber er argumentiert, daß man der Toolchain (Xilinx ISE) 
nicht immer vertrauen kann und auch diese Bugs hat.

Was sagen die erfahrenen Experten dazu?

von tzu (Gast)


Lesenswert?

Bronco schrieb:
> ich hatte vor kurzem eine Diskussion mit einem Kollegen, der deutlich
> mehr Berufserfahrung mit FPGAs hat als ich.

das scheint mir nicht der Fall zu sein. Diese Frage sollte jeder mit 
spätestens 3-6 Monaten FPGA-Erfahrung beantworten können.

Wer zudem für eine 16 Bit Addition extra einen IP-Core einsetzt arbeitet 
entweder
- extrem akademisch
- versucht möglichst viel zeit to zu schlagen
- versucht den Code unlesbar zu machen
- oder ist schlichtweg unfähig (erst recht mit "deutlich mehr 
Berufserfahrung")

Bronco schrieb:
> Ich hab ihn gefragt, warum er nicht einfach "A+B+C" hingeschrieben hat
> und er sagt, er glaubt beobachtet zu haben, daß die Additionsergebnisse
> nicht immer rechtzeitig zum nächsten Takt (48MHz, Spartan3) fertig sind.

Gut möglich.

Die Frage ist nur: warum setzt er kein Contraint auf den Takt, so das 
die Tools sicher stellen das dies erfüllt ist oder ggf melden das es 
nicht möglich ist?


Bronco schrieb:
> Meiner Meinung nach muß das funktionieren, solange die Toolchain keinen
> Fehler meldet

Solange die clock constraints richtig gesetzt sind stimmt das für diesen 
Fall auch.


Bronco schrieb:
> Aber er argumentiert, daß man der Toolchain (Xilinx ISE)
> nicht immer vertrauen kann

Immer würde ich das vielleicht auch nicht tun, aber in so einem Fall 
kann man das wohl, ansonsten könnte kein Mensch sinnvoll etwas 
entwickeln.

von Duke Scarring (Gast)


Angehängte Dateien:

Lesenswert?

Bronco schrieb:
> Ich hab ihn gefragt, warum er nicht einfach "A+B+C" hingeschrieben hat
> und er sagt, er glaubt beobachtet zu haben, daß die Additionsergebnisse
> nicht immer rechtzeitig zum nächsten Takt (48MHz, Spartan3) fertig sind.
> Aber so richtig sicher ist er sich nicht.

Dann hat er die Constraints nicht richtig vorgegeben.
Ein Spartan3-2000 schafft die Addition von drei 16-Bit-Zahlen in ca. 170 
MHz.

Wenn die Constraints stimmen und alle relevanten Pfade erfasst werden, 
sind die Aussagen der Tools erfahrungsgemäß recht konservativ:
1
Timing Score: 0 (Setup: 0, Hold: 0, Component Switching Limit: 0)
2
3
Asterisk (*) preceding a constraint indicates it was not met.
4
   This may be due to a setup or hold violation.
5
6
----------------------------------------------------------------------------------------------------------
7
  Constraint                                |    Check    | Worst Case |  Best Case | Timing |   Timing   
8
                                            |             |    Slack   | Achievable | Errors |    Score   
9
----------------------------------------------------------------------------------------------------------
10
  TS_clk = PERIOD TIMEGRP "clk" 175 MHz HIG | SETUP       |     0.030ns|     5.684ns|       0|           0
11
  H 50%                                     | HOLD        |     1.224ns|            |       0|           0
12
----------------------------------------------------------------------------------------------------------
13
14
15
All constraints were met.

Duke

von Bronco (Gast)


Lesenswert?

Danke für Eure Antworten, sonst wäre ich noch vom Glauben abgefallen ;)

Die Constraints sind übrigens richtig angegeben, es gibt auch keine 
Fehler oder Warnings. Gerade deswegen konnte ich ja auch nicht glauben, 
daß eine bestimmte Addition nicht korrekt ablaufen soll, wohingegen jede 
Menge anderer Addtionen alle korrekt funktionieren...

PS: ich konnte das ursächliche Fehlerverhalten übrigens nicht 
reproduzieren :-O

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.