hallo, habe folgendes Problem, ich habe ein externes HW denn ich mit FPGA steuern will. ich habe ein kleines Multiplexer mit VHDL erstellt und simuliert. der Multiplexer hat 6 Inputs und 6 Outputs! der externes HW hat auch 12 pins wobei 6 als Outputs und 6 als Inputs,aber die sind nicht fest!!!!! dh sie werden intern vom Prozessor dieses HW gepolt mal die ersten pins als Inputs und die anderen als Output,und nach besteimmte Teit anders rum,die ersten 6 Pins als Output und die anderen als Input usw.... kann mir jemanden sagen wie ich das lösen kann ? ich habe ein spartan3 XC3S1000 !!!! ist das mit VHDL auch zu lösen ?
Dein FPGA muss schon wissen, wann welche Pins welche Stromflußrichtung haben. Sonst hast du da kaum Chancen zu reagieren und das Ganze kann teuer werden. Wenn du jedoch die Oberhand über die Richtung hast, schaue die inout und tristate an.
wäre möglich meine die Ports alle als inout zu deklarieren! letztendlich es ist ein Multiplexer!! und der Ziel mit dieser Multiplexer ist: die Inputs mit den Outputs zu verbinden ?????????? ich weiss aber nicht genau ob der FPGA die Signale auch wirklich verbindet oder dass er an seinem Outputs sein eigene Signale generiert ?
> der externes HW hat auch 12 pins wobei 6 als Outputs und 6 als > Inputs,aber die sind nicht fest!!!!! > dh sie werden intern vom Prozessor dieses HW gepolt mal die ersten pins > als Inputs und die anderen als Output,und nach besteimmte Teit anders > rum,die ersten 6 Pins als Output und die anderen als Input usw.... So wie Du das beschreibst, nennt man dies nicht Multiplexer, sondern bidirektionaler Busdriver. Suche nach "bus driver", bidirectional und tri-state, dann wirst Du die Lösung finden.
-- 8-bit PC ISA Parallel I/O Port Design (VHDL Based) LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY ioport IS PORT -- ISA Bus Signals ( AEN,IOR,IOW : IN STD_LOGIC; ADDRESS : IN STD_LOGIC_VECTOR(9 DOWNTO 0); DATA : INOUT STD_LOGIC_VECTOR(7 DOWNTO 0); -- Output Address Decoder output signal for use in simulations PORT_IO_DECODE_OUT : OUT STD_LOGIC; -- 8-bit Parallel Input port data from external device PORT_DATA_IN : IN STD_LOGIC_VECTOR(7 DOWNTO 0); -- 8-bit Parallel Output port data to external device PORT_DATA_OUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END ioport; ARCHITECTURE a OF ioport IS SIGNAL PORT_IO_DECODE : STD_LOGIC; BEGIN -- Address Decoder for 0x3E0 -- PC uses 10 low bits of ISA address bus for an I/O address) -- AEN='0' needed to make sure it does not respond to a DMA bus cycle PORT_IO_DECODE <= '1' WHEN ADDRESS = B"1111100000" AND AEN='0' ELSE '0'; PORT_IO_DECODE_OUT <= PORT_IO_DECODE; -- I/O Input Port - must use tri state buffers DATA <= PORT_DATA_IN WHEN (PORT_IO_DECODE = '1') AND (IOR ='0') ELSE "ZZZZZZZZ"; -- I/O Output Port - save data in register (DFFs) PROCESS BEGIN -- clock on positive edge of ISA IOW WAIT UNTIL IOW'EVENT AND IOW='1'; -- use address decoder output for clock enable IF PORT_IO_DECODE = '1' THEN -- save data on ISA data bus in register PORT_DATA_OUT <= DATA; END IF; END PROCESS; END a;
Ich finde das Beispiel sehr anschaulich fur PC-Bus-Decoder. Dieses Beispiel ist für ein 245 Bi-Dir-Bus-Treiber an einer PC-ISA Karte. Mit 2 getrennten 8 Bit I,0 Ports. Das Data-Port ist Bi-Directional. und auch Tri-State. Gruss Holger.
Hier ein Beispiel für Bi-Ports, die VHDL Gleichung ist ein Ersatz für die ganze I/O und Addr-Decoding und Schaltung.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.