Obsah
2registers
Pokusná definice dvou registrů na adresách C080 a C081, pro přípravy na Comp24 PLD soubor zde
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 kΩ 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:
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;