Ahoj Radku,
tady je VHDL kod overeneho memexta a je tam taky experimentalni kod pro
variantu se ctenim registru za cenu ztraty nulte stranky pameti.
http://duna.ordoz.com/memext_cpuboard/memext_cpuboard_rtl.rar
Co se tyka schematu a seznamu soucastek, tak to tady myslim posilal
Vasek v prosinci. Obrazek se schematem generoval Vasek, tak nevim jake
jsou moznosti ve zmene jeho formatu - ja bych asi zkusil invertovat
barvy v nejakem gimpu, ci necem podobnem..
Oproti Vaskovemu puvodnimu navrhu jsem do zapojeni pridal pouze 10k
pull-up pripojeny mezi +5V a signal CAS, ktery tam vedeme dratkem,
protoze jsem mel obavu z toho, kdybych nahodou ten dratek zapomnel
pripojit a nebo kdyby ten jednopinovy konektor nebyl spolehlive vodivy.
Popis funkce memexta na cpu patici je zhruba nasledujici:
Pro IORQ - WR se dekoduje jen operace na portu 0xE7 (0 - 7 bit adresni
sbernice). Na horni casti adresni sbernice (13 - 15 bit) se ocekava
cislo stranky/registru, ktery se snazime zmenit.
Na datove sbernici se pri IORQ - WR ocekava nova hodnota (cislo pametove
banky), kterou chceme do registru vlozit. Tato hodnota muze byt pouze v
rozsahu 0 - 63, coz znamena, ze nam z datovky staci jen bity 0 - 5.
Pro aplikaci samotneho strankovani je do memexta priveden dratkem signal
CAS, kterym nam GDG rika, ze prave probiha operace s DRAM. Protoze nas
memext tuto DRAM obchazi a nahrazuje ji 512kB SRAM, tak je v takovem
pripade potreba pouzit LVX245, kterym se "odstrihne" datova sbernice
memexta od zbytku pocitace a zabranime tak kolizi na datove sbernici.
Pri adresovani SRAM se jako spodni cast adresy pouzije standardnich 16
bitu z adresni sbernice Z80. Hornich 5 bitu adresy SRAM se urci podle
obsahu prislusneho strankovaciho registru (stranka/registr je zde take
odvozena podle bitu 13 - 15 z adresni sbernice).
V pripade experimentalniho kodu, ktery by umoznoval cteni strankovacich
registru by bylo potreba pripojit do CPLD jeste signal RD a optimalne
take zbyvajici 2 bity datove sbernice, aby nam jejich obsah pri cteni
nepoletoval vzduchem - jinak by bylo potreba si po precteni dat udelat
jeste AND 0x3f, aby se vynulovaly horni 2 bity.
Ted kdyz to pisu, tak jsem si uvedomil, ze jsem v tom experimentalnim
VHDL kodu navic jeste zapomnel na to, ze pri IORQ - RD - 0xE7 musim take
deaktivovat Sharpackou datovou sbernici pomoci LVX245, jako se to dela i
v pripade, kdy se mluvi se SRAM.
Pro pripojeni chybejicich signalu by se pouzily piny na kterych je nyni
nadbytecna cast adresni sbernice ADDR 8 - 12.
Co se tyka pouziti vetsiho CPLD, tak pro cteni registru by asi urcite
postacoval xc95144, ale u toho RO flagu se obavam, ze by se to veslo tak
mozna do xc95288, coz uz je nesmyslne drahe reseni. To uz by asi bylo
lepsi dat tam spise nejake male FPGA.
Memext v soucasne podobe Vasek optimalizoval tak, aby se vesel do co
nejlevnejsich soucastek, cemuz odpovida i omezeni na 64 pametovych bank
po 8kB. Je otazka, zda navrhovane doplnkove funkce jsou opravdu tak
prinosne, aby stalo za to delat upgrade logiky na neco vetsiho.
Zkusim napsat jeste kod pro RO flagy jak stranek, tak i bank a uvidime
co z toho vyleze...
Michal
Dne 26.3.2012 0:39, Radek Suk (sharpemupandora.cz) napsal(a):
Zobrazit citovaný text (140 řádků)
>
>
> Ahoj Michale
>
> - je mozno udelat schema na bilem podkladu?
> (http://ordoz.com/sharp/new_memext/memext_cpld_cpu.png)
> - planujete udelat tabulku soucastek a pouzder + pripadne kde to koupit
> - planujete udelat Gerger data aby si to mohl kazdy udelat?
> - ukazete VHD soubor aby se videlo jak to funguje? To byl potreboval
> nejvic.
> - napiste proc je tam U2 (74HCP245) - k cemu slouzi
>
> Ja bych byl pro verzi kde se da vse menit i treba ze cenu vetsiho CPLD
> obvodu. Zjistoval jsem co existuje a hlavne kolik to stoji.
>
> www.tme.eu XC9572XL10VQG44 cena 70Kc/kus bez DPH Integrovaný obvod:
> CPLD; 72; Počet vst./výst:34; 10ns; VQFP44
>
> www.tme.eu XC95144XL10TQG1 cena 129Kc/kus bez DPH Integrovaný obvod:
> CPLD; 144; Počet vst./výst:81; 10ns; TQFP100
> cz.farnell.com XC95144XL-10TQG100C cena 155Kc/kus bez DPH odkaz
>
http://cz.farnell.com/xilinx/xc95144xl-10tqg100c/cpld-isp-144mcells-3-3v-100tqf
p/dp/1776144
>
>
> Otazka je kolik z nas je schopno spravne zapajet ten 100 pinovy obvod?
> Kdyz by byla sance, tak bych byl pro vymenu za tento a pak by se tam
> mohl dat i ten 64bitovy registr
> pro R/O na kazdy segment pameti. A soucasne by tam byl navic ten vyvod
> pro RD.
>
> Take potrebuji vysvetlit jak funguje:
>
> LD BC, xxE7
> LD A,yy
> OUT (C),A
>
> xx - cislo stranky pameti (je jich 8)
> yy - cislo pametove banky (je jich 64)
> 0xE7 - adresa strankovaciho portu
>
> stranka 0x00 - je pamet 0x0000 - 0x1fff
> stranka 0x20 - je pamet 0x2000 - 0x3fff
> stranka 0x40 - je pamet 0x4000 - 0x5fff
>
> jedna se mi o to ze dle schematu nejsou do CPLD privedene D6 a D7 a
> tak to nemuze fungovat.
>
> Take logicky z toho vyplyva zda neprohodit "xx" a "yy" a pak staci jen
> D0,D1 a D2 a tim padem neni potreba privest na CPLD D3,D4 a D5 a tak
> je jeden privod volny pro RD.
> Druhe reseni je, neprivest na CPLD nektere A signaly a tim umoznit
> privest RD. Resenich je vice, zalezi co se bude chtit udelat.
> Mozna se zjisti ze neni potreba A8, A9, D5 az D3 - celkem 5 signalu. V
> jinem zapojeni bych zapojil jen A15, A14 a A13 (ne A12 - A8) a pak
> A7-A0 a D0 az D5 (ne D6 a D7) a nasledne na A13-15 da cislo stranky
> pameti a na D0 az D5 se da cislo pametove banky. Pri tomto by slo
> zapojit i D6 a D7 a tim padem cist cely bajt najednou, kdyz by to bylo
> potreba.
>
>
> Nevim kolik zdroju je ted jeste volnych v CPLD ale tak by mozna slo
> udelat R/O flag alespon pro tech 8 stranek pameti a tak treba
> simulovat rom na zacatku pameti.
>
> Radek
>
>
>
> Dne 24.3.2012 17:12, Michal Hučík (sharpemupandora.cz) napsal(a):
>>
>> Dne 23.3.2012 20:42, Vaclav Peroutka (sharpemupandora.cz) napsal(a):
>>> A protože stárnu a stávám se protivnějším, tak jen opravím drobnost >>> - velikost stránky je 8kB. A je skutečně 64 stránek, tedy dokupy
>>> 512kB SRAM.
>>
>> Dekuji, ze jsi mne opravil nacelniku :)
>>
>> Dnes jsem trochu experimentoval s kodem memexta. Jsou dve veci, ktere
>> bych rad prenechal k diskuzi:
>>
>> 1) Cteni strankovacich registru - pro realizaci teto fce je potreba
>> pridratovat i signal RD, coz by nemel byt problem, nicmene do xc9572
>> se to cele zrejme nevejde a jediny zpusob jakym se mi to podarilo
>> uspesne zkompilovat (zatim ne otestovat) je takovy, ze jsem musel
>> obetovat jednu stranku pameti, coz by mozna taky melo svuj smysl.
>> Predpokladam, ze by za obet padla napr. nulta stranka. To znamena, ze
>> by obsah pameti 0x0000 - 0x1fff byl nemenny, vzdy by tam byla
>> primapovana nulta banka, kterou by samozrejme slo duplicitne
>> namapovat i kamkoliv jinam, pokud by to melo nejaky smysl.
>>
>> Otazka tedy zni: obetovat tu jednu stranku pameti, aby jsme meli
>> moznost cist obsah strankovacich registru, nebo se na cteni vykaslat?
>>
>>
>>
>> 2) Zpusob nastavovani strankovacich registru - jak uz mne opravil
>> Vasek, tak ted mame pamet Sharpa rozdelenu na 8 stranek po 8kB.
>> Nastavovani strankovacich registru probiha nasledovne:
>>
>> LD BC, xxE7
>> LD A,yy
>> OUT (C),A
>>
>> xx - cislo stranky pameti (je jich 8)
>> yy - cislo pametove banky (je jich 64)
>> 0xE7 - adresa strankovaciho portu
>>
>> Dotaz se tyka xx - tedy cisla stranky. Prislo mi prehladnejsi, kdyz
>> se bude urcovat cislo stranky podle toho, jaka je jeji startovaci
>> adresa v pameti, coz je zaroven castecne kompatibilni s Davidovym
>> memextem.
>>
>> stranka 0x00 - je pamet 0x0000 - 0x1fff
>> stranka 0x20 - je pamet 0x2000 - 0x3fff
>> stranka 0x40 - je pamet 0x4000 - 0x5fff
>> ...
>> ...
>>
>> Je tu samozrejme i moznost nastavovat stranky podle poradoveho cisla
>> registru:
>>
>> stranka 0x00 - je pamet 0x0000 - 0x1fff
>> stranka 0x01 - je pamet 0x2000 - 0x3fff
>> stranka 0x02 - je pamet 0x4000 - 0x5fff
>> ...
>> ...
>>
>> Otazka zni: ktery zpusob se vam vic zamlouva? Ja osobne jsem spise
>> pro ten prvni.
>>
>> Michal
>>
>>
>> ---
>>
>>
>
>
> ---