本节进行ISERDESE2的仿真验证;
对原语常用的的NETWORKING模式的SDR、DDR、级联操作进行仿真;
高速串行时钟和分频时钟的关系为:
SDR模式: 分频时钟*并行位宽=高速串行时钟
DDR模式: 分频时钟*并行位宽/2=高速串行时钟
l 仿真NETWORKING,SDR,8bit模式:
测试模块:
数据通过D端口输入,DDR速率,并行位宽为8bit;
仿真TB:
模拟生成800M的高速bit时钟,bit时钟上升沿对齐高速bit数据中心,SDR模式,分频时钟100M,生成的数据按8‘haf和8’hab交替输出,高位先发,
可以看到上图为生成的8’haf和8’hab的串行数据,其中8个时钟,时钟上升沿对齐数据中心,黄线的***个中间为数据8’b10101111,为8’haf,黄线的***个中间为数据8’b10101011,为8’hab;
复位完毕后可以看到,解出的数据为ea和eb,这是因为此时解串器组成一个8bit的串行数据流,不是一整个af或一整个ab组成,是两者各截取一部分拼接而成,所以这种情况下就需要使用bitslip位滑动操作,将输出的数据滑动到我们需要的值;
仿真中写了每个100ns,执行一次bitslip的逻辑,
***次bitslip:
可以看到bitslip后输出并行值从ea和eb变为了d5和d7;
第二次bitslip:
可以看到bitslip后输出并行值从d5和d7变为了af和ab,是我们想要的值;
l 仿真NETWORKING,DDR,8bit模式:
测试模块修改为DDR模式,
仿真TB中产生数据的代码修改为:
模拟生成400M的高速bit时钟,bit时钟上升沿和下降沿对齐高速bit数据中心,DDR模式,分频时钟100M,生成的数据按8‘haf和8’hab交替输出,高位先发,
上图为一个af数据的时序,可以看到时钟上升沿和下降沿都对齐有效数据,数据为8’b10101111,值为af,
同样的,***次解出的数据都不对,在bitslip两次后输出我们想要的数据;
l 仿真NETWORKING,DDR,14bit级联模式:
测试模块修改为DDR 14bit级联模式,
仿真TB代码修改为:
高速数据时钟700M,分频时钟100M,
级联模式只支持DDR,产生14bit数据,DDR模式,时钟边沿对齐数据中心,仿真交替产生14'h35af和14'h25ab,
如上图黄线中间产生的14’b10010110101011,便是14'h25ab,
解串后bitslip执行4次后就能得到想要的值;
本文章由威三学院出品
对课程感兴趣可以私信联系

京公网安备11022902000513号
