Bármely ISA kártya emulálása Raspberry Pi és FPGA segítségével

Címkék

Mi van akkor, ha a kedvenc ISA-kártyád nem elérhető könnyen? Az egyik lehetőség az, hogy felkeresed a FrankenPiFPGA GitHub oldalát ... Részletek itt.

 

Hozzászólások

Egy FPGA önmagában képes szinte bármilyen ISA kártyát szimulálni (nem emulálni)... sőt akár egy egész gépet is. Nem kell ahhoz még egy Pi is.

Ez valo igaz, de kell valami amivel a/ az FPGA-t programozod b/ ellatja az FPGA periferiainak a funkcionalitasat. Nem mondom hogy RPi-vel csinanam ha most ilyet kene csinalnom de vegsosoron teljesen jol ellathatja ezeket a feladatokat. Foleg ha demo/jatek/szabadido/proofofconcept dologrol van szo. 

ISA busz... 74LS374 és 74LS245 és néhány logikai kapu csodákra képes. Innentől jöhet a mögöttes funkcionális rész, mikrovezérlővel bármivel. Csináltunk annó rá kártyákat.
Abonyi prof az ISA buszt 3 évtizede itt szépen ledokumentálta: https://moly.hu/konyvek/abonyi-zsolt-pc-hardver-kezikonyv

Aztán jött a PCI, amit nehezebb volt megugrani és utána a PCIe. Utóbbit leginkább egy cél IC-s PCIe-PCI átalakító mentén lehet házilag megugrani. Szerencsére készen is kaphatóak ilyen átalakítók.  

Volt olyan, aki sikeresen épített PCI interfészt? Wow! Én mindig úgy tudtam, hogy valami dedikált "AMCC PCI Matchmaker" vagy hasonló PCI-GPIO adapterrel volt érdemes kezdeni (rengeteg gyári kártyán is ez volt a 90-es években). Vagy olyan FPGA-val, aminek alapból volt PCI-fele. Nem gondoltam volna, hogy valaki nekiáll from scratch összerakni...

A másik: ezek a PCIe-PCI bridge kártyák működnek olyan gépben is, amiben már egyáltalán nincs parallel PCI? Nincs olyan gond velük, hogy az alaplapi BIOS vagy UEFI firmware-ből hiányzik valami legacy támogatás?

Régóta vágyok én, az androidok mezonkincsére már!

Egyébként fordítottját csináltátok, mármint ISA buszos chipet mikrovezérlőre kötni?
Annó amikor még gyerekcipőben járt a mikrovezérlő és ethernet kapcsolata, akkor fogtunk egy ISA buszos ethernet kontroller IC-t és rákötöttük a mikrovezérlőre.
Ma már sokkal jobb lehetőségek vannak, ezért ma már nem szokás ISA-t emulálni.

Még nem csináltam meg, de tervben van egy STM32 procis, de ISA buszos gép :) Sajnos az elcseszett x86 szeparált IO address space-t nem tudom mennyire kezelik jól a mai kontrollerek, annyira még nem ástam le. Tán azt elég lehet egy külön bankba tenni? Meg ugye még ott vannak a DMA-k is, azt is emulálni kell neki, már ha használja.

Tényleg faék egyszerű az ISA busz. Csak addig félsz tőle amíg nem láttad közelről. Nézz rá: https://upload.wikimedia.org/wikipedia/commons/9/9f/ISA_Bus_pins.svg
Adatbuszból elég 8 bit, nem kell a kiegészítő csatin levő másik 8. A kártya egyetlen lába dönt, melyik módban megy a chip. Ha a láb lóg a levegőben, akkor az ellenállás 8 bit konfigra húzza.
Címbuszt szintén csak 12 bit mélységben implementáltuk PC-n. Saját egyetlen eszköznél pedig csak a regiszterszámig, a többi cím láb fixen lett le vagy felhúzva.
CLK - busz adja. Ha te vagy a busz, tetszőlegesen lelassíthatod.
IOR és IOW  --> IO kártya adataival  -- CPU   in és out műveletei rángatják x86-nál.
MEMR és MEMW --> RAM címzésre  -- CPU mov és a társai utasításai rángatják x86-nál.

A DMA kontroller implementálása nem szükséges, az csak a CPU-t tehermentesíti a RAM --> I/O és fordítva másoláskor. Sőt RAM-RAM másolást is támogat.
Volt hogy DMA kontrollert kellett egy projektben CPLD-ben implementálni. Lassú volt a 8 bites mikrovezérlő, ezért kellett hardvertámogatás mellé. De ez sem vészes, csak amíg nem gondolod át a szerepét.