Hardware > Hardware (Classic 16-/32-Bit)

1040STE IDE Problem

<< < (10/12) > >>

czietz:
Du möchtest die ganzen Signale nur dann generieren, wenn /UDS und /LDS beide aktiv (also low) sind? Dann würden nur noch Word-Zugriffe auf das IDE-Interface klappen. Byte-Zugriffe würden immer fehlschlagen, weil dabei nur entweder /UDS oder /LDS aktiv/low ist.

Meines Wissens gibt es keinen Treiber, der nur Word-Zugriffe macht, d.h. auch Byte-Zugriffe müssen funktionieren.

tuxie:
So hat es Wolfgang Förster gemacht


--- Zitat ---   DTACKn <= '0' when ASn = '0' and UDSn = '0' and LDSn = '0' and DMAn = '1' and ADR >= x"F0000" and ADR < x"F0004" else
              '0' when IDE_IORDY = '0' else 'Z';

    IOWRn <= '0' when ASn = '0' and UDSn = '0' and LDSn = '0' and DMAn = '1' and ADR = x"F0000" and RWn = '0' else
             '0' when ASn = '0' and UDSn = '0' and LDSn = '0' and DMAn = '1' and ADR = x"F0001" and RWn = '0' else
             '0' when ASn = '0' and UDSn = '0' and LDSn = '0' and DMAn = '1' and ADR = x"F0002" and RWn = '0' else
             '0' when ASn = '0' and UDSn = '0' and LDSn = '0' and DMAn = '1' and ADR = x"F0003" and RWn = '0' else '1';

    IORDn <= '0' when ASn = '0' and UDSn = '0' and LDSn = '0' and DMAn = '1' and ADR = x"F0000" and RWn = '1' else
             '0' when ASn = '0' and UDSn = '0' and LDSn = '0' and DMAn = '1' and ADR = x"F0001" and RWn = '1' else
             '0' when ASn = '0' and UDSn = '0' and LDSn = '0' and DMAn = '1' and ADR = x"F0002" and RWn = '1' else
             '0' when ASn = '0' and UDSn = '0' and LDSn = '0' and DMAn = '1' and ADR = x"F0003" and RWn = '1' else '1';

    SELPn <= '0' when ASn = '0' and DMAn = '1' and ADR = x"F0000" else
             '0' when ASn = '0' and DMAn = '1' and ADR = x"F0001" else '1';

    SELSn <= '0' when ASn = '0' and DMAn = '1' and ADR = x"F0002" else
             '0' when ASn = '0' and DMAn = '1' and ADR = x"F0003" else '1';

    LINEAn <= '0' when ASn = '0' and DMAn = '1' and ADR = x"F0000" else
              '0' when ASn = '0' and DMAn = '1' and ADR = x"F0001" else
              '0' when ASn = '0' and DMAn = '1' and ADR = x"F0002" else
              '0' when ASn = '0' and DMAn = '1' and ADR = x"F0003" else '1';

   IDE_RESn <= '0' when RESETn = '0' else 'Z';
   ACSI_HDINTn <= '0' when IDE_INTRQ = '1' else '1';


--- Ende Zitat ---

tuxie:
Ah moment was übersehen, ich änder die logic mal ab.

czietz:
Versuch macht klug. Es wird so aber nicht funktionieren, sobald ein Treiber Byte-Zugriffe macht. Wolfgang Förster schreibt selbst (Hervorhebung von mir):


--- Zitat ------- This VHDL model is based on PERA Putnik's IDE interface     ----
---- interface (version 1998-12-23) but has full decoding of the  ----
---- respective address lines and is valid for word access only.  ----

--- Ende Zitat ---

Auch halte ich es für bedenklich, /SELP und /SELM absichtlich verzögern zu wollen. Das sind die Chip-Select-Signale des IDE-Interfaces und diese müssen ausreichend vor /IORD oder /IOWR anliegen und nicht erst gleichzeitig. Die exakte Setup-Zeit hängt vom verwendeten PIO-Mode ab und lässt sich der IDE/ATA-Spezifikation entnehmen.

tuxie:
Ich hab jetzt erstmal AS eingebaut, Testen kann man ja ist ja schnell neu programmiert der GAL. Ich berichte und werde das laufende Posten..

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln