首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[讨论]如何用VHDL实现两个双向端口直通?

[讨论]如何用VHDL实现两个双向端口直通?

FPGA分别连接了2个16位的双向端口,定义如下:
ENTITY VHDL1 IS
  ORT (
        a,b:INOUT STD_LOGIC_VECTOR (15 DOWNTO 0);
        SEL:IN BIT
        );
END VHDL1;
我想实现当选择信号SEL=0时,a与b直通,可以进行双向数据流动.
请各位大侠指教!


小弟谢谢了!

我也有过同样的问题,经常写INOUT时总会出现想不到的效果
有过这种情况的大家进来讨论一下吧!

VHDL

在FPGA中,所有的门都不具有双向传输能力
所有的双向传输都是通过数据选择实现的,包括三态门(IO引脚除外)
所以双向驱动的实现一般是通过数据选择来实现的:
当双向总线的每一端都可以是总线的源端,即可以驱动总线。当某一端需要驱动总线时,将此端设置为源端,否则设置为目的端(处于接收状态)。
当总线两端都不驱动总线时,总线上是没有数据,总线处于空闲状态;
当总线一端驱动总线,而另一端接收时,总线是正常数据传送;
当两端都驱动总线,就会发生总线冲突,需要总线仲裁,简单应用时,应避免这种情况使 得设计简单许多。

当两个双向总线连接时,需要两个总线之间的驱动总线时相互协调(如果复杂的话需要总线仲裁),不能同时驱动总线。这就类似于两个CPU的总线互连。

eg:
d_inout <= d_tmp when drive_en = '1' else
"ZZZZZZZZ" ;

din <= d_inout when drive_en = '0' ;

当两个双向总线互连时,只要做好时序匹配就可以了。
太感谢几位了!!
俺现在就去试试
解释的真好!感谢!
返回列表