inout三态处理能放在内层模块吗
把这个口直接分配到一个管脚上呗,如果不这样做,你需要找一个支持内部三态的器件来用,据说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;
可以的 但是不太好 还是在顶层好约束些
