|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
FPGA TCP/UDP千兆以太网高速传输, 开源UDP版工程
8 V/ I2 V, C- A0 K3 k介绍一下我的FPGA TCP传输方案。
, ^6 A- ^$ l8 e( @2 o% I6 P我的方案虽然是支持1000M以太网的,但是由于只是实现了部分TCP协议(包括Listen功能, 重传功能,窗口管理等), 没有实现慢启动,拥塞避免算法,所以速度只能达到300多兆, 不过对于一般的需求应该是足够了,比如工业摄像头图像传输,AD采集上传等。速度测试:+ }* I! t/ e% y A/ ^8 O
% `! I* R' f3 `* j0 K# N框图:
* H/ ~0 O! \$ I( h% w& a
- s, T- l, s! q( l! m! G- t# F; |为达到近1000M, 目前正在改进。+ d) P2 |/ g5 t3 Q! M! g# ^
UDP版的速度能接近线速,但是有几率丢包。
2 x( S8 w) w: B0 ^% UTCP/UDP协议是全部用SystemVerilog写的,不带cpu,包括独立的MAC模块。TCP版已经在altera和xilinx的开发板上经过几天的满载传输拷机测试。 支持外部phy的配置,支持GMII和RGMII模式。' F! B5 H1 ^5 y0 o" q
另外支持arp,icmp协议。
( G9 P9 r2 W- D/ P7 [& T. T下面是接口,可以看出是fifo接口:
; H1 S3 `2 {) M( F- Y) G8 c- N
2 l$ h* i5 H* v! {. c" `9 } input clk50,
( R9 S% B6 p/ M input rst_n,; q4 l/ h/ L# }7 s9 F, k
% t* J# F+ H& q' z
///////////////////////
: B- k5 A$ G' g9 a* ~' K) M//inteRFace to user module
( t7 D% T" p) {" q# k; A* R- ~ input [7:0] wr_data, 4 i0 W8 q, e. y! p
input wr_clk,
9 r) {: e8 L0 O3 P8 l input wr_en, 2 W; W& {7 G( l
output wr_full,
/ v" O; o0 }: m2 `0 Y
' i' g5 [- ~) ~$ G: k output [7:0] rd_data,
6 `! W6 k8 ] `9 t+ {# G3 ? input rd_clk,
& }0 J+ ]; S. a# L- x# G input rd_en, 0 t. ]! Z }% I3 F
output rd_empty,
0 D6 O! S' a# }# P1 G) f3 n* H- X, R2 j) ?% N
input [31:0] local_ipaddr, //FPGA ip address8 }& k) y9 o: w) v; o) V; A
input [31:0] remote_ipaddr, //PC ip address
; d3 J; f' e" D input [15:0] local_port, //FPGA port number
9 s. R8 `+ g! D) o0 b) l& s" [3 @& B6 @6 v# W- W' S' Q
//interface to ethernet phy
7 ^# d! u; m, g3 J output mdc,
/ o3 L2 x9 D. d( T inout mdio,
9 I% Y6 M( ~. }# [$ W5 k output phy_rst_n,% l: r ~# y. b: Z M- Q+ D
output is_link_up,
, r% f1 E v& P, B
/ b K6 s: H" K+ ]`ifdef RGMII_IF
) `+ ~# j% E: H- M5 n) N input [3:0] rx_data,
# Y" G/ `% M i( |; a9 r output logic [3:0] tx_data,
1 ^5 g( d) a% C/ g# h`else
- E( p( {8 P g& @1 n/ y# W5 H2 J input [7:0] rx_data,
8 a* v: w( C. o output logic [7:0] tx_data,
. @* \0 o" B5 Y+ `, w$ _: r: g`endif
- S; l {. I/ w6 |7 H9 k, Q/ {, S
4 p8 n6 t' K" H5 q input rx_clk,. I* Z+ b* O j) K
input rx_data_valid,
- I$ i: }# o! W) o; U input gtx_clk,
2 J, X9 O" P1 A+ `& m output logic tx_en
' }$ m D7 W9 P5 N8 X# N3 G, R ?% Z8 p7 C* M/ L7 o
|
|