Jo jo, brát to jako klasické programování je nejčastější chyba. Hodně lidí to nedokáže pochopit ani na výšce. Proto taky kolega výše psal, že VHDL je vždy výzva, HC atd. Není, jen se nad tím musí jinak přemýšlet.
Základní problém je totiž, že program pro procesor je sekvenční záležitost, protože procesor sekvenčně vykonává instrukce. U HW je to přesně naopak, všechno pracuje souběžně, proto se to píše úplně jinak.
S těma šablonama. Ono jde o to, že syntetizátor tu konstrukci musí pochopit, což není zrovna lehká úloha. Třeba XST se docela snaží (jenže otázkou je, co vymyslí, často to není to, co člověk chce), ale například Precision (jiný syntetizátor, dříve podporovaný Xilinxem) se Vám na to často prostě vykašle.
Ohledně těch schémat. Zatím je to třeba, rozhodně ve VHDL. Existují jiné jazyky, často odvozené od C (Handle-C, Catapult-C), které se více podobají klasickému programování, ale Handle-C je mrtvé (pokud vím) a celý tento segment je dost v plenkách. Snad někdy, ale zatím se musí postupovat dle schématu.
Jinak ten simulátor v ISE neznám (používám Modelsim), ale psaní testbenche je standard. Ono na tom není nic těžkého. Testbench je vlastně komponenta která nemá žádné vstupy a má v sobě vloženou testovanou komponentu, které posílá data. Tady se žádné šablony nepoužívají, dělá se to většinou v jednom, či několika málo procesech (jeden samostatný na generování hodin, prostě clk <='0' wait 5 ns; clk <= '1' wait 5 ns; nebo něco takového) A vždy nastavit signály a wait, nastavit signály a wait atd. Na wave se pak podíváte, jak se vaše jednotka chová.
Jinak na střední školu to může být obtížnější. Ale věřte mi, že není. Je to jen o tom se to naučit dělat jinak a zejména čistě. V C (C++, PHP atd.) to vždycky nějak spachtlíte, ale tady je každá špinavost hodně problém.
Jelikož nevím, jestli máte na škole po ruce odborníka, tak Vám zkusím vysvětlit konečný automat. Je to trochu ukecaná konstrukce, ale hodně, hodně důležitá. Uznejte sám, co je lepší: 1) Je nastaven signál xy, který zablokuje jednotku. 2) Jednotka je ve stavu blocked. Je to naprosto jednoduché a jak to zapsat máte v šablonách. Konečný automat má konečný počet stavů mezi kterými se přepíná vždy s náběžnou hranou clk (prostě se to zapíše do registru :-D ). Ve vašem případě budete mít například 2 stavy: running a blocked. Když bude aktivní reset, tak se přepnete do running (pokud v něm nejste), když se stiskne špatné tlačítko, přepnete se do blocked. Doporučuji to zkusit, je to opravdu jednoduché (ale fakt :-) ). Neděste se konečným automatem z teoretické informatiky...
Nechci, aby to vypadalo, jako moc teorie, je to praxe. Takhle se to dělá. Třeba s KA to řekl pěkně John Lockwood ze Stanfordu: "Například Pentium4 není nic víc, než kupa konečných automatů." A měl do značné míry pravdu.
Mějte se a nenechte se odradit :-)