利用codeing做网站,电商网站收费吗,简述电子商务网站的开发流程,wordpress nana主题1. 场景
要在贴有K7系列FPGA芯片的板子和贴有KU系列FPGA芯片的板子之间通过光模块光纤QSFP实现40G的高速通信。可以选择的方式有多种#xff0c;但本质的方案就一种#xff0c;即实现4路GTX与GTY之间的通信。可以选择8B/10B编码通过GT IP核实现#xff0c;而不能通过Aurora…1. 场景
要在贴有K7系列FPGA芯片的板子和贴有KU系列FPGA芯片的板子之间通过光模块光纤QSFP实现40G的高速通信。可以选择的方式有多种但本质的方案就一种即实现4路GTX与GTY之间的通信。可以选择8B/10B编码通过GT IP核实现而不能通过Aurora 8/10BIP因为KU系列中没有Aurora 8B/10B IP。由于8/10B编码方式要比64/66B编码方式传输效率低所以这里选择64/66B编码方式。如果使用GT IP核实现64/66B编码的二者通信打开example design会发现KU系列的例程只发送了PRBS序列进行验证因此换成自己的数据做通信并不方便。此外GT IP核的侧重点是协议灵活操作灵活可以更多配置串行收发器“底层”的东西而Aurora 64/66B对于没有太多特殊需求的用户显然是更友好的将数据接口进行了封装还可实现更高的传输效率使用起来更为方便。由此最终选择Aurora 64/66BIP实现二者之间高达40G的传输。实际传输速度为10.3125Gbps*441.25Gbps。由于实现二者之间的通信并不太容易因此此处构建一个简单的场景先进行原理验证具体是是在链路初始化完成之后GTX向GTY发送0-1000的数字GTY接收后检错并通过led表示同时GTY也向GTX发送0-1000的数字也是接收后检错并通过led表示。对应例程链接本次工程用到的是自己设计的板卡连接方式如下图所示 2.结构
其内部模块以及通道模型与Aurora基本一致。 3.IP配置 Aurora 64/66B IP核的配置与Aurora 8B/10B IP的配置基本一致请参考Aurora 8/10Bip核实现。需要说明此处GTX与GTY的IP核应配置成一样的速率并选择同样的接口形式为了区别于Aurora 8B/10B此处选择streaming接口同样都勾选小端模式符合习惯。具体配置如下 4.注意事项
①该IP核对复位逻辑有着较为严格的要求如果工程需要复位需要查看手册并按照时序要求配置相关信号如果没有太多要求可直接使用example design中的复位逻辑。
②用户时钟的计算每路带宽10.3125Gbps一共思路因此总带宽是10.3125G*441.25Gbps结合编码方式应该乘64除66然每一个周期发送的数据位宽是256bit因此user_clk_i41.25Gbps*(64/66)/256bit156.25Mhz。
③GTX和GTY生成的例程略有不同还要注意约束文件的修改。
④提供的例程源码是对example design做了一定的整理仅仅为了美观。
5.部分源码设计
发送端源码设计
module GTY_Xfer(input user_clk_i,input system_reset_i, //高电平复位input channel_up_i,input tx_tready_i,output reg[255:0]tx_tdata_i,output reg tx_tvalid_i);wire local_rst;
assign local_rst system_reset_i | !channel_up_i;
always (posedge user_clk_i or posedge local_rst) beginif(local_rst 1)begintx_tvalid_i 0;end else begintx_tvalid_i 1;end
end
always (posedge user_clk_i or posedge local_rst) beginif(local_rst 1)begintx_tdata_i 0;end else if(tx_tready_i)begintx_tdata_i tx_tdata_i 1;if(tx_tdata_i 1000)begintx_tdata_i 0; end end
end
endmodule
接收check源码
module GTY_Recv(input user_clk_i,input system_reset_i, //高电平复位input channel_up_i, input [255:0] rx_tdata_i,input rx_tvalid_i,output reg led4,output error );wire local_rst;
assign local_rst system_reset_i | !channel_up_i;
reg [255:0]rd_cnt;
always (posedge user_clk_i or posedge local_rst) beginif(local_rst 1)beginrd_cnt 0;end else if(rx_tvalid_i)beginrd_cnt rd_cnt 1;if(rd_cnt 1000)beginrd_cnt 0;endend
end
assign error rx_tvalid_i (rd_cnt ! rx_tdata_i);
always (posedge user_clk_i or posedge local_rst) beginif(local_rst 1)beginled4 0;end else if(error)beginled4 1;end
end
endmodule
6.效果
在两端均可抓取到正确的数据信号并且无error产生。