Krautkanal.com

Veröffentlicht am 2017-01-19 03:24:49 in /t/

/t/ 31041: FPGA

chatyrko Avatar
chatyrko:#31041

Harro Bernd,

ich bin der OP aus dem anderen FPGA Faden und habe jetzt einiges umgesetzt mit dem Teil.
Im Moment schreibe ich ein tilebased Jump and Run Spiel mit VGA Output und PlayStation 2 Controller input.
Das Ding synthetisiert 20 Minuten und hat einiges an Zeit gekostet.
Nun kommt es aber zu einigen .. nennen wir es glitches.

Ich habe zum Beispiel einen Speicher den ich mit einem Zaehler jede Taktflanke durchgehe.
und am Ende des Speichers, setzt sich der Zaehler zurueck (overflow auf 0)
Bei 0 stoppt das automatische hochzaehlen und es wird auf eine Eingabe gewartet.

Das Problem ist, dass das Teil mittendrin auf 0 springt. Es ging immer ohne Probleme.

Sind es einstreuende Clocks die jeweils kein Vielfaches zur Basis 2 sind? Oder nebenan passierende Schaltungsvorgaenge?
Was sind Glitchquellen und wie kann ich sie verhindern? Kann ich Groundleitungen dazwischen einfuegen?

PS: Vivado, Zybo, zynq 7010

t: nub

suprb Avatar
suprb:#31042

Nee sind es nicht. Es ist einfach ein Bug in deinem Code oder du lässt es zu schnell laufen und hast Setup Time Violations.
Richtigen Speed Grade von deinem FPGA in den Tools eingestellt? Schaffen die Tools die Geschwindigkeit bei der du es dann laufen lässt?

mrxloka Avatar
mrxloka:#31045

>>31042
Es ist ein 13 Bit Counter den ich mit 1kHz von 0 bis 0 zaehlen lasse.>>31042

reg [12:0] index = 0; // sinus table index

always @(posedge CLK1kHz) begin
index <= (index == 0 && !jump) ? index : index +1;
end

Index springt einfach mal so wenn es Lust hat mittendrin auf 0.

canapud Avatar
canapud:#31046

>>31045
Ich sehe jetzt erstmal keinen Fehler. Ein Resetpfad wäre nicht schlecht, nicht alle Tools können den Initwert in Hardware abbilden und es ist sowieso nicht klar was da genau mit passiert.
Ich vermute mal, dass nicht dein ganzes Design mit 1KHz läuft. Wie transportierst du die Daten zwischen den Clockdomains und wie generierst du die Clocks? Wenn du den Index einfach so in einer anderen Clockdomain verwendest kann es diverse Probleme geben.
Simulierst du die Schaltung? Tritt da der Fehler auch auf?

polarity Avatar
polarity:#31047

Sieht für mich nach einem unsauber/nicht constraintem Design aus. Mach mal einen Screenshot von den Synthese constraints und dem timing report.
Auch:
>Das Ding synthetisiert 20 Minuten
20 Minuten sind nichts, warte mal ab bis das Ding 8 Stunden für die Synthese braucht.

chatyrko Avatar
chatyrko:#31050

>>30736
>>30745
Aus dem alten Faden hier.

Hast du nun VHDL oder Verilog gewählt?

Auch:
> Jump and Run Spiel mit VGA Output und PlayStation 2 Controller input.

klingt eigentlich schon ziemlich kompliziert. Oder ist das alles halb so wild? Wie lange beschäftigst du dich nun schon damit?

lisakey1986 Avatar
lisakey1986:#31058

>>31050
Alles halb so wild, es ist viel Planung, aber die Umsetzung ist meistens relativ trivial.
Ganz anders als beim "normalen" programmieren.

Ich nutze Verilog statt VHDL, habe einen Tag gebraucht um Python zu lernen und benutze es zur Datenverarbeitung.

Angehaengt: aktueller Stand

>>31047
Ich habe keine manuellen constraints hinzugefuegt.
Angehaengt ist der Report, simuliert wird nicht.

Durch diverse Aenderungen(blockram) konnte ich die 20 Minuten Synthetisierzeit auf <5 schrumpfen und im Moment existiert besagtes Problem nicht mehr :3

oaktreemedia Avatar
oaktreemedia:#31060

>>31058