Coo1Runner-Ⅱ器件实现双向多路选择器
发布时间:2008/9/19 0:00:00 访问次数:938
该范例的设计与实现如下。
(1)cpld设计
cpld设计实际上是一个双向多路选择器,主机通过“select”信号选择sd卡。一旦选中,cpld会自动检测数据流的方向并建立通信。不必用专门的引脚来指定传输方向,用非常方便,如图1所示。
如图1 双向多路选择器
主机可以访问其中任何一块sd卡,而不会影响其他卡。如果主机和sd卡都没有驱动总线,则总线为高阻状态。
如图2所示为用于实现双卡的多路选择器,在初始或mle状态,主机host和sd卡均
处于弱上拉状态。因此如2图所示电路设置为开路输出,外部上拉电阻起作用。上电时,寄存器a和b初始化为“0”。当“select”为“0”,sdi被选中;当“select”为“1”,sd2被选中。为了方便,以下讨论假定主机与sdi卡通信。
如图2 双卡的多路选择器
自动检测数据流方向的思路为本设计的重点,host或sdi驱动总线为低,将会启动一次数据传输。例如,如果host要发送数据给sdi,当host驱动a端为低电平时,bi门输出高电平。三态buffer使能端有效,也输出低电平到sdi端。同时a_reg的clock端会出现一个上升沿,从而a_reg的q端输出高电平。此高电平禁止了三态buffera和b_reg端出现clock的有效沿。这样一来,使sdi端跟踪了host端的变化。
相反,如果host端驱动为高电平,门bi输出低电平,从而强制b输出高电平(通过外部上拉电阻)。一旦a端和b端都输出高电平,a_reg和b_reg均复位为低电平。
以上过程周而复始地进行,如果数据传输方向是从sdi到host,上述传输过程恰好相反。另外,host与sd2之间的通信与host与sdi之间的通信类似。不再赘述。
(2)设计范例
源代码及测试程序可从xilinx网站下载,如图3所示为仿真波形。
如图3 modelsim仿真波形
仿真时,首先是sel为低电平,host发数据给sdi。sdi收到数据后发给host,图中虚线表示高阻状态。之后sel为高电平,host与sd2之间通信。如表所示为设计实现后的资源使用情况。
如表 设计实现后的资源使用情况
该范例的设计与实现如下。
(1)cpld设计
cpld设计实际上是一个双向多路选择器,主机通过“select”信号选择sd卡。一旦选中,cpld会自动检测数据流的方向并建立通信。不必用专门的引脚来指定传输方向,用非常方便,如图1所示。
如图1 双向多路选择器
主机可以访问其中任何一块sd卡,而不会影响其他卡。如果主机和sd卡都没有驱动总线,则总线为高阻状态。
如图2所示为用于实现双卡的多路选择器,在初始或mle状态,主机host和sd卡均
处于弱上拉状态。因此如2图所示电路设置为开路输出,外部上拉电阻起作用。上电时,寄存器a和b初始化为“0”。当“select”为“0”,sdi被选中;当“select”为“1”,sd2被选中。为了方便,以下讨论假定主机与sdi卡通信。
如图2 双卡的多路选择器
自动检测数据流方向的思路为本设计的重点,host或sdi驱动总线为低,将会启动一次数据传输。例如,如果host要发送数据给sdi,当host驱动a端为低电平时,bi门输出高电平。三态buffer使能端有效,也输出低电平到sdi端。同时a_reg的clock端会出现一个上升沿,从而a_reg的q端输出高电平。此高电平禁止了三态buffera和b_reg端出现clock的有效沿。这样一来,使sdi端跟踪了host端的变化。
相反,如果host端驱动为高电平,门bi输出低电平,从而强制b输出高电平(通过外部上拉电阻)。一旦a端和b端都输出高电平,a_reg和b_reg均复位为低电平。
以上过程周而复始地进行,如果数据传输方向是从sdi到host,上述传输过程恰好相反。另外,host与sd2之间的通信与host与sdi之间的通信类似。不再赘述。
(2)设计范例
源代码及测试程序可从xilinx网站下载,如图3所示为仿真波形。
如图3 modelsim仿真波形
仿真时,首先是sel为低电平,host发数据给sdi。sdi收到数据后发给host,图中虚线表示高阻状态。之后sel为高电平,host与sd2之间通信。如表所示为设计实现后的资源使用情况。
如表 设计实现后的资源使用情况
上一篇:数字时钟管理器