MAC IP核的主要作用是:实现数据链路层协议,分为TX方向与RX方向,TX方向实现的是在原包文的前面加上7个55和1个D5,RX方向则相反。在使用这个 MAC IP核之前,首先确认下自己使用的网卡是支持千兆网卡还是百兆网卡,我自己的电脑是百兆网卡,百兆网卡只支持百兆速率的传输,要按照百兆网卡进行管脚配置。

管脚配置

根据数据手册P54、P55进行硬件管脚引出:

千兆网连接模式

千兆网的PHY芯片数据接收与发送管脚txd与rxd均是8bit,需要用pll倍频125M给PHY芯片的gtx_clk以及MAC IP核的tx_clk,PHY芯片会根据发送速率产生一个随路时钟给MAC IP核的rx_clk。

百兆网连接模式

百兆网的PHY芯片数据接收与发送管脚txd与rxd均是4bit,并且只需要给一个Reference Clock 至PHY芯片,PHY芯片就会产生25M的tx_clk与rx_clk至MAC IP核,这里注意要把m_rx_col 与m_rx_crs芯片管脚也引出来作为MAC IP核的m_rx_col 与m_rx_crs输入,要注意的是千兆网PHY芯片的使用是不需要这两个管脚的。

MAC IP核生成注意事项

如果选择的是生成32bit数据位宽的内部 FIFO,那么“Align packet headers to 32-bit boundary"就是一个可选择项,具体见数据手册:

特别要注意的是:

“Align packet headers to 32-bit boundary"这个选项的作用就是为了对齐数据,自动往TX方向/RX方向减少或者增加两个字节。因为按照TX方向发送包文格式:

目的地址(6字节)+源地址(6字节)+类型(2字节)+数据

目的地址(6字节)+源地址(6字节)+类型(2字节)=14(字节),MAC 内部FIFO是32bit,也就是一次发送4byte,14字节不是4的倍数,因此,“Align packet headers to 32-bit boundary"这个选项是为了对齐数据,避免一个时钟周期内地址与数据混合发送,如果不勾选此选项,FPGA与PC端通讯的数据字节数会保持一致。

传输速率要求

1、对于千兆网,只要保证用户侧速率>1G即可;

2、对于百兆网,只要保证用户侧速率>100M即可;

我这里选用32bit的内部FIFO,用PLL分频出10M时钟给MAC IP核的ff_tx_clk 、ff_rx_clk以及clk,这样用户侧速率就是32bit X 10M > 100M,符合速率传输要求。

MAC IP核的初始化配置

关于MAC IP核的初始化配置非常重要,如果实在看不懂Command_config Register的配置,请严格按照数据手册P97-P98配置即可

唯一要注意的是最后要保证TX与RX的使能端口已经开启,因此最后要读下16‘h02这个地址,以确保Command_config Register 已经等于0x00800223。

我的初始化配置表如下所示:

parameter      REG_NUM =       ; 

always  @(*)begin
case(reg_cnt)
:add_wdata = {'b110,8'h02,'h00802220};//common
:add_wdata = {'b110,8'h09,'d2032 };//tx_section_emty
:add_wdata = {'b110,8'h0e,'d4 };//tx_almost_full
:add_wdata = {'b110,8'h0d,'d08 };//tx_almost_empty
:add_wdata = {'b110,8'h07,'d2032 };//rx_section_empty
:add_wdata = {'b110,8'h0c,'d08 };//rx_almost_full
:add_wdata = {'b110,8'h0b,'d08 };//rx_almost_emty
:add_wdata = {'b110,8'h0a,'d16 };//tx_section_full
:add_wdata = {'b110,8'h08,'d16 };//rx_section_full
:add_wdata = {'b110,8'h03,'h01020304};//MAC0
:add_wdata = {'b110,8'h04,'h00000605};//MAC1
:add_wdata = {'b110,8'h05,'d1518 };//MAX FRAME LENGTH
:add_wdata = {'b110,8'h17,'d12 };//TX IPG LEGNTH
:add_wdata = {'b110,8'h06,'h0000ffff};//pause_quant :add_wdata = {'b110,8'h02,'h00800220};//.. :add_wdata = {'b110,8'h02,'h00802220};//common,rst,set SW_RESET bit to 1
:add_wdata = {'b001,8'h00,'h00010_0000};//wait
:add_wdata = {'b010,8'h02,'h00800220 };//wait
:add_wdata = {'b110,8'h02,'h00800223};//common,enable tx and rx // default:add_wdata = ;
endcase
end

PHY芯片的复位时间

由数据手册可以看到,PHY芯片的上电复位时间至少要维持10ms,以50M输入时钟为例,我的设计如下:

always @(posedge clk or negedge rst_n)begin
if(!rst_n)begin
cnt_phy_reset <= ;
end
else if(add_cnt_phy_reset)begin
if(end_cnt_phy_reset)
cnt_phy_reset <= ;
else
cnt_phy_reset <=cnt_phy_reset + ;
end
end assign add_cnt_phy_reset = flag== ;
assign end_cnt_phy_reset = add_cnt_phy_reset && cnt_phy_reset== 10_00_000 ; //拉低10ms always @(posedge clk or negedge rst_n)begin
if(rst_n=='b0)begin
flag <= ;
end
else if(end_cnt_phy_reset)begin
flag <= ;
end
end always @(posedge clk or negedge rst_n)begin //phy_reset
if(rst_n=='b0)begin
phy_reset <= ;
end
else if(flag==&&add_cnt_phy_reset && cnt_phy_reset == 500_000)begin
phy_reset <= ;
end
else if(end_cnt_phy_reset)begin
phy_reset <= ;
end
end

测试验证

TX 方向: 初始化完成后,自动产生MAC 层包文,经过MAC IP 进行数据链路层处理后,将包文发 给PHY 芯片RTL8211,PHY 芯片经过PHY 层处理后再传给PC,PC 使用wireshark 软件采集包文观察。

RX 方向: PC 发广播包文给PHY 芯片,PHY 芯片经过PHY 层处理后送给FPGA,FPGA 接到后经过数据链路层处理后,用SIGNALTAP 观测最后的信号。

用到的辅助测试软件:

1、小兵发包:往FPGA 发数据

2、wireshark:捕获发送与接收包文

TX方向,FPGA往PC发128字节长度的广播包

PC端收到完好的128个字节的广播包

(2)RX方向

小兵发64字节的广播包

FPGA收到完好的64个字节的广播包

至此,有关该MAC IP核百兆网的设计与使用完毕,有关MAC IP核千兆网的使用与它类似,只需要注意PHY芯片的gtx_clk时钟由PLL倍频得到125M作为输入以及接收/发送数据端口均为8bit即可。

注意:未经允许,禁止转载,违法必究!

Altera三速以太网IP核使用(下篇)--- 百兆网接口设计与使用的更多相关文章

  1. Altera三速以太网IP核快速仿真与使用(上篇)

    对于比较高级的ip核,altera一般都会提供仿真案例,网上有关于这个IP核的各种仿真方法,但都比较繁琐,前几日,朋友跟我分享了一个比较快速高效的仿真方法,这个方法也是他摸索折腾了一段时间才总结出来的 ...

  2. 用Modelsim SE 直接仿真 Altera(Intel PSG) IP核 需要注意的问题

    如果我们直接用Modelsim SE仿真 Altera IP核,首先会进入Quartus II目录下找到IP核对应的仿真库源文件,然后在Modelsim SE中进行编译,添加到Modelsim SE的 ...

  3. 浅析Xilinx 三速以太网MAC IP核

    之前在使用Altera的三速以太网MAC IP的基础上,完成了UDP协议数据传输.此次为了将设计移植到xilinx FPGA上,需要用到xilinx的三速以太网MAC IP核,当然也可以自己用HDL编 ...

  4. EMAC IP 核

    在有线连接的世界里,以太网(Ethernet)无所不在.以太网具有各种速度模式.接口方式.以及灵活的配置方式.现在的以太网卡都是10/100/1000Mbps自适应网卡.以太网的物理层(PHY)通常使 ...

  5. 从Xilinx FFT IP核到OFDM

    笔者在校的科研任务,需要用FPGA搭建OFDM通信系统,而OFDM的核心即是IFFT和FFT运算,因此本文通过Xilinx FFT IP核的使用总结给大家开个头,详细内容可查看官方文档PG109.关于 ...

  6. dubbo调用外网接口 注册外网ip到zookeeper 暴露外网ip

    dubbo注册时会通过主机名寻找ip,会将内网ip注册到zookeeper 如果我们调用外网服务器server的话是找不到的 会报如下错误 [DUBBO] client reconnect to 12 ...

  7. IP核之初——FIFO添加以太网MAC头部

    本文设计思路源自明德扬至简设计法.在之前的几篇博文中,由于设计比较简单,所有的功能都是用verilogHDL代码编写实现的.我们要学会站在巨人的肩膀上,这时候就该IP核登场了! 说白了,IP核就是别人 ...

  8. 调用altera IP核的仿真流程—下

    调用altera IP核的仿真流程—下 编译 在 WorkSpace 窗口的 counter_tst.v上点击右键,如果选择Compile selected 则编译选中的文件,Compile All是 ...

  9. 调用altera IP核的仿真流程—上

    调用altera IP核的仿真流程—上 在学习本节内容之后,请详细阅读<基于modelsim-SE的简单仿真流程>,因为本节是基于<基于modelsim-SE的简单仿真流程>的 ...

随机推荐

  1. 解决python3 UnicodeDecodeError: 'gbk' codec can't decode byte

    本来想写个html来玩玩,结果读取文件得时候就BUG了.... 以下代码读取html中无中文没有问题. def handle_request(client): buf = client.recv(10 ...

  2. Java中面向对象三大特征

    也就是说在这里"人"是多态的, 在不同的形态时,特征行为是不一样的, 这里的"人", 同时有两种形态,一种是教师形态,一种是学生形态,所对应的特征行为分别是&q ...

  3. [UOJ 0034] 多项式乘法

    #34. 多项式乘法 统计 描述 提交 自定义测试 这是一道模板题. 给你两个多项式,请输出乘起来后的多项式. 输入格式 第一行两个整数 nn 和 mm,分别表示两个多项式的次数. 第二行 n+1n+ ...

  4. windows系统查看端口占用程序方法

    开始---->运行---->cmd,或者是window+R组合键,调出命令窗口   输入命令:netstat -ano,列出所有端口的情况.在列表中我们观察被占用的端口,比如是49157, ...

  5. Client/Server 模型 与socket

    Client/Server 模型  Sockets 是以 Client 和 Server 交互通信方式来使用的.典型的系统配置是把 Server 放在一台机器中,而把 Client 放在另一台机器中, ...

  6. 高性能 Socket 组件 HP-Socket v3.2.1-RC3 公布

    HP-Socket 是一套通用的高性能 TCP/UDP Socket 组件,包括服务端组件.client组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统.提供 C/C+ ...

  7. 【Oracle123】向OracleDB导入*.csv文件数据

    SQL*Loader Control File Reference https://docs.oracle.com/cd/B10501_01/server.920/a96652/ch05.htm Or ...

  8. MyBatis(2)-全局配置文件

    本文的代码是在MyBatis(1)-简单入门基础之上进行学习的,如有不懂请先看此博文MyBatis(1)-简单入门! 1)配置文件的安装 --->在联网的情况下,点击去下载http://myba ...

  9. CC2640R2F&TI-RTOS 拿到 TI CC2640R2F 开发板 第一件事就是移植串口驱动,重定向 printf

    /* * board_uart.c * * Created on: 2018年7月3日 * Author: admin */ #include "board_uart.h" #in ...

  10. git 从远程仓克隆到本地新分支

    克隆远程仓代码到本地 git clone  http://******:8080/DEV1-WMALL_DQ/WMALL_DQ_Front.git    // git 库地址 当前分支是master ...