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:
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.