Mix
Random mix of pages and files
2registers
2024.06.05 09:43:09 end HW PLD Gilhad

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;