Hlavní stránka Fóra Forum pro soutěžící SOČ 42. celostátní přehlídka ONLINE 42. CP SOČ online – obor 10 elektrotechnika, elektronika a telekomunikace Odpověď na téma: 42. CP SOČ online – obor 10 elektrotechnika, elektronika a telekomunikace

#24390
Martin Přívozník
Host

1. Syntéznímu nástroji jsem předal informaci v souboru UCF. Pomocí příkazů NET a TIMESPEC jsem jasně řekl, že chci, aby se kód vysyntetizoval na 50MHz (maximum, které deska dovoluje). Za klíčovým slovem HIGH v UCF souboru stanovuji, že hrana je v 50% periody. Všechny moduly mají tedy kmitočet 50MHz a jiné časové domény (např. signály z PS/2) jsou synchronizovány pomocí synchronizéru. Díky plně synchronnímu návrhu syntéza vnitřně rozvětvila hodinový signál do stromové struktury, aby se dostal do všech částí obvodu ve stejný čas (nebo co nejpřesnější).

2. Před tím, než jsem psal kód ve VHDL, tak jsem si pečlivě kreslil schémata, které jsem pouze do VHDL přepisoval tak, aby plnily svou funkci korektně. Kreslení schématu předcházel alespoň jednodenní brainstorming, kdy jsem uvažoval nad tím, co vlastně očekávám. Zkráceně řečeno pokud se mi po přepsání obvodu do VHDL vyskytla chyba, tak jsem části obvodu musel navrhovat znovu (doufal jsem, že vše vyjde na první dobrou). Pokoušel jsem se ale využít paměti tak, aby byl návrh co nejlepší a v kódu se dalo vyznat co nejlépe. Vytvořit novou mapu např. by nebyl problém, protože v ROMce je uložená jako matice logických hodnot (zeď, nezeď). Kdyby se na hře chtěly dělat nějaké větší úpravy, tak by bylo třeba přehodnotit většinu částí z modulu, který obsluhuje herní logiku. Jinak moduly jsou také rozděleny tak, aby každý fungoval samostatně (PS/2, VGA, 7-Segment, konečné stavové automaty …). Hodně by v tomto případě záleželo na tom, o jakou úpravu by se jednalo. Samozřejmě by se našly náročnější úlohy na opravu, ale i snažší.

3. Tux-Man i duch uchovávají své souřadnice. Bylo by možné tyto souřadnice porovnávat komparátorem a výstup tohoto komparátoru by se stal vstupem konečného stavového automatu ducha. Do stavového automatu bych poté přidal podmínky, že například pokud je rozdíl souřadnice „x“ u Tux-Mana a ducha kladný (Tux-Man by se nacházel napravo od ducha), tak by duch napoprvé upřednostnil směr vpravo z jakéhokoliv stavu, ve kterém se zrovna nachází. Poté pokud by zde byla zeď, tak by v tomto případě normálně pokračoval ve výběru dle náhodného čísla.

4. Obvod je specializovaný pro výstup u kterého je možné definovat aktuální vykreslované souřadnice a na jejich zakládě vykreslit texturu. Pokud protokol HDMI toto nedovoluje, tak by bylo nejspíše potřeba přehodnotit celou hru, nebo vymyslet modul, který překonvertuje dosavadní výstupy na ty, které by podporovaly rozhraní HDMI. VGA jsem zvolil nejen z důvodu, že mi deska byla dostupná, ale také kvůli tomu, že se jednalo o nejvíce vhodný protokol.

5. Největší problém byl s velkým multiplexorem, který řídí kreslení textur na VGA (obrovská kaskáda if-ů ve spodu modulu s herní logikou). Někdy byla chyba zřetelná, například, že se na monitor vykreslovala pouze jedna textura na všechny políčka. V tomto případě většinou byla chyba v podmínce, nebo v tom, že multiplexor nebyl konečný (chyběla podmínka else – tím pádem se z multiplexoru stal jakýsi podivný sekvenční obvod a nemohl správně fungovat). Pokud nefungovaly (hlavně u externích periferií) obvody řešící časování, tak jsem využíval simulátor Xilinx ISE. Nasimuloval jsem v sekvenci očekávané chování a sledoval, kdy přichází pulzy řídících signálů.