IT虾米网

eth_udp_loop

kerrycode 2022年11月07日 编程语言 31 0
`timescale  1ns/1ns 
 
// Author        : EmbedFire 
// 实验平台: 野火FPGA系列开发板 
// 公司    : http://www.embedfire.com 
// 论坛    : http://www.firebbs.cn 
// 淘宝    : https://fire-stm32.taobao.com 
 
 
module eth_udp_loop( 
    input              sys_clk   , //系统时钟 
    input              sys_rst_n , //系统复位信号,低电平有效 
    //PL以太网RGMII接口 
    input              eth_rxc   , //RGMII接收数据时钟 
    input              eth_rx_ctl, //RGMII输入数据有效信号 
    input       [3:0]  eth_rxd   , //RGMII输入数据 
    output             eth_txc   , //RGMII发送数据时钟 
    output             eth_tx_ctl, //RGMII输出数据有效信号 
    output      [3:0]  eth_txd   , //RGMII输出数据 
    output             eth_rst_n  //以太网芯片复位信号,低电平有效 
    ); 
 
//parameter define 
//开发板MAC地址 
parameter  BOARD_MAC = 48'h12_34_56_78_9a_bc; 
//开发板IP地址 
parameter  BOARD_IP  = {8'd192,8'd168,8'd0,8'd234}; 
//目的MAC地址 
parameter  DES_MAC   = 48'hff_ff_ff_ff_ff_ff; 
//目的IP地址 
parameter  DES_IP    = {8'd192,8'd168,8'd0,8'd145}; 
 
 
//wire define 
wire          clk_phase   ; //用于IO延时的时钟 
 
wire          gmii_rx_clk; //GMII接收时钟 
wire          gmii_rx_dv ; //GMII接收数据有效信号 
wire  [7:0]   gmii_rxd   ; //GMII接收数据 
wire          gmii_tx_clk; //GMII发送时钟? 
wire          gmii_tx_en ; //GMII发送数据使能信号 
wire  [7:0]   gmii_txd   ; //GMII发送数据? 
 
 
wire          udp_gmii_tx_en; //UDP GMII输出数据有效信号 
wire  [7:0]   udp_gmii_txd  ; //UDP GMII输出数据 
wire          rec_pkt_done  ; //UDP单包数据接收完成信号 
wire          rec_en        ; //UDP接收的数据使能信号 
wire  [31:0]  rec_data      ; //UDP接收的数据 
wire  [15:0]  rec_byte_num  ; //UDP接收的有效字节数 单位:byte 
wire          udp_tx_done   ; //UDP发送完成信号 
wire          tx_req        ; //UDP读数据请求信号 
wire  [31:0]  tx_data       ; 
 
reg   [31:0]  cnt; 
reg           led_reg; 
reg           tx_flag; 
 
//***************************************************** 
//**                    main code 
//***************************************************** 
 
assign eth_rst_n = 1'b1; 
 
//MMCM/PLL 
clk_wiz_0 u_clk_phase 
( 
    .clk_in1   (eth_rxc     ),  //以太网接收时钟 
    .clk_out1  (clk_phase   ),  //经过相位偏移后的时钟 
    .reset     (~sys_rst_n  ),  //pll复位 
    .locked    (      )   //pll时钟稳定标识 
); 
 
 
//GMII接口与RGMII接口 互转 
gmii_to_rgmii u_gmii_to_rgmii( 
    .gmii_rx_clk   (gmii_rx_clk ),  //gmii接收 
    .gmii_rx_dv    (gmii_rx_dv  ), 
    .gmii_rxd      (gmii_rxd    ), 
    .gmii_tx_clk   (gmii_tx_clk ),  //gmii发送 
    .gmii_tx_en    (gmii_tx_en  ), 
    .gmii_txd      (gmii_txd    ), 
 
    .rgmii_rxc     (clk_phase   ),  //rgmii接收 
    .rgmii_rx_ctl  (eth_rx_ctl  ), 
    .rgmii_rxd     (eth_rxd     ), 
    .rgmii_txc     (eth_txc     ),  //rgmii发送 
    .rgmii_tx_ctl  (eth_tx_ctl  ), 
    .rgmii_txd     (eth_txd     ) 
    ); 
 
//UDP通信 
udp 
   #( 
    .BOARD_MAC     (BOARD_MAC),      //参数例化 
    .BOARD_IP      (BOARD_IP ), 
    .DES_MAC       (DES_MAC  ), 
    .DES_IP        (DES_IP   ) 
    ) 
   u_udp( 
    .rst_n         (sys_rst_n   ), 
 
    .gmii_rx_clk   (gmii_rx_clk ),//gmii接收 
    .gmii_rx_dv    (gmii_rx_dv  ), 
    .gmii_rxd      (gmii_rxd    ), 
    .gmii_tx_clk   (gmii_tx_clk ),//gmii发送 
    .gmii_tx_en    (gmii_tx_en  ), 
    .gmii_txd      (gmii_txd    ), 
 
    .rec_pkt_done  (rec_pkt_done),  //数据包接收结束 
    .rec_en        (rec_en      ),  //四字节接收使能 
    .rec_data      (rec_data    ),  //接收数据 
    .rec_byte_num  (rec_byte_num),  //接收到的有效数据长度 
    .tx_start_en   (rec_pkt_done),  //发送使能 
    .tx_data       (tx_data     ),  //发送数据 
    .tx_byte_num   (rec_byte_num),  //发送长度 
    .tx_done       (udp_tx_done ),  //发送结束 
    .tx_req        (tx_req      )   //四字节发送使能 
    ); 
 
//同步FIFO 
fifo_generator_0 u_sync_fifo_2048x32b ( 
    .clk      (gmii_rx_clk  ),  // input wire clk 
    .srst     (~sys_rst_n   ),  // input wire rst 
    .din      (rec_data     ),  // input wire [31 : 0] din 
    .wr_en    (rec_en       ),  // input wire wr_en 
    .rd_en    (tx_req       ),  // input wire rd_en 
    .dout     (tx_data      ),  // output wire [31 : 0] dout 
    .full     (             ),  // output wire full 
    .empty    (             )   // output wire empty 
    ); 
 
endmodule 

总结

写到这里也结束了,在文章最后放上一个小小的福利,以下为小编自己在学习过程中整理出的一个关于 java开发 的学习思路及方向。从事互联网开发,最主要的是要学好技术,而学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯,更加需要准确的学习方向达到有效的学习效果。

由于内容较多就只放上一个大概的大纲,需要更及详细的学习思维导图的 点击我的Gitee获取
还有 高级java全套视频教程 java进阶架构师 视频+资料+代码+面试题!

全方面的java进阶实践技术资料,并且还有技术大牛一起讨论交流解决问题。


本文参考链接:https://blog.csdn.net/m0_67391870/article/details/123500890
评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

Java多线程中Lock锁如何使用