Konference: Počítač SHARP MZ-800 a emulátory
Od: | Michal Hučík |
Datum: | 23.4.2009 22: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
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)]