K7平台的Microblaze搭建LWIP

1、概述

lwip 是瑞典计算机科学院(SICS)的 Adam Dunkels 开发的一个小型开源的 TCP/IP 协议栈。实现的重点是在保持 TCP 协议主要功能的基础上减少对 RAM 的占用。

LwIP 是 Light Weight (轻型)IP 协议,有无操作系统的支持都可以运行。LwIP 实现的重点是在保持 TCP 协议主要功能的基础上减少对 RAM 的占用,它只需十几 KB 的 RAM 和 40K 左右的 ROM 就可以运行,这使 LwIP 协议栈适合在低端的嵌入式系统中使用。

lwIP 协议栈主要关注的是怎么样减少内存的使用和代码的大小,这样就可以让 lwIP 适用于资源有限的小型平台例如嵌入式系统。为了简化处理过程和内存要求,lwIP 对 API 进行了裁减,可以不需要复制一些数据。

lwip 提供三种 API:1)RAW API 2)lwip API 3)BSD API。

RAW API 把协议栈和应用程序放到一个进程里边,该接口基于函数回调技术,使用该接口的应用程序可以不用进行连续操作。不过,这会使应用程序编写难度加大且代 码不易被理解。为了接收数据,应用程序会向协议栈注册一个回调函数。该回调函数与特定的连接相关联,当该关联的连接到达一个信息包,该回调函数就会被协议 栈调用。这既有优点也有缺点。优点是既然应用程序和 TCP/IP 协议栈驻留在同一个进程中,那么发送和接收数据就不再产生进程切换。主要缺点是应用程序不 能使自己陷入长期的连续运算中,这样会导致通讯性能下降,原因是 TCP/IP 处理与连续运算是不能并行发生的。这个缺点可以通过把应用程序分为两部分来克服,一部分处理通讯, 一部分处理运算。

lwip API 把接收与处理放在一个线程里面。这样只要处理流程稍微被延迟,接收就会被阻塞,直接造成频繁丢包、响应不及时等严重问题。因此,接收与协议处理必须 分开。LwIP 的作者显然已经考虑到了这一点,他为我们提供了 tcpip_input() 函数来处理这个问题, 虽然他并没有在 rawapi 一文中说明。讲到这里,读者应该知道tcpip_input()函数投递的消息从哪里来的答案了吧,没错,它们来自于由底层网络驱动组成的接收线程。我们在编写网络驱动时, 其接收部分以任务的形式创建。数据包到达后, 去掉以太网包头得到 IP 包, 然后直接调用tcpip_input()函数将其 投递到 mbox 邮箱。投递结束,接收任务继续下一个数据包的接收,而被投递得 IP 包将由 TCPIP 线程继续处理。这样,即使某个 IP 包的处理时间过长也不 会造成频繁丢包现象的发生。这就是 lwip API。

BSD API 提供了基于 open-read-write-close 模型的 UNIX 标准 API,它的最大特点是使应用程序移植到其它系统时比较容易,但用在嵌入式系统中效率比较低,占用资源多。这对于我们的嵌入式应用有时是不能容忍的。

2、硬件工程搭建

Step1: 添加 MIG IP 和 Clocking Wizard

图8‑100 添加 MIG IP 和 Clocking Wizard

Step2: 添加 Microblaze IP

图8‑101 添加 Microblaze IP

Step3:添加 AXI Ethernet IP。

设置 IP 如下,其他默认

图8‑102 设置 IP

然后点击 Run Block Automation

图8‑103 Run Block Automation

Step4: AXI 1G/2.5G Ethernet Subsystem 中 gtx_clk 的输入时钟是 125Mhz ref_clk 的输入时钟是 200Mhz,作为其内部 IDELAYCTRL 的参考时钟。

通过 AUTO 自动连接,vivado 会自动通过 clk_wiz_0 输出时钟。

然后点击 Run Connection Automation

图8‑104 Run Connection Automation

其中 m_axi_sg_aclk 和 s_axi_lite_clk 及 m_axi_mm2s_aclk 都是系统时钟 100Mhz,将连接到一起。

图8‑105 IP连接

Step5: 添加 AXI Timer 和 axi_uartlite IP

图8‑106 添加 AXI Timer 和 axi_uartlite IP

Step6: 点击 Run Connection Automation。

图8‑107 点击 Run Connection Automation

Step7: 连接中断

将 microblaze_0_xlconcat 的 Number of Ports 设置为 5

图8‑108 连接中断

Step8:axi_ethernet_0_dma 的中断 mm2s_introut、s2mm_introut 连接到 microblaze_0_xlconcat 两个端口上

图8‑109 连接中断

Step9:将axi_ethernet_0 的 mac_irq、interrupt 连接到 microblaze_0_xlconcat 两个端口上

图8‑110 连接中断

Step10:将 axi time 的 interrupt 连接到 microblaze_0_xlconcat 最后一个端口上

图8‑111 连接中断

完成的硬件原理图

图8‑112 完成的硬件原理图

Step11:连接完成后,添加 xdc 文件,然后 Generate output,生成顶层文件

图8‑113 完成

8.5.6.3 LWIP库的修改

Xilinx SDK 目录下面 xaxiemacif_physpeed.c 文件里面对 PHY 芯片有驱动,目前支持 MARVEL 和 TI 的部分 PHY 芯片,如果使用其他厂家的 PHY 芯片,需要更改驱动,否则协商不能通过。

首先,找到 SDK 安装目录下的 LWIP 库的路径,例如:

C:\Xilinx\SDK\2017.4\data\embeddedsw\ThirdParty\sw_service

将lwip141_v1_7 文件夹复制一份到工程目录的 sdk_repo\bsp 文件夹下,将其重新命名为 lwip141_v2_04。第一步,修改 lwip141_v2_04\data\lwip141.mld 文件(可用 Notapad++等编辑器打开),将其中的版本编号。

OPTION VERSION = 2.0;

修改为

OPTION VERSION = 2.08;

由于

打开 lwip141_v2_04\src\contrib\ports\xilinx\netif\xaxiemacif_physpeed.c 源文件,增加宏定义

#define Broadcom_PHY_IDENTIFIER      0x143

图8‑114 代码分析

8.5.6.4 软件设计

新建SDK工程,导入修改过的lwip库文件

图8‑115 导入修改过的lwip库文件

新建LWIP工程

图8‑116 新建LWIP工程

设置BSP文件

图8‑117 设置BSP文件

测试

图8‑118 测试

8.5.6.5 需要注意的问题

根据不同的 PHY 芯片修改 LWIP 底层

Xilinx SDK 目录下面 xaxiemacif_physpeed.c 文件里面对 PHY 芯片有驱动,目前支持 MARVEL 和 TI 的部分 PHY 芯片,如果使用其他厂家的 PHY 芯片,需要更改驱动,否则协商不能通过。

在Microblaze 的 AXI Ethernet 里面有对 RGMII 接口的时序约束,不同的芯片需要修改约束的时间,如果差别不是很大则不修改也可以进行工作。

OUTPUT DELAY约束

需要注意是,在 AXI 1G/2.5G Ethernet Subsystem 中,rgmii_txc 的发送时钟 gtx_clk90,与 rgmii_td、rgmii_tx_ctl 的发送时钟 gtx_clk 存在 90°即 2ns 的相位差。因此,此时 PHY 芯片 RGMII 的 TX 接口时序不能使用默认的内部延迟模式,需要使用外部模式,其时序关系如下图。

照上图中的 setup time 和 hold time, output delay 的 min 应该为-0.8ns, max 应该为 1.0ns。忽略 PCB 延迟

·INPUT DELAY约束

对于 input,需要使能内部延迟模式,

按照上图中的 setup time  和 hold time,input delay 的 min 应该为-(4-1.2)=-2.8ns,max =-1.2ns。忽略 PCB 延迟

因此需要查看 PHY 芯片的寄存器,确认使用 TX 外部模式,RX 使用内部延迟模式。

推荐阅读

Xilinx原语的用法

例说七层OSI参考模型

TCP/IP模型

TCP和UDP

以太网遵循的IEEE 802.3 标准

媒体访问控制(MAC,Media Access Control)

媒体独立接口(MII,Meida Independent Interface)

GMII、SGMII和SerDes的区别和联系

PHY(Physical Layer,PHY)通俗理解

FPGA实现网口通信的几种方式

千兆网UDP通信

FPGA千兆网TCP通信分析

基于FPGA的网口通信实例设计

基于UDP/IP协议的电口通信(一)

基于UDP/IP协议的电口通信(二)

基于UDP/IP协议的电口通信(三)

基于原语的千兆以太网RGMII接口设计
PHY_MDIO 接口设计

利用 IBERT 进行 GTX 信号眼图测试

Aurora 8B/10B光口通信
基于UDP/IP协议的光口通信
一大波HLS设计资料来了

2020版深入浅出玩转FPGA视频教程

点击上方字体即可跳转阅读哟

Microblaze搭建LWIP相关推荐

  1. 10G以太网光口与Aurora接口回环实验

    10G以太网光口与高速串行接口的使用越来越普遍,本文拟通过一个简单的回环实验,来说明在常见的接口调试中需要注意的事项.各种Xilinx FPGA接口学习的秘诀:Example Design.欢迎探讨. ...

  2. 100G以太网光口的FPGA测试实例

    100G光口测试采用C50测试仪和Xilinx的VCU118开发板测试,经过测试发现,Xilinx自带的100G IP核仍然无法跑到满速,跟10G一样,也是只跑到99%的负载率.另外,工具的版本和Li ...

  3. xilinx中文社区论坛网址

    https://forums.xilinx.com/t5/赛灵思中文社区论坛/ct-p/Chinese Openhw 社区:www.openhw.org/bbs http://xilinx.eetre ...

  4. zynq tcp如何从网口发数据_基于TCP/IP协议的电口通信

    之前有介绍过TCP/IP协议的实现是通过轻量级LWIP协议实现的,具体在FPGA中实现又可以分为多种方式,具体如下: 图8‑98 LWIP协议在FPGA中的实现方式 LWIP可以通过硬核实现或者软核实 ...

  5. 【JokerのKintex7325】SDK程序从QSPI启动过慢分析。

    软件环境:vivado 2018.1        硬件平台:XC7K325 接上篇文章最后的问题,microblaze的lwip工程从qspi启动需要7.8分钟,时间过长的问题排查感觉可以从以下几个 ...

  6. 第四章 DDR3和FLASH 基于ARTY A7的MicroBlaze系统搭建与应用

    DDR3和FLASH 基于ARTY A7的MicroBlaze系统搭建与应用 说明 实验过程 搭建microblaze 打开vitis flash烧写(重点) 验证 细节注意 说明 一般芯片是用内部存 ...

  7. 第六期 自定义IP添加-PWM 基于ARTY A7的MicroBlaze系统搭建与应用

    第六期 自定义IP添加-PWM 基于ARTY A7的MicroBlaze系统搭建与应用 说明 演示:在软核中添加自定义的ip bd文件的编辑 vitis文件 说明 直接在cpu中添加p产生pwm的IP ...

  8. 第五期 中断设计 基于ARTY A7的MicroBlaze系统搭建与应用

    第五期 中断设计 基于ARTY A7的MicroBlaze系统搭建与应用 GPIO的中断 GPIO的中断--vitis部分 串口的中断 分析:GPIO,串口的中断怎么体现出来? GPIO的中断 (1) ...

  9. 【Vivado那些事儿】MicroBlaze最小系统搭建及程序固化

    MicroBlaze是AMD-Xilinx提供的一个可以在FPGA中运行的嵌入式软核IP,其本质是一个32位RISC处理器软核,可以在150MHz时钟下,提供125 D-MIPS性能,具有运行速度快. ...

最新文章

  1. linux libffi 简介 高级语言互调库
  2. Python 学习笔记 -- 继承与多态(入门级实例)
  3. 【面经】蚂蚁金服一二三面的面经总结(内推实习方面)
  4. 【计算机网络】网络基础
  5. 对WinForm的App.config文件进行加密
  6. ZOJ3953 Intervals
  7. 人脸识别-YOLOv5模型目标检测
  8. vue 点击图片放大预览
  9. html5中required标签必填项
  10. 电脑怎么修改照片尺寸?图片改大小如何改?
  11. 写于即将23岁的前端转正前夕
  12. ept技术_[讨论]R3检测EPT方式HOOK页面的方案(20170919更新-已解决)
  13. Large Scale Spectral Clustering with Landmark-Based Representation
  14. 【JDK7】新特性(7) 监听文件系统的更改
  15. Python之进程 3 - 进程池和multiprocess.Poll
  16. 《夏目友人帐:结缘空蝉》-二丫影院在线观看
  17. 蓝牙4.0知识百科1 什么是BLE4.0
  18. 解决抖音爱心动画实现
  19. OpenCV实战(7)——OpenCV色彩空间转换
  20. 最好用的图像处理软件推荐:风格迥异的靠谱专业还简单的图像处理软件首选Chasys Draw IES

热门文章

  1. SpringBoot中使用注解来实现 Redis 分布式锁
  2. CSDN 小秘书免责声明
  3. CH7218A USB-C Type-C/ DP 1.4 to HDMI 2.1 8K设计方案|替代CH7218A芯片|GSV6201可完全替代兼容 CH7218A
  4. 如何在linux部署pdf文档,LINUX安装部署文档.pdf
  5. 土木工程模板计算机专业,土木工程专业职业生涯规划模板(5页)-原创力文档...
  6. SDNUOJ 1089
  7. 怎么查看自己的路由器是不是千兆路由?
  8. 视觉设计师跟平面设计_视觉设计综合介绍
  9. stm32f103c8t6 TIM2定时器1ms中断
  10. 专业课的认识和英语的自我学习,fulfillingly!