31.07.2013 Views

轻松实现高速串行I/O

轻松实现高速串行I/O

轻松实现高速串行I/O

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

千兆位串行 I/O 设计<br />

因为我们要实现板与板之间的传送,肯定需要使用不同的振荡器来驱动各自收发器的传<br />

送时钟,所以我们需要考虑时钟修正问题。在决定数据帧的大小时,我们需要折衷两个相互<br />

矛盾的要求。数据帧越大,开销就越小,而且数据可以拥有更多的带宽。数据帧越小,就可<br />

以有更多的对齐符号和时钟修正符号。显然,我们需要平衡这两种要求。我们应当计算两者<br />

各自的界限,并选取一个中间状态。<br />

数据传输容量很容易计算。我们共有 2Gb/s 的可用带宽,其中 1.8Gb/s 用于传送数据,<br />

所以只要开销能承载在剩余的带宽中就可以了。下面我们选用一个合适尺寸来看看其能否工<br />

作。<br />

如果数据帧中承载 2048 字节且开销为 10 字节(SF-2 字节,EF-2 字节,idle-6 字节),<br />

则开销率为 10/2058,约为 5%。我们可以承受的开销率为 0.2/2 或 10%。所以就开销预算而<br />

言,我们可以把数据帧缩小 20 倍。<br />

如果我们需要进行时钟修正,那么我们希望数据帧小点,所以需要考虑下面所述的事项。<br />

我们的MGT要求参考时钟的精度达到 20 ppm。如果我们把MGT设置为 2 符号宽的idle序列,<br />

则时钟修正最多每 49,999 个符号进行一次。所以,idle字符之间的距离应当小于这个数。多<br />

数情况下,我们希望其值小于最大idle字符距离的 1/3,我们选择的值大约为 1/24 th<br />

。至此我<br />

们基本上已经定义好我们的简单协议,唯一剩下的事情就是处理流量控制问题。<br />

记住我们的开销只占用了 0.5%的时间,但是实际上有 10%的可用时间。所以我们需要<br />

定义在剩余时间中填充什么内容以及由谁来控制填充。我们在多余的时间中填充 idle 符号,<br />

所以实际的线路如图 4-7 所示。<br />

图 4-7 :SF 之间的距离<br />

需要注意的是,帧与帧之间的 idle 符号数量可能有轻微的变化,取决于使用的参考振荡<br />

器,对于这种情况如何发生,在协议中应该有详细定义,同时协议也要定义如何去除 idle<br />

字符。我们可以在协议中简单的定义如下:发送器的职责是在传输线路中插入足够多的 idle<br />

字符;而接收器的职责是从接收数据流中去除所有 idle 字符、SF 字符和 EF 字符。<br />

XILINX • 63

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!