Hallo, anscheinend hab ich damals in der Schule nicht richtig aufgepasst
und jetzt Recht sich das in Unwissenheit, deshalb hoffe ich hier auf
eine Verständliche Antwort.
Ich bekomme von einem Master Mikrocontroller 8Bit Werte mittels SPI Bus
auf meinem CPLD gesendet. Zum Anfang möchte ich nur ein Schieberegister
in den CPLD beschreiben und keine Daten zum Master zurueck senden.
Die Beschreibung eines 8Bit Schieberegister ist nicht so schwer, aber in
anderen Beiträgen habe ich gelesen, dass man eine Steigende / Fallende
Flanke mittels doppelter Abtastfrequenz oder DDR Verfahren erkennen
kann.
Ich persönlich würde das DDR Verfahren nutzen, aber jeder bewältigt
seine Probleme auf seine eigene Art.
Wieso kann ich kein flankengesteuertes Flip Flop beschreiben? Er liesst
doch erst das Bit bei Clock High ein und das Spiel beginnt von vorne.
Ist es nur zur Sicherstellung, dass wenn die Clockleitung 1 = Idle ist
eine richtige Erkennung erfolgt?
Der AVR kann auch maximal eine Masterlock / 2 SPI Bus Freq. sampeln als
SPI Slave, deshalb wird auch hier wohl eine Flankenerkennung genutzt.
Liege ich mit meiner Vermutung richtig ?
Michael schrieb:
> Hallo, anscheinend hab ich damals in der Schule nicht richtig aufgepasst> und jetzt Recht sich das in Unwissenheit
Scheint ganz der Fall zu sein SCNR
Ok, ich hab eine Seite gefunden die eine Einsyncronisierung beschreibt
und Anhand deren Beschreibung viel der Groschen.
@Christoper D.
Sinnvoller Post. Bedenke jeder fing mal an.
>Hallo, anscheinend hab ich damals in der Schule nicht richtig aufgepasst>und jetzt Recht sich das in Unwissenheit, deshalb hoffe ich hier auf
Recht --> rächt
Das war aber schon in der Grundschule der Fall!
Gast4
>Ok, ich hab eine Seite gefunden die eine Einsyncronisierung beschreibt>und Anhand deren Beschreibung viel der Groschen>
Michael kannst du mal bitte den Link zur dieser Seite schicken?
> ftp://ftp.fh-konstanz.de/pub/ti/....
Insgesamt eine schöne und lesbare Aufstellung von Regeln.
Aber die Regel 3 ist zumindest für Xilinx FPGAs suboptimal:
1
Regel 3: Flipflops müssen mit externem Reset (rück-) setzbar sein
2
Alle Flipflops sollten von (möglichst) einem externen Resetsignal setzbar
3
oder rücksetzbar sein.
4
Im Betrieb kann dann durch eine "Power-on-Reset" - Schaltung ein kurzer
5
Resetimpuls erzeugt werden und das System befindet sich dann in einem
Hallo, im Dateianhang hab ich eine Flankenerkennung im Internet als
Lernhilfe gefunden und mir wird nach der Synthese ein 2 Bit
Schieberegister angezeigt. Das Schieberegister entspricht auch meinen
Erwartungen, aber das Design ist relativ langsam mit ~200MHz.
In dem Angang weiter unten findet Ihr eine Flankenerkennung von mir mit
knapp 500MHz und in der Simulation Verhalten sich beide Beschreibungen
identisch, aber in meiner Beschreibung findet er 2 Multiplexer. Setze
ich in der Case Abfrage die Snyc Signale (Sync_l und Sync_h) zusätzlich
auf logisch 0, dann entfernt die Synthese beide Multiplexer und die
Geschwindigkeit sinkt auf ~400MHz.
Ist meine Case Anweisung nicht richtig beschrieben oder warum wird in
meinem Design kein Schieberegister beschrieben?
Welche Beschreibung ist die bessere oder sichere?
> Ist meine Case Anweisung nicht richtig beschrieben oder warum wird in> meinem Design kein Schieberegister beschrieben?
Da ist doch ein Schieberegister drin (Screenshot: blau). Das geht dann
auf die Select-Eingänge des MUX.
> ~200MHz. ... 500MHz ... ~400MHz.
Ich verwende einen Spartan3-400 Speedgrade -4.
Das Originaldesign hat bei mir 260MHz.
Dein gepostetes Design hat 367 MHz.
Mit den aktivem synchronen Zurücksetzen (sync_l <= '0') dann noch 238
MHz.
Die Geschwindigkeitsverluste kommen offenbar dadurch, dass in der
Originalbeschreibung und in deiner "langsamn" Beschreibung FFs verwendet
werden, die eine Kombinatorik vor dem synchronen Reset-Eingang haben.
Ich habe mal die Originalfassung analysiert und auf diese Variante
umgeschrieben:
1
fast_sync1:process(clk)
2
variableresync:std_logic_vector(1to3);
3
begin
4
ifrising_edge(clk)then
5
-- detect rising and falling edges.
6
rise<=notresync(2)andresync(3);
7
fall<=notresync(3)andresync(2);
8
-- update history shifter.
9
resync:=notasync_sig&resync(1to2);
10
endif;
11
endprocess;
Hier ist keinerlei Kombinatorik mehr nötig (Screenshot im nächste Post),
und das Ding ist mit 376 MHz am schnellsten ;-)
Dass du auf die Zahlen der Synthese nicht allzuviel geben solltest,
erkennst du, wenn du den synchronen Reset aus deinem Design
herausnimmst. Es wird eigentlich der selbe RTL-Plan erzeugt, nur der
Reset-Pin der FFs ist nicht angeschlossen (Screenshot).
Deine "schnelle" Variante hat dann aber nur noch 294 Mhz (statt 367)
:-o
Danke Lothar für die Hilfe! Die erklärung von Dir ist einleuchtend und
für die Zukunft werde ich mehr die RTL's prüfen und mich nicht allein
auf den Synthesereport verlassen.
Hi,
sorry für diese Anfängerfrage, aber ich versuche mich gerade ( leider
nur am WE ) in die Materie einzuarbeiten.
Was genau sagen diese MHZ Zahlen aus?
1. Die Schaltung läuft auf einem idealem CLPD/FPGA in dieser
Geschwindigkeit??
2. Die Schaltung läuft auf einem neuen aktuellem CLPD in dieser
Geschwindigkeit wenn die Taktrate stimmt ??
3. Ganz was anderes ;-)
bis dann,
MaxMeise
Naja, die MHz nach der Synthese sind ziemlich obskur. Wichtig ist, was
nach dem Fitting bzw. Place&Route rauskommt. Da richtet der sich aber
nach deinen Vorgaben im UCF File, der Optimizer rechnet nur so lange wie
nötig, wenn die Vorgabe erreicht ist, hört der auf.
> Was genau sagen diese MHZ Zahlen aus?
Es läuft ohne weitere Optimierungen auf dem angegebenen Spartan 3
Speedgrade -4 mit dieser Geschwindigkeit. Mit entsprechenden
Optimierungseinstllungen könnte das noch ein wenig schneller werden...
> Mit entsprechenden Optimierungseinstllungen könnte das noch ein wenig> schneller werden...
Wenn man einen größeren Chip nimmt, mehr Logik hinzufügt oder mehr
kombinatorische Tiefe einbaut kann es auch signifikant langsamer werden
:-/
Also alles in allem: Die Zahlen sind nur ein grober Richtwert, solange
man mit dem Design noch nicht endgültig fertig ist.
Duke