1.GTP的PCS没有de/scramble,没有CRC,但是有8b/10b,COM Detect,elastic buffer等
2.PIPE是一个规范,如果要做PCI-e,必须遵守,否则不是PCI-e。可以参考附件中的一个老版本的PIPE Spec
3.PIPE中规定了8bit/16bit两种位宽,码率只有2.5Ghz(Gen1)以及5Ghz(Gen2)两种量产的规格,Gen3不清楚
4.xilinx例化一个GTP,实现了PIPE的功能。GTP还可以例化实现其他功能
5.Xilinx出来的62.5Mhz,是在GTP出来的PIPE的125Mhz基础上,加上de/scramble,COM alignment等功能后,再将GTP出来的16bit转为32bit的位宽,并不是GTP直接出来32bit。
6.假设PIPE采用32bit位宽,频率貌似下来了,但是中间的COM alignment,de/scramble,CRC等计算会复杂很多,延迟路径会更长。否则按照这个推论,128位宽可以解决任何问题了。
下面是一个GTP例化成PIPE的顶层描述,来源是xilinx提供的pci-express硬核的代码
数据位宽16位,GTP恢复出来的mgt_clk经过全局buffer送入当全局时钟
// GT->PLM PIPE Interface rx
wire [1:0] rx_char_is_k;
wire [15:0] rx_data;
wire rx_enter_elecidle;
wire [2:0] rx_status;
wire rx_polarity;
// GT<-PLM PIPE Interface tx
wire [1:0] tx_char_disp_mode;
wire [1:0] tx_char_is_k;
wire tx_rcvr_det;
wire [15:0] tx_data;
// GT<->PLM PIPE Interface Misc
wire phystatus;
// GT<->PLM PIPE Interface MGT Logic I/O
wire gt_reset_done;
wire gt_rx_valid;
wire gt_tx_elec_idle;
wire [1:0] gt_power_down;
wire rxreset;
wire gt_plllkdet_out;
BUFG mgt_bufg (.O(mgt_clk), .I(clk_125));
gtpa1_dual_wrapper_top
mgt (
.rx_char_is_k ( rx_char_is_k ),
.rx_data ( rx_data ),
.rx_enter_elecidle ( rx_enter_elecidle ),
.rx_status ( rx_status ),
.rx_polarity ( rx_polarity ),
.tx_char_disp_mode ( tx_char_disp_mode ),
.tx_char_is_k ( tx_char_is_k ),
.tx_rcvr_det ( tx_rcvr_det ),
.tx_data ( tx_data ),
.phystatus ( phystatus ),
.gt_usrclk ( mgt_clk ),
.gt_usrclk2x ( mgt_clk_2x ),
.sys_clk ( sys_clk ),
.sys_rst_n ( sys_reset_n_c ),
.arp_txp ( pci_exp_txp ),
.arp_txn ( pci_exp_txn ),
.arp_rxp ( pci_exp_rxp ),
.arp_rxn ( pci_exp_rxn ),
.gt_reset_done ( gt_reset_done ),
.gt_rx_valid ( gt_rx_valid ),
.gt_plllkdet_out ( gt_plllkdet_out ),
.gt_refclk_out ( gt_refclk_out ),
.gt_tx_elec_idle ( gt_tx_elec_idle ),
.gt_power_down ( gt_power_down ),
.rxreset ( rxreset )
); |