Sida 1 av 1

VHDL - Mappa in & out mot inout

Postat: 11 september 2008, 09:14:29
av hygren
Har en minneskontroller och ett minne som jag försöker få att prata med varann. Just nu håller jag på med dataportarna.

På kontrollern finns:

Kod: Markera allt

DataIn : in  std_ulogic_vector
DataUt : out std_ulogic_vector
På minnet finns:

Kod: Markera allt

Data : inout std_logic_vector
Såhär har jag skrivit nu:

Kod: Markera allt

DataIn <= Data when WE_N = '1' else (others => '0');
Data <= DataUt when WE_N = '0';
Men blir inte det en latch på Data i andra fallet? Har hört tusen gånger att man ska undvika det...

Tacksam för svar!

Postat: 11 september 2008, 10:25:33
av arte
Hej,

Jo det är riktigt det borde bli en latch.
I andra fallet så tror jag att du borde sätta Data till 'Z'

DataIn <= Data when WE_N = '1' else (others => '0');
Data <= DataUt when WE_N = '0' else (others =>'Z'); -- Vet inte om man kan blanda others och Z

Men ifall detta är något som du skall syntha så kan det nog bli svårt med tristate signalen 'Z'.
I fall det är så att det är en FPGA du har och minneskontrollen i FPGAn och minnet extern så tror jag att man får ta till en sorts mellan komponent som är FPGA/tillverkar specefik.

Exempelvis på mitt FPGA kort (Starterkit 3) där jag har ett externt SRAM med en inout data port har jag gjort följande.


ext_hw_ram_we <= ram_we;

mem1 : for i in ext_hw_ram_io'range generate
iod0 : IOBUF_LVCMOS33 port map
(I => ext_hw_ram_data_out(i),
IO => ext_hw_ram_io(i),
O => ext_hw_ram_data_in(i),
T => ram_we);
end generate mem1;

Postat: 11 september 2008, 11:29:49
av AAVE
Ingen mening med att latcha DataIn.

Kod: Markera allt

DataIn <= Data; 
Data <= DataUt when WE_N = '0' else (others =>'Z'); 

Vill du behålla värdet får du väl sampla det med en klocka, men det behöver man sällan.