Vraag:
Frequentiebeperking voor homebrew CPU's
Eugen
2012-11-01 06:21:22 UTC
view on stackexchange narkive permalink

Bij het onderzoeken van enkele op maat gemaakte CPU's, merkte ik dat de frequenties waarop ze werken relatief laag zijn in vergelijking met moderne CPU's (in de orde van enkele MHz). Is er een reden voor elektronica-engineering voor die beperking, bijv. voor breadboards? Zo ja, hoe bepaal je de maximale frequentie die met je ontwerp kan worden bereikt?

Zoals ... zelfgemaakte VLSI-chips? Ik kan me voorstellen dat het een kostenbeperking is. De precisie die apparatuur van meerdere miljoenen dollars oplevert, kan thuis niet worden gekopieerd en als gevolg daarvan moeten de chips langzamer werken.
@Nate, Ik kan me voorstellen dat hij verwijst naar homebrew multi-chip CPU's die zijn opgebouwd uit TTL. Bijvoorbeeld: http://www.homebrewcpu.com/
@Nate Ik heb mijn vraag bijgewerkt om specifieker te zijn.
@AlfredCentauri - ja, je hebt gelijk;)
Zes antwoorden:
Kaz
2012-11-01 10:59:20 UTC
view on stackexchange narkive permalink

Het heeft vooral te maken met de lengte van de onderlinge verbindingen en de vertragingen in de voortplanting door de poorten. Als we een CPU terugbrengen tot zijn essentie, is het een feedbackmachine. Een stel combinatorische logische circuits berekent enkele booleaanse functies over de huidige toestand van de machine, en die functies bepalen de nieuwe toestand, die wordt vergrendeld door opeenvolgende schakelingen wanneer een nieuwe klokflank arriveert. De combinatorische circuits hebben allemaal vertragingen. De klokperiode kan niet korter zijn dan de tijd die nodig is voor het langzaamste pad door deze poorten om een ​​stabiel resultaat te produceren, omdat een enkele onjuiste bit de show stopt.

Verder heeft de sequentiële logica timingvereisten. Voordat de klokflank arriveert, is er een minimale insteltijd dat de ingangen stabiel moeten zijn en daarna moeten ze een tijdje stabiel blijven. Als deze worden geschonden, wordt de toestand rotzooi.

De voortplantingsvertragingen worden veroorzaakt door zaken als hoe snel parasitaire capaciteiten kunnen opladen, hoe snel stroom kan worden opgebouwd in aanwezigheid van een inductantie en hoe snel siliciumapparaten kunnen schakelen . Een bipolaire transistor met een kleinere basis kan bijvoorbeeld sneller schakelen dan een transistor met een grotere basis, dus een kleine transistor op een chip is sneller dan een discrete.

In een eerder antwoord dat ik heb verwijderd, schreef ik over transmissielijneffecten. Maar ik dacht niet dat deze effecten niet eens in beeld komen bij de snelheden waar we het over hebben, want bijvoorbeeld bij 10 Mhz is de golflengte nog steeds ongeveer 30 meter. Dus op de schaal van een printplaat van normaal formaat, bereiken pulsen op de tijdschaal van een paar megahertz nog steeds alle delen van een kopernetwerk tegelijkertijd.

Dus als je een CPU maakt van discrete componenten, De kleine componenten worden eenvoudigweg niet bereikt met snelle schakeltijden en dezelfde nabijheid die strooicapaciteiten en inductanties minimaliseert.

Desalniettemin werkten oude machines met discrete componenten in de jaren '60 een stuk sneller dan deze homebrew-machines. Het kostte wat tijd en sluwheid om daar te komen. De IBM 360 Model 44 (1964) liep bijvoorbeeld op 4 Mhz. Dat mag dan nog steeds "homebrew speed" zijn, maar de CDC 7600 die een paar jaar later in 1969 werd uitgebracht, overtrof de 36 Mhz. Het Wikipedia-artikel http://en.wikipedia.org/wiki/CDC_7600 geeft een hint naar enkele van de trucs die werden getrokken, bijvoorbeeld:

"As altijd was Cray's ontwerp ook gericht op de verpakking om de afmetingen te verkleinen, signaalpaden te verkorten en daardoor de werkfrequentie te verhogen. transistors. De zes kaarten werden gestapeld en vervolgens langs hun randen met elkaar verbonden, waardoor een zeer compacte, maar in wezen niet te repareren module ontstond. "

Dus de zelfgebouwde CPU's zijn niet noodzakelijkerwijs gebouwd naar hun ware potentieel vanwege enkele verwarrende effecten die te maken hebben met de bouwkwaliteit en lay-out. Toch moet iedereen die een CPU bouwt uit individuele geïntegreerde schakelingen en discrete componenten die op verschillende megahertz draait, worden toegejuicht.

Afhankelijk van de complexiteit van het datapad, zou ik denken dat een homebrew-apparaat zonder problemen op 20 MHz of meer moet kunnen klokken met behulp van moderne technologie en conventionele technieken. Geen multi-GHz, maar niet totaal traag. Ik vermoed echter dat in de meeste gevallen waar homebrew-CPU's worden gebruikt, het gemak van het oplossen van problemen belangrijker is dan snelheid. Overigens was het hoofdklokkristal van de originele arcademachine van het merk Pong (R) 14,3818 Mhz, hoewel het vrij vroeg werd opgesplitst; Ik denk dat het enige dat door iets die snelheid wordt afgesloten, de middenlijn van het speelveld is.
Veel homebrew CPU's gebruiken EPROM's om microcode op te slaan, maar ook om complexe logica en / of waarheidstabellen te implementeren (veel van hen hebben zelfs een ALU die is gemaakt van een of meer ROM's). De toegangssnelheid van de ROM's kan de topsnelheid van de machine aanzienlijk beperken, maar ze zijn populair omdat ze het gemakkelijk maken om de processor te debuggen, opnieuw te gebruiken en te tweaken zonder aanzienlijke herbedrading.
@Alexios: Niet dat het uw punt ongeldig maakt, maar ik raad de meeste mensen aan om hiervoor over te schakelen naar NAND- of NOR-flash van EEPROM's.Ja, ze zijn moeilijker om ter plaatse te schrijven, maar in ruil daarvoor kan de toegangstijd worden gehalveerd.Een AT28C256 is een populaire breadboard-EEPROM, maar heeft een toegangstijd van 150 ns en kost ongeveer $ 9 op mouser.OTOH, een alles-behalve-pin-compatibele NOR-flitser die 8x groter is, kost de helft daarvan, is 2x sneller (70ns), kan vaker worden herschreven, gaat 10x langer mee en kan dezelfde programmeur gebruiken.Zelfs goedkopere EEPLD's kunnen u 30x sneller (4-5 ns) opleveren, maar vereisen dat u enigszins esoterische software gebruikt.
@EdwardKMETT Je hebt natuurlijk gelijk.Het is lang geleden, maar ik moet ‘EPROM’ daar in een zeer liberale zin hebben gebruikt.Mijn eigen ontwerp gebruikt 70ns NOR Flash IC's (en deed dat al toen ik die opmerking 7 jaar geleden schreef) met een processorcyclus van 250ns.
DarenW
2012-11-01 07:16:59 UTC
view on stackexchange narkive permalink

Als voormalig middelbare scholier die een computer voor speciale doeleinden bouwde met TTL uit de 7400-serie, die een soort prijs won op de wetenschapsbeurs, observeerde ik deze dingen die ervoor zorgden dat de computer niet zo snel mogelijk werkte:

  • Verdwaalde capaciteit in het breadboard. Een paar pF tussen elk aangrenzend paar connectoren. Die beperkte stijg- / daaltijden van de pulsflank en op sommige plaatsen extra crosstalk. Dit was waarschijnlijk de grootste factor.

  • Variaties van grabbelton-chips. (Herinnert iemand zich Poly-Paks?) 74LSxx, 74Hxx, 74xx met verschillende voortplantingsvertragingen en andere kenmerken, maakten het onmogelijk om signalen synchroon te laten blijven bij hogere kloksnelheden dan een paar MHz.

  • Cheapo statische geheugenchips, opnieuw uit een grabbelton of een andere bron van niet-kwaliteit. Ze konden gewoon niet betrouwbaarder lezen of schrijven boven een bepaalde snelheid.

  • Mijn testinstrumentatie was beperkt tot homebrew signaalgeneratoren, een oscilloscoop met een bandbreedte van 5 MHz en tijdelijke door jury gemonteerde digitale schakelingen . Het is moeilijk om de signaalintegriteit, timing en amplitudes van digitale signalen te controleren die laagdoorlaatfilter zijn gefilterd in wiebelige brij.

Tegenwoordig zou het moeilijk zijn om een ​​5MHz-bereik te vinden, tenzij de een is een antiek koper. Betere chips van alle soorten zijn net zo gemakkelijk te krijgen, zelfs in DIP-pakketten met een tussenruimte van 0,1 inch, behalve dat ik in lange tijd niet veel heb gezien op het gebied van grab-bags. Socket-breadboards zijn echter niet veel veranderd. Verdwaalde capaciteit is nog steeds een snelheidsdoder voor edgy creatieve digitale projecten.

Breadboards vermijden door een zelfgebouwde PCB te gebruiken, is de beste manier om verdwaalde capaciteit te voorkomen, maar vergt natuurlijk meer inspanning en tijd.

Nate
2012-11-01 06:40:08 UTC
view on stackexchange narkive permalink

Ik denk dat de belangrijkste reden is dat als je de frequentie verhoogt, de impedantie van de verbindingen van je breadboard zal toenemen en de eindsnelheid van je circuit zal beperken.

Elke verbinding in je breadboard heeft een lage, maar niet-nul inductie. Naarmate uw frequentie hoger en hoger wordt, moet u met deze effecten rekening houden. De impedantie van de draden kan worden gevonden door:

This formula

waarbij L de inductantie van de draad is. Uiteindelijk zal Z hoog genoeg worden zodat er geen stroom vloeit en je circuit stopt met werken. Het vinden van de exacte numerieke waarde voor dit nummer zal erg ingewikkeld zijn, vooral omdat breadboards sporen naast elkaar hebben en dat zal de impedantie van elke draad een beetje veranderen van deze formule. Als je echt een (onnauwkeurig) getal wilt, kun je hier proberen om de inductantie (en dus de impedantie) van je draden te berekenen. Als u de laagste stroom kent waarmee een part kan werken, kunt u de maximale frequentie bepalen voordat u die limiet bereikt.

Kunt u de relatie tussen de impedantie en snelheid van het circuit uitleggen?
Dus hoe verklaart dit dat CPU's zoals Intel Core I7 werken met kloksnelheden van 2,5 GHz en CPU's die op breadboards zijn gebouwd deze snelheid niet kunnen bereiken? Ik dacht aanvankelijk dat er een verband is met de lengte van de draad tussen de CPU en RAM-chips.
Om de natuurkundige wetten niet te ontkennen, maar ik denk niet dat inductie echt de belangrijkste snelheidsbegrenzer is. Daarna worden soortgelijke draden met vergelijkbare lengtes gebruikt in zelfgemaakte radio's en andere projecten, op veel hogere frequenties. Men moet gewoon voorzichtig zijn met het matchen van impedanties, lengtes, lay-outs, onbedoelde koppelingen vermijden, enz.
@DarenW: Verdwaalde inductie en capaciteit zijn inderdaad de problemen. In een radiosysteem heb je meestal maar één draad met een niet-triviale lengte. In een processorimplementatie heb je honderden, met wederzijdse inductie afhankelijk van de afstand. De frequentieafhankelijke interacties zijn onbeheersbaar vanwege de complexiteit. Karakteristieke impedantie hangt sterk af van zaken als afstand tot grondsporen ... die niet goed gecontroleerd worden op een breadboard.
Ik denk dat je gelijk hebt, ik denk dat het waarschijnlijk gewoon reactanties in het algemeen moeten zijn. Capaciteit leidt tot vergelijkbare problemen, maar voor zaken als harde stijgende / dalende randen en toestandsveranderingen. De vergelijkingen voor het vinden van de impedantie zijn echter vergelijkbaar, en als hij een numeriek antwoord wil, kunnen die waarschijnlijk op een vergelijkbare manier worden toegepast.
Brian Carlton
2012-11-02 00:30:54 UTC
view on stackexchange narkive permalink

Anderen hebben het "waarom" beantwoord. Hier leest u hoe u de maximale snelheid bepaalt.

  1. Zoek voor elke flip-flop de klok op naar Q.
  2. Tel de draadlengte van alle draden vanaf de flip-flop bij elkaar op. flop naar de volgende flip-flop. Verander deze lengte in tijd. Draad is ~ 2/3 lichtsnelheid
  3. Totaal eventuele poortvertragingen, inclusief via asynchrone RAM.
  4. Neem de insteltijd bij de volgende flip-flop.
  5. Voeg 1-4 toe. Dit is uw minimale klokperiode. Omkeren om frequentie te krijgen.
  6. Overweeg klokafwijking. Als de klok de tweede ff voor de eerste bereikt, voeg dan scheefheid toe met 1-4.
  7. Als de klok de tweede ff voor de eerste bereikt, bereken dan het minimum van 1-3. Zorg ervoor dat ze korter zijn dan de wachttijd die vereist is voor de tweede ff plus de klokafwijking.
Over welke draadlengte heb je het: de lengte van de stroombron naar de CPU-uitgangen, de CPU-uitgangen naar de RAM-chips ...? Ook ben ik niet echt duidelijk wat je bedoelt in de eerste stap.
@Eugen - ik denk (maar niet mijn vakgebied) dat hij verwijst naar de interne voortplantingsvertraging - de tijd tussen het klokken en het hebben van een stabiele output.
starblue
2012-11-02 18:30:47 UTC
view on stackexchange narkive permalink

Afgezien van alle elektrische redenen die de snelheid beperken, is er ook een op het logische niveau:

Je kunt niet zoveel middelen inzetten om dingen sneller te laten verlopen, zoals pijplijnoperaties met vertakkingsvoorspelling, sneller rekenen en zo. Caches hebben ook weinig zin als ze niet sneller zijn dan uw hoofdgeheugen.

Phil Wright
2016-10-25 11:38:35 UTC
view on stackexchange narkive permalink

Voor homebrew-machines komt het neer op twee factoren. De voortplantingsvertraging voor de chips die je gebruikt en het aantal chips dat je nodig hebt op het langste pad door je CPU-ontwerp.

Een 74HC574 (8 bit register) heeft bijvoorbeeld een maximale voortplantingsvertraging van ongeveer 41 ns (ontleend aan zijn datasheet). Laten we nu zeggen dat het langste pad door uw CPU-ontwerp vereist dat het door 8 verschillende chips gaat. Tel de voortplantingsvertragingen voor elk van de 8 bij elkaar op en stel je voor dat het gaat om 333ns. Omdat 1000ns hetzelfde is als 1Mhz, zou je een maximale snelheid van 3Mhz krijgen.

In de praktijk wil je je misschien beperken tot iets langzamer, zoals 2Mhz, om een ​​stabiel ontwerp te garanderen. Zelfs als je denkt dat je de timing maar één keer per miljard cycli zult missen, dan zit je nog steeds in de problemen. 10 miljard gedeeld door 3 miljoen betekent dat je elke 3.333 seconden een verkeerde uitvoering geeft, wat ongeveer eens per uur is. Uw machine elk uur laten crashen is niet goed!

Om het sneller te laten gaan, kunt u snellere chips gebruiken en / of het ontwerp wijzigen om het aantal chips op het langzaamste pad te verminderen. Ongeveer de snelste homebrew-snelheid die je ziet, is ongeveer 4 MHz, wat je 250 ns geeft om elke cyclus te voltooien.



Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 3.0-licentie waaronder het wordt gedistribueerd.
Loading...