在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 + 1;
addr_tmp <= addr_tmp + 1;
phase <= "011";
when "011" => --writ

本文介绍了在VHDL中使用inout端口时遇到的问题及解决方案,特别是在处理SRAM读写操作时。当需要从inout端口读取输入时,必须将其设置为高阻态,因为inout端口通过三态门实现,从输出到输入的转换需要经过高阻态。文中提供了一个实现内存内容加1功能的代码示例,强调了在写操作后设置端口为高阻态的重要性,并反思了在硬件描述语言学习中的经验教训。
最低0.47元/天 解锁文章
2184

被折叠的 条评论
为什么被折叠?



