Ich habe folgendes Problem:
Ich habe ein kleines FPGA, welches nur passive Schaltfunktionen
realisiert. Es arbeitet quasi voll kombinatorisch. Ich möchte nun mit
dem ChipsScope Logic Analyzer diese Funktionen beobachten und brauche
eine Clockfunktion. Leider habe ich aufgrund der Layoutverdrahtung keine
Möglichkeit, einen externen Clock einzuspeisen. Kann ich mir den intern
irgendwie erzeugen, oder braucht ein DCM immer eine Quelle?
Wie könnte man das machen?
man kann sich über einen ringoszillator, also einer inverterkette, einen
takt generieren (genaue umsetzung jetzt mal aussen vor gelassen). um
sich daraus einen definierten takt einzustellen benötigt man aber
eigentlich immer einen externen referenztakt. auch sonst ist der interne
Takt unter umständen (bausteinabhängig) nicht konstant sondern schwankt
in gewissen grenzen, da die Signallaufzeit in LUTs nicht konstant ist.
> Ich möchte mit dem ChipsScope Logic Analyzer diese Funktionen beobachten
Da möchte ich mal bezweifeln, ob Chipscope das richtige für diese
Aufgabe ist. Denn alle deine Signale sind irgendwie asynchron zu dem
generierten Takt.
naja, er kann mit chipscope dann nicht die wirklichen schaltflanken
sehen, sondern nur die zustände zu bestimmten zeitpunkten, welche vom
takt vorgegeben werden. aber ist doch schonmal mehr als garnix. und wenn
der takt schnell genug ist kann man vielleicht auch den ein oder anderen
zeitkritischen zustand beobachten.
Ja, aber ich kann es entsprechend schnell abtasten - das passt schon.
Die Signale wechseln dort z.T. nur mit 1-2 MHz. Ich muss wissen, was
nach bestimmten Triggern passiert. Das FPGA bekommt Reaktionen von der
Restelektronik zurück, die ich einschätzen will. Mir würden sogar schon
5-10 MHz Abtastgenauigkeit reichen.
Jetzt habe ich schon wieder ein Neues PRoblem: Mit dem Coregen habe ich
einen DCM erzeugt, welcher laut Xilinx in ../Xilinx/10.1/ISE abgelegt
wurde. Dort ist aber nichts ausser vielen Verzeichnissen.
?
Hallo
na eigentlich KANN ein DCM selber signal generieren :)
bitte das Xilinx demo design fur s3e frequenz zahler
da ist ein DCM basierenderes oscillator dabei..
es hat jedoch eine make, der braucht zum starten nahmlich
einen anderen oscillator der ein paar KICK pulsen macht.
aber es gibt viele andere moglich keiten den clock
intern zu erzeugen
ich habe da ganz viele unterschiedliche getestet, sind
manchmal ganz gut brauchbar
werde hoffentlich bald auch freigeben diese oscillator
designs
Antti
http://www.microfpga.com/
Ich hätte jetzt gedacht, dass man einfach den 270grad Ausgang, der ja
druch Abtasten der hochgetakteten Zwischenfrequenz entsteht, auf den
Eingang zurückführen muss und eine skew von 90grad einstellt. Dann sieht
der Eingang immer das passende Signal, welches effektiv zeitverzögert
ist und damit sich nicht sofort verlöschen kann. 180 Grad gehen meines
Erachtes nicht, weil er dann nicht anschwingt, bzw man aufgrund der
Verzögerungen der Phasen kein 100% sauberes 180 Gradverhältnis
hinbekommt.
In elementarer Hardware geht das jedenfalls so!
Freq_Out == (4 * Freq_In) / 4
Phas_Out == Phas_In + 180
== Phas_In + 270 - 90
== Phas_In (4*Freq_in @ 270) - (X + Delay)
mit (X + Delay) = 90.
90 ist die zu ertielende skew, X die dafür nötige Verzögerung.
Ich meine das so:
Phase Takt_In Skewed Takt_Out270
1.000 Out(t-540) Out(t-450) Out(360) = 0.000
1.090 Out(t-450) Out(t-360) Out(270) = 0.090
1.180 Out(t-360) Out(t-450) Out(180) = 0.180
1.270 Out(t-270) Out(t-360) usw.
2.000 Out(t-180) Out(t-270) usw.
2.090 Out(t- 90) Out(t-180)
2.180 Out(t- 0) Out(t- 90)
2.270 1.270
3.000 2.000
Die PLL muss also effektiv genau einen Takt Verzögerung produzieren,
dass die Rückkopplung spät genug kommt, um der PLL vorne wieder einen
unabhängigen voll in Phase befindlichen Takt vorzugaukeln, damit das
einschwingen kann. Die Frage ist halt nur, ob die Zwischenfrequenzen die
über die Multiplier entstehen, da auch mit einem Taktimpuls sauber
mitmachen und ob das mit einem Xilinx DCM geht. Wahrscheinlich muss man
dazu die interne Kompensation abschalten.
Probiert habe ich das, allerdings ohne Ergebnis. Irgendwie sind diese
DCMs keine richtigen PLLs, wie mir scheint.
Dies habe ich mal beim Stöbern auf einem Xilinx Forum gefunden:
http://forums.xilinx.com/xlnx/board/message?board.id=ISE&thread.id=1516
Der fünfte Beitrag dort verweist auf einen Frequenzzähler der
einen offiziellen Xilinx-VHDL-Code für einen Ringzähler mit ein
paar LUTs enthält.
Vielleicht hilft das was.
Verzeihung, aber es sollte nicht "Ringzähler" sondern
"Ringoszillator" heisen.
Also so:
Der fünfte Beitrag dort verweist auf einen Frequenzzähler der
einen offiziellen Xilinx-VHDL-Code für einen Ringoszillator mit ein
paar LUTs enthält.
Das ist ja eben das design was ich schon fruher als beispiel
vorgeschlagen habe ;)
da ist auch das DCM oscillator dabei,
das DCM oscillator habe ich glaube auch auf S3A getestet
muss man aber viel selber spielen, sonst ist es nur fur s3e
benutztbar
Antti
>Was ist so schwierig daran, an einem externen Pin, bevorzugt den eh>reservierten Clockpin ueber ein Kaebelchen einen Clock einzuspeisen ?
Wenn man nicht drankommt....
>muss man aber viel selber spielen, sonst ist es nur fur s3e>benutztbar
Was waere zu tun für z.B. den S3A?
"da ist auch das DCM oscillator dabei,"
Der benötigt noch einen externen Anstosstakt. Könnte man dazu so einen
Ringoszillator nehmen, der die Takte generiert und der nach
erfolgreicher LOCK sich vom Ring-Oszi trennt?