560,0kHz Takt bzw. "Divide-by-N" ICs

Gute Idee. Der HC390 ist dann sicher eine geeignete Lösung. Hat nur gerade den Nachteil daß ich den Dekadenzähler hier nicht lagernd habe, muß wohl mal welche bei Reichelt mitbestellen.

MfG JRD

Reply to
Rafael Deliano
Loading thread data ...

Einzelne 5:1 scheint es in 74HC tatsächlich nicht zu geben. Aber den 74HC390 gibt es. Schrob ich doch.

Und daß man in der Anwendung als 5:1 Teiler nicht Q3 sondern besser Q2 verwendet, weiß man eigentlich wenn man jemals aktiv mit 74x90 gebaut hat. Anscheinend hast du nicht nur deine 74LS sondern auch die damit verbundenen Erfahrungen entsorgt ;)

Falls es dir (entgegen deinem ersten Posting) doch auf das Tastverhältnis bei 560kHz ankommt: dann nimm halt einen 28MHz Quarz und setz noch einen 2:1 Teiler ans Ende. Hat der HC390 ja praktischerweise schon an Bord. Und bei NXP kann der bis

XL

Reply to
Axel Schwenke

Ich habe früher nie viel TTL-Gräber gebaut da erst anno Mikroprozessor dazugekommen. Aber zumindest war soviel Überblick vorhanden daß ich merkte daß meine Lösung mit 3 ICs zuviel Aufwand für die simple Funktion ist und es bessere Schaltungen geben muß. Deshalb die Frage, man lernt ja nie aus.

MfG JRD

Reply to
Rafael Deliano

Dann nimm 28 MHz Takt und /25 und /2. Das gibt 50% Tastverhältnis.

--
Dipl.-Inform(FH) Peter Heitzer, peter.heitzer@rz.uni-regensburg.de
HTML mails will be forwarded to /dev/null.
Reply to
Peter Heitzer

Hallo Michael,

M.Randelzhofer schrieb:

mein Beispiel ist gedacht als fractional divider in einer PLL, dazu sollte er umschaltbar und symmetrisch sein. Wenn ich fest auf 25 einstelle und etwas mit dem Optimierer spiele, paßt es evtl. in ein XC9536 rein, schneller wird es aber nicht.

Du willst doch keine Virtex dafür einsetzen? Die DSP-Blöcke wären doch der totale Overkill ;-). Damit komme ich bei meinem Beispiel auch auf

156 MHz.

[.....]

Interessanter Ansatz, aber unsymmetrisch. Es funktioniert, geht hier mit XC9572 bis 71 MHz. Würde sicher auch in ein kleines GAL passen. Der Vorteil ist wohl, daß es sehr hohe Frequenzen erlaubt und geringen Aufwand benötigt.

Die programmierbaren Logikbausteine haben naturgemäß viele Beine, deshalb sind sie hier wohl weniger erwünscht.

Wenn es unbedingt symmetrisch sein muß ohne CPLD, bleibt wohl nur, den Quarztakt zu verdoppeln und gradzahlig mit 74HC4059 runterzuteilen.

mfg. Winfried

Reply to
Winfried Salomon

Tja 13 clocks high und 12 clocks low. Wahrscheinlich symmetrisch genug.

Normalerweise hängt man in so ein CPLD oder FPGA noch mehr rein. Muss ja nicht immer gleich eine 32bit CPU sein. Aber man kann sich mit den CPLD Ressourcen leicht verzetteln, passiert auch Profis immer wieder. Und da heutzutage ein 50k FPGA inkl. SPI Flash für 5oiro (1000Stck) zu haben ist, sind CPLDs irgendwie am aussterben. Aber es gibt ja noch PALs und GALs :-)

MIKE

--
www.oho-elektronik.de
OHO-Elektronik
Michael Randelzhofer
FPGA und CPLD Mini Module
Klein aber oho !
Kontakt:
Tel: 08131 339230
mr@oho-elektronik.de
Usst.ID: DE130097310
Reply to
M.Randelzhofer

Wow, die alten Dinger!? Cool :) Habe auch noch ein paar Platinen damit herumliegen, bringe es nicht über's Herz, die hübschen (weiße Keramikgehäuse!) und damals schweineteuren (dreistelling in DM!) ICs wegzuwerfen.

-ras

--

Ralph A. Schmid

http://www.dk5ras.de/ http://www.db0fue.de/
http://www.bclog.de/
Reply to
Ralph A. Schmid, dk5ras

Nur noch für Kontrollmessung wieviel Rauschen die vertragen im Vergleich zur Softwarelösung auf 8 Bit Controller an der ich werkle.

MfG JRD

Reply to
Rafael Deliano

Die Dinger sind spitze; die holen Tonfolgen aus dem Rauschen, wo man mit dem Ohr kaum erahnt, daß da noch was ist. Klar, das Signal ist ja massiv redundant, bei 70 msec pro Ton. Immense Symboldauer :-)

Freilich, heute kräht da kein Hahn mehr nach :-)

-ras

--

Ralph A. Schmid

http://www.dk5ras.de/ http://www.db0fue.de/
http://www.bclog.de/
Reply to
Ralph A. Schmid, dk5ras

Ich habe gerade auch mal sowas entworfen, aber noch ein wenig flexibler, was die möglichen Anwendungsbereiche betrifft:

formatting link

Wieso hast du mit durch 2 begonnen? Meinst du mit symmetrisch, daß immer

50/50 Tastverhältnis herauskommt, egal wie der Eingang aussieht? Bei /3 geht das ja leider nicht. Mein Verfahren mit der Quadraturcodierung braucht bei ungeraden Teilern ein 50/50 Tastverhältnis am Eingang, wenn man das auch am Ausgang haben möchte, aber wenn man den Prescaler verwendet, dann kann man zumindest alle geraden Teiler ab /2 mit symmetrischen Ausgang hinbekommen, unabhängig vom Tastverhältnis am Eingang, sofern die minimalen Low/High-Zeiten eingehalten werden.

Ist aber auch erstmal nur mit dem Simulator getestet, aber sollte auch in der Realität laufen, wenn der CPLD kein Problem mit der Taktung auf fallende UND steigende Flanke hat (was aber zumindest in verschiedenen Prozessen ist). Soll laut ISE WebPack auch noch bei dem langsamsten Speed-Grade mit bis zu 36 MHz laufen. Der Vorteil des Quadraturverfahrens gegenüber manch anderen Verfahren finde ich ist, daß das Ausgangssignal absolut glitchfrei ist und daß das auch unabhängig vom verwendeten CPLD oder FPGA so ist.

Mit größeren Zählern wäre das doch vielleicht was für ein eigenes IC? Scheint ja eine Marktlücke zu sein :-)

Wenn man auf die Ebene von Gattern und LUTs runtersteigt, kann man es allerdings noch sehr viel kleiner hinbekommen, dann aber wahrscheinlich auch architekturabhängig:

formatting link

Ist schon ein wenig trickreich und daß die Simulatoren da Probleme mit bekommen könnten, wie Peter Alfke in dem Artikel schreibt, würde mir schon ein ungutes Gefühl bereiten, da ich ja nicht bei Xilinx sitze und die Bausteine bis ins Detail kenne.

--
Frank Buss, fb@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
Reply to
Frank Buss

Hallo Frank,

Frank Buss schrieb:

ich hab das mal eingegeben, hatte aber noch nicht die Zeit, mich mit der Funktionsweise und der Testbench zu beschäftigen. In VHDL bin ich allerdings auf Anfängerlevel, ich muß mir dafür Zeit nehmen.

Den Teiler /1 hab ich weggelassen, weil wahrscheinlich trivial oder nicht gut in mein Konzept einbaubar, ist zu lange her.

Forderung war: Takt hat 50% Tastverhältnis sowohl am Ein- als auch am Ausgang, jedes Integerverhältnis /2.... n soll durch ein parallel anliegendes Wort einstellbar sein und der Ausgangstakt _symmetrisch_ sein. Bei Änderung des Teilerverhältnisses soll die laufende Periode vollständig abgeschlossen werden und erst die nächste das andere Teilerverhältnis haben. Es ging um eine glitchfreie Modulation des Teilers in einer PLL, um eine fractional PLL zu realisieren. Im Vordergrund standen die Spurs des VCO, die minimiert werden sollten. Ich wollte einfach mal sehen, ob ich eine allgemeine Lösung finde. In der Praxis wurde das nicht getestet, ich habe die Simulation so stehengelassen.

Merkwürdig ist, und das muß ich nochmal nachprüfen, daß die interne PLL des LPC2468 (ARM7TDMI-Controller) auch keine ungeraden Teilerverhältnisse erlaubt, so als hätten die das nicht geschafft. Aber das kann eigentlich nicht sein.

Also Dein File läuft bei mir auch nur bis 20.2 MHz, wenn ich auf Speed optimieren will, versagt der Fitter. Kann auch garnicht anders sein, da Zähler ja nicht grundsätzlich schneller arbeiten können als Addierer, wenn ich mich nicht vertue. Auch VHDL kann da keine Wunderdinge vollbringen.

Könnte man ja NXP für ihre Controller verkaufen, damit die auch ungerade Verhältnisse können ;-).

Kenne das File, ja es gibt da schon so einige interessante Tricks.

Zum Simulieren Deines Projektes bin ich noch nicht gekommen. Relevant ist nur die post-fit-Simulation, wenn die ohne undefinierten Zustände läuft, ist die Schaltung zumindest plausibel. Die Behavioral-Simulation testet nur rein logisch und bringt oft sinnlose Ergebnisse. Man sieht evtl. auch schon im RTL-Viewer, ob der Compiler Unsinn produziert hat.

Was mich interessiert, wie hast Du die 2 process() gekoppelt, einer auf steigender und der andere auf fallender Flanke getriggert? Das war genau das, was ich in VHDL nicht hingekriegt habe, deshalb hab ich die Statemachine von Hand gemacht. An der Stelle konnte mich auch früher niemand überzeugen, nur Falk Brunner hatte mal was gepostet, das aber verlorengegangen ist. Sein Beispiel war auch IMHO leider zu überladen, sodaß das Wesentliche nicht leicht zu erkennen war.

mfg. Winfried

Reply to
Winfried Salomon

Normalerweise sollte eine Testbench auch die Funktionsweise automatisiert testen und am Ende dann "ok" oder "Fehler" ausgeben, was meine noch nicht macht. Ist aktuell nur dazu da, die Teiler von 1 bis 6 exemplarisch zu testen, damit man sich die Wellenformen ansehen kann.

Braucht etwas mehr Logik, und nur gerade Teilerverhältnisse hat den Vorteil, daß man unsaubere Tastverhältnisse exakt auf 50% am Ausgang hinbekommt.

Bei mir läuft es schneller, sagt zumindest mein ISE 11.1: Max. Clock Frequency 34.722 MHz mit meinem gerade geänderten Design. Habe aber auch ein wenig mit den verschiedenen Settings im Advanced-Modus der Fitter-Einstellungen experimentiert :-)

Gute Idee. Die ursprüngliche Fassung blieb wegen Setup-/Hold-Konflikten nach der zweiten Programmierung hängen. War nicht mehr viel Platz drin, das sauber zu programmieren, daher musste ich erstmal den Prescaler von maximal /256 auf /128 verkleinern und konnte dann aber alles synchron programmieren, mit zusätzlichen Reset per Output Enable. Jetzt läuft auch die Post-Fit Simulation einwandfrei durch. Vielleicht komme ich am Wochenende dazu, das mal auf richtiger Hardware laufen zu lassen.

Hier die aktuelle Version, mit ISE-Projektdateien:

formatting link

Per statischer Logik. Das einzige, was der Prozess macht, der auf fallende Flanke triggert, ist das div2-Signal des Prozesses, der auf steigende Flanke triggert, um 90° zu verschieben (relativ zu clockIn gesehen, wenn der Prescaler deaktivert ist). Im outputGenerator-Prozess, der rein statisch ist, siehst du dann, wie die Signale zusammengebaut werden, je nach eingestellter Konfiguration. Durch die xor-Verknüpfung der Quadraturausgänge out1 und out2 kann man damit im Endeffekt problemlos Teiler wie /1 und /3 hinbekommen (/2 sowieso, wenn man das zweite Signal nicht um 90° verzögert).

--
Frank Buss, fb@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
Reply to
Frank Buss

Hallo Frank,

Frank Buss schrieb:

mir ist noch nicht klar, wie der Teiler programmiert wird mit den 3 Eingängen, sonst hätte ich mir schnell ein Test Bench Waveform File gemacht.

Ein gewisser Jitter ist wohl nicht ganz zu vermeiden, andernfalls reduziert man aber die Einstellmöglichkeiten.

Ich habe mein File mal auf ISE 9.2 laufen lassen, es ändert sich aber nichts im Vergleich zur 6.3. Konnte aber den Aufwand auf 27 Makrozellen reduzieren durch veränderte Optimierungseinstellungen, wird aber etwas langsamer mit 17.2 MHz, Speedgrade ist bei mir -15. Es paßt sogar ohne Änderung in ein XC9536 rein, um 14 MHz zu erreichen, müßte man dann aber ein schnelleres Speedgrade nehmen.

Die Optimierung ist immer für Überraschungen gut, nach Fläche optimiert ist es bei mir manchmal schneller als nach Speed. Hier konnte ich durch Multilevel extrem Makrozellen sparen.

Ich habe hier die 6.3, rückwärtskompatibel ist das nicht. Die neueren Versionen gefallen mir nicht von der Bedienung her, typische Verschlimmbesserung. Das Resultat sieht mir exakt identisch zur 9.2 aus, die bräuchte man also nur für neue Bausteine. Glaube kaum, daß der Compiler und Optimierer geändert worden sind.

Was mir dabei aufgefallen ist, das Testbech Waveform File wird nicht übernommen bei der Konvertierung auf 9.2, das ist ärgerlich, weil man das dann neu machen muß.

Einen Ansatz in ähnlicher Art hatte ich vor Jahren mal erfolglos mit einem symmetrischen Teiler /3 in VHDL versucht. Muß das Projekt mal rauskramen, das Wesentlich sind ja nur wenige Zeilen. Momentan fällt mir nur auf, daß Du mit Signalen gearbeitet hast, ich wohl mit Variablen, aber müßte ich nachschauen. Die 2 process() wollten sich nicht koppeln lassen, entweder hat der Compiler Fehler gemeldet oder das Resultat war Unsinn in der Art, daß die ganze Schaltung rein statisch war. Zwar sind Statemachines ohne Takt möglich, aber in diesem Fall streikte der Simulator.

mfg. Winfried

Reply to
Winfried Salomon

Testbench ist dem Zip bei, in Form einer VHDL-Datei, wie zumindest ich sowas immer mache. Hat u.a. auch den Vorteil, daß es sowohl mit Modelsim von Quartus läuft, als auch mit Xilins (zumindest mit den Tricks, die ich da reingeschrieben habe, wie failure am Ende, mit der Meldung, es ist kein Failure, damit man es bis zum "Ende" laufen lassen kann :-)

Werde es bei Gelegenheit mal besser dokumentieren, aber der Testcase sagt eigentlich alles in der Prozedur sendControl: Die Bits werden mit fallender Flanke an controlClock auf controlData in die Entity geschoben, die die mit steigender Flanke an controlClock einliest. controlClock muß einiges langsamer als clockIn sein, damit die Flankendetektierung funktioniert. Da ich kein Platz mehr für ein Latch für das Schieberegister hatte, sollte man outEnable vor dem reinschieben auf 0 setzen, damit die Ausgänge keine unvernünftigen Signale ausgeben, weil das einfach immer weiter durchgeschoben wird und die ganze Zeit über auch gelesen wird. Das setzt auch die internen Register zurück. Am Ende der Konfiguration wieder auf 1 setzen.

Klingt gut, da ist mein Design zu aufwendig, um da reinzupassen. Beim XC9572XL habe ich als Speed Grade nur -10 als langsamste Einstellung zur Auswahl.

Ja, wahrscheinlich ist da nicht viel geändert, da ich mir vorstellen könnte, daß die auch spezielle Algorithmen für CPLDs haben und die bestimmt mehr Arbeit in ihre Spartans und Virtex investiert haben.

Die Version 11.1 gefällt mir übrigens auch vom GUI her gut. Letztens hatte ich noch irgendeine 9'er installiert, sah schlimmer aus.

Noch ein Grund, Testbenches in reinem VHDL zu schreiben.

--
Frank Buss, fb@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
Reply to
Frank Buss

Ich hab's beispielsweise im Studium nie anders gelernt. Das hat dann sogar dazu geführt, dass ich mir mal eben einen Matlab-Testbench-Converter geschrieben habe, um beliebige Wellenformen in den Simulator schicken zu können. :-)

Gruß Henning

Reply to
Henning Paul

Hallo Frank,

Frank Buss schrieb:

meine Kenntnisse in VHDL sind derzeit zu gering, um mich damit im Detail zu beschäftigen. Aber ich habe mir nochmal das Problem der Kopplung der

2 Prozesse bei dem ungeraden Teiler /3 oder /n angesehen und eine Lösung unten angehängt.

Das Beispiel ist so einfach wie möglich gehalten und erlaubt eine glitchfreie Modulation des Teilerverhältnisses von 1-255 über das angelegte 8-Bit-Datenwort data_in, in dem das Verhältnis binär steht. Die Vorgehensweise ist eigentlich genauso wie in meiner auf dem Papier entworfenen Lösung, erweitert um Reset und Teiler = 1, was allerdings auch etwas knifflig war.

An der Stelle erlaubt VHDL keine gradlinige Lösung sondern nur eine einseitige Kopplung Master-Slave der Prozesse, jedenfalls sehe ich keinen besseren Ansatz.

Was der Compiler letzten Endes daraus macht, kann ich nicht sehen, sondern nur die Resultate vergleichen. Mir ist aufgefallen, daß beim CPLD XC9572 die VHDL-Lösung durchweg zu deutlich schlechteren Ergebnissen führt als die handoptimierte Schaltung. Beim Virtex 2 XC2V3000-4fg676 (den ich auch zur Verfügung habe) ist der Unterschied nicht ganz so deutlich. Woran das liegt weiß ich nicht, vielleicht Zufall, an meiner Programmierung oder der Xilinx-Software.

Was mir dann noch allgemein störend bei beiden Versionen aufgefallen ist, unbenutzte Signale werden anscheinend nicht wegoptimiert, wenn ich data_in() von außen mit konstanten Bits setze. Das finde ich ganz schlecht, vielleicht ist das in neueren Versionen besser, hoffe ich, werde ich jedenfalls im Auge behalten.

Wenn ich in VHDL allerdings Konstanten deklariere, erkennt der Compiler das und optimiert alles weg, da ist dann ein Vorteil.

Bei der VHDL-Version unten brauche ich dann 55 Makrozellen und erreiche

11.9 MHz. Mir ist natürlich klar, daß man in großen Systemen nur mit VHDL oder Vergleichbarem arbeiten kann, aber so überzeugend finde ich die Software nicht gerade.

Bei den neueren Versionen braucht man 'nen Monitor doppelter Fläche, das finde ich unnötig und störend.

Ich mache überschaubare Entwürfe lieber in Schematics, Resultat siehe oben. Der Nachteil von Programmiersprachen wie VHDL, C etc. ist, daß man immer dran bleiben muß und der hohe Einarbeitungsaufwand. Die Tendenz ist ja deshalb heutzutage, daß Programme automatisch erzeugt werden, IMHO auch mit zweifelhaftem Resultat, aber bei der heutigen Komplexität wohl kaum noch anders möglich.

Als Xilinx ihre Software von Aldec auf ISE umstellten bei der

4er-Version, mußten alle Projekte neu gemacht werden und natürlich fliegen ältere FPGAs sehr schnell raus. Die 1. Versuche in Aldec-VHDL waren nicht kompatibel mit dem XST, es ist alles so kurzlebig.

mfg. Winfried

programmierbarer Teiler: ========================================================================

library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;

-- Uncomment the following lines to use the declarations that are

-- provided for instantiating Xilinx primitive components.

--library UNISIM;

--use UNISIM.VComponents.all;

-- Synchroner programmierbarer symmetrischer Frequenzteiler 1-255

-- als Beispiel einer schaltungsunabhaengigen algorithmischen

-- Problembeschreibung in Form eines Zaehlers.

entity div_n_sym_vhdl2 is Port ( clock : in std_logic; reset : in std_logic; data_in : in std_logic_vector(7 downto 0); q_out : out std_logic); end div_n_sym_vhdl2;

architecture Behavioral of div_n_sym_vhdl2 is signal rise,fall,feed: std_logic; signal count,teiler_reg: std_logic_vector(7 downto 0);

begin

process(clock,reset) --falling edge variable teiler: integer range 0 to 255; variable stat_count:integer range 0 to 255; variable thresh: integer range 0 to 255; begin

if(reset='1') then -- Initialisierung stat_count:=0; count

Reply to
Winfried Salomon

Hallo Henning,

Henn>

es ist schon einige Jahre her, daß ich den ModelSim direkt zum Simulieren programmiert habe, nur finde ich das nicht mehr wieder und ich habe es vergessen.

mfg. Winfried

Reply to
Winfried Salomon

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.