上位机通过PCIe把数据发送给FPGA,FPGA打包后通过光纤模块发送出去,同时FPGA保存光纤过来的数据到DDR3中,当DDR3中的数据存够一定数量,
把DDR3中的数据通过PCIe发送给上位机
光纤项目
FPGAPC
GT4
GT3
GT2
GT1
DDR3
GT1
GT2
GT3
GT4
PCIe
DDR3
PCIe_IP
DDR3_IP
GTX_IP
大小端转换
大小端转换
解析PCIE
光纤驱动
光纤驱动
光纤驱动
光纤驱动
选择六组
FIFO中的一组数据到
PCIe
DDR3IP时序
选择数据
到DDR3DDR3
读写地址和
突发长度
管理
光纤项目功能框图
FPGA
F8F8
55AA
PCIE时钟
光纤接收时钟
DDR时钟
光纤发送时钟
模块名:mem_burst_xilinx
例化名:u_mem_burst
作用 :按照DDR3_IP的驱动时序
把数据发送给DDR3的IP
app_addr[28:0]
app_cmd[2:0]
app_en
app_rdy
app_rd_data[511:0]
app_rd_data_end
app_rd_data_valib
app_wdf_data[511:0]
app_wdf_end
app_wdf_mask[63:0]
app_wdf_rdy
app_wdf_wren
控制
读
写
rd_burst_req
rd_burst_len[9:0]
rd_burst_addr[28:0]
rd_burst_valid
rd_burst_data[511:0]
rd_burst_finish
wr_burst_req
wr_burst_len[9:0]
wr_burst_addr[28:0]
wr_burst_data_req
wr_burst_data[511:0]
wr_burst_finish
burst_finish
读
写
框图
下一页
genvar ww;generate for (ww=0 ; ww<16; ww=ww+1 ) begin assign pcie_mty_rx[ww*8 +7 - :8] = pcie_mty_rx_fifo[127-ww*8 - : 8]; endEndgenerate
上述公式等价于:assign pcie_mty_rx[0*8 +7 - :8] = pcie_mty_rx_fifo[127-0*8 - : 8];assign pcie_mty_rx[1*8 +7 - :8] = pcie_mty_rx_fifo[127-1*8 - : 8];assign pcie_mty_rx[2*8 +7 - :8] = pcie_mty_rx_fifo[127-2*8 - : 8];assign pcie_mty_rx[3*8 +7 - :8] = pcie_mty_rx_fifo[127-3*8 - : 8]; . . . assign pcie_mty_rx[14*8 +7 - :8] = pcie_mty_rx_fifo[127-14*8 - : 8];assign pcie_mty_rx[15*8 +7 - :8] = pcie_mty_rx_fifo[127-15*8 - : 8];
// 解释 : [7 - : 8]
// 等价于: [a - : b ] == [a : a - b ] == [7 :0 ] / / 因为是从0 开始数的 ,7 6 5 4 3 2 1 0
上述公式等价于:assign pcie_mty_rx[ 7 : 0] = pcie_mty_rx_fifo [127 : 120];assign pcie_mty_rx[15 : 8] = pcie_mty_rx_fifo [119 : 112];assign pcie_mty_rx[23 :16] = pcie_mty_rx_fifo [111 : 104];assign pcie_mty_rx[31 :24] = pcie_mty_rx_fifo [103 : 96]; . . .
备注1:大小端转换//**********************
// 判断输入数据中,第几位被值1 (低位优先级高 )//**********************/
//举例:输入数据例子:if(din==5'b00001)if(din==5'b00010)if(din==5'b00100)if(din==5'b01000)if(din==5'b10000)
//计算:先计算哪一位有效:sel[0 ]=din[0 ];sel[1 ]=sel[0 :0]==0 && din[1 ];sel[2 ]=sel[1 :0]==0 && din[2 ];sel[3 ]=sel[2 :0]==0 && din[3 ];sel[4 ]=sel[3 :0]==0 && din[4 ];sel[5 ]=sel[4 :0]==0 && din[5 ];
//计算并输出:判断并输出dout_bin[0] = sel[1 ] | sel[3 ] | sel[5 ] ; dout_bin[1] = sel[2 ] | sel[3 ] ; dout_bin[2] = sel[4 ] | sel[5 ] ;
//参考:十进制表达法和二进制表达法 5'd1 == 3'b001 5'd2 == 3'b010 5'd3 == 3'b011 5'd4 == 3'b100 5'd5 == 3'b101
备注2:hot2bin
genvar ii;generate for (ii=0 ; ii<5; ii=ii+1 ) begin assign flag_id[ii] = flag_ctrl && din[110:96] ==i i; endEndgenerate
flag_id[0] = din[110:96] ==0;flag_id[1] = din[110:96] ==1;flag_id[2] = din[110:96] ==2;flag_id[3] = din[110:96] ==3;flag_id[4] = din[110:96] ==4;
备注3:判断读取哪个ID
dout[127:0]pcie_exp_rxp[7:0]
din[127:0]
wr_en
rd_en
empty
pcie_exp_txn[7:0]
pcie_exp_rxn[7:0]
pcie_exp_txp[7:0]
PCIe_IP核
框图
din
112
127
==F8F8 表示数据头
111 ==0写 reg_wr ==1 ==1读 reg_rd ==1
110
96
表示ID
dout
dout_vld[4:0]
din[127:0] dout[127:0]
模块名 :cfg_pack_analy_rx
模块例化名字:u_cfg_rxb
作用 :解析PCI包头16'hF8F8
flag_id[4:0]
dout[127:0]
dout_vld[4:0]
dout_sop
dout_eop
dout_mty[3:0]
din_vld
组合电路
作用:判断ID值
&&
din__sop==1
din__eop==1
din__mty[3:0]==0
din[127:0]
框图
din[127:80]
reg_rd ? rdata : din[79:48]
din[47:0]
80
flag_get_addr
flag_get_data
genvar ii;generate for (ii=0 ; ii<5; ii=ii+1 ) begin assign flag_id[ii] = flag_ctrl && din[110:96] ==i i; endEndgenerate
等价于:flag_id[0] = din[110:96] ==0;flag_id[1] = din[110:96] ==1;flag_id[2] = din[110:96] ==2;flag_id[3] = din[110:96] ==3;flag_id[4] = din[110:96] ==4;
判断读取哪个ID
上一页
模块名:gtxPackAndCodeMode2
例化名:u_code
作用 :把PCIE发送过来的数据,打包发送给光纤IP。
把光纤IP发过来包文,拆包并发送出去
模块名 :mdyPackCommMode2
模块例化名:uMdyPackCommPack
作用 :缓存PCIE发过来的数据
并把FIFO中的数据做128bit转16bit
以包头+数据的形式发送出去(两个计数器)
包头就是管理FIFO
数据就是数据FIFO
管理FIFO格式:
16'h55d5+16'h数据长度+16'h校验+16'h0
模块名:afifo_134_1024
例化名:u_dfifo
作用 :数据FIFO
打拍
计算
校验和
模块名:afifo_32_64
例化名:u_mfifo
作用 :管理FIFO dout_vlddout_sopdout_eop
dout_mty
dout[15:0]
模块名:gtx_code_w16
例化名:u_gtx_coder
作用 :空闲做同步
有数据就发数据
模块名:mdy_bit_reversed
例化名:u_tx_data_reverse
作用 :大小端转换
dout[15:0]
char[1:0]
If(din_vld)begin dout<=din; char <=2'b00;endelse begin dout<=16'h50bc; char <=2'b01;end
模块名:mdy_bit_reversed
例化名:u_tx_ctrl_reverse
作用 :大小端转换
dout[15:0]
char[1:0]
data[15:0]
char[1:0]
模块名:mdy_bit_reversed
例化名:u_rx_data_reverse
作用 :大小端转换
模块名:mdy_bit_reversed
例化名:u_rx_ctrl_reverse
作用 :大小端转换
If(|ctrl_in==1)begin ctrl=ctrl_in;end
If(ctrl==1)begin flag_sel=0;endelse begin flag_sel=1;
end
模块名 :word_align_w16
例化名: u_rx_align
作用 :根据K码纠正数据
data[15:0]
ctrl[1:0]
If(ctrl==0)begin dout=din; dout_vld=1;endelse begin dout_vld=0;end
data[15:0]
ctrl[1:0]
模块名:gtx_decoder
例化名:u_gtx_decoder
作用 :把数据加dout_vld
dout[15:0]
dout_vld
模块名:mdyUnpackCommMode2
例化名:u_UnpackComm
作用 :去包头,校验对比
只输出数据段
dout_vld
dout[15:0]
dout_sop
dout_eop
dout_mty[1:0]
dout_err
模块名 :pack_s2p
例化名:pack_s2p
作用 :din[15:0]转成din[63:0]
dout_vld
dout_sop
dout_eop
dout_mty[3:0]
dout[127:0]
dout_vld
dout[63:0]
dout_sop
dout_eop
dout_mty[3:0]
框图
上一页
for( ii =0; ii<2; ii++ ) for( jj=0; jj<8; jj++) dout_tmp [ ii*8 + jj ] = din[ (2-ii-1)*8+ jj ];
ii=0; ii=1; dout_tmp [0] = din[ 8+0 ]; dout_tmp [8] = din[ 0 ]; dout_tmp [1] = din[ 8+1 ]; dout_tmp [9] = din[ 1 ]; dout_tmp [2] = din[ 8+2 ]; dout_tmp [10] = din[ 2 ]; dout_tmp [3] = din[ 8+3 ]; dout_tmp [11] = din[ 3 ]; dout_tmp [4] = din[ 8+4 ]; dout_tmp [12] = din[ 4 ]; dout_tmp [5] = din[ 8+5 ]; dout_tmp [13] = din[ 5 ]; dout_tmp [6] = din[ 8+6 ]; dout_tmp [14] = din[ 6 ]; dout_tmp [7] = din[ 8+7 ]; dout_tmp [15] = din[ 7 ];
上一页
genvar ww;generate for (ww=0 ; ww<16; ww=ww+1 ) begin assign pcie_mty_rx[ww*8 +7 - :8] = pcie_mty_rx_fifo[127-ww*8 - : 8]; endEndgenerate
上述公式等价于:assign pcie_mty_rx[0*8 +7 - :8] = pcie_mty_rx_fifo[127-0*8 - : 8];assign pcie_mty_rx[1*8 +7 - :8] = pcie_mty_rx_fifo[127-1*8 - : 8];assign pcie_mty_rx[2*8 +7 - :8] = pcie_mty_rx_fifo[127-2*8 - : 8];assign pcie_mty_rx[3*8 +7 - :8] = pcie_mty_rx_fifo[127-3*8 - : 8]; .assign pcie_mty_rx[14*8 +7 - :8] = pcie_mty_rx_fifo[127-14*8 - : 8];assign pcie_mty_rx[15*8 +7 - :8] = pcie_mty_rx_fifo[127-15*8 - : 8];
// 解释 : [7 - : 8]
// 等价于: [a - : b ] == [a : a - b ] == [7 :0 ] // 因为是从0 开始数的 ,7 6 5 4 3 2 1 0
上述公式等价于:assign pcie_mty_rx[ 7 : 0] = pcie_mty_rx_fifo [127 : 120];assign pcie_mty_rx[15 : 8] = pcie_mty_rx_fifo [119 : 112];assign pcie_mty_rx[23 :16] = pcie_mty_rx_fifo [111 : 104];assign pcie_mty_rx[31 :24] = pcie_mty_rx_fifo [103 : 96];
大小端转换
上一页
模块名 :mdy_pack_pick_by_head_guangqian
模块例化名:u_rx_cpack_analy
作用 :判断数据头是不是16'hF8F8
光纤转存DDR3
dout_vld
dout[63:0]
dout_sop
dout_eop
dout_mty[3:0]
dout_vld
dout[63:0]
dout_sop
dout_eop
dout_mty[3:0]
If( flag_add ==0 && din_sop && din_vld && din[63:48] == 16'hf8f8 ) flag_add<=1;else if( flag_add==1 && din_eop && din_vld ) flag_add<=0;
dout <=din; dout_sop <=din_sop; dout_eop <=din_eop; dout_vld <= dout_vld && flag_add;
框图
模块名:afifo_134_64
例化名:u_gxt_fifo
作用 :光纤3数据FIFO
empty[4:0]Empty_4_nor[4:0]
ddr_fifo_th
模块名:u_tx_sp
作用:6个FIFO选择一个输出到PCEI的TX
同时对不满128位的数据包做64
位转128位
模块名 :pack_s2p
模块例化名:pack_s2p
作用 :64位din转128位
模块名:afifo_134_64
例化名:u_gxt_fifo
作用 :光纤3数据FIFO
模块名 :pack_s2p
模块例化名:pack_s2p
作用 :64位din转128位
模块名:afifo_134_64
例化名:u_gxt_fifo
作用 :光纤3数据FIFO
模块名 :pack_s2p
模块例化名:pack_s2p
作用 :64位din转128位
模块名:afifo_134_64
例化名:u_gxt_fifo
作用 :光纤3数据FIFO
模块名 :pack_s2p
模块例化名:pack_s2p
作用 :64位din转128位
模块名: mdy_flag_sel
例化名:u_gxt_fifo
作用 :判断输入数据中,
第几位被值1
操做:对empty取反
作用:FIFO有数据后边对应位
就输出一个1
FIFO空 empty==1
FIFO有数据 empty==0
模块名:afifo_520_512
例化名:u_ddr_fifo
作用 :DDR3数据FIFO
ddr_rdusedw>=256
模块名:afifo_134_64
例化名:u_pci_fifo
作用 :PCIE数据FIFO
dout[127:0]
dout_vld
gtx_din_vld
gtx_din[63:0]
gtx_din_sop
gtx_din_eop
gtx_din_mty[3:0]
pcie_din_vld[4:0]
pcie_din[127:0]
pcie_din_sop
pcie_din_eop
pcie_din_mty[3:0]
ddr3_din_vld
ddr3_din[511:0]
ddr3_din_sop
ddr3_din_eop
框图
//**********************
// 判断输入数据中,第几位被值1 //**********************/
//举例:输入数据例子:1.if(din==5'b00001)2.if(din==5'b00010)3.if(din==5'b00100)4.if(din==5'b01000)5.if(din==5'b10000)
//计算:先计算哪一位有效:sel[0 ]=din[0 ];sel[1 ]=sel[0 :0]==0 && din[1 ];sel[2 ]=sel[1 :0]==0 && din[2 ];sel[3 ]=sel[2 :0]==0 && din[3 ];sel[4 ]=sel[3 :0]==0 && din[4 ];sel[5 ]=sel[4 :0]==0 && din[5 ];
//计算并输出:判断并输出dout_bin[0] = sel[1 ] | sel[3 ] | sel[5 ] ; dout_bin[1] = sel[2 ] | sel[3 ] ; dout_bin[2] = sel[4 ] | sel[5 ] ;
//参考:十进制表达法和二进制表达法 5'd1 == 3'b001 5'd2 == 3'b010 5'd3 == 3'b011 5'd4 == 3'b100 5'd5 == 3'b101
上一页
模块名 :pack_s2p
模块例化名:u_pack_s2p
作用 :64位din转512位
模块名 :gtx2ddrSp
模块例化名:rx_sp
作用 :四路光纤选择哪一路写入到DDR中
数据FIFO_520_512
管理FIFO_1_64
mfifo_empty[3:0]
dout_vld
dout[511:0]
dout_sop
dout_eop
dout_mty[6:0]
dout_rdy
dout_cha[1:0] flag_sel
模块名 :pack_s2p
模块例化名:u_pack_s2p
作用 :64位din转512位
数据FIFO_520_512
管理FIFO_1_64
模块名 :pack_s2p
模块例化名:u_pack_s2p
作用 :64位din转512位
数据FIFO_520_512
管理FIFO_1_64
模块名 :pack_s2p
模块例化名:u_pack_s2p
作用 :64位din转512位
数据FIFO_520_512
管理FIFO_1_64
gtx_din_vld
gtx_din[63:0]
gtx_din_sop
gtx_din_eop
gtx_din_mty[3:0]
框图
模块名:afifo_512_1024
例化名:u_fifo_x
作用 :缓存光纤数据的FIFO
din[511:0]
din_vld
data
wrreq
rdreq
qwfifo_q
wfifo_empty
IDLE
ADDR
REQQ
DATA rfifo_empty
模块名:fifo_29_4096
例化名:u_rfifo
作用 :
empty
empty
wr_burst_addrdin
wr_en
wfifo_rdreq
rfifo_rdcnt
rfifo_rdcnt
rdusedw
rdusedw
wfifo_qq
rd_enrfifo_rdreq
dout_eop
dout_err
dout_vld
dou[511:0]
dout_sop
模块名:ddr_mem_intf_guangxian
例化名:u_ddr_men_intf
作用 :把光纤过来的数据,缓存到FIFO中,
达到一定数量(DDR3_IP核的突发长度)。就把数据写入到DDR3中。
写达到设定数量后,开始读取DDR3中的数据。
给 PCIE发送过去
wr_en
rd_burst_req
rd_burst_len[9:0]
rd_burst_addr[28:0]
rd_burst_valid
rd_burst_data[511:0]
rd_burst_finish
wr_burst_req
wr_burst_len[9:0]
wr_burst_addr[28:0]
wr_burst_data_req
wr_burst_data[511:0]
wr_burst_finish
burst_finish
wfifo_q
wfifo_q
wr_burst_len
rd_burst_len
wr_burst
rd_burst
wr_burst_addr
burst_finish
rd_burst_valid
wr_burst_data_req
框图
命令总线首页
写总线(表格黄色部分),其时序图如下所示。共有 3 种传输模式。
模式 1 指的是命令和数据同时发送到 IP 核,模式 2 指的是数据提前于命令发送到 IP 核,
模式 3 指的是数据落后于命令发送到 IP 核。模式 1 和 2 均可稳定传输,
而模式 3 必须满足一个条件,即数据落后命令的时间不能超过两个时钟周期。
一般来说,模式 2 比较常用,时序设计相对容易
读总线读总线(表格黄色部分),也分为两种速率,4:1 和 2:1。
写总线
关于 app_wdf_end 信号,该信号表示:当前突发写的最后一个数据。我们此次 DDR3 IP 核的突发长度为 8 ,1 个的长度是 16bit。
本次 DDR3 IP 核调取时,我们选取的 物理层 - 用户端 的速率为 4:1,每次发送的有效数据为 128 bit,app_wdf_data 本就是128 bit的,
因此 1 次突发写就完成了数据的写入,app_wdf_end 和 app_wdf_en 时序上同步了。
而如果选取的 物理层 - 用户端 的速率为 2:1,那每次发送的有效数据为 64 bit,
app_wdf_data 本是128 bit的,因此需要 2 次突发才能完成数据的写入,app_wdf_end 就看得更清楚了
112
127
==F8F8 表示数据头
111==0写PCIE_reg ==1读PCIE_reg
110
96
表示ID
dout
dout_vld[4:0]
din[127:0] dout[127:0]
模块名:cfg_pack_analy_rx
例化名:u_cfg_rxb
作用 :解析PCI包头16 h8f8f
flag_id[4:0]
pcie_mty_rx[127:0]pcie_mty_rx_fifo[127:0]
模块名 :xdma_adc_wrapper
模块例化名字:xdma_adc_wrapper1
作用 :PCIE的IP核
pcie_exp_rxp[7:0]
组合电路
作用:大小端转换(详见:备注1)
cfg_rx_dout[127:0]
cfg_rx_dout_vld[4:0]
cfg_rx_dout_sop
cfg_rx_dout_eop
cfg_rx_dout_mty[3:0]
BLK[3]
BLK[1]
BLK[0
模块名 :gtxPackAndCodeMode2
模块例化名:u_code
作用 :把PCIE发送过来的数据,打包发送给光纤IP。
把光纤IP发过来包文,拆包并发送出去
BLK[3]
模块名 :mdyPackCommMode2
模块例化名:uMdyPackCommPack
作用 :缓存PCIE发过来的数据
并把FIFO中的数据做128bit转16bit
以包头+数据的形式发送出去(两个计数器)
包头就是管理FIFO
数据就是数据FIFO
管理FIFO格式:
16'h55d5+16'h数据长度+16'h校验+16'h0
模块名:gtx_exdes
例化名:gtx_m0
作用 :四路GTX光纤的IP核
模块名 :afifo_134_1024
模块例化名:u_dfifo
作用 :数据FIFO
打三拍
计算
校验和
dout_vld
dout_sopdout_eop
dout_mty[3:0]
模块名 :afifo_32_64
模块例化名字:u_mfifo
作用 :管理FIFO
dout_vlddout_sopdout_eop
dout_mty
dout[15:0]
dout_vld
dout_sop
dout_eop
dout_mty[3:0]
dout[127:0]模块名 :gtx_code_w16
模块例化名:u_gtx_coder
作用 :空闲做同步
有数据就发数据
模块名 :mdy_bit_reversed
模块例化名:u_tx_data_reverse
作用 :大小端转换
coder_gtx_dout[15:0]
coder_gtx_char[1:0]
If(din_vld)begin dout<=din; char <=2'b00;endelse begin dout<=16'h50bc; char <=2'b01;end 模块名 :mdy_bit_reversed
模块例化名:u_tx_ctrl_reverse
作用 :大小端转换
gtx_dout[15:0]
gtx_char[1:0]
gtx0_txp
gtx0_txn
dout_vld[4]==1
gtx0_rxp
gtx0_rxn
gtx_rx_data[15:0]
gtx_rx_char[1:0]
模块名 :mdy_bit_reversed
模块例化名:u_rx_data_reverse
作用 :大小端转换
模块名 :mdy_bit_reversed
模块例化名:u_rx_ctrl_reverse
作用 :大小端转换模块名 :word_align_w16
例化名: u_rx_align
作用 :根据K码纠正数据
br_rx_data[15:0]
br_rx_ctrl[15:0]
align_rx_data[15:0]
align_rx_ctrl[1:0]模块名:gtx_decoder
例化名:u_gtx_decoder
作用 :把数据加dout_vld
gtx_decoder_dout[15:0]
gtx_decoder_dout_vld模块名:mdyUnpackCommMode2
例化名:u_UnpackComm
作用 :去包头,校验对比
只输出数据段
dout_vld
dout[15:0]
dout_sop
dout_eop
dout_mty[1:0]
dout_err
dout_vld
dout[63:0]
dout_sop
dout_eop
dout_mty[3:0]
模块名 :mdy_pack_pick_by_head_guangqian
模块例化名:u_rx_dpack_analy
作用 :判断数据头是不是16'h55AA
光纤转存到DDR
模块名 :mdy_pack_pick_by_head_guangqian
模块例化名:u_rx_cpack_analy
作用 :判断数据头是不是16'hF8F8
光纤转存到PCIE
模块名 :mdy_pack_pick_by_head_guangqian
模块例化名:u_rx_dpack_analy
作用 :判断数据头是不是16'h55AA
光纤转存到DDR
模块名 :mdy_pack_pick_by_head_guangqian
模块例化名:u_rx_cpack_analy
作用 :判断数据头是不是16'hF8F8
光纤转存到PCIE
模块名 :mdy_pack_pick_by_head_guangqian
模块例化名:u_rx_dpack_analy
作用 :判断数据头是不是16'h55AA
光纤转存到DDR
模块名 :mdy_pack_pick_by_head_guangqian
模块例化名:u_rx_cpack_analy
作用 :判断数据头是不是16'hF8F8
光纤转存到PCIE
模块名 :mdy_pack_pick_by_head_guangqian
模块例化名:u_rx_dpack_analy
作用 :判断数据头是不是16'h55AA
光纤转存到DDR
模块名 :mdy_pack_pick_by_head_guangqian
模块例化名:u_rx_cpack_analy
作用 :判断数据头是不是16'hF8F8
光纤转存到PCIE
GTX0
模块名:afifo_134_64
例化名:u_gxt_fifo
作用 :光纤3数据FIFO
empty[4:0]Empty_4_nor[4:0]
ddr_fifo_th
模块名:u_tx_sp
作用:6个FIFO选择一个输出到PCEI的TX
dout_vlddout[63:0]dout_sopdout_eop
dout_mty[3:0]
模块名 :pack_s2p
模块例化名:u_pack_s2p
作用 :64位din转512位
模块名 :gtx2ddrSp
模块例化名:rx_sp
作用 :四路光纤选择哪一路写入到DDR中
数据FIFO_520_512
管理FIFO_1_64
mfifo_empty[3:0]
dout_vld
dout[511:0]
dout_sop
dout_eop
dout_mty[6:0]
dout_rdy
dout_cha[1:0] flag_sel
模块名 :pack_s2p
模块例化名:pack_s2p
作用 :64位din转128位
模块名:afifo_134_64
例化名:u_gxt_fifo
作用 :光纤3数据FIFO
模块名 :pack_s2p
模块例化名:pack_s2p
作用 :64位din转128位
模块名:afifo_134_64
例化名:u_gxt_fifo
作用 :光纤3数据FIFO
模块名 :pack_s2p
模块例化名:pack_s2p
作用 :64位din转128位
模块名:afifo_134_64
例化名:u_gxt_fifo
作用 :光纤3数据FIFO
模块名 :pack_s2p
模块例化名:pack_s2p
作用 :64位din转128位
模块名: mdy_flag_sel
例化名:u_gxt_fifo
作用 :判断输入数据中,
第几位被值1
操做:对empty取反
作用:FIFO有数据后边对应位
就输出一个1
FIFO空 empty==1
FIFO有数据 empty==0
模块名 :pack_s2p
模块例化名:u_pack_s2p
作用 :64位din转512位
数据FIFO_520_512
管理FIFO_1_64
模块名 :pack_s2p
模块例化名:u_pack_s2p
作用 :64位din转512位
数据FIFO_520_512
管理FIFO_1_64
模块名 :pack_s2p
模块例化名:u_pack_s2p
作用 :64位din转512位
数据FIFO_520_512
管理FIFO_1_64
模块名:ddr_mem_intf_guangxian
例化名:u_ddr_men_intf
作用 :把光纤过来的数据,缓存到FIFO中,
达到一定数量(DDR3_IP核的突发长度)。
就把数据写入到DDR3中。
写一定数量后,开始读取DDR3中的数据。
给 PCIE发送过去
模块名:afifo_512_1024
例化名:u_fifo_x
作用 :缓存光纤数据的FIFO
wr_burst_data_req
din[511:0]
din_vld
data
wrreq
rdreq
qwfifo_q
wfifo_empty
IDLE
ADDR
REQQ
DATA
|
rfifo_empty
模块名:fifo_29_4096
例化名:u_rfifo
作用 :chan_wr_rdy
dou_rdy
chan_rdy
&&
empty
&&
&&
empty
wr_burst_addrdin
wr_en
data2idle_start
模块名:mem_burst_xilinx
例化名:u_mem_burst
作用 :按照DDR3_IP的驱动
时序把数据发送给
DDR3的IP
app_addr[28:0]
app_cmd[2:0]
app_en
app_rdy
app_rd_data[511:0]
app_rd_data_end
app_rd_data_valib
app_wdf_data[511:0]
app_wdf_end
app_wdf_mask[63:0]
app_wdf_rdy
app_wdf_wren
控制
读
写
rd_burst_req
rd_burst_len[9:0]
rd_burst_addr[28:0]
rd_burst_valid
rd_burst_data[511:0]
rd_burst_finish
wr_burst_req
wr_burst_len[9:0]
wr_burst_addr[28:0]
wr_burst_data_req
wr_burst_data[511:0]
wr_burst_finish
burst_finish
读
写
wfifo_rdreq
cfg_rd_thd
cfg_rd_thd<=
rfifo_rdcnt
<=
rfifo_rdcnt
rdusedw
rdusedw
h
h
h
burst_finish
1
wr_burst flag_sel_rw
rd_burst
|
flag_sel_rw==0是写
flag_sel_rw==1是读
wr_burst_data_req&&flag_sel_rw==0
rd_burst_data_valid&&flag_sel_rw==1
wfifo_qq
wr_burst_data
wfifo_q
wr_burst_addr <= addr_wr_cnt *cfg_burst_len
rd_burst_addr<=rfifo_q
cfg_chan_start_addr :
从DDR3中哪个地址开始写,基地址
addr_wr_cnt :
每突发写完一次加一
cfg_burst_len :
突发长度,
&&flag_sel_rw==0
rfifo_rdcnt<4000&&
chan_rd_rdy==0
chan_rd_rdy==1
&&
chan_rd_rdy==1chan_rd_rdy==0
flag_sel_rw==1
wfifo_q
wr_burst_len
rd_burst_len
wr_burst
rd_burst
wr_burst_addr
burst_finish
rd_burst_valid
wr_burst_data_req
rd_en&&reqq2data_start
rfifo_rdreq
dout_eop
dout_err
dout_vld
dou[511:0]
dout_sop
dout_vld
dout[63:0]
dout_sop
dout_eop
dout_mty[3:0]
模块名:afifo_520_512
例化名:u_gxt_fifo
作用 :光纤3数据FIFOassign ddr_fifo_th = ddr_rdusedw>=256
备注2:hot2bin
模块名:afifo_520_512
例化名:u_gxt_fifo
作用 :光纤3数据FIFO
pcie_din_fifo
wr_en_0
pcie_tx[127:0]
pcie_tx_vld
dout
rd_en_0
empty
pcie_exp_txn[7:0]
pcie_exp_rxn[7:0]
pcie_exp_txp[7:0]
模块名 :pack_s2p
例化名:pack_s2p
作用 :din[15:0]转成din[63:0]
GTX1
GTX2
GTX3
pcie_mty_rx_vldFIFO_READ_1_empty
组合电路
作用:大小端转换(详见:备注1)
pcie_din[127:0]
组合电路
作用:判断ID值(详见:备注3)
&&
cfg_rx_dout_sop==1
cfg_rx_dout_eop==1
cfg_rx_dout_mty[3:0]==0
dout_vld[0]==1
dout_vld[1]==1
dout_vld[2]==1
dout_vld[3]==1
模块名:mig_7series_0
例化名:u_ddr3
作用 :DDR3的IP
ddr3_addr[14:0]
ddr3_ba[2:0]
ddr3_cas_n
ddr3_ck_n
ddr3_ck_p
ddr3_cke
ddr3_cs_n
ddr3_dm[7:0]
ddr3_odt
ddr3_ras_n
ddr3_reset_n
ddr3_we_n
ddr3_dq[63:0]
ddr3_dqs_n[7:0]
ddr3_dqs_p[7:0]
din[127:80]
reg_rd ? rdata : din[79:48]
din[47:0]
80
49
flag_get_addr
flag_get_data
光纤打包0
4路光纤接口模块
光纤解包0
光纤打包1
光纤解包1
测试数据生成0
接收统计0
测试数据生成1
接收统计1
串口配置功能
寄存器软件(近物所)
电脑
FPGA
PCIE上位机软件
(mdyPcieRelease)PCIE接口功能
测试数据生成功能
发送统计功能
接收统计功能
串口配置功能
寄存器软件(近物所)
电脑
FPGA
模式控制功能
PCIE上位机软件
(mdyPcieRelease)PCIE接口功能
测试数据生成功能
发送统计功能
接收统计功能
FPGA
模式控制功能
光纤打包0
4路光纤接口模块
光纤解包0
光纤打包1
光纤解包1
串口配置功能
寄存器软件(近物所)
电脑
接收卡FPGA
光纤打包0
2路光纤接口模块
光纤解包0
光纤打包1
光纤解包1
测试数据生成0
测试数据生成1
光纤配置功能0
发送卡FPGA
DDR3
PCIE
PCIE上位机软件
(mdyPcieRelease)
光纤配置功能1
电脑