Hi, Bald ist meine erste Schaltung so weit, dass ich sie mal aufbauen kann. Aber bevor ich teure CPLDs kaufe wüsste ich gerne ob die CPLD mit meinem Code auch schnell genug läuft. Daher meine Fragen: -Wie kann ich auf dem PC das Verilog Programm simulieren, dass ich nachher üer das Timingverhalten bescheid weiß? Bisher nutze ich die Simulation in ISE bei der man vorher eine Test Bench Waveform erstellen muss. (Ich hoffe damit ist schon klar, welchen Simulator ich da nehme. Ist jedenfalls alles in ISE drin.) Da sieht es nicht so aus als ob da irgendwelche internen Verzögerungen mit einbezogen sind. Alle Änderungen Ausgangssignale sind soweit ich das sehen kann immer synchron zu Änderungen der eingangssignale. Oder Gucke ich nur nicht genau genug hin? -Was bedeuten die 5ns, die als Geschwindigkeit bei der CPLD dabei stehen? Aus dem Datenblatt entnehme ich pin-to-pin delay, aber ich denke da verstehe ich was falsch. hängt das nicht auch von der inneren Beschaltung ab? - In einem Praktikum auf der Uni habe ich gelernt, dass es synchrone Zähler (alle ausgänge ändern Gleichzeitig ihren Zustand) und asynchrone Zähler (das bit 2 fängt erst an was zu machen, wenn das bit 1 fertig ist. Z.B.: viele flipflops hintereinander geschaltet, das am Ausgang vom Bit n hängt der Takteingang vom Bit n+1) Erste Frage: Ist diese Unterscheidung bei CPLDs in der Form überhaupt sinnvoll? oder wird das immer Synchron synthetiesiert? Wenn es die Unterscheidung gibt, was wird dann aus diesem Code: always @ (negedge clk) begin if (res==0) begin a[18:0]=0; res=1; end else begin a[18:0]=a[18:0] + 1; end end Der Zähler soll einen RAM Adressieren, das Ganze soll mit 50MHz laufen. Letzte frage: -Wie finde ich raus, weche CPLD ich am besten auswähle? Ich meine jetzt nicht ob XC9536 oder XC9572, mir geht es ehr um die Geschwindigkeit. Also die entscheidung kaufe ich ein CPLD mit 5 oder 15 ns. Ich habe mal in einem Buch über EMV-Design gelesen, dass man immer möglichst langsame Bauteile nehmen soll. Schnelle haben notwenidigerweise auch steilere Flanken am Ausgang und damit einen größeren Anteil von hohen Frequenzen, was sich ungünstig auf die EMV Verträglichkeit auswirkt. Also: Lieber 10 ns als 5ns nehmen, wenn das von der Schaltung her reicht? Oder kann ich das hier so einfach nicht Anwenden und muss noch andere sachen beachten? Kann mir jemand von seinen Erfahrungen berichten? Schon mal allen vielen Dank, die sich die Mühe gemacht haben bis hier hin alles durch zu lesen!! MfG Cavorca
pin to pin delay heisst, Verzögerung vom Eingang zum Ausgang oder von einem rückgeführten Ausgang zum Ausgang. Diese Zeit ist immer konstant und entspricht der auf dem Chip angegebnen. Allerdings kann es auch passieren, dass temporäre Signale beim Fitten notwendig werden und sich so auch längere Signallaufzeiten ergeben können. Bei Xilinx gibt der Fitter-Report (*.rpt) Aussage darüber, wie er die Logik realisiert hat. Gruß Jörg
hm und wie lese ich diese Datei? das ist ja immerhin eine 19KB Textdatei. Muss ich die komplett durchgehen? Oder steht das entscheidende an einer ganz bestimmten stelle? Einfacher gefragt: auf was muss ich in der Textdatei achten? MfG Christian P.S. ich habe den Report mal angehängt
als erstes im Bereich "Function Block Details": Signale, die Du nicht selbst definiert hast und mit BUF_ gefolgt vom Signalnamen anfangen, weisen auf eine "Zwischenstation" hin, weil z.B. die Produktterme am Signal nicht ausgereicht haben. Das heisst, an dieser Stelle gibt es eine zusätzliche Verzögerung. Weiter unten gibt es dann die Sektion "Mapped Locic". Hier steht drin, wie die synthetisierte Logik letztendlich realisiert wurde und man muß nur bei zeitktitischen Signalpfaden prüfen, ob irgendwelche gepufferten Signale im Pfad liefgen. An den Gleichungen, die Signal.CLK beschreiben, siehst Du auch, welches Taktsignal bei den Makrozellen benutzt wird. Ist es in Deinem Fall clk, dann ist es ein Synchronzähler. Soviel ich weiss, wird aber aus "wert=wert+1" immer ein Synchronzähler synthetisiert. Allerdings liegen nach Deiner rpt Datei alle Ausgänge fest auf 0. Gruß Jörg
Hallo Jörg, schon mal vielen Dank für Deine ausführlichen Erklärungen! Ein paar Unklarheiten gibt es noch bei mir: Braucht es dann pro Zwischenstation nochmal 5ns oder kann man das nicht so genau sagen? Ich muss dann da gucken bei FB1 FB2,... ist das richtig? Das alle Ausgänge fest auf 0 liegen verstehe ich nicht. Ich habe das einen initial block in dem die alle auf 0 gesetzt werden, aber der Block sollte doch nach der Synthese nicht mehr zu finden sein? Ich habe die inputs und outputs des Moduls nicht selbst auf irgendwelche pins gelegt. Daran sollte es aber nicht liegen, oder? MfG Christian
Also hier muss man erst das Prinzip der timing constraints verstehen. Der Fitter (CPLD) und der Place und route (FPGA) versuchen immer eine Vorgabe zu erfüllen und machen von sich aus nicht das Optimum. Neben dem VHDL-Code (Was macht mein Design" musst du auch sagen "Wie schnell muss mein design" sein. Das nennt man timing constarint und dazu schreibt man ein ucf file (xilinx) oder man erstellt ein solches mit dem constraint editor. Versuche letzteres, und gebe dort ein maximale taktfrequenz oder eine minimale Pad zu Pad Durchlaufzeit an. (letzteres meint wie schnell ein Änderung an einen Eingangspin zu einer Änderung am Ausgangspin bewirkt. Mit diesen constraints läßt du den Fitter durchlaufen. Steht dann im Timingreport ein all constraints are meet ist das Design und der ausgewählte CPLD schnell genug. Änderst du den speedgrade deines cplds und lässt die tools erneut laufen kannst du abschätzen was du brauchst. Das ist besonders bei FPGA wichtig, aber auch bei CPLD's würde ich keine Speedabschätzung per Hand machen. Den Vorgang der Ermittlung der aktuellen Laufzeiten im design nennt man "Statische Timing Analyse" oder auch Static Timing Analyses", kurz STA. Die Dok zum CPLD design-flow hat bestimmt ein Kaoitel darüber.
Kannst Du mir zu dieser Software vielleicht ein Tutorial empfehlen? Ich habe zuerst mal versucht Global ein Pin-To-Pin delay festzuelegen. Da kam dann sowas bei raus: TIMESPEC "TS_" = FROM "FFS" TO "FFS" 10 ns; Was aber auf keinen Fall richtig sein kann, da ich aus den 10 ns auch 1 ns machen kann und es erscheint kein Fehler. So schnell ist die CPLD ja sicher nicht... Bei Dir oben im Text hörte sich das so einfach an, dass man grade mal eine Einstellung ändern muss. Jetzt sehe ich hier irgendwas von Gruppen die man definieren muss und was weiß ich nicht alles (Was aber auch nicht funktioniert). Ist das wirklich so kompliziert oder bin ich auf dem Holzweg?
Also dein constraint beschreibt Signale von einem FF zu einem FF, vielleicht hast du keine solchen Pfade im Design, dann kann dieses constraint nicht verletzt werden. dann ist alles OK. Was dir noch fehlt ist ein Pad to pad constraint, das kannst du sicherlich nicht auf 1 ns setzen, also sowas wie: TIMESPEC "TS_" = FROM "PADS" TO "PADS" 10 ns; Du kannst mir auch das design schicken, dann ergänze ich die constraints nudele ich das hier mal durch die tools. Dann kann ich Dir einen Timing report schicken. Du errecihst mich über : http://www.mikrocontroller.net/articles/Benutzer:FPGAk%C3%BCchle
Danke, das ist ein nettes Angebot! Ich komme sicher darauf Zurück, aber nicht mit diesem Projekt. Das ist mehr learning by doing als ordentliche programmierung und deshalb mittlerweile ziemlich zerschossen. Ich fange lieber noch mal ein neues an, in dem ich dann noch keine Einstellungen verändert habe von denen ich nicht weiß was sie bedeuten ;-) Wenn ich rausgefunden habe wie ich einen Buffer realisiere bzw wie ich einen ausgang auf 'Z' stelle wäre ich sehr dankbar, wenn du die einstellungen mal machen kannst.
Also tutorials kenne ich nicht, da ich über dieses Alter hinaus bin. Da muß ich dir leider selber das suchen nach fpga constraints ucf xilinx überlassen. Xilinx hat einen FETTEN constraint guide in den docs. Ich versuche mal kurz das wichtigste zu sagen. Wir reden nur über timing constraints und dabei lassen wir DCM und skew aus. Timing constraints haben zwei parameter: -die Zeit -die netze Netzte sind hier: - Signale ("leitungen,Drähte") von FF ausgang zu FF Eingang (clk für FF gleich) - von Pin zu FF Eingang - von FF Ausgang zu Pin - von Pin zu Pin von FF ausgang zu FF eingang (clk für FF verschieden. Diese Netze werden bei Xilinx als Gruppen bezeichnet und es gibt zwei definitionen, solche Gruppen zu definieren. Diese Gruppen müßen zuerst definiert werde und es gibt vordefinierte Gruppen. Beispiel (aus ucf): NET "clk_i" TNM_NET = "tn_clk_i"; heisst alle netze auf denen das Signal clk_i läuft werden in den Namen tn_clk_i zusammengefasst. Damit ist der Parameter Netzte definiert und wir können jetzt ein timing constraint definieren: TIMESPEC "TS_clk_i" = PERIOD "tn_clk_i" 30100 ns HIGH 50 %; Das ist ein periodconstraint und es sagt das mein takt mit einener Periode von 30,1 mikrosekunden laufen soll. Fast da selbe sage ich mit: TIMESPEC "TS_1" = FROM "FFS" TO "FFS" 30100 ns; Hier benutze ich die vordefinierte Gruppe FFS die alle FlipFlops im design umfasst und definiere eine max. Laufzeit von 30 us zwischen FF Ausgng und FF eingang. Eine weitere vordefinierte Gruppe ist PADS, das sind die FPGA-pins. damit gibst du die Durchlaufzeiten von Pin zu pin an, als beispielsweise wenn du einen adressdecoder (wenn adressbus auf xxx dan aktiviere IC2) baust, wie lange es zwischen anlegen der addresse bis aktivieren des richtiegn Ausgangssignal dauert. Für alle Pin zu oin verbindungen heisst des: TIMESPEC "TS_2" = FROM "PADS" TO "PADS" 10 ns; Sollen jetz beispielsweise alle Eingangssignal flott in die FF schreibst Du: TIMESPEC "TS_3" = FROM "PADS" TO "FFS" 2 ns; oder nur für das Signal an pin addr_ein1: NET "addr_ein1" TNM_NET = "tn_addrein"; TIMESPEC "TS_4" = FROM "tn_addren1" TO "FFS" 2 ns; das in aller Kürze. Anschauen kann man sich noch neben period und from to das constraints Offset in Before oder Offset after Out. Aber fast alles lässt sich mit From to erledigen. Constraints lerenen ist nicht so schwierig wie VHDL, es ist ein ganzes stück einfacher. man muss nur das prinzip "Netz Zeit" verstehen, wissen was Timing bedeutet (setup, hold, max. taktfrequenz) und ein wenig syntax lernen. Es gibt auf dem project navigator ein Icon das aussieht wie eine Glühlampe. Das heisst language templates, dort findes du codeschnipsel für die ucf constraints.
Ok, das angebot steht. CPLD aus dem Buch zu lernen ist nicht einfach, am besten man kennt einen mit Erfahrung, der einem mündlich erklärt wie es geht.
@FPGA-Küchle Hast du schon mal geplant eine DVD Video CD zu machen. [THE ART of (VHDL) -RODEO-Bull Riding] V1,V2,V3.... Das ist bestimt ne echte Marktlücke, und wird der Renner. Zitat: --CPLD aus dem Buch zu lernen ist nicht einfach, am --besten man kennt einen mit Erfahrung, der einem mündlich erklärt wie es --geht. Gruss Holger.
Hm, kratz mal nicht so sehr an meinem Ego, ich könnt mich zum Papst ausrufen und mich als FPGA-Heiligen verehren lassen ;-) Also das Buch Konzept verfolgt mich schon geraume zeit. Sollt wohl mal kündigen um zeit dafür zu haben. Video, da bin ich nicht eitel genug, aber überlegenswert wäre es schon. Darf mal Screenshots abfilmen? oder hat man da gleich einen Ur-Heber-Advokaten an der Gurgel? Vorausgesetzt man wird nicht verarscht, liesse sich über eine MP3-Serie nachdenken. Ist zwar nicht so akademisch, aber schneller gemacht als Tutorials tippern. Hat jemand Erfahrung mit einem solchen Projekt (FPGA-Hörbuch)?
Dass es mit Büchern schwer ist kann ich nur bestätigen. Ich hatte mir mal aus der Bibliothek ein Buch ausgeliehen, das ging dann aber auch erst auf alle Grundlagen seit Entstehung der PLDs ein. Das ist einfach zu viel Information die ich nicht brauche. Vielleicht hatte ich nur ein falsches Buch (anderes gab es leider nicht) und einfach mal so auf gut Glück eins kaufen ist nicht so mein Ding. Bei mir ist das alles einfach nur ein Hobby, da will ich nicht unbedingt sämtliche Details verstanden haben. Einfach zu wissen was man machen muss damit es funktioniert reicht ja schon. Von daher fände ich die Idee mit einem Hörbuch klasse. Noch besser mit einem Video dabei. Ich kannte mal jemanden der hat auch sowas gemacht. Der hat vom Bildschrim Videos aufgenommen (natürlich nicht 25 fps sondern wesentlich reduziert. Vielleicht wars auch ein Programm das ein Flash draus gemacht hat) und dazu was gesprochen. Wie das mit dem Rechtlichen aussah weiß ich leider nicht mehr. Da ISE aber kostenlos ist denke ich nicht, dass das ein Problem wäre. Ich würde an Deiner Stelle einfach mal eine Email an Xilinx schreiben um sicher zu gehen. Würdest du das, wenn es fertig ist verkaufen wollen oder irgendwo kostenlos anbieten wollen?
Xilinx werde ich mal bei Embedded Messe diese Woche in Nürnberg fragen. Reich wird man so einem Spezialprojekt nicht, wenn die materialkosten reinkommen wärs gut.
Zu den CPLDs gibts ueblicherweise super Software gratis. Bevor man sich da zu tief in VHDL verheddert und nix laeuft sollte man vieleicht mit der schematischen Eingabe anfangen und die Schaltung auch simulieren. Ohne Simulation ist eh nichts. Die eingebauten Analysewerkzeuge rechnen auch alle Timings aller moeglichen Pfade durch. Die Software ist einfacher geworden, aber beim ersten Projkt gibt's viel zu lernen. Vielleicht sollte ein Kurs ins Auge gefasst werden. Vergiss Buecher, das Ganze entwickelt sich viel schneller als sich Buecher schreiben. Buecher waeren sofort veraltet. Ich hab das Glueck, dass der Altera Support meines Lieferanten super ist. Der hat mir mal zu einem 3 Tageskurs geraten .. da kamen alle Details dran. Die Materie ist komplex und von nichts kommt nichts. CF
@FPGA-Küchle Br Alpha Bildung-Kanal ?????? EXCEL haben ich auch von einem Velag auf Kasette bekommen, habe den Verlag leider nicht zur Hand. Zugeschaut und mitgebaut ist immer besser als blääääätern. --------------------------------------------------------- @Christian Ich habe den Beitrag mit Interesse gelesen. Endlich mal einer der den Sachen auf den Grund geht, also unten an der Basis anfängt z.B XC9536 oder XC9572. ------------------------------------------------------------------------ ------------------- Lasse die dedizierten Pinne wie , GCK/IO : 0.3, GSR/IO,GTS,GSR in das Design ausnutzend und vorteilhaft mit einfliessen. Die Constraints mit in der Synthese nutzen. . Zitat: Also: Lieber 10 ns als 5ns nehmen, wenn das von der Schaltung her reicht? Oder kann ich das hier so einfach nicht Anwenden und muss noch andere Sachen beachten? --------------------------------------------------------- Du soltest dir auch noch Gedanken über eine gute Industrie EMV taugliche Signal-Term_Inirung (R 100 E ), bei 50 Mhz. Basis-Clock machen. . --------------------------------------------------------- z.B ca.100-Ohm Oszilator Output Beschaltung.Kabel-Reflektionen --------------------------------------------------------- zB. SCSI BUS Abschlüsse. Terminate on High and LOW Has du schon einen StromLaufPlan ??? ---------------------------------------------------- Ich suche noch ein simles Beispiel für den Kern eins progammierbaren 8 Kanal IRQ-Irq Kontrollers. Wo ich mit dem Mix aus Tasken von Async.-Design, u. Sync-Design, die Sache so verschalten kann. Das ich die Vorentscheidung für den next Rising Clock geschickt beeinflussen kan. Halt mich in die Core-Logic für so ein z.B Intel 8 Kanal IRQ-Kontroller für PC-MotherBoards eindenken kann. Und was ich halt da so unbedingt beachten solte. Es geht dan zum "Grundesign aufbohren". Wie z.B Dynamische Prio-Behandlung, und Beeinflussung während der echten CPLD-Design-Runtime. Jetz wird mir das klar.... Es kommt leider immer zu dies Schiffsbruchmeldungen, wo ein VHDL-Design auf dem CHIP der Fa. X::: anders verhält als der auf Fa. A... Dan wird am VHDL-Code so lange rumgefummelt bis sich was brauchbares einzustellen scheint. Das ist dan wie ein 8 Sekunden Rodeo auf der Hardware mit VHDL . In den Simulatoren ist das alles schön, aber aber. --------------------------------------------------------- FestPlatten am CPLD, Serielle Schnittstelle --------------------------------------------------------- Als Grund-Modell habe ich mir die IRQ-Pinne am 68000 wie N_M_I,FIRQ,IRQ.. ect. als Denk-Leitfaden vorgestellt. --------------------------------------------------------- Gruss, Holger.
@CPLD fan Bei mir auf der Uni gibt es eine Vorlesung "technische Informatik". Die hätte ich sehr gerne gehört. Gegen Ende der Vorlesung ging es auch wohl um CPLDs und FPGAs. Hier sind die Stundenpläne allerdings so furchtbar... Die Vorlesung hat sich mit meinem Pflichtprogram geschnitten, ich hätte pro Woche grade mal eine von vier Stunden hören können. Da habe ichs bleiben lassen. Ich finde auch mit den Powerpointfolien kann man nicht wirklich lernen. Das sind ja idR nur Stichworte ohne Zusammenhang. So ein Kurs wie du gemacht hast ist sicher nicht ganz billig? Welche Software meinst du? Die normale vom Hersteller? Also bei Xilinx den ISE Webpack? Finde ich ungeheuer unübersichtlich. Ich habe auch schon gehört dass das bei Altera besser sein soll. Aber naja... jetzt bin ich bei Xilinx gelandet. Man arbeitet sich mit der Zeit halt ein. @Holger Ja, ich halte nix davon einfach irgendwelche Code schnipsel mir aus irgendwelchen Beispielen zusammen zu kleben auf das dann irgendwas raus kommt, das irgendwie das macht was es soll ohne dass ich weiß warum. Vorallem wennn es dann mal nicht funktioniert stehe ich im dunkeln. Wenn ich genauer Bescheid wüsste wie ich "Pinne wie , GCK/IO : 0.3, GSR/IO,GTS,GSR" in mein Design einbaue und was die Vorteile und Möglichkeiten der der Einzelnen Pins sind würde ich das auch machen. Ich meine auch einen GCK hat ISE Automatisch zugeordnet. Ich dachte eigentlich auf eine Terminierung könnte ich verzichten: Die Taktfrequent ist 50MHz, was ja nun auch nicht sooo viel ist, die Flankenanstiegszeit ist 3ns. In meinem Buch über EMV Design steht, dass ich die Leitungen kürzer als ein so-und-so-vielsten Teil der Länge machen muss die die Taktflanke "lang" ist. bei mir wären das so 50cm. Da ich sicher unter 10 cm bleibe dachte ich dass der Punkt dann nicht so kritisch ist. Ist das falsch? Ich hatte auch mal eina Schaltung die mit 50MHz lief auf einem Breadboard aufgebaut mit größtenteils sehr großzügig dimensionierten Verkabelungen. Es hat alles anstandslos funktioniert. Da ich jetzt ehr auf eine zweiseitige SMD Platine hinsteuere habe ich da eigentlich nicht mit so vielen Problemen gerechnet. Ich bin aber gerne bereit etwas dazuzulernen. Ich fände Beispiele bei denen sich man ein bisschen Inspirieren lassen kann auch nett, aber was du da Planst ist wesentlich Komplexer als was ich hier vor habe. Stromlaufplan habe ich noch nicht.
<Wenn ich genauer Bescheid wüsste wie ich "Pinne wie , GCK/IO : 0.3, <GSR/IO,GTS,GSR" in mein Design einbaue und was die Vorteile und <Möglichkeiten der der Einzelnen Pins sind würde ich das auch machen. Ich <meine auch einen GCK hat ISE Automatisch zugeordnet. Also du lädst dir das datenblatt von deinem cplde von xilnx runter, dort hat es einen tabelle welche Pins bei welchen Gehäuse welche Funktion haben. Ich grad das vom 9572XL vormir liegen, da wäre beim PC44 -Gehäuse GTS1 auf 42, GCK1 auf 5 und GSR auf 39. jetzt hast du in deinem design vielleicht einen getakten Tristate ausgang, beispielsweise
1 | process(clk_i,rst_i) |
2 | begin
|
3 | if rst_i = '1' then |
4 | counter_q <= "0000"; |
5 | elsif rising_edge(clk_i) then |
6 | if tristate_enable_i = '1' then |
7 | output_q <= (others => 'Z); |
8 | else
|
9 | output_q <= counter_q; |
10 | endif; |
11 | end if; |
12 | end process; |
also ist rst_i dein globaler Set/reset, clk_i dein globaler takt und tristate_enable_i dein globales Tristate enable. Dann muß dein ucf file wie folgt aussehen NET "clk_i" LOC = "P5" | BUFG = CLK ; NET "rst_i" LOC = "P39" | BUFG = SR ; NET "tristate_enable_i" LOC = "P42" | BUFG = OE ; Das ucf musst du natürlich mit add project files zu deinem projekt hinzufügen. Und am besten du schaust nochmal im constraint guide von xilinx nach, ob ich nicht einen tippfehler hinterlassen hab. Was GSR und GTS bedeutet, welche vorteile diese bringen steht beispielsweise im CPLD family data sheet, ist auch bei xilinx downloadbar.
@Christian Bitte nur die Bilder ansehen, kan man auch grösser machen. ----------------------------- ------- Den Text "nicht" lesen. ----------------------- Da sind die Stromlaufpläne drin, mit den CLOCK Pinnen ect. Was die R-C Beschaltung da an PIN 43 soll ???? http://www.stud.fit.vutbr.cz/~xvasic11/cl.cpld/ Gruss, Holger.
ich glaube ich verstehe dich nicht ganz. Es geht jetzt um Pin 8? was ist mit 43? Was hat das mit dem Thema in diesem Thread zu tun? Die Beschaltung sieht vielleicht ein bisschen nach einem Timer aus, wäre aber sehr langsam mit 0,22s. weiter unten im Bild über die Pinbelegung sieht es aber auch nicht aus als ob an diesen Pin überhaupt etwas nach außen gelegt wird.
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.