微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > inout三态处理能放在内层模块吗

inout三态处理能放在内层模块吗

时间:10-02 整理:3721RD 点击:
一般推荐是将inout数据处理放在顶层,但为了层次化及理解方便,是否能将inout放在内层模块出里呢?放在内层模块的话还能将inout约束到IOB吗?

把这个口直接分配到一个管脚上呗,如果不这样做,你需要找一个支持内部三态的器件来用,据说X家以前有这样的,现在好象都没有了

我没听说过有内部三态的用法,通常FPGA与CPLD有足够的布线资源.

以前有做过啊,放在顶层和内层都试过,都没什么问题!
只是从没看过布局结果,不知道是否将inout的三态处理放在了IOB中
2# jep

应该都会放到IOB上的
既然在内部,为啥不把信号分两路呢?

都是在顶层做的

就是说编码风格上,将其放在底层模块,综合工具能否将其优化到IOB呢?

先说个非要放在内层模块的理由先

逻辑功能化分的考虑.每个模块都作为一个独立的功能模块,而不用将一部分实现放在TOP层
8# MOSFET

作为三态的信号一般只能放在顶层的,
放在下面会报错的

最好不要,否则会报错

内部输入输出分开,多点连线罢了。
为什么非要双向呢!

有点不明白,放在内层模块的话在顶层不是也要引出吗?《= 菜鸟的说。

1# vikingg
用FPGA做的时候放里面还是放外面都没有问题的。
只要你采用的是TOP-down的综合策略,工具会识别INOUT,自动分配至IOB上面。
但是强烈建议不要写在内部,多数时候引起麻烦,例如,你哪天心血来潮想要用Bottom-UP的综合策略的时候,例如,你想做Partiton的时候,或者,你换了个NB又正直的综合工具的的时候。
而且,我不觉得INOUT写在内部会增强理解可阅读性。

这个我试过,你可以放在内层,然后一路inout地引出来,但是你不能在这个信号出来的过程中再做逻辑处理,即你的信号要直接连到IOB上去,而不能中间经过LUT等。

对,是直接出来,不经过任何逻辑
15# eaglelsb

由于FPGA芯片内部信号一般不具备 ’Z’ state,
内层信号做成inout时,合成工具会自动以多任务器取代。
不过,其输出入选择与地址译码电路等有一定的要求,
俾合成工具能自动检出进行转换。

规范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;

可以的 但是不太好 还是在顶层好约束些

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top