.. vim: noexpandtab fileencoding=utf-8 nomodified wrap textwidth=270 foldmethod=marker foldmarker={{{,}}} foldcolumn=4 ruler showcmd lcs=tab\:|- list tabstop=8 noexpandtab nosmarttab softtabstop=0 shiftwidth=0 :date: 2024.06.05 09:43:09 :_modified: 1970.01.01 00:00:00 :tags: HW,PLD :authors: Gilhad :summary: 2registers - pokusná definice 2 registrů na ATF1504 :title: 2registers :nice_title: |logo| %title% |logo| %HEADER% 2registers -------------------------------------------------------------------------------- Pokusná definice dvou registrů na adresách C080 a C081, pro přípravy na Comp24 `PLD soubor zde <./2registers.pld>`__ **Nějaké zajímavé obraty**: * Na začátku v komentářích jsou definice všech pinů, aby se z nich snadno čerpalo * Pro breakout na breakboard jsem to nastavil takhle * **Adresy**: na první řadu, nejvyšší bit vlevo (přirozeně) C080 = 1100 0000 1000 000 * **Data**: jsou na druhé řádce vpravo, opět nejvyšší bit vlevo (přirozeně) * na třetí řádce jen **kvalifikované čtení** a **kvalifikovaný zápis** * na 4 řádce zleva LED, !RAM0_CS, !RAM1_CS, !RAM2_CS, !RAM3_CS (nikoli plně funkční), !Reset na GlobalClear, E na Clock1, !RAM01_OE, !RAM01_WE, Rw * LED=C080 * **Poučení**: * Pro vstupy CPLD je potřeba **výrazná nula i jednička**, LED + 1 |kOhm| proti zemi nestačí. (Je zapnutý Pin-keeper, takže si to v šedé zóně pamatuje poslední hodnotu bez ohledu na to, co ukazuje LEDka) * **Pole**: (A15:1) NENÍ jednička, ale nula, protože to A15 bere jako 8000h * data z registrů posílám na základě adresy a **enable** je k tomu na základě kvalifikovaného Read a adresy. Stačilo by u těch dat jen poslední bit adresy, ale takto je to pro mě zatím názornější. (a pokud budu přidávat další podmínky, tak to potřebuju stejně plné) * registry plním přímo z dat, hodiny z E (které je na globálních hodinách, tak to snad bere z nich a ne z výrazu), povolení hodin odvozuju z adresy a Write, resetuju asynchronně, snad opět z globálu. * LED a test_read, test_write jsou jen pro kontrolu * **Reset musí být zapojen** * je dobré **kontrolovat** jak generované výrazy, tak i reálné chování * Měl bych udělat i ty **LEDkové destičky**, budou se hodit, místa na dráty je málo a je jich potřeba hodně, viz výrazné nuly a jedničky a Pin-keeper. * **Kód pro registry**: .. code:: FIELD ADDRESS = [A15..A0]; PINnode = [REGA7..0]; PINnode = [REGB7..0]; [D0..7] = (ADDRESS:C080) & [REGA0..7] # (ADDRESS:C081) & [REGB0..7]; [D0..7].oe = E & Rw & (ADDRESS:C080) # E & Rw & (ADDRESS:C081); [REGA0..7].D = [D0..7]; [REGA0..7].CK = E; [REGA0..7].CE = !Rw & (ADDRESS:C080); [REGA0..7].AR = Reset; [REGB0..7].D = [D0..7]; [REGB0..7].CK = E; [REGB0..7].CE = !Rw & (ADDRESS:C081); [REGB0..7].AR = Reset;