Category Archives: FPGA/CPLD

PDP-11 manija

Jau kiek rašiau apie DEC DC J-11 procesorių. Jis kaip ir beveik veikia, bet kartu ir neveikia. Matyt nukentėjo ir mechaniškai (žiauriai pabrauktas viršus), ir elektriškai (niekas neatmeta to fakto, kad jis jau buvo blogas). O ir amžius elektronikai gana solidus.

Čia mano eksperimentinė plokštė. Alteros CPLD sukonstravau šiokį tokį CPU “aprišimą” ir teoriškai jis turėjo paleisti mano mikro programą ar pasileisti į amžiną “NOP” ciklą. Tačiau procesorius pyktybiškai daro savo darbą ir iššoka į debug konsolę – ODT. Kas tai yr? Ogi tai monitoriaus “programa” leidžianti serial terminalo pagalba redaguoti atmintį, paleisti programas ir ką nors dar. Toks daiGtas kaip WozMon pas Apple 1 kompiuterį. Tik čia ne softas, o pačio CPU silikone, mikrokode parašytas softas. Kad jis veiktu nereikia nei atminties, nei kokio ROM. Reikia tik specifinės UART mikroschemos ir kelių mikroschemų. Į debug režimą galima papulti kai lūžta procesorius, HALT komanda arba “blinken lights” mygtukais.

Pas mane nėra nei blinkenlights, nei UART konsolės. Todėl teko panaudoti logini analizatorių. Gaunasi maždaug taip:

Gaila, kad loginis analizatorius labai nestabilus ir tik 16 kanalų

Tie skaičiukai “7772”, “7564”, “7566” tai oktaliniai gabalai adreso. Tikri adresai: o17777772, Peripheral Interrupt Request Register; o177564; Console send status (aka TPS); o177566; Console send buffer (aka TPB).
Tai čia procikas uždraudžia pertraukimus, pasitikrina ar galima siųsti simbolį ir išsiunčia simbolį per terminalą. Duomenis irgi galima pasitikrinti- ten nusipaišo “command promptas”. Tačiau aš norėjau kito režimo. Vadinasi arba nenuskaitė blinken lights, arba susihaliucionavo HALT koja arba lūžo procesorius.

Tačiau pastebėjau, kad režimas kinta nuo “taktilinio” debuginimo- priklausomai kur priglaustas pirščiukas, CPU režimai buvo kitokie. Nepadėjo net ir procesoriaus litavimas (kad ir kaip tai keistai skamba). Vistiek sistema nestabili. Kas baisiausia- problemos priklauso nuo A17… A22 kojų kurios yra …. tik išėjimai. Priklausomai ar tas kojas patempi į pliusą ar žemę. Nebent CPU manualas meluoja.

Gal pasileido? Reikia viską analizuotis pagal fucking manualą

O čia kas kažkelintą kartą pasirodo kažkas įdomiau. Kogero taip veikia mano programa, kuri pabėga iš savo ciklo ir užsišoka ant NOP komandos. Ko pasekoje CPU adresas didėja ir tas labai gerai matosi ant dekoduotos (pas šiuos CPU adresas ir data yra multipleksuojamos per tas pačias kojas) adresų šynos. Čia 16 bitų procesorius ir jo NOP komanda yra 2 baitų ilgio. Todėl A0 (čia D0) nesikeičia. Keistokai atrodo WR lygis (beja, pas šį prociką nėra nei RD nei WR kojyčių. Čia irgi reikia dekoduoti). Bet šis režimas nestabiliai pasileidžia. Nu nėra mano procesorius stabilus.

Ko pasekoje supsichavau ir nusipirkai eBay DC J11 (PDP 11/72) procesoriaus plokštę (tipo veikiančia) su būtent tokiu pat CPU. (minus 155 pinigai) ir kiek vėliau Q-Bus atminties plokštę (minus 75 pinigai)… Dar negavau.

Galvoju šiandien, kaip aš sujungsiu tas plokštes- aš gi Q-Bus backplane neturiu. Nueinu apie 16:00 į elektronikos sandėlį ir žiūrau… bl… panašu, kad guli gal ir PDP11 backpleinas. Pakėliau- surudijęs, sulankstytas, kažkoks ne PDP. Bet kištukų kiekis atitinka. Pasidėjau į slaptavietę.
Žiūrau sau į tą kalną plokščių, jei yra backpleinas, tai gal kokia plokštelė atsiras. Radau kažkokia, analoginę lyg ir panaši, bet auksiniai kontaktai nukirpti. Dar pakuičiau ir net širdis sustojo. Va:

Mano lobis

Tai silpnesio modelio PDP-11/23 procesoriaus plokštė su F-11 čipsetu. 18 bitų adresacija, be MMU (vadinasi mažai RAM), be FPU. Bet ALU dalis lygtai yra. Buvo baisi, išploviau su muilu, distiliuotu vandeniu ir izopropilo alkoholiu.

Ir baigėsi darbo valandos. Reikės rytoj kažkaip įsiprašyti ir kaulyti, kad leistu man rankutėmis perrinkti gal toną beviltiškų PCB. Gal netyčia rasiu ir kitas dalis, tinka net ir be auksinių kontaktų. Man labai reikėtu ODT ir ROM. Aišku ir koks nors RAM nepamaišytu. Aš panikuoju, todėl ir rašau. Nes bet kurią savaitės dieną gali išvežti viską sunaikinimui.


Po keletos valandų pisimosi

Naujas softas:

3000: 012700   MOV #1,R0        ; R0 = 1
3002: 000001

3004: 012701   MOV #1234,R1     ; R1 = 1234 (octal)
3006: 001234

3010: 005200   L0: INC R0       ; increment R0
3012: 010011   MOV R0,(R1)      ; store R0 into memory at [1234]
3014: 000775   BR L0            ; branch back to 3010

Dabar lygtai ir veikia jei žiūrėti į loginį analizatorių. Dabar žiūrom į DAL kojas, kur ir data ar adresas multiplexinti.

3000 tai adresas, poto eina 2700. Tai 12700 galiukas. Ir kur didelis tarpas, tai duomenų “0002” rašymas į adresą “1234”.

Jei norit, pulseview failas. Kažkokie gliukai prieš paleidžiant programą ir gana įdomiai veikia tas pipeline skaitymas (ar kaip ji ten) ir viskas iš 1983 metų. Sekantis etapas- RAM ir ROM. Bet reikia perkilnoti toną PCB. Gal dar ką nors rasiu.

GAL/PAL “hackinimas”

Aš biški domiuosiu senais kompais, o ten dažnai naudojamos programuojamos logikos mikroschemos (PAL/TIBPAL/GAL/PALCE). Šios mikroschemos, ypač senos laidos, labai kaista ir net kartais nuo to kaitimo susidefektuoja. Todėl kartais jas reikia pakeisti “naujom” PALCE ar GAL mikroschemom. Visa bėda- nežinom mikroschemos turinio. Kartais “fuse” failai randami internete, kartais net būna “lygtys”. Kartais galima atstatyti turinį pagal prietaiso schemą (taip atstačiau ATARI 1200 čipą). Tačiau tai suveikia ne visada.

GAL ir PALCE čipai perrašomi. Todėl juos galima lupinėti iš senų plokščių ir panaudoti iš naujo.

Internete yra metodas, kad paprastas mikroschemas (be registrų) galima atburti naudojant paprastą “brute force” t.y. išbandant visus variantus ant kojyčių. PAL mikroschema prijungiama kaip 27C020 ir nuskaitoma kaip paprastas EPROM ir gautas “rom dump” sumaitinamas specialiai programai “pa.exe”.

Jei PAL/GAL mikroschema neturi viduje registrų ir (kas svarbu!) neturi viduje užciklintos logikas “ala” registras, tai viskas veikia. Deja, tos mikroschemos kurios man buvo svarbios buvo TIBPAL16L8 – gryna logika, bet “užciklintos” ir man nepavyko jas “nulaužti”…

Taip atrodo PAL16L8 į 27C020 adapteris.

Taigi, jei netyčia turit Amiga 2000 1Mb DRAM plokštės jungiamos į CPU slotą schemą ar PAL formules, pasidalinkit 🙂 Nes dabar atminties išpėtimas net pradeda smirdėti nuo karščio.

Žaidimas su FPGA dev board

Kažkas įsigijau pačio pirmo ciklono (EP1C20F400c7) FPGA plokštę (Nios edition). Kiek žaidžiau su Nios, bet ten visokios licenzijavimo problemos. O kita problema- mažai dokumentacijos ir dar softą kažkur pamečiau. Beja, internete informacijos apie šią pirmąją plokštę mažokai- labai ji sena.
Tačiau senas dev boardas turi ir pliusų- dalis jungčių toleruoja 5V logiką. Kaip tik pajunginėti prie mano kolekcijinių kompiuterių.

Daug metų ji kažkur gulėjo ir nesenai ją radau. Nutariau pažaisti, nes FPGA tai kaip virtualus konstruktorius- nereikia nieko lituoti, o visokias schemas galima bandyti. Ir nutariau patikrinti savadarbio Z80 emuliatoriaus darbą- man kažko neveikia Altair Basic. Tiksliau veikia, bet bėdos su matematika. O ant FPGA galima paleisti Z80 ir palyginti rezultatus.

Altair Basic
Nu ir va, Basic vistiek blogai veikia. Kame bėda. Pabandžiau perjungti Veriloge Z80 į Intelio režimą, tačiau BASIC vistiek blogai veikia.
Neaišku kur bėda. Ant tikro hardwaro paleidinėti nenoriu.

Va kaip atrodo ta plokštė:
Cyclone 1 NIOS edition dev board

Pats Altair projektas Quartus archyvo formoje.

O kadangi aš nemėgstu visos schemos “sujunginėti” teksto formoje, va kokis yra “top level” failas- grafinė schema:Altair 8800 Basic UART FPGA top schema.

HDMI (DVI) Testeris arba mano pirma ketursluoksnė

Buvo nuo senų laikų prikaupto Cikloninio šroto. Viena bėda- BGA korpusas. Tačiau laikai keičiasi, ketursluoksnės PCB jau pigios ir iš garažo buvo ištrauktos mikroshemos. Plokštė gavosi su viena rimta klaida, bet šiaip viskas veikia. Reikia pagirti Alteros mikroschemos tvirtumą. Ji buvo lituota fabrike, poto aš nulupau. Poto bandžiau reballinti, poto dar bandžiau, poto dar bandžiau. Poto prilitavau, bet ne iki galo. Poto dar kaitinau ir tapšnojau, kad rutuliukai susijungtu su PCB. Ir mikroschema išlaikė šiuos išbandymus.
Šis ciklonas turi PLL ir turi LVDS išėjimus. Kaip tik išbandyti HDMI (DVI) interfeisui:
HDMI test generator on single FPGA chip
Čia mano kiniško monitoriaus ekrano nuotrauka. Signalas eina tiesiai per HDMI iš FPGA. Matosi viena problema- eilutėje su vertikaliais brūkšneliais, pats kairinis turi būti irgi dryžuotas. Dabar neaišku, ar čia kaltas mano projektas arba visdėlto kiniškas upscaller. Mano “generatorius” išduoda VGA (640×480@60Hz, 25MHz pixel clock) vaizdą, o kiniškas žaislinis monitorius lygtai FullHD.
Continue reading →

ZX LCD

Besitvarkant daiktus (čia retas reiškinys), radau savo seną eksperimentą su FPGA/CPLD ir LCD (tik ekranas jau buvo kitas). Tas eksperimentas buvo nedabaigtas dėl žinių, noro ir kantrybės stokos. Dabar visko kiek daugiau, tai nudraskiau nereikalingas detales ir pridėjau naujų:
ZX Spectrum in CPLD LCD mode
Tai labai panaši sistema kaip ir paprastam ZX Spectrum CPLD/VGA. Tik pasikeitė keletas esminių koncepcijų:
Senesnėje versijoje atmintis buvo bendra- procesorius ir VGA buferis naudojosi ta pačia atminties mikroschemą, todėl CPLD stengėsi atlikti atminties arbitro (MMU) darbą ir laiko rėžiais (time slot) prileisdavo tai CPU tai VGA prie tos pačios atminties. Ši schema kiek kitokia- pirmiausia, naudojama atskira atmintis procesoriui- Toshiba TC551001BPL-85. Tai žymiai lėtesnė atmintis, tačiau ji skirta tik procesoriui. VGA ar LCD kontroleris visiškai nesikreipia į ją. LCD/VGA kontroleris tik sėdi ant duomenų ir adreso linijų ir stebi jam reikiamas kombinacijas- jei pastebimas rašymas į video atminties plotą, duomenys dubliuojami ir LCD/VGA atmintyje. Taip pat stebim Z80 IN/OUT veiksmus, nes mums reikia vaizduoti pajungta klavietūrą, magnetofoną ir garsiakalbį.

ZX Spectrum in CPLD LCD mode
Tačiau tai vienspalvis LCD monitorius, 320 x 240 taškelių. Duomenys pumpuojami po 4 bitus iš karto, todėl sistemos dažnis netgi kiek lėtesnis. Tačiau labai lėtinti negalima, nes kažkur prie 40Hz kadrų dažnio labai matosi vaizdo mirgėjimas. Dabar LCD veikia virš 60Hz dažniu. Deja, jis labai inertiškas- “border” efektai susilieja…

ZX Spectrum in CPLD LCD mode
O judantys objektai beveik nesimato.

Aišku šiame variante visiškai ignoruojami spalvų atributai (“flash” veikia), todėl žaidimų vaizdeliai keistoki. O borderį padariau dryžuota, kad kiek nors skirtusi “spalvos”.

Šis antras maketas buvo surinktas ne dėl ZX spectrum. Aš galvoju čia sudėti kokį nors kitą retro kompiuterį, bet ZX yra vienas iš paprasčiausių, tai testavimui suėjo.
Schemotechnika visiškai paprasta- adresų šyna po stiprintuvo 2x SN74HCT541N (nelabai jis reikalingas) eina į CPLD, ROM, RAM. Tas pats, tik be buferio, padaryta su duomenų šyna. Viskas “sumontuota” CPLD mikroschemoje. Ten aišku tebeliko keletas klaidų, tačiau sistema veikia.

Ir aišku visi failai:
Intel-Altera Quartus CPLD source code for ZX Spectrum LCD version.

Jei jums nepasileido, tai atminkite, kad kai kurie Z80 CPU reikalauja, kad jų clock būtų 5Vpp, o ne TTL lygio.

LCD ekranas iš senoviško dauginimo aparato: EDMMPU3BDF, jo pinout:


1. ON/OFF
2. n.c.
3. VS
4. HS
5. pix CLK
6. Vcc, +5V
7. GND
8. Vee, -25V
9. D3, pixel data
10. D2
11. D1
12. D0
13. Vee, same as 8.
14. contrast.

ZX Spectrum sukištas į CPLD

Šiuo metu kiek tvarkau senų kompų kolekciją ir nutariau suremontuoti savo Santaką (baltik versija). Pirmiausia nurinkau visus laidus, pasilikau pliką PCB, atstačiau ROM čipus ir pajungiau. Aišku niekas neveikia. Todėl pradėjau nagrinėtis- pirmas stepas, nėra RESET signalo. Pašalinom rusišką mikroschemą К155ЛН1 nauja SN74LS04. Pradėjo veikti procesorius ir netgi bandė formuotis vaizdas. Bet jis dingo. Pastebėjau, kad dar kaista К555ИЕ10- kol šalta, signalai praeina. Poto pakaista ir signalai dingsta. Čia jau rankos kiek nusuleido- supratau, kad tarybinė kokybė man nepadės. PCB padaryta ant snarglių ir beveik negalima perlituoti. Net blogiau už kiniškas popierines PCB iš 1980-tųjų metų.

ZX Spectrum CPLD Altera
Užtenka tik ką nors pakaitinti ir takeliai atsiklijuoja.
Continue reading →

Commodore 6526/8520 kopija CPLD

Yra tokia deficitinė senoviška mikroschema- CIA (complex interface adapter) skirta 680x ir 68000 čipsetams – 6526 / 6526A ir 8520. Naudojo ir gamino šias mikroschemas Commodore (jos čipų gamykla MOS). Naudojami šie čipai Commodore 64, 128 ir Amiga serijos kompiuteriuose. Tikriausiai buvo naudojama ir plačiau, bet man nepapuolė plokštės, kurios turėtu šiuos čipus. Šie čipukai tai interfeisiniai, jie visaip programuojami ir paprastai bendrauja su periferija. O kadangi kojyčių apsauga pas senas mikroschemas labai silpna, tai šios mikroschemos miršta vienos iš pirmųjų. Kiek supaprastinta, 8520 versija užlenkė mano Amiga 500 netgi keliems metams.
Dabartiniais laikas šios mikroschemos nebegaminamos, tačiau jos tebemiršta. Ir jų kainą pradėjo kilti- dabar viena mikroschema kainuoja kažkur apie 25€ (be atsiuntimo ir mokesčių). O kompiuteriuose dažnai stovi po dvi. Man netgi susidarė nuomonė, kad apsimoka pirkti kai kuriuos senus kompus, lupti lauk čipus ir parduoti- kaip auto šrote. Palaidos detalės kainuoja daugau nei visas komplektas. O ir nusipirkti galima neveikiančia.

Todėl kilo iškreiptas projektas: Commodore 8526/8520 kopija CPLD. Jei viskas pavyks, tai galima mikroschemą emuliuoti ir greitesniu MCU. Bet kolkas buvo pasirinkta CPLD ir Altera Quartus 9. Kodėl? Todėl, kad aš turiu keleta CPLD suderinamu su 5V TTL lygiais ir softas nemokamas. Softas gana sudėtingas ir turi visokiausiu diagnostinių įrankių, o ir CPLD turi perteklinį kiekį kojelių, todėl galima išsivesti visokius vidinius registrus laukan ir tikrintis su osciloskopu.

Mano poros laisvų dienų darbo frontas atrodo taip:
Commodore CIA 6526/8520 CPLD-FPGA verilog copy
(Nuotrauka pasididina)
.
Continue reading →

Manija ir motyvacija

Seniau rašiau, kad iš garažo atsinešiau plazminį ekraniuką. Kiek laiko ieškojau duomenų apie šita daiGtą, bet nelabai ir radau. Poto užklydau firmelę capetronics kurie lygtai prekiauja tokiais ekraniukais, juos remontuoja ir panašiai. Ir parašiau aš jiems laiškelį- tipo turiu porą tokių ekraniukų, norėčiau išbandyti kaip jie veikia ir kad būčiau labai dėkingas už bet kokią informaciją apie šią Sharp produkciją. Kaip nekeista, gavau atsakyma kuris nuskambėjo kaip keistokai: tipo jie turi visus datasheetus, bet tikrai neduos man tos informacijos. Nu jei ne duos, tai galėjo ir nerašyti to laiško. Aš jiems tada atsakiau, kad jei negali, tai nereikia, gal kreipsiuos į patį Sharp, o gal pats atbursiu kur kas ir kaip eina. Gavau atsakymą kuris sukėlė mano honorą: tipo bandyk laimę durnelį… O to, man kvailam ir užteko. Teko jamti už ragų ar kitos minkštos vietos ir padirbėti.
Todėl parašysiu, bent jau dalinai, kaip dariau šitą “reverse engineeringą”.
Continue reading →

FPGA:0008 – UART

Nu va. Schema didėja ir sudetingėja. Taip pat įvedami įvairūs pataisymai į jau esamus modulius. Todėl dabar stengsiuos prie straipsnio pridėti projekto archyvą. Tai bus su RARu suarchyvuotas Quartuso archyvas (qar) failas. Teoriškai, užteks tik importuoti archyvuotą projektą į Quartusą ir viskas veiks.

Komentaruose skaitytojas rašė apie RS232 modulį. Tiksliau į serial protokolo modulį. Aš nesu toks didelis gudrutis, todėl modulį paėmiau iš FPGA4FUN puslapio. Tačiau jo panaudojimą vilkinau tol, kol bus galima vizualiai panaudoti mūsų “pamokėlėse”. Taigi mintis tokia- sukurti kažkokią tai primityvią serial terminalo video plokštę. Vienam gale RS232 (konvertuotas iki LVTTL lygio), o kitame- monitorius.
Kaip bazę naudojam tą patį video generatorių ir jau spėjusius įgrįsti melynai žalius kvadratėlius.
Continue reading →