functie generator chip

free_electron

Silicon Member

opgelet met die FPGA pll;s ...
die hebben slechts een bepaald vangbereik.

je kan dat niet zomaar als multiplier zetten...

Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM

Leuk schema, je zou die FPGA ook met verschillende states kunnen programmeren die andere division rates instelt. Er zal altijd een factor blijven zitten tussen je ingevoerde klok en de uitgaande datarate. Die kan je b.v. vergroten om zodoende de uitgangfrequentie te verlagen. De DDS stel je dan altijd op een 'hot spot' in. De vraag is uiteraard hoe goed je resolutie wordt op lage en hoge frequenties.

Zelf zit ik te spelen met het idee om de FPGA achterwege te laten en het meer discreet te doen. Het enige wat de FPGA aan het doen is een waarde uit zijn geheugentabel naar de output I/O te schuiven.

Je zou ook het idee uit deze video kunnen pakken:
http://www.youtube.com/watch?v=HICFPj0Gi4U

Er zijn parallel SRAM chips beschikbaar met b.v. 16 address pins en 16-bits uit. Die spugen met enkele ns hun gegevens uit, waardoor je in princiepe makkelijk 40MSPS zou moeten halen. Die 16-bits kan je aan een 12-bit of 14-bit ADC knopen.
De laatste 2 bits zijn niet verspilde moeite, je kan die gebruiken om de klok te resetten naar 0. Je zou een DDS kunnen (AD9834 kan prima fungeren) als referentieklok (hoe snel samples worden uitgestuurd). Die klok stuurt een 16-bit counter aan (zou je enkele IC's moeten cascaden). Op die counter ICs zit een reset pin die je aan een van de bits knop van het geheugen.

Op de laatste sample programmeer je die bit hoog waardoor de counters resetten waardoor je waveform weer aan het start begint. Als je counter 'cell' snel genoeg is zal die gewoon het geheugen doorlopen en de samples op je DAC komen, zodoende uit je functiegenerator.

Ik heb nog niets concreet uitgetekend of diep uitgezocht, maar het zou mijzelf de mogelijkheid geven elke waveform te maken zonder FPGA's te programmeren. Daar heb ik hier geen tools voor. Ander bottleneck zou de snelheid van je 16-bit counter zijn , want stiekem zou ik die het liefst weer in een CLPD of FPGA proppen..

Op 16 juli 2011 00:00:30 schreef free_electron:
opgelet met die FPGA pll;s ...
die hebben slechts een bepaald vangbereik.

Ai, je hebt gelijk. Gelukkig heeft de berglucht me nieuwe inzichten gegeven :)

  • Gebruiker stelt X/Y-tabel op en stelt frequentie in
  • µC stelt DDS'en in en stuurt de X/Y-tabel en frequentie door naar de FPGA
  • De doorgestuurde frequentie bepaalt hoe snel de FPGA door zijn X/Y-tabel gaat. Per stijgende flank van de DDS keert hij terug naar het begin van de tabel

Tussen FPGA en µC wordt de volgende data doorgestuurd:
14-bit adres (adres van iedere plaats in de X/Y-tabel)
12-bit data (voor de DAC)
28-bit frequentie (hoe snel er door de tabel moet gelopen worden)

Hiervoor werd tussen FPGA en µC een 13-bit parallelle bus geplaatst, hiervan gebruik ik 5 bits als 'byte-select', de andere 8 gebruik ik als data:

  • 00000: Adress LSB (Ch1)
  • 00001: Adress MSB (...)
  • 00010: Data LSB
  • 00011: Data MSB
  • 00100: Freq, byte 0
  • 00101: Freq, byte 1
  • 00110: Freq, byte 2
  • 00111: Freq, byte 3
  • 01000: Adress LSB (Ch2)
  • 01001: Adress MSB (...)
  • ...
  • 10000: extra commando's (output off, burst mode (freq x 2, x4, ...), ...)
Eerst waren het atomen, dan waren het protonen, neutronen, elektronen, nog later waren het quarks en nu blijken het snaren te zijn...