在vhdl中,有时需要用inout端口,例如对sram的读写。sram的输入和输出数据共用数据总线。在对将inout端口作为输出使用之后,如果要从inout端口读取输入应先将其置高阻态。
因为inout端口是用三态门实现的,可以理解为高阻态能实现从输出到输入的转换。
例如下面的代码段所做,下面的进程实现了对内存内容加1 的功能
rw:process(iclk)
begin
if rising_edge(iclk) then
case phase is
when"000" =>--send addr
MOE <= '0';
MWE <= '1';
data <= (others => 'Z'); --只有送高阻态之后才能正确读,或者说写之后必须要送高阻态inout端口才能转为in,这是inout端口的特点:out -> ‘Z'-> in
data_tmp <= data;
phase <= "010";
when"010" => --acc
data_tmp <= data_tmp