打印

在vhdl中,请高手指点下inout端口的使用方法

[复制链接]
6303|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mobaimo|  楼主 | 2011-8-12 13:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
AutoESL| | 2011-8-12 13:51 | 只看该作者
http://apps.hi.baidu.com/share/detail/34847641
看看这个吧,希望对你有所帮助

使用特权

评论回复
板凳
AutoESL| | 2011-8-12 13:52 | 只看该作者
注意一个问题,没有任何触发信号的时候,inout线必须是"z"也就是高阻态。

使用特权

评论回复
地板
GoldSunMonkey| | 2011-8-12 15:40 | 只看该作者
应该尽量规避双端口。

使用特权

评论回复
5
AutoESL| | 2011-8-15 09:01 | 只看该作者
有时候是无法避免的,只能勇于面对现实

使用特权

评论回复
6
atua| | 2011-8-15 09:31 | 只看该作者
注意inout端口是要分配到管脚上的。现在的片子都不支持内部三态了

使用特权

评论回复
7
iwasmu| | 2011-8-15 09:41 | 只看该作者
wire q=en?d:1'bz verilog一般这样用的

使用特权

评论回复
8
钻研的鱼| | 2011-8-16 11:17 | 只看该作者
6楼、7楼正解

使用特权

评论回复
9
mobaimo|  楼主 | 2011-8-16 14:38 | 只看该作者
七楼的可以用vhdl写个示范吗?

使用特权

评论回复
10
SuperX-man| | 2011-8-16 15:38 | 只看该作者
参考下结构

entity top is
    Port (         a               : inout std_logic;                -- 100MHz system clock
                                b          : out std_logic;
                                en         : in std_logic;
                                c          : in std_logic
         );       
end top;
architecture abc of top is

begin
   a <= c when (en = '1');
        b <= a when (en = '0');
end abc;

使用特权

评论回复
11
GoldSunMonkey| | 2011-8-16 17:32 | 只看该作者
6# atua 这个,我还没听说过。
现在不支持,分配到管脚的时候是如此保证三态,有例子么??
给兄弟看一眼。

使用特权

评论回复
12
GoldSunMonkey| | 2011-8-16 17:33 | 只看该作者
8# 钻研的鱼 鱼,我觉得7楼和10楼不是一回事啊

使用特权

评论回复
13
GoldSunMonkey| | 2011-8-16 17:33 | 只看该作者
10# SuperX-man Xman, 我觉得你写的和7楼不是一回事啊

使用特权

评论回复
14
SuperX-man| | 2011-8-16 20:09 | 只看该作者
要么就加个IOBUF吧.以下是模板

Library UNISIM;
use UNISIM.vcomponents.all;
-- IOBUF: Single-ended Bi-directional Buffer
-- All devices
-- Xilinx HDL Libraries Guide, version 11.2
IOBUF_inst : IOBUF
generic map (
DRIVE => 12,
IBUF_DELAY_VALUE => "0", -- Specify the amount of added input delay for buffer,
-- "0"-"12" (Spartan-3E)
-- "0"-"16" (Spartan-3A)
IFD_DELAY_VALUE => "AUTO", -- Specify the amount of added delay for input register,
-- "AUTO", "0"-"6" (Spartan-3E)
-- "AUTO", "0"-"8" (Spartan-3A)
IOSTANDARD => "DEFAULT",
SLEW => "SLOW")
port map (
O => O, -- Buffer output
IO => IO, -- Buffer inout port (connect directly to top-level port)
I => I, -- Buffer input
T => T -- 3-state enable input, high=input, low=output
);
-- End of IOBUF_inst instantiation

使用特权

评论回复
15
opple| | 2011-8-18 09:41 | 只看该作者
回去好好研究下

使用特权

评论回复
16
mobaimo|  楼主 | 2011-8-18 10:49 | 只看该作者
是不是只要在inout端口输出数据后然后给他输出高阻,然后就可以再从inout端口读入数据了?

使用特权

评论回复
17
钻研的鱼| | 2011-8-18 11:13 | 只看该作者
我觉得这个并不复杂。
inout [7:0] data;
assign data = (rd)?data_out:8'bz;
data_out就是内部一普通的寄存器
其他模块用到data的地方,都是输入口

使用特权

评论回复
18
opple| | 2011-8-19 23:26 | 只看该作者
过来看看那

使用特权

评论回复
19
钻研的鱼| | 2011-8-20 08:09 | 只看该作者
这几天调试通信数据总线,想用chipscope抓双向数据总线看看数据的变化,但在chipscope里面总是没有这个信号,各位都是怎么处理?

使用特权

评论回复
20
HORSE7812| | 2011-8-20 17:18 | 只看该作者
:D

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

36

帖子

1

粉丝