Je zou kunnen proberen or-and comparators te maken. Omdat je een tellerstand vergelijkt, hoef je niet alle bits te controleren, alleen de bits die op '1' staan voor een bepaalde waarde. Dat scheelt aanzienlijk. Je heb voor ieder bit een 2 input or poort nodig en een and-poort die alle uitgangen van de or poorten bij elkaar and.

@free, hoe staat het me je boek? wellicht lees ik er overheen, maar komt hij nog? ik heb zeer veel interesse in dat boek!

Ja beste mensen ,ik spring er zomaar middenin ,maar ik wil toch ook wel een duit in het zakje doen over waarom er zo weinig nieuwe gebruikers zijn,en ik denk ook dat dat met verschillende bewoordingen al diverse keren is aangehaald :De fysiek van de FPGA zelf ,da's niks meer voor hobyisten.Je moet ze al op een multilayer board zetten om fatsoenlijke power planes een een BGA breakout te hebben ,ze hebben weet ik niet hoeveel voedingsspanningen nodig en zijn niet met de hand te solderen.
Zelf ben ik een FPGA gebruiker van het allereerste uur.een XC2018 op 5V en in een PLCC84 behuizing.Kon je gewoon een IC voet in gaatjesboard solderen.Heb ik diverse hobbyprojecten mee gedaan.Ik heb een tijdlang andere dingen gedaan,maar nu ben ik weer terug bij mijn oude liefde -de FPGAs- en ik zie dan maar al te duidelijk dat dit geen hobby spul meer is,12 layer boards,microvia's,controlled impedance,voedingen van 1.2V en 12 Ampere.Maar goed da's inderdaad het zwaardere werk ,maar we werken hier ook met Cyclone II's.Als die op een multilayer bordje zou zitten met core supply,kristal oscillator en een of andere RAM,dan zou dat nog wel als "component" kunnen dienen voor een hobyist.
Probleem is dat de markt zo klein is dat niemand daaraan begint.

@MC6800,

Ik kan niet ontkennen dat er veel waarheid in je verhaal zit maar dit is voor bijna alle recente electronica geldig. Vandaar dat ik er nogmaals op wijs dat de manier van werken voor een hobbyist gewijzigd is.

Het is idd heel moeilijk om heden ten dage nog zelf alles zelf te realiseren. Maar het alternatief is om de moeilijkste delen, de core met de FPGA erop aan te kopen. Zo heb ik recent de MAX II-nano boardjes van Terasic aangekocht. Die bevaten alle ingredienten als CPLD blok op een multilayer kant en klaar waar alle outputs op zitten, waar je zelf de nodige expantie connectors moet bijplaatsen. Die board kost minder dan enkel maar de CPLD afzonderlijke zonder al de andere chips voor USB blaster, power supply programmer onboard en external programmer enz. Ik heb die per 2 stuks, 65 euro per stuk betaald alles inbegrepen en thuis geleverd op 2 dagen, inclusief BTW, douanekosten en verzending.

Als hobbyst moeten we eerder de interface en eventueel de printjes hiervoor zelf maken om die CPLD of FPGA signalen te gebruiken. Ik hoor jullie al zeggen, 65 euro is duur, en idd voor starters is dit niet te onderschatten. Maar als je eens reken hoeveel je gaat uitgeven aan afzonderlijke componenten voor iets dat veel veel kleiner is, niet getest, niet geassembleerd, geen documentatie, geen software DVD rom's enz.

Je kunt stellen dat het starters buget voor CPLD/FPGA idd hoger is maar dat een gebruiker op iets langere termijn eigenlijk zelfs veel goedkoper bediend wordt. Maar vergelijken met een PIC van 1 of 2 euro gaat niet. Maar met 2210 LE's van mijn 65 euro bordje waarbij inclusief ook de programmer zit daar kun je een heel stuk meer mee doen en ..... heel veel leren.

Op 5 september 2007 17:21:55 schreef MC6800:
Ja beste mensen ,ik spring er zomaar middenin ,maar ik wil toch ook wel een duit in het zakje doen over waarom er zo weinig nieuwe gebruikers zijn,en ik denk ook dat dat met verschillende bewoordingen al diverse keren is aangehaald :De fysiek van de FPGA zelf ,da's niks meer voor hobyisten.Je moet ze al op een multilayer board zetten om fatsoenlijke power planes een een BGA breakout te hebben ,ze hebben weet ik niet hoeveel voedingsspanningen nodig en zijn niet met de hand te solderen.

Dat ben ik maar ten dele met je eens. De niet-bga behuizingen zijn prima met de hand te solderen als je extra flux, een brede soldeerpunt en loodhoudende soldeer gebruikt. Voedingsspanningen en printplaten vallen ook wel mee. Met 2 spanningen kom je meestal een heel eind. Een 4 lagen print laten maken is tegenwoordig ook voor de hobbyist heel betaalbaar.

4 lagen hoeft niet eens, kijk maar:

http://www.circuitsonline.net/forum/view/message/675898#675898

2 laags, Cyclone 2 in een 240 pins package :)

2 lagen is wel 'tricky'. Omdat een FPGA synchroon werkt, schakelen alle transistoren op hetzelfde moment. Je krijgt dus steeds een flinke stroompuls de FPGA in. Een goede ontkoppeling met 0603 of 0402 condensatoren is van groot belang. Dat kan alleen met een goed aardvlak. Met 2 lagen is het meestal lastig om een goed aardvlak te maken.

Als ik de bordjes uit het andere topic zo zie, dan heb ik toch wat twijfels over de ontkoppeling. Ik had de condensatoren op de bovenkant gezet en rechtstreeks verbonden met de voedingspinnen van de FPGA. En dan met 2 via's per condensator naar massa. De zelfinductie van een via is zeker niet te verwaarlozen bij hoge frequenties.

Voor mij is het een beetje vaag, ik zelf heb er niet veel ervaring ermee. En ik heb zo'n gevoel dat het een beetje natte vinger werk is. Het is pas merkbaar wanneer het mis gaat. Hoeveel condensatoren zijn er nodig? 1 voor elk supply pin? wat voor capaciteit moet het hebben? wat is de maximale lengte van de draadjes dan(zo kort mogelijk is niet altijd mogelijk)?

En toch worden bij grotere BGAs de ontkoppelcondensatoren aan de onderkant gezet. Waarom? Omdat de voedingspinnen vaak in het midden van de bga zitten. De IO zit meer naar de buitenkant toe.
Alleen de buitenste twee ringen kun je direct bereiken vanaf je toplayer. Ringen die verder naar binnen liggen hebben altijd via's nodig en voor een condensator is dan de beste oplossing de onderkant. Hoewel je dan dus wel een via hebt zijn de traces in ieder geval zo kort mogelijk.

Ik verwacht dus ook geen grote problemen met het 2 laags bordje. Maar waar het kan had ik zelf de Ctjes ook op de bovenkant gelegd. Voeding is nu eenmaal heel belangrijk voor een FPGA. Dat er dan wat meer vias voor de io lijnen gebruikt worden maakt niet zo veel uit, dat komt toch net even iets minder kritisch.

Op 7 september 2007 23:39:40 schreef miniK0bo:
Voor mij is het een beetje vaag, ik zelf heb er niet veel ervaring ermee. En ik heb zo'n gevoel dat het een beetje natte vinger werk is. Het is pas merkbaar wanneer het mis gaat. Hoeveel condensatoren zijn er nodig? 1 voor elk supply pin? wat voor capaciteit moet het hebben? wat is de maximale lengte van de draadjes dan(zo kort mogelijk is niet altijd mogelijk)?

In principe bij iedere voedinspen 1 condensator. 100nf is een mooie waarde en dan het condensatortje in een zo klein mogelijke behuizing; een 0603 behuizing of liever nog 0402. Hoe kleiner de fysieke afmetingen van de condensator, hoe kleiner de zelfinductie. Voorheen werd aangeraden om naast een 100nf condensator en een 10nf parallel te zetten. Bij 0402 behuizing is het verschil in zelfinductie tussen 100nf en 10nf zo klein dat je met een enkele 100nf al hetzelfde effect hebt.

100 nF ? 10 nanofarad zeker ....
vooral bij hogere frequenties moet die C omlaag ...

condensatoren zijn frequentieafhankelijk !. en ook spanningsafhankelijk.

als je op 3.3 volt draait : plak daar een condensator op met de hoogste spanning die je kan vinden in de verpakking .

gebruik altijd keramische condesatoren NOOIT gerolde ! ( i smd is dat nu wel geen probleem.

condensatoren kiezen is geen sinecure !. wij spenderen soms dagen om echt een bord te 'tunen'

trouwens ook de manier waarop je de boel verbind is soms ene probleem. je condensator moet tussen de voedingslijn en de pin van de chip staan.


  via      chip poot

  O----+---[]
      _|_
      ___
       |
  o----+---[]

het volgende is NIET goed

  ----o----[]
 _|_
 ___
  |
  ----o----[]

zeker bij hoge frequenties.
als je maar op 10 MHz draait speelt dit gene rol.

als je FPGA op 50 en meer MHz bolt wordt dit wel ene probleem ... en zeker als je doortrekt naar 200 of meer.

je kan ook zorgen dat je meerdere clockdomeinen hebt. dan dendert niet alles op cadans en zijn de klappen meer verdeeld.

o enne blijf weg van Y5V en X5R . da is 'vuiligheid' die capaciteitscurve stuikt in elkaar gelijk zot bij spanning en frequentie.

je moet bij kemet eens de specs gaan halen. ..

een goeie X7R of nog beter C0G of NP0 's !

Op 8 september 2007 04:18:49 schreef free_electron:


  via      chip poot

  O----+---[]
      _|_
      ___
       |
  o----+---[]

het volgende is NIET goed

  ----o----[]
 _|_
 ___
  |
  ----o----[]

Waarom zitten de ontkoppelcondensatoren onder de chip dan?

Op 8 september 2007 04:18:49 schreef free_electron:

o enne blijf weg van Y5V en X5R . da is 'vuiligheid' die capaciteitscurve stuikt in elkaar gelijk zot bij spanning en frequentie.

je moet bij kemet eens de specs gaan halen. ..

een goeie X7R of nog beter C0G of NP0 's !

Heb die codes (Y5V, X7R, ...) wel al es tegengekomen, maar wat houden ze eigenlijk in. Heeft iemand wat meer info daarover?

PS: als dit te veel offtopic is just tell me...

Volgens mij gaat het om het materiaal dat gebruikt wordt om de capacitaire werken te realiseren. Diëlektricum heet dat als ik me niet vergist.

Op 6 september 2007 21:30:47 schreef miniK0bo:
4 lagen hoeft niet eens, kijk maar:

http://www.circuitsonline.net/forum/view/message/675898#675898

2 laags, Cyclone 2 in een 240 pins package :)

Er is een duidelijk verschil tussen oplosbaar voor de router en het goed functioneren op hoge frequentie's. Vandaar dat 2 layer reeds lang vervangen is door meerdere lagen.

Voor de hobby waarbij doorgaans veel lagere clockfrequentie's gebruikt worden gaat dit nog wel allemaal lukken.

Wij mochten geen FPGA's of CPLD's meer gebruiken met 2 layers. 4 layer was het echte minimum. Dit was altijd een discutie tussen het lab en de commercieele dienst die het altijd goedkoper wou. Later met de grotere FPGA's was dit meestal 8 of 10 layer.

De manier van ontkoppelen zoals F_E aangeeft is idd de juiste manier. Zodra er stukjes baan tussen de ontkoppel C's stonden was het inductieve stukje er al te veel aan. Ook werden een hele groep van verschillende waardes ontkoppel C's gebruik voor het hele frequentie spectrum. We spreken dan nog niet over de LVDS lijnen waar je niet eens van layer mocht veranderen.

Onze beste routers waren de UHF analoge mannen van vroeger. Alle printen werden door deze kerels opgelost. Dit was een full time job voor een afzonderlijke groep mensen. Het waren "onze PCB multilayer routers"

Op 8 september 2007 10:24:54 schreef BLUE Config:
Heb die codes (Y5V, X7R, ...) wel al es tegengekomen, maar wat houden ze eigenlijk in. Heeft iemand wat meer info daarover?

Das inderdaad een materiaalcode van het diëlectricum.
Zoals FE al zegt, de ene cap is de andere niet. Daar spelen veel factoren een rol. Frequentiestabiliteit, temperatuursafhankelijkheid, paracitaire inductie, ESR (equivalent series resistance) enz. om er enkele te noemen.
En das inderdaad goed verstaanbaar om bij echt snelle elektronica goed uw hoofd erbij te houden en de juiste 'move' te maken wat componentenkeuze en layout betreft.

- - big bang - -

Forum > Digitaal > FPGA waarom zoweinig nieuwe gebruikers?

Zet de voor en nadelen maar op een rij met de PIC/AVR.
PIC/AVR zijn.

- voordelig (1 a 2 euro voor de kleintjes)
- goed verkrijgbaar (AVR in mindere mate)
- vrij snel
- flexible (ADC, UART, Analog Comparator, TWI, USI, PWM)
- DIP behuizing (even snel wat in elkaar draaien op gaatjesprint)
- veel projecten en software online te vinden

[Bericht gewijzigd door RES op (10%)]

Op 8 september 2007 17:16:28 schreef RES:
[...]

Zet de voor en nadelen maar op een rij met de PIC/AVR.
PIC/AVR zijn.

- voordelig (1 a 2 euro voor de kleintjes)
- goed verkrijgbaar (AVR in mindere mate)
- vrij snel
- flexible (ADC, UART, Analog Comparator, TWI, USI, PWM)
- DIP behuizing (even snel wat in elkaar draaien op gaatjesprint)
- veel projecten en software online te vinden

das kwatsj ...

- fpga kost ook haast niks.
- zijn goed verkrijgbaar
- veeeeeeel sneller dan pic of avr of eendert wat
- DIp is voor 'ouwe krotters'
- ook vele projecten te vinden en vele software.
- ook flexibel. fpga is wel digitaal ding. probeer eens op je PIC een I2S interface te maken ?... dat wordt ene ramp. in FPGA ? is direct geklonken.

houdt het steek ? neen. je mag cpu niet vergelijken met fpga. is totaal anders.

waarom zo weinig gebruikers ? dan hebben we het over hobby .. in de industrie wordt fpga evenveel gebruikt als CPU ( zoniet meer )

het probleem bij fpga is dat de drempel hoger is en de leercurve steiler. maar dat was in het begin ook met cpu's zo.

maar tegenwoordig zijn er ook goede devkits ( terasic bordje voor 50 euro . is de kostprijs van pic starterkit )

het verschil is ook dat vor cpu er 'simpele' dingetjes zijn. terwijl FPGA's alleen wordne gebruikt als je met een CPU niet toekomt...

Op 8 september 2007 20:05:58 schreef free_electron:
[...]
het verschil is ook dat vor cpu er 'simpele' dingetjes zijn. terwijl FPGA's alleen wordne gebruikt als je met een CPU niet toekomt...

Gast leer lezen: hier dus!

:)

Vergelijken is idd. niet te doen. Dan kan je een FPGA beter vergelijken met een GAL20V8.

Maar, let op je tellen! Die 'ouwe krotters' zal ik niet licht vergeten. En als dat zo te pas komt, zal de wraak zoet zijn, snotneus! :-7

[Dat was voor ons aller FE bedoeld, uiteraard]

Nu we het toch over de microcontroller en fpga hebben.

Wat moet ik me voorstellen bij SystemC en VerilogC? Zijn dit hogere programmeertalen (zoals C/Basic bij micro's)? En VHDL/Verilog lagere programmeertalen (zoals het assembler bij micro's)? En mogen we ook verwachten dat grotere projecten grotendeels in SystemC/VerilogC worden geschreven?

Mijn vraag even kort samengevat, hoe past SystemC/VerilogC in het VHDL/Verilog plaatje bij FPGA's.

Ik voel een enooooorm verhaal aan komen.....

Op 8 september 2007 20:12:28 schreef surge_me:
[...]

Gast leer lezen: hier dus!

:)

ela ! daar gaat het wel over CPLD's he !. das weer iets anders.

CPLD's moet je eerder ze als 'glue logica' en suport funties.
als we event terug blikken (voor de 'ouwe krotters' gelijk ik :face it pros .. als e ind de elctronica kunt zeggen dat je nog met 1206 smd's gewerkt hebt ben je al een 'ouwe taart'. we gebruikt at nu nog 1206... veel te groot jong. )) in de jare 80 zette jeeen systeem in elkaar met 6502 / 6809 / 8031 / een paar eproms , een paar ams , een address decoder (74138)en een pak ttls voor allerhade extra logica.
daarvoo diene CPLD's. smijt al die TTL weg en duw dat in de CPLD. klaar.

vandaag worden CPL's gebruikt daar waar je de CPU wilt ontlasten van tijdrovend werk. zoals keyboard scanning , rotary encoding ,address decodering, leds en diplays multiplexen etc. kortom alle werk waar de cpu teveel cycli moet aan spenderen (repetitieve dinen zoals keyboard scanning zou de cpu x keer per econemoten gaan doen. ditto voor disply muxing. de cpu kan zijn tijd beter spenderen. )

alsook het verstrekken van blokken hardware ( paar PWMpjes hier , paar I/O's daar etc )die nou net te kort zijn in de microconroller.

met andere woorde alles wat vroeger met ttl en een paar dingen zoals 8253 en 8284 opgelost werden duw je nu in een CP. tis makkeijker om je bord te layoen en als later blijkt dat je toch nog iets vergeten bent pas je de cpld code even aan.

een FPGA is een ander verhaal ....
FGA wordt gebruikt om grote blokken logica te maken die owfel niet kant en klaar te koop zijn en die ook niet even eenvoudig implementeerbaar zijn in software simpelweg omdat et teveel tijd vraagt.

ik geef een voorbeeld. ( iets waar ik nu toevallig mebezig ben )

een motor draait 15000 toeren / minuut (SCSI disks )
de motor heeft 16 polen verdeeld over 3 fasen. daar kome dus 3x16x15000 pulsen per minuut uit.

om de motor contant te houden wordt het tijd interval tussen 2 poolovergangen gemeten. dat moet dus 12000 x per seconde gemeten worden... met een resolutie in het nanoseconden bereik. dit is al verschrikkeijk moeilijk met een CPU...
er moet daar telkens een berekning op gemaakt worden (integer die egenlijk een fixed point bevat ) en het resultaat moet als 48 bits woord terug uitgeschoven worden naar de chip die de spoelen stuurt...
48 bits .. 12000 x per seconde is een clock van 57 MHz ... als je dat moet bitbangen moet je al minstens op het 4 dubbel draaien met een CPU. en we hebben nog niet eens de berekening gedaan.

en ondertussen moeten we nog een gans pak andere dingen afwerken ook.

daar worden dus FPGA's voor gebruikt. je implemeteert dat in hardware en het vliegt vooruit.
ik heb een pipelined syseem: een hardware counter doet de metin. als de meting klaar is verwerkt de rekenunit de data in welgeteld 9 clockticks ... een hardware shifter clockt dat pakket naar buiten aan dik 150 MHz. de correctiedata voor de volgende stap staat dus al klaar halverwege de commutatie naar de volgende spoel.
de resterene tijd wordt gebruikt om de 'huishouding' te doen.

een ander voorbeeldje:
dat 48 bit pakket bevat sommeerdere variabele. 3 bits voor it , 9 bit voo dat , 5 bit voor nog iets anders.
telkens je een transfer moet doen, moet je cpu dat 'pakketje' aanmaken. dus das alleaal AND OR en shiftwerk voor de cpu
ik heb een blok logica gemaakt in de FPGA

voor elke 'veld' is er een apart adress. voor de CPU is dat gewoon een stuk ram waarin hij kan lezen en schrijven. dus in de cpu code staan daar gewoon variabelen ( gemapt op een specifiek adress )
als er een schrijfopdracht gebeurt in die 'ram' schiet er een grote state machien in gang. die state machiene neemt in 1 clocktik ( het schijven in ram gebeurt op rising edge. de state machiene vuurt af op de falling edge van de write opratie ) al de noodzakelijke data en zet dat ineen 48 bit register. dat gebeurt dus in 1 clocktik ,onafhankelijk hoe complex die informatie is. De machiene zet een flag die aangeeft dat de data klaar is voor verzending en een ander blok schuift de boel uit.

omgekkeerd voor het lezen ook. de cpu vraagt ewoon aan om een register te lezen. de state machiene doet dit autonoom, splits het terugkerene 48 woord op in de losse blokjes ,zet die in een andere ram en de cpu kan lezen. al dat tijdrovende data-assembleer en disassembleer werk is verdwenen.

En SystemC en SystemVerilog ...

voor het moment is dat 'spielerij' die dingen zijn experimenteel en worden nog niet echt gebruikt

systemC is een heel stricte implemeantie van de C++ taal met een aantal speciale extra's. de SystmC compiler kan dat blok code (code is sequenieel )vertalen naar hardware die als logische poorten kan geimplemeteerd worden. maar het gaat veel verder dan dat. je kan ook routines gaan pipelinen.

stel je hebt een functie in C die getal telkens met 2 vermenigvuldigd. (shift left )

dat moet geberuen opblokken data van 1000 bytes .. voor een cpu is dat veel werk. hij moet 1000 x een shift opratie doen.
als je dat in SystemC doet kost je dat niks , maar dan ook totaal niks. geen gates, geen tijd.
al wat er gebeurt is dat dat je een getal ergens op zet (daar staat zels geen geheugen )en dat alle bits , behalve de laatste er uit komen

d0 komt op d1 te staan , d1 op d2 enzovoort. de uitgaande d0 hang gewoon aan grond.

de bedoeing van sytemC is dus om 'sequentiele code' te kunnen paralleiseren en acceleren als hardware.
Dit is wel bedoeld als een modelleertaal om paralelle systemen te maken!. als je dat later effectief wilt gaan synthetiseren komt daar nog een gans ander verhaal bij...

SystemVerilog is dan weer iets anders ...
met systmverilog zijn we een aantal dingen die we als programmeur gewend zijn (structs en multidimensionel arrays ) gaan toevoegen. de synthesizer is dus slimmer geworden

andere zaken zijn duidelijker geworden.
in verilog en vhdl is het soms mogelijk dat de synthesizer niet echt maakt wat jij bedoelde. daar is een eind aan gekomen. in plaats van 'always' kan je nu specifieren dat een bepaald blok expliciet combintorisch is of explicit met flipflops of latches moet gemaakt worden.

Op 8 september 2007 23:16:19 schreef free_electron:
andere zaken zijn duidelijker geworden.
in verilog en vhdl is het soms mogelijk dat de synthesizer niet echt maakt wat jij bedoelde. daar is een eind aan gekomen. in plaats van 'always' kan je nu specifieren dat een bepaald blok expliciet combintorisch is of explicit met flipflops of latches moet gemaakt worden.

Dat laatste kan ik niet helemaal plaaten. Bedoel je dat dit in SysVerilog zit? In "gewoon" Verilog is het toch ook exact gedefinieerd wanneer je FF/latch/combinatoriek krijgt? Ik heb daar nog nooit verrassingen gezien.

mope. dat kan gebeuren.
zeker wanneer je geen volledige cases schrijft.


always @( posedge clk) begin
    Z <= y;
end

of dit 

always @( posedge clk) begin
    if (clk) Z <= y; else Z <=Z;
end

in bovenstaande : hoe wordt het gemaakt ? wat is er ene latch en wat wordt een flipflop ? ( GROOT ! verschil )

in systemverilog schrijf je


always_ff @( posedge clk) begin
    Z <= y;
end

dan ben je zeker dat het een flipflop is.