Is dit een goed gebruik van een CPLD?

Ik probeer enkele golfvormen te genereren die in fase verschoven zijn van een ingangssignaal.

Het ingangssignaal is ongeveer 4,4 MHz en is een blokgolf met een duty van 50%. Ik heb een faseverschuiving van 0 en 90 graden van deze golfvorm nodig, en elke golf moet een werkcyclus van 50% hebben. Ik moet misschien ook beide golven verschuiven met 180 graden, dat wil zeggen 180 en 270 graden. (Dit is voor PAL-video.)

Mijn idee was om een ​​PLL te gebruiken om de frequentie op te voeren naar 17.6 MHz. Vervolgens zouden een decenniumteller en twee OF-poorten de 0 en 90 graden golven genereren. Een omvormer reset de teller zodat deze overloopt naar 4. Een XOR-chip is nodig voor de 180-gradenverschuiving. De PLL zou een apparaat van het type 4046 zijn en zou ook een 4-delige teller nodig hebben.

Ik heb dit getest in een circuitsimulator:

Simulation

Geweldig ... het concept werkt. Ik ben echter vrij beperkt door de ruimte op het bord en de kosten. Ik zou hiervoor vijf chips plus de PLL-chip nodig hebben. Ik heb nog nooit een CPLD geprogrammeerd, maar het klinkt als de perfecte toepassing voor één. Zou ik in staat zijn om een ​​eenvoudige taak als deze uit te voeren met behulp van een low-end CPLD zoals deze ? Of zijn 32 macrocellen onvoldoende? Is er een ruwe schatting voor hoeveel macrocellen per basispoort vereist zouden zijn, en hoeveel zou er nodig zijn voor een complexe inrichting, zoals een teller?

4

3 antwoord

Hiermee wordt alleen het tweede deel van uw vraag behandeld, hoe u weet welke maat CPLD u nodig heeft voor een ontwerp:

Doorgaans is de hoeveelheid logica die u in een CPLD kunt passen, beperkt door het aantal flip-flops (of andere vergrendelingen) of het aantal I/O's in uw ontwerp. Over het algemeen krijg je een flip-flop per macrocel en iets minder dan één I/O-pin per macrocel. Het basisontwerp maakt één I/O per macrocel mogelijk, maar vaak worden sommige I/O's op de chip niet gebonden door het beperkte aantal pinnen in een bepaalde verpakking.

Dus, voor je ontwerp, heb je 14 flip-flops voor je twee balies en je bent goed. Normaal gesproken raad ik je aan om in je ontwerp geen programmeerbare logica te gebruiken voor de fasecomparator, maar op 17,5 MHz en als je niet zo heel erg veel waarde hecht aan hoe je de ingangs- en uitgangsfase precies op elkaar afstemt, zou je ermee moeten kunnen wegkomen. Je hebt nog steeds een extern VCO- en filtercircuit nodig. Dus met een 32-macrocell CPLD zou het geen probleem moeten zijn om de digitale elementen van dit ontwerp te passen met wat ruimte over voor andere lijmlogica die je misschien nodig hebt.

Dat gezegd hebbende, over het algemeen is een ontwerp voor zo'n kleine CPLD zo eenvoudig dat je het over een uur of zo kunt coderen en de ontwerptool van de leverancier kunt gebruiken om er zeker van te zijn dat het past voordat het verder gaat. Alle CPLD-leveranciers die ik ken, bieden gratis versies van hun ontwerptools die bijna alle formaten van CPLD dekken.

Finally, though the estimate of 1 flip-flop per macrocell is accurate for classical CPLDs like the one you linked to, some vendors (Altera & Lattice come to mind) have taken a major architectural excursion in their newest CPLD families. These devices are more like mini-FPGAs than like the classical CPLD, and I'm not sure that they calculate their "macrocell-equivalent" sizes according to this formula. The new devices are likely to have more flip-flops per device, but not allow very wide fan-ins to the logic in each cell.

Wat het andere deel van uw vraag betreft, is dit een goed gebruik voor een CPLD, dat is een hardere vraag. Ik zie geen enkele reden om er geen te gebruiken, maar misschien komt iemand met een slimme manier om dit circuit te bouwen tegen lagere kosten/minder bordruimte/lager vermogen, of wat dan ook.

3
toegevoegd
@BenVoigt: Ik denk inderdaad dat het meer op twee noodzakelijke flops lijkt.
toegevoegd de auteur firedfly, de bron
Sommige FPGA's hebben ten minste geïntegreerde PLL's. Als hij een CPLD met een ingebouwde PLL kan vinden, wordt de deelscore op één apparaat neergeslagen.
toegevoegd de auteur Connor Wolf, de bron
Het MAX V-specificatieblad maakt een melding van een "Digitale PLL" ( zie hier ), maar ik kon er geen andere informatie over vinden. De Xilinx Cool-Runner 2 claimt een "Clock-Doubler" te hebben die "Selecteerbaar is voor elke MacroCell" ( zie hier ), maar ik ben niet erg bekend met xilinx-onderdelen.
toegevoegd de auteur Connor Wolf, de bron
Ik keek naar Altera's Max V, en het is niet duidelijk uit een snelle datasheet te lezen of deze deze mogelijkheid heeft. Waarschijnlijker zou hij naar een minimale FPGA (Altera Cyclone III of zo) moeten gaan om een ​​PLL aan boord te krijgen. Of dat een goede kostenafweging is, zou meer onderzoek nodig hebben.
toegevoegd de auteur The Photon, de bron
Xilinx heeft al bijna tien jaar geen nieuwe CPLD uitgebracht - ik weet zeker dat ze geen PLL hebben die kan doen wat hij wil (quadrupler). Maar Lattice of Altera heeft het misschien.
toegevoegd de auteur The Photon, de bron
Het lijkt erop dat de Coolrunner-2 "clock doubler" alleen verwijst naar de mogelijkheid voor elke flip-flop om te worden geconfigureerd voor triggeren met dual-edge (ddr-achtig).
toegevoegd de auteur The Photon, de bron
@BenVoigt, sorry, ik telde gewoon de delen uit in het ontwerp dat hij beschreef. Ik heb niet alles opnieuw voor hem ontworpen. Maar je hebt gelijk - hij heeft niet alle flip-flops in zijn schema nodig. Hoe de logica te verminderen zou een nieuwe vraag zijn.
toegevoegd de auteur The Photon, de bron
Er zijn nergens in de buurt van 14 flip-flops in dit ontwerp, omdat de bovenste delen van beide tellers niet verbonden zijn
toegevoegd de auteur Ben Voigt, de bron

Ik zou willen voorstellen dat een eenvoudigere benadering zou kunnen zijn om eenvoudig een vertragingscircuit te gebruiken in plaats van een PLL. Bijvoorbeeld, door het signaal door een RC-circuit te voeren en een comparator waarvan de ingang op de halve rail is ingesteld, kan een fasevertraging van iets meer dan 0 tot bijna 90 graden worden gegenereerd; met behulp van twee weerstanden en twee condensatoren kan men de vertraging voorbij 90 graden duwen. Tweak de weerstand en de dop en je zou in staat moeten zijn om een ​​vertraging van bijna 90 graden te krijgen.

2
toegevoegd
Ik weet niet welk niveau van precisie en stabiliteit je zoekt, maar een perfecte blokgolf die een RC-circuit aandrijft en een comparator voedt die tegen de middenrail controleert, levert een vertraging op die omgekeerd evenredig is met de frequentie. Hoe groter de RC ten opzichte van de frequentie, hoe dichter de vertraging tot 90 graden zal zijn. De primaire moeilijkheid met het circuit is dat het vergroten van RC ten opzichte van de frequentie de amplitude van het signaal dat de comparator voedt, vermindert en het gevoeliger maakt voor de halve rail.
toegevoegd de auteur firedfly, de bron
Van bijzonder belang is, trouwens, dat de vertraging niet evenredig is met R en C. Als iemand feedback gebruikt om de halve rail te genereren (dwz de "halve rail" -spanning op basis van de output aanpast duty cycle) zou het mogelijk moeten zijn om een ​​circuit te construeren dat relatief ongevoelig is voor componentvariaties. Men zou de vertraging tot 90 graden kunnen duwen door een tweede vertragingscircuit toe te voegen dat was aangepast voor een "absolute" tijd (maar alleen te maken had met de fout tussen het pseudo-90 graden signaal en een echte) of anders door gebruik te maken van een integrator in plaats van een RC-netwerk.
toegevoegd de auteur firedfly, de bron
Als u een PLL wilt gebruiken, kunt u uw logica vereenvoudigen door een paar D-flip-flops te gebruiken met gewone en inverterende outputs, geklokt door de output van een PLL die op 4x de ingangsfrequentie loopt. Verbind de niet-geïnverteerde uitgang van de eerste met de tweede en de omgekeerde uitgang van de tweede naar de eerste. De vier outputs (normaal en geïnverteerd, van elke flop) zullen elk een blokgolf uitvoeren die 1/4 van de PLL-frequentie is, in elk van de vier fasen.
toegevoegd de auteur firedfly, de bron
Het probleem is dat de invoerfrequentie kan veranderen - ik dacht aan het gebruik van een vast RC-netwerk, maar ik kijk naar werken op 3,5 MHz of 4,4 MHz.
toegevoegd de auteur EHN, de bron

U kunt ook een kleine FPGA en de klokmanager erin gebruiken, waarvan vele alle vier kwadrantklokken kunnen voorzien van een taakcycluscorrectie. Zie bijvoorbeeld figuur 2-2 in de Xilinx-handleiding voor klokken voor Spartan-6 .

enter image description here

Het is misschien een beetje verspilling als je er geen gebruik van kunt vinden voor de eigenlijke logica erin


(Ik heb net de datasheet gecontroleerd en, irritant genoeg voor jou, het werkt slechts tot 5 MHz - ik laat dit antwoord achter voor het geval het van belang is voor toekomstige kijkers die op hogere frequenties werken!)

0
toegevoegd