1. 前言
本文将详细解说怎样使用ModelSim来仿真SA5T-100 SERDES,,,,,,,这关于项现在期评估阶段的用户将有主要意义,,,,,,,有助于快速熟悉和使用这颗100K逻辑的FPGA。。。。。
2. 仿真情形
本文以ModelSim 10.1c情形为例来举行仿真历程的先容,,,,,,,也适用于其它版本。。。。。
1)建库
由于现在SERDES仿真库是用两个vp文件提供的,,,,,,,因此在建SEAL库的时间,,,,,,,不要选xsSERDES_CH和xsSERDES_COM两个文件,,,,,,,当用户仿真一个较大的工程时,,,,,,,含有其它底层ip,,,,,,,例如FIFO、双口RAM等,,,,,,,就需要挪用这个SEAL库举行仿真了。。。。。
2)SERDES库
现在以两个单独文件提供:
COMMON_WRAP.vp
SERDES_CH_windows.vp
3. 4通道SERDES代码架构
1)SA5T-100的SERDES程序结构是4个CHANNEL加1个COMMON,,,,,,,参考时钟在SA5T-100是从COMMON输入的,,,,,,,在4个CHANNEL均保存有GTGREFCLK的接口。。。。。关于时钟部分,,,,,,,一个Quad的SERDES包括4个CPLL和1个QPLL,,,,,,,当速率低于6.6G,,,,,,,使用CPLL即可,,,,,,,高于6.6G则使用QPLL,,,,,,,每条CHANNEL通道使用CPLL或是QPLL,,,,,,,可以在代码中无邪设置。。。。。
2)提供应用户的SERDES代码,,,,,,,是以4通道的形式提供,,,,,,,好比本仿真例程里的serdes_module_4CH.v,,,,,,,这内里已经涵盖4个CHANNEL和1个COMMON,,,,,,,并且把用户需要用到的参数都拉出来了,,,,,,,易于修改使用;;;;;;;引出来的通例接口,,,,,,,以友商的SERDES?IP的接口命名方法给出,,,,,,,用户易于明确和使用。。。。。代码里也包括了SERDES的初始化复位流程,,,,,,,包括复位CPLL/QPLL,,,,,,,复位GTTXRESET和GTRXRESET,,,,,,,同时也把用户控制GTTXRESET和GTRXRESET的使能引出来,,,,,,,供用户随时举行复位控制,,,,,,,详细可参阅serdes_module_4CH.v代码。。。。。
3)代码中usrclk时钟的使用
SERDES代码中每个CHANNEL通道有4个输入的usrclk时钟,,,,,,,划分是:rxusrclk、rxusrclk2、txusrclk、txusrclk2,,,,,,,它们都可以来自rxoutclk和txoutclk,,,,,,,可是其频率关系是和SERDES内部位宽设置有关,,,,,,,好比用户接口位宽是内部位宽的2倍,,,,,,,那么rxusrclk2就即是rxusrclk的1/2,,,,,,,本仿真例程内里,,,,,,,用户接口位宽与内部位宽都是40bit,,,,,,,因此可以直接把rxoutclk赋值给rxusrclk、rxusrclk2,,,,,,,txoutclk赋值给txusrclk、txusrclk2。。。。。

4)位宽、速率参数的设置
CPLL相关盘算公式:
fPLLClkout = fPLLClkin x (N1 x N2)/M ; ?
fLineRate ?= fPLLClkout x 2 / D
QPLL相关盘算公式:
fPLLClkout = fPLLClkin x N /(Mx2);
fLineRate ?= fPLLClkout x 2/ D
这些N1、N2、M、D参数的相关设置,,,,,,,是通过代码中的defparam来转达,,,,,,,详细可参考响应的代码:

5)CPLL、QPLL选择项的设置
CPLL和QPLL的使用,,,,,,,有几项设置需要注重,,,,,,,现在在代码中都已经用parameter界说出来,,,,,,,用户在挪用serdes_module_4CH.v时用defparam转达一下参数即可,,,,,,,例如:

4. Testbench代码
1)在Testbench里,,,,,,,需要结构出时钟给SERDES的参考时钟,,,,,,,并写一段数据激励,,,,,,,用于SERDES发送,,,,,,,仿真时视察吸收端数据情形;;;;;;;可以设置loopback模式和PRBS模式;;;;;;;也可以设置成正常模式,,,,,,,并把txp/txn赋值给rxp/rxn,,,,,,,组成一个外部环回的情形,,,,,,,例如:

2)发送的激励数据,,,,,,,是一段含K码的要害字+一段递增数据段,,,,,,,K码为8’hBC,,,,,,,在含有K码的字节中,,,,,,,要响应把txcharisk拉高,,,,,,,详细可参阅代码tb_test。。。。。
仿真时,,,,,,,首先视察CPLL或QPLL有没有拉高,,,,,,,再视察txresetdone和rxresetdone有没有拉高,,,,,,,若是所有拉高则体现初始化竣事,,,,,,,再视察收发数据是否正常。。。。。

仿真历程可以看出QPLL先锁定,,,,,,,随后4个CHANNEL的rxresetdone和txresetdone也随即拉高,,,,,,,体现SERDES复位乐成,,,,,,,能进入吸收状态。。。。。

发送数据505050bc、88888888、99999999……
吸收数据可以看到虽然有前后16bit的偏移,,,,,,,可是K码的指示照旧准确的,,,,,,,K码的作用就在这里,,,,,,,用于指示并让用户能重新调理到准确的32bit数据。。。。。
最后,,,,,,,若是需要仿真例程的代码,,,,,,,可以咨询销售或FAE。。。。。