规范2-只有顶层端口才可以使用inout类型
u 在设计中只有最顶层和ucf引脚分配的相关的代码中才可以使用inout类型,其他任何层中禁止使用inout类型;
u 最后编译的top_layer层的代码不可复用,不可作为别的工程的中间层使用;
u 禁止使用内部inout端口;
u 在top_layer层之外只可使用’0’,’1’这2个状态;
u 内层要传递三态端口信号到顶层,须通过三个信号传递,这三个信号为
xxx_i,xxx_o,xxx_t,其它非三态端口不允许使用_i,_o,_t这三个后缀
关于inout端口的使用,可参照以下代码
entity top_layer_code is
port( A : inout std_logic ;
……);
end top_layer_code;
architecture Behavioral of top_layer_code is
component mid_layer_code is
port( M_A_i : in std_logic ;
M_A_o : out std_logic ;
M_A_t : out std_logic ;
……);
end component;
signal A_input : std_logic ;
signal A_output : std_logic ;
signal A_tristate : std_logic ;
…
begin
…
mid_layer_code_imp: mid_layer_code
port map(M_A_i => A_input ,
M_A_o => A_output ,
M_A_t => A_tristate ,
……);
--sample code for tristate imp
A_input<=A;
A<= A_output when A_tristate =’0’ else ‘Z’;
--another sample code for tristate imp
A_IOBUF_IMP : IOBUF
port map ( I => A_output ,
O=> A_input,
T=> A_tristate ,
IO=> A);
end Behavioral;
推荐使用IOBUF来实现inout端口,如果要使用IOBUF则需要在VHDL代码的引用库里加入以下2行代码。
library UNISIM;
use UNISIM.VComponents.all; |