Just nu i M3-nätverket
Gå till innehåll

CPU-hemmabygge


rogerk8

Rekommendera Poster

Hej!

 

Eftersom jag är så kass på datorer men ändå mycket intresserad (så länge inte det inte är windows-baserat) så tänkte jag småskryta med att jag håller på att designa en primitiv CPU i CPLD-teknologi.

 

Först skall anmärkas att en CPLD (Complex Programmable Logic Device) inte är den bästa. Den kan nämligen inte realisera ROM-funktioner.

 

Med inspiration från jobbet har jag dock börjat med att bygga CPU'n mha en CPLD även om en FPGA (Field Programmable Gate Array) hade varit bättre då den klarar just ROM-funktioner.

 

Jag har prövat mig fram och fått den diskreta "grind-designen" (ECS) att få plats i en Xilinx Coolrunner II XPLA3 med 512 så kallade macroceller.

 

Eftersom jag är en glad amatör har jag varit tvungen att vira konstruktionen. Jag virade i flera veckor och är nu framme vid att löda CPLD'n på ett speciellt labkort från schmartboard.com.

 

Min CPLD har hela 208 ben och det är inte mer än 0,5mm mellan benen så denna lödning gör man inte hur lätt som helst.

 

Eftersom jag är ganska skakig kommer jag ta hjälp av en av mina kollegor.

 

När detta är gjort behöver jag bara löda 208 trådar till prototypkortet.

 

När det är klart kommer jag försöka ladda ner mitt grindbaserade program till CPLD'n.

 

Jag har förresten löst i princip alla funktioner en primitiv CPU behöver (såsom heladderare, register och 3-statebuffrar) mha enbart grindar.

 

Tyvärr gick det inte att diskret bygga en SR-vippa i ECS, så jag blev nödgad att använda en befintlig och redan implementerad JK-vippa istället. Men förutom detta har jag designat allt mha simpla grindar.

 

Jag är väldigt spänd på hur första spänningspåslagningen skall yttra sig. En sak är säker. Jag kommer vrida upp spänningen till dom tämligen optimala 9V (innan 5V & 3V regulatorerna) samt sätta strömmen på ett minimum innan jag ens kopplar in grejerna. Sen kommer jag sakta öka strömmen tills dess det inte flyter mer än en halv ampere. Vilket förhoppningsvis är innan 9V.

 

Älskar detta forum!

 

MVH/Roger

Länk till kommentar
Dela på andra webbplatser

Tänk på riskerna att du förstör komponenten pga. för hög värme genom att handlöda.

Löder du/ni med blyfritt lod så är risken stor eftersom detta har högre smälttemperaturer än blyat lod och då är det även lätt att få foliesläpp på mönsterkortet om man inte är van och har erfarenhet av detta.

 

Prova att finna en socket 208 och 0.5mm pitch istället och löd dit den, sedan monterar du kretsen i sockeln, ja om det nu passar i din konstruktion.

 

Fast vilken kapseltyp är det egentligen, QFP? Då finns det nog inga socklar att tillgå.

http://www.fpga-guid...ge/package.html

 

Mvh

Länk till kommentar
Dela på andra webbplatser

Hej!

 

Tack för ditt svar!

 

Det är en QFP.

 

Jag har precis fått levererat ett prototypkort från schmatboart.com (e.g mouser). Det kortet är så finurligt gjort att det har små spår för varje ben. Adderar man bara lite flussmedel (som jag köpt en hel liter av) räcker det att försiktigt föra lödspetsen i spåret mot benet för okej lödning.

 

Jag kan dock inte göra detta själv. Lite, men inte enbart, för att jag är alkoholiserad :lol:

 

Ha det bra!

 

MVH/Roger

Länk till kommentar
Dela på andra webbplatser

Intressant projekt.

Btw. tänk på att skydda elektroniken mot ESD-skador och lösa olödda komponenter är mycket känsligare än ett färdigt kretskort (även om detta också är känsligt för statiska urladdningar).

 

Och tappa den inte i golvet för benen på dessa QFP är väldigt mjuka, mycket lätt att böja dessa, gäller även när man hanterar den så tar man aldrig i benen.

 

Lycka till.:thumbsup:

Länk till kommentar
Dela på andra webbplatser

Hej!

 

Bifogar en bild på ovansidan av mitt projekt som jag nu hållit på med i 1,5 år :-)

 

Överst syns tre röda vippomkopplare. Från vänster till höger är funktionen:

 

1) LATCH, latchar in värdet av HEX-omkopplarna längst till vänster (det är en 16-bitars processor med en 8 bitar bred databuss)

2) POR, sätter helt enkelt på spänningarna (3V och 5V) och genererar samtidigt en resetpuls (Power-On-Reset, <1us)

3) CYCLE, genererar normalt sett en väldefiierad positiv klockflank (DC-klocka mao)

 

De två 28-pinniga socklarna överst är för programminnet/PROM (överst) och arbetsminnet/RAM (underst).

 

De övriga sex socklarna är för de PROM som behövs för att realisera själva instruktionerna (43st OE/LD/EN-signaler).

 

1) OE (Output Enable) är signaler som krävs för att lägga signaler på den interna databussen

2) LD (LoaD) är signaler som krävs för att få register att ändra tillstånd

3) EN (ENable) är signaler som krävs för att räknare skall kunna räkna upp (i takt med klockpulsen, CP)

 

Jag använder över 100 lysdioder (max 1mA per styck vilket räcker bra för indikering) för att kunna debugga processorn. Dessa lysdioder är uppdelade i nibblar där MSN är röd och LSN är grön. Detta för att lättare kunna läsa hexkoden. Hoppas jag åtminstone :-)

 

Mycket mer går inte att säga om denna bild.

 

Hoppas ni gillar mitt projekt :-)

 

MVH/Roger

post-126921-0-81396100-1350414238_thumb.jpg

Länk till kommentar
Dela på andra webbplatser

Ahh du virar! Det tycker jag är särskilt intressant och roligt!

 

En sådan bondning har betydligt bättre mekanisk och elektrisk effekt än dom dom flesta andra typer av anslutningar, inkl. lödning i vissa fall - men inte alltid. Passar dock perfekt för experiment och labblösningar och det ger heller inga märkbara förluster som är mätbara i höga frekvenser, fast det beror på.

Tillräckligt höga och där pratar vi runt GHz så kan det bli interferens och signalerna kan kurka ihop..

Men i din lösning, utan att ha sett något mer så ser det bra ut.

 

Men en fråga; vilka frekvenser har processorn, så inte avståndet börjar påverka? M.a.o. så börjar det bli märkbart i form av interferens på ledarlängder över 100mm.

Mvh

Länk till kommentar
Dela på andra webbplatser

Slutligen bifogar jag en bild på arkitekturen. Vi stannar nog där ikväll :-)

 

1) Högra sidan av arkitekturen är i princip en ALU (Arithmetic Logic Unit). Enda undantaget är stackpekarregistret (SP)

2) SP (Stack Pointer) är ett speciellt register som krävs för att kunna göra subrutinanrop (läs PUSH/PULL)

3) CCR (Condition Code Register) sätter flaggor/bitar beroende på utfallet av en heladdering (FA)

4) FA (Full Adder) adderar två tal och placerar eventuellt resultatet i tillhörande register (LD_FA)

5) SR_L och SR_R är två (skift)register som utgör själva accumulatorn (A). Jag har funnit det nödvändigt med två "parallella" register pga höger/vänster-skift

6) PC (Program Counter) håller reda på vart i programminnet CPU'n befinner sig

7) AR (Address Register) är registret som lägger ut adresser enligt programminnet (antingen lika med PC eller lika med "extended mode")

8) IRR (Instruction Register Register) är den mest signifikanta delen av IR-adressen som alltid utgörs av instruktionens OP-kod (om programmet är riktigt skrivet)

9) BR (Branch Register) sniffar flaggvärdet map N (Negative) och Z (Zero) hos CCR (normalt närmast tidigare instruktion, läs CMP).

10) IRC (Instruction Register Counter) håller reda på vilken cykel som utförs och är en del av IR's adress.

11) IR (Instruction Register) det är här allt händer. Det är själva hjärnan i processorn. Dess adress utgörs av IRR+BR+IRC och instruktionerna realiseras cykel för cykel.

 

Eftersom jag kom upp i så många som 43 styrsignaler så krävs hela sex PROM för att realisera instruktionerna.

 

Noterbart är att min CPU inte ens kan räkna. Detta om man bortser från ADD/SUB. MUL/DIV är emellertid inte (hårdvarumässigt) implementerat. Mest pga att jag helt enkelt inte visste hur. Det roliga i kråksången är emellertid att man faktiskt kan realisera MUL/DIV mha mjukvara. Dock är mina nuvarande skift-funktioner så primitiva att de bara kan skifta in 0 samt skifta från höger respektive vänster. Jag tror mig veta att en mjukvaruimplementation av MUL/DIV kräver 1-skift. Vilket jag dock planerar införa. Om allt går som det ska dvs. Men om det inte gör det har jag i alla fall gjort ett seriöst försök :-)

 

Mycket nöje!

 

MVH/Roger

post-126921-0-37016300-1350417486_thumb.png

Länk till kommentar
Dela på andra webbplatser

Jag tror mig veta att en mjukvaruimplementation av MUL/DIV kräver 1-skift. Vilket jag dock planerar införa. Om allt går som det ska dvs. Men om det inte gör det har jag i alla fall gjort ett seriöst försök :-)

 

H/W

Testa att införa en klockcykels fördröjning; ja på så sätt bör du få reda på om det ar denna eller annat som ställer till det.

M.a.o. sänk frekvensen på bussen och avläs; sedan höjer du klockan tills det kurkar ur och vad avläser du då?

Länk till kommentar
Dela på andra webbplatser

Hej Flyfisherman!

 

Hur går det med flugfisket då? ;)

 

Ja, virning är underskattat. Det är en suverän metod när man vill ta fram prototyper (och som är billigt och tillgänglig även för privatpersoner). Och faktiskt inte ens bara då. Jag har fått höra att man skapade permanenta produkter mha av virning förr. Innan alla avancerade (och dyra) CAD-program kom alltså.

 

Virning ger ju helt gastäta fogar. Så de kan inte oxidera. Enda problemet är frekvens kontra längd. Och ja, mina virtrådar är stundtals lite långa. Upp till 30cm. Men, och detta är viktigt att poängtera, jag har ingensomhelst avsikt att konkurera med kända processorer. Jag är enbart intresserad av att försöka få grejerna att fungera. Men snabba flanker, som CPLD'n har, innehåller ju enligt Fourieranalysen höga frekvenser. Så kanske det inte fungerar ens om jag kör processorn på låg frekvens (default är max 100Hz mha en relaxation oscillator). Jag kan alltså koppla om den manuella klockan till automatisk klocka (default 0,5Hz) men vill jag köra högre frekvens än 100Hz måste jag dessutom byta konding. Tillägas skall att använd CPLD kan ställas om till lägre slew-rate om man vill. Jag har dock preliminärt struntat i den finessen. Men det inger hopp.

 

Tack för ditt intresse i mitt projekt. Mycket kul!

 

MVH/Roger

Länk till kommentar
Dela på andra webbplatser

Jag kom på att jag skulle tipsa dig om Svenska elektronikforumet där du säkert kan få mer djuplodande tips och synpunkter.

Men tala gärna om hur projektet fortskrider här också eller om du startar en ny tråd där kan du ju posta en länk dit i den här tråden.

 

Mvh

Länk till kommentar
Dela på andra webbplatser

  • 2 veckor senare...

Hej Flyfisherman!

 

Vill bara visa dig min senaste skapelse.

 

Det är hjärnan i min CPU.

 

Jag har bara två moment kvar innan jag kan testa mitt 1,5-årsprojekt.

 

Dessa är:

 

1) Fixera enheten till moderkortet (mha grov silvertråd)

2) Löda alla 208 trådarna till kortets stiftlister

 

Sen är det skarpt läge ;-)

 

MVH/Roger

PS

Bifogar en bild på hur CPLD-Schmartboard enheten ser ut just nu.

post-126921-0-76355100-1351461675_thumb.jpg

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...