在FPGA中,所有的门都不具有双向传输能力
所有的双向传输都是通过数据选择实现的,包括三态门(IO引脚除外)
所以双向驱动的实现一般是通过数据选择来实现的:
当双向总线的每一端都可以是总线的源端,即可以驱动总线。当某一端需要驱动总线时,将此端设置为源端,否则设置为目的端(处于接收状态)。
当总线两端都不驱动总线时,总线上是没有数据,总线处于空闲状态;
当总线一端驱动总线,而另一端接收时,总线是正常数据传送;
当两端都驱动总线,就会发生总线冲突,需要总线仲裁,简单应用时,应避免这种情况使 得设计简单许多。
当两个双向总线连接时,需要两个总线之间的驱动总线时相互协调(如果复杂的话需要总线仲裁),不能同时驱动总线。这就类似于两个CPU的总线互连。
eg:
d_inout <= d_tmp when drive_en = '1' else
"ZZZZZZZZ" ;
din <= d_inout when drive_en = '0' ;
当两个双向总线互连时,只要做好时序匹配就可以了。
|