Hallo alle zusammen, ICh arbeite gerade an einem interface eines AD7980 mittels VHDL und habe ein problem von dem ich die ursache nicht kenne. Im Anhang sind einmal das AD7980 interface, die Topl Level entity, die Testbench und ein Modell des AD7980 zu finden. Das modell habe ich zum simulieren gemacht und ist eigentlich in diesem Fall egal. Es taktet einfach immer nur 16 bit auf anfrage raus. Das eigentlich Problem ist die AD7980interface.vhd. im aquisition zustand sollen die über die Miso Line empfangenen bits mit der fallenden Taktflanke des Clken signals eingelesen werden, aber in der simulation werden die Bits bei steigender Taktflanke des Clken eingelesen. zwar tut die simulation was sie soll, aber es steckt ja eindeutig ein fehler dahinter. ich hoffe mein Problem habe ich verständlich dargelegt und ihr könnt mir helfen
Deine Flankenerkennung macht schon das was sie soll, aber so eine Erkennung hat nun mal einen Takt Delay und da deine SCLK sehr hoch ist geht das in die Hose. Du willst eine SCLK Frequenz von 66 MHz hast aber eine 100 MHz Systemclock, das geht nicht. Aktuell ist deine SCLK nur 50 MHz (zu wenig um mit dem AD780 1 MSPS zu erreichen). Ich würde eine Systemtakt von 66 MHz benutzen, und die IOs zum ADC als IDDR und ODDR realisieren.
S.G schrieb: > habe ein problem von dem ich die ursache nicht kenne.
1 | if sckl_freq_counter <(100000000/SCKLFREQ) then |
In Integer gerechnet sind 100000000/66000000 = 1 :-o Und hier wartest du 730 ns, weil der Synthesizer deinen Code übersetzt, nicht deine Kommentare:
1 | elsif ( conversioncounter = 72) and CNVtemp = '1' then -- warte 720ns |
Wie schon erwähnt: wenn du mit deinen internen Datenraten dicht an die Takfrequenz rankomst, dann ist es nicht mehr mit pauschalen Berechnungen wie 100000000/66000000 getan. Sondern du musst jeden einzelnen Takt per Handschlag verabscheiden und dir bewusst sein, dass die Granularität dort recht groß ist. Du kannst dir also nicht 62MHz erzeugen, denn es gibt nur Verzögerungszeiten von 10ns, 20ns, 30ns, 40ns... ergo 100MHz, 50MHz, 33MHz, 25MHZ...
Versuche mal, das Design so umzustellen, dass Du den ADC die Daten selbst eintakten lässt, z.B. mit einem asynchronen Fifo. Ansonsten musst Du wie erwähnt überabtasten. Du könntest auch mit einem DDR-FF arbeiten und parallel mit einfacher Frequenz weitergehen.
:
Bearbeitet durch User
Danke für eure Antworten, es wurde natürlich punkte angesprochen die ich noch nicht bedacht habe. @lothar Du hast natürlich recht mit den 100mhz/62,5mhz. Ich hab da ein wenig rumprobiert und vergessen es zu ändern. Mein derzeitiges enable Signal läuft mit 50mhz und ist für 1MSPS wie lattice_user bereits gesagt hat. Mit den 720ns Wartezeit habe ich dich auch verwirrt, es ist natürlich 730ns und auch so gewollt. Die Convention dauert max 720ns und danach muss noch 10ns-15ns gewartet werden bis die Daten auf der Miso Leitung anliegen. Da 50mhz Etwas zu langsam sind muss ich jetzt erstmal alternativen betrachten. Ich benutze einen spartan6 und muss erstmal gucken welche Möglichkeiten mir der DCM bietet.
Ich glaube du solltest erstmal dein Fehler rausfinden (auf welche Flanke die bits rein/rausgetaktet werden) und dann erst den Clock anpassen. Der ADC kannst du auch mit eine niedrigere Rate erstmal ansteuern. Somit kannst du die MISO Leitung mit Systemtakt überabtasten und einfach über einen Schieberegister eintakten. Gruss
S.G schrieb: > Ich benutze einen spartan6 und muss erstmal gucken welche > Möglichkeiten mir der DCM bietet. 1050 MHz ! 50 x 21 -> 1050 -> /8 -> 132 MHz
experte schrieb: > S.G schrieb: >> Ich benutze einen spartan6 und muss erstmal gucken welche >> Möglichkeiten mir der DCM bietet. > 1050 MHz ! > > 50 x 21 -> 1050 -> /8 -> 132 MHz Danke, aber könntest du mir diese Rechnung ein wenig erläutern? Mein Fpga board bekommt hat einen Takt von 50mhz. im moment sieht mein Lösungsansatz so aus, dass ich mithilfe der SPartan6 PLL komponentne einen SPi Takt von 62,5 und einen Systemtakt von 125Mhz generiere. mit den 62,5 erreiche ich die 1MSPS des ADc und die 125 werde ich dann zum verarbeiten der Daten verwenden. Würde eurer meinung etwas gegen diese Idee sprechen?
S.G schrieb: > Mein Fpga board bekommt hat einen Takt von 50mhz. im moment sieht mein > Lösungsansatz so aus, dass ich mithilfe der SPartan6 PLL komponentne > einen SPi Takt von 62,5 und einen Systemtakt von 125Mhz generiere. mit > den 62,5 erreiche ich die 1MSPS des ADc und die 125 werde ich dann zum > verarbeiten der Daten verwenden. > Würde eurer meinung etwas gegen diese Idee sprechen? Solgange bei einem SPI Master der Systemtakt ein ganzzahliges Vielfaches des SPI Taktes ist, brauchst du diesen nicht extra mit einer PLL erzeugen. Betrachte einfach den SPI Takt als zusätzliches Signal, das in deiner Statemachine erzeugt wird. Wichtiger ist dass man darauf achtet IO FFs zu verwenden, sonst wird es bei höheren Gechwindigkeiten schwierig bis unmöglich die Setup und Holdzeiten einzuhalten In Verilog könnte ich es dir schnell hinschreiben, aber in VHDL bin ich nicht fit genug.
Stimmt natürlich, da habe ich zu kompliziert gedacht mit den verschiedenen Takten. Danke
S.G schrieb: > Würde eurer meinung etwas gegen diese Idee sprechen? Dass du unnötigerweise zwei Taktdomänen aufmachst. Uin diesem Fall hier ist das "nur" die Hälfte, das kann dir die Toolchain noch aufrechnen, aber wehe, du machst unbedarft ("das hat das letzte Mal auch schon so toll geklappt!") einen "krummen" Takt auf. Dann hast du auf einmal zwei asynchrone Takte in deinem Design und damit all die Probleme an der Backe, die ein solches asynchrones Design mit sich bringt (Stichworte: Eintakten, Fifo, Synchronisieren, Handshake)... Lattice User schrieb: > Betrachte einfach den SPI Takt als zusätzliches Signal, das in deiner > Statemachine erzeugt wird. Es gibt nämlich nur einen Takt: der, der vom Quarzoszillator kommt (meinetwegen noch durch eine PLL aufgehübscht). Aber ein SPI-Takt ist KEIN Takt, sondern nur ein Symbol, das die Buchstabenfolge t, a, k und t (von mir aus auch c, l, o, c und k) in seinem Namen trägt.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.