|
发表于 2017-10-11 11:07:32
|
显示全部楼层
1.你可以认为是training用的data,一般的高速串行协议serdes都需要训练之后才可以正常使用
当然他本身提供的testbench其实是很不严谨的
2.这两标志位就是用来表征收到的是不是comma,是不是k symbol,自己译码器是也是可以的
3.接受其实有两个过程,一个是symbol lock,就是把数据切分成10bit,10bit的并行流,不同的协议不一样,很简单的,pcie的话就是拿comma来切
串行端从一堆数据流中识别出comma,然后就知道了10比特的边界在哪里,gtx里面叫clock correction,然后进行8b/10b解码,如果有多条lane,还要进行deskew操作,gtx里面叫channel bonding.
具体你可以看看你最终实例化模块的参数是怎么定义的(GTXE2_CHANNEL实例化时候的参数),你真要深入学习,就参照文档去看看每个参数是什么意思:
GTXE2_CHANNEL #(
.ALIGN_COMMA_DOUBLE("FALSE"),
.ALIGN_COMMA_ENABLE(10'b1111111111),
.ALIGN_COMMA_WORD(1),
.ALIGN_MCOMMA_DET("TRUE"),
.ALIGN_MCOMMA_VALUE(10'b1010000011),
.ALIGN_PCOMMA_DET("TRUE"),
.ALIGN_PCOMMA_VALUE(10'b0101111100),
.CBCC_DATA_SOURCE_SEL("ENCODED"),
.CHAN_BOND_KEEP_ALIGN("FALSE"),
.CHAN_BOND_MAX_SKEW(1),
.CHAN_BOND_SEQ_1_1(10'b0000000000),
.CHAN_BOND_SEQ_1_2(10'b0000000000),
.CHAN_BOND_SEQ_1_3(10'b0000000000),
.CHAN_BOND_SEQ_1_4(10'b0000000000),
.CHAN_BOND_SEQ_1_ENABLE(4'b1111),
.CHAN_BOND_SEQ_2_1(10'b0000000000),
.CHAN_BOND_SEQ_2_2(10'b0000000000),
.CHAN_BOND_SEQ_2_3(10'b0000000000),
.CHAN_BOND_SEQ_2_4(10'b0000000000),
.CHAN_BOND_SEQ_2_ENABLE(4'b1111),
.CHAN_BOND_SEQ_2_USE("FALSE"),
4.虽然位宽定义了4比特,但是你看看,估计就2比特是有用的,而且那个wrapper你可以自己点进去看看,包了一大堆东西
我以前搞过sata的wrapper,他有些连接还是错的,不要过分迷信那个wrapper,最重要的是最终实例化那个模块的参数值,wrapper仅仅是用来参考的 |
|