Konference: Počítač SHARP MZ-800 a emulátory

Od: Michal Hučík
Datum: 23.4.2009 19:12
Předmět: Scandoubler zase trochu jinak

Scandoubler zase trochu jinak:

Zdravim,

pokusil jsem se schematicky navrhnout scandoubler pro FPGA Spartan3A :)
 Kazdopadne pokud by byl ten navrh funkcni, tak by asi nebyl problem realizovat 
to i s jakoukoliv normalni logikou. Takze bych vas chtel poprosit, pokud se bude
nekomu chtit, zda byste se mohli podivat, jestli jsem neudelal v nejake uvaze
chybku, a zda by vubec scandoubler mohl v teto podobe fungovat. Viz. prilozene
schema.

Zde je k nemu popis, resp. zbozne prani jak by to melo fungovat.

Vstupy:

- Clock, libovolny hodinovy signal alespon 36MHz a vyssi
- SharpRGBI, 4 bity RGBI ze Sharpa
- SharpVsync, 50Hz snimkova synchronizace ze Sharpa (s kazdou nabeznou hranou
zacina novy snimek)
- SharpHsync, 15.6115kHz horizontalni synchronizace ze Sharpa (s kazdou nabeznou
hranou zacina novy radek)


Popis soucastek:

- Ram1 a 2, interni pamet 4096x4, pokud je WE a EN na urovni 1, tak s nabeznou
hranou CLK zapisujeme do pameti stav ze sbernice D(3:0), pokud je WE ve stavu 0,
tak na sestupne hrane CLK cteme na sbernici DO(3:0)

- OUTBUFT4 jsou 3 stavove vystupni buffery, pokud je T ve stavu 0, tak
propousteji, pokud je T = 1, tak jsou na vystupu uvedeny do tretiho stavu -
vypnuto

- Count1, 2, 4 a 5 jsou 2 bitove citace, Count3 je 16 bitovy

- Muxy 1 a 2 prepinaji vystup tak, ze pokud je na S0 = 0, tak na vystupu je stav
z D0, pokud S0 = 1, tak je na vystupu stav z D1

- tajemna soucastka OUTBUFT_16_vs_12 je pouha redukce mezi 16 a 12 bitovou
sbernici

Popis funkce:

- Count1 funguje jako delicka hodinoveho signalu, jeji vystup Q0 slouzi jako
zdrojovy signal k citaci adres (Count3) a zaroven je timto signalem pri kazdem
prvnim taktu nastaveno WE = 1 u pameti Ram1 a 2 (tedy pri kazde prvni nabezne
hrane z Clock budeme provadet scan RGBI vstupu)

- Count2 pocita sude a liche radky scanovaneho snimku a podle toho urcuje, do
ktere z pameti se bude zapisovat a ze ktere se bude cist, nulty radek se zapise 
do Ram1, prvni do Ram2 atd.

- s prvni nabeznou hranou na Clock scanujeme / zapiseme stav RGBI na adresu #000
Ram1

- s prvni sestupnou hranou na Clock precteme / odesleme na VGA obsah Ram2 z
adresy #000

- s druhou nabeznou se nedeje nic

- s treti sestupnou opetovne precteme  / odesleme na VGA obsah Ram2 z adresy
#000 a zvedneme hodnotu citace adres Counter3 na #001

- takto postupne scanujeme cely nulty radek, zapisujeme jeho hodnotu do Ram1 a
do VGA odesilame nejake nesmysly z Ram2 dokud vstup SharpHsync nezmeni svou
hodnotu na 0 (konec radku), tim se prepne zapis na Ram2, cteni na Ram1, vynuluje
se citac adres Count3 a jakmile SharpHsync oznami prechodem do 1 zacatek noveho 
radku, tak zacneme na VGA posilat nascanovane data nulteho radku z Ram1, zatimco
do Ram2 se bude ukladat dalsi radek

- Hodnota signalu SharpHsync je transparentne predavana do VgaHsync

- Hodnota vstupu SharpVsync je pri prechodu na 0 zaznamenana do Count4 a do
vystupu VgaVsync je odeslana se zpozdenim o delku jednoho obrazoveho radku
pomoci Count5


Toz takhle nejak bych si to predstavoval :) I kdyz vlastne ani moc neverim, ze
to bude fungovat, tak jsem zvedavy na vas nazor.

Michal


Připojené soubory:

scandoubler_schema.jpg

3:


Ostatní příspěvky vlákna:

 
[2009/1 (32)] [2009/3 (21)] [2009/4 (42)] [2009/5 (6)] [2009/8 (9)] [2009/9 (28)] [2009/10 (50)] [2009/11 (86)] [2009/12 (89)]


[1999 (1)] [2000 (168)] [2001 (733)] [2002 (459)] [2003 (654)] [2004 (224)] [2005 (105)] [2006 (182)] [2007 (201)] [2008 (294)] [2009 (363)] [2010 (782)] [2011 (522)] [2012 (642)] [2013 (442)]