手头的FPGA开发板上有一个千兆网口,最近准备做一下以太网通信的内容。本文先介绍基本的理论知识。
FPGA芯片型号:xc7a35tfgg484-2
网口芯片(PHY):RTL8211
网络接口:RJ45
以太网是一种计算机局域网技术。IEEE组织的IEEE 802.3标准制定了以太网的技术标准,它规定了包括物理层的连线、电子信号和介质访问层协议的内容。以太网是应用最普遍的局域网技术。
以太网传输速率:10Mbps、100Mbps、1000Mbps、10Gbps
以太网的接口类型有,RJ45接口、RJ11接口,SC光纤接口等。RJ45的接口插头和插座的示意图:
RJ-45接口定义:
提到以太网,就要先简单说下 OSI(Open System Interconnection) 7层网络模型:
应用层:网络服务与最终用户的一个接口。协议有HTTP 、FTP、 TFTP、 SMTP、 SNMP、 DNS、 TELNET、 HTTPS、 POP3、 DHCP
表示层:数据的表示、安全、压缩。格式有,JPEG、ASCll、EBCDIC、加密格式等
会话层:建立、管理、终止会话。对应主机进程,指本地主机与远程主机正在进行的会话
传输层:定义传输数据的协议端口号,以及流控和差错校验。协议有TCP、 UDP,数据包一旦离开网卡即进入网络传输层
网络层:进行逻辑地址寻址,实现不同网络之间的路径选择。协议有ICMP、 IGMP 、IP(IPV4 IPV6)
数据链路层:建立逻辑连接、进行硬件地址寻址、差错校验等功能。(由底层网络定义协议)将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。
物理层:建立、维护、断开物理连接。(由底层网络定义协议)
对于FPGA实现以太网数据传输(主要是局域网)来说,最主要的就是 数据链路层、 物理层。
MAC(Media Access Control Address)就是媒体接入控制器。以太网MAC由IEEE-802.3以太网标准定义。它实现了一个数据链路层。最新的MAC同时支持10/100/1000Mbps速率。通常情况下,它实现MII/GMII/RGMII接口,来同行业标准PHY器件实现接口。
对于FPGA的应用来说,MAC层的实现就在 FPGA侧通过RTL代码编程实现。
MAC地址也叫物理地址、硬件地址,由网络设备制造商生产时烧录在网卡的EPROM。IP地址与MAC地址在计算机里都是以二进制表示的,IP地址是32位的,而MAC地址则是48位的 。
MAC地址的长度为48位(6个字节),通常表示为12个16进制数,如:00-16-EA-AE-3C-40就是一个MAC地址,其中前3个字节,16进制数00-16-EA代表网络硬件制造商的编号,它由IEEE(电气与电子工程师协会)分配,而后3个字节,16进制数AE-3C-40代表该制造商所制造的某个网络产品(如网卡)的系列号。只要不更改自己的MAC地址,MAC地址在世界是唯一的。
PHY是物理接口收发器,它实现物理层。IEEE-802.3标准定义了以太网PHY。它符合IEEE-802.3k中用于10BaseT和100BaseTX的规范。
开发板上用到的网络芯片 RTL8211就是负责物理层。
PHY芯片在发送数据时,首先将MAC发过来的并行数据转化为串行流数据,按照物理层的编码规则把数据编码转换为模拟信号通过网口发送出去,接收数据的流程反之。
当我们给网卡接入网线的时候,PHY芯片不断发出脉冲信号来检测对端是否有设备,它们通过标准的“语言”交流,互相协商并确定连接速度、双工模式、是否采用流控等。通常情况下,协商的结果是两个设备中能同时支持的最大速度和最好的双工模式。这个技术被称为自动协商。
附:RTL8211芯片手册给出的IEEE802.3自协商优先级规定:
FPGA与PHY芯片、网络接口的连接关系:
MII(Medium Independent Interface)媒体独立接口,主要针对十兆/百兆以太网通信。
针脚名称 | 输入/输出 (相对MAC侧而言) | 位宽 | 含义 |
TX_ER | 输出 | 1 | Transmit Error,发送数据错误提示信号; 同步于TX_CLK,高电平有效,表示TX_ER 有效期内传输的数据无效。 对于10Mbps 速率下,TX_ER 不起作用。 |
TX_EN | 输出 | 1 | Transmit Enable,发送使能信号,只有在TX_EN 有效(高电平)期内传的数据才有效。 |
TX_CLK | 输入 | 1 | 发送数据参考时钟。 🔶100Mbps 速率下,时钟频率为 25MHz。 🔷10Mbps 速率下,时钟频率为 2.5MHz 。 该时钟是由 PHY侧提供。 |
TXD | 输出 | 4 | TransmitData ,数据发送信号,共 4 根信号线。 |
RX_ER | 输入 | 1 | Receive Error 接收数据错误提示信号; 同步于 RX_CLK高电平有效,表示 RX_ER 有效期内传输的数据无效。对于10Mbps 速率下, RX_ER 不起作用 。 |
RX_DV | 输入 | 1 | Reveive Data Valid 接收数据有效信号;拉高时表示接收数据有效。 |
RXD | 输入 | 4 | ReceiveData ,数据接收信号,共 4 根信号线。 |
RX_CLK | 输入 | 1 | 接收数据参考时钟。 🔶100Mbps 速率下,时钟频率为 25MHz。 🔷10Mbps 速率下,时钟频率为 2.5MHz 。 该时钟是由 PHY侧提供。 |
CRS | 输入 | 1 | Carrier Sense ,载波侦测信号,不需要同步于参考时钟,只要有数据传输, CRS 就有效 。 需要注意的是 CRS 只有 PHY在半双工模式下有效 。 |
COL | 输入 | 1 | Collision Detectd ,冲突检测信号,不需要同步于参考时钟 。 需要注意的是 CRS 只有 PHY 在半双工模式下有效 |
MAC 侧向 PHY 侧传输数据的时序图如下:
PHY 侧向 MAC 侧传输数据的时序图如下:
GMII(Gigabit Medium Independent Interface)媒体独立接口,主要针对十兆/百兆/千兆以太网通信。
针脚名称 | 输入/输出 (相对MAC侧而言) | 位宽 | 含义 |
TX_ER | 输出 | 1 | Transmit Error,发送数据错误提示信号; 同步于GTX_CLK,高电平有效,表示TX_ER 有效期内传输的数据无效。 对于10Mbps 速率下,TX_ER 不起作用。 |
TX_EN | 输出 | 1 | Transmit Enable,发送使能信号,只有在TX_EN 有效(高电平)期内传的数据才有效。 |
GTX_CLK | 输出 | 1 | 发送参考时钟,时钟频率为125MHz 。 需要注意的是GTX_CLK 时钟的方向是从 MAC 侧指向 PHY 侧的,此时钟是由 MAC 提供的 ,这里与 MII 接口有所差别的地方。 |
TXD | 输出 | 8 | TransmitData ,数据发送信号,共 8 根信号线。 |
RX_ER | 输入 | 1 | Receive Error 接收数据错误提示信号; 同步于 RX_CLK高电平有效,表示 RX_ER 有效期内传输的数据无效。对于10Mbps 速率下, RX_ER 不起作用 。 |
RX_DV | 输入 | 1 | Reveive Data Valid 接收数据有效信号;拉高时表示接收数据有效。 |
RXD | 输入 | 8 | ReceiveData ,数据接收信号,共 8 根信号线。 |
RX_CLK | 输入 | 1 | 接收数据参考时钟,时钟频率为 125MHz 。 RX_CLK 是由PHY 侧提供的。 |
CRS | 输入 | 1 | Carrier Sense ,载波侦测信号,不需要同步于参考时钟,只要有数据传输, CRS 就有效 。 需要注意的是 CRS 只有 PHY在半双工模式下有效 。 |
COL | 输入 | 1 | Collision Detectd ,冲突检测信号,不需要同步于参考时钟 。 需要注意的是 CRS 只有 PHY 在半双工模式下有效 |
RGMII(Reduced Gigabit Medium Independent Interface)媒体独立接口,主要针对十兆/百兆/千兆以太网通信。GMII 的简化版本,将接口信号线数量从24 根减少到 14 根,时钟频率仍旧为125MHz TX/RX 数据宽度从 8 为变为 4 位。
针脚名称 | 输入/输出 (相对MAC侧而言) | 位宽 | 含义 |
TX_ER | 输出 | 1 | 该信号线上传送 GMII 接口中的 TX_EN 和 TX_ER 两种信息,在 TX_CLK 的上升沿发送 TX_EN ,下降沿发送 TX_ER 。 |
TX_CLK | 输出 | 1 | 发送参考时钟,1000Mbps 速率下,时钟频率为时钟频率为125MHz 。 需要注意的是TX_CLK 时钟的方向是从 MAC 侧指向 PHY 侧的,此时钟是由 MAC 提供的 ,这里与 MII 接口有所差别的地方。 |
TXD | 输出 | 4 | 在时钟 TX_CLK 的上升沿发送 GMII 接口中的 TXD[3:0] 在时钟 TX_CLK 的下降沿发送 GMII 接口中的 TXD[7:4] 。 |
RX_DV | 输入 | 1 | 该信号线上传送 GMII 接口中的 RX_DV 和 RX_ER 两种信息,在 RX_CLK 的上升沿 传输 RX_DV ,下降沿 传输RX_ER |
RXD | 输入 | 4 | 时钟RX_CLK 的上升沿 传输 GMII 接口中的 RXD[3:0] 0],在时钟 RX_CLK 的下降沿发送 GMII 接口中的 RXD[7:4] 。 |
RX_CLK | 输入 | 1 | 接收数据参考时钟,时钟频率为 125MHz 。 RX_CLK 是由PHY 侧提供的。 |
CRS | 输入 | 1 | Carrier Sense ,载波侦测信号,不需要同步于参考时钟,只要有数据传输, CRS 就有效 。 需要注意的是 CRS 只有 PHY在半双工模式下有效 。 |
COL | 输入 | 1 | Collision Detectd ,冲突检测信号,不需要同步于参考时钟 。 需要注意的是 CRS 只有 PHY 在半双工模式下有效 |
RGMII 接口为了保持1000Mbps 的传输速率不变,RGMII 接口在时钟的上升沿和下降沿都采样数据。在参考时钟的上升沿发送GMII 接口中的TXD[3:0]/RXD[3:0],在参考时钟的下降沿发送GMII 接口中的TXD[7:4]/RXD[7:4]。RGMII 同时也兼容100Mbps 和10Mbps 两种速率,此时参考时钟速率分别为25MHz 和2.5MHz。TX_EN 信号线上传送TX_EN 和TX_ER 两种信息,在TX_CLK 的上升沿,下降沿发送TX_ER;同样的,RX_DV 信号线上也传送RX_DV 和RX_ER 两种信息,在RX_CLK 的上升沿传输RX_DV,下降沿传输RX_ER。
RJ-45的四对差分数据线接PHY芯片RTL8211输出的四队差分数据线。此外PHY输出的LED灯控制信号输出控制RJ-45的黄绿灯状态。
一般来说,黄灯闪烁代表有数据传输,绿灯常亮代表与对端网口互联成功。
RGMII/GMII模式的切换通过外部跳线帽实现,因为芯片手册声明:
PHY的物理地址:3'b001
【2】RTL8211芯片手册
【3】芯路恒开发板资料
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO
需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc
我正在寻找用于Rails的优质管理插件。似乎大多数现有的插件/gem(例如“restful_authentication”、“acts_as_authenticated”)都围绕着self注册等展开。但是,我正在寻找一种功能齐全的基于管理/管理角色的解决方案——但不是简单地附加到另一个非基于角色的解决方案。如果我找不到,我想我会自己动手......只是不想重新发明轮子。 最佳答案 RyanBates最近做了两个关于授权的railscast(注意身份验证和授权之间的区别;身份验证检查用户是否如她所说的那样,授权检查用户是否有权访问资源
我正在根据Rakefile中的现有测试文件动态生成测试任务。假设您有各种以模式命名的单元测试文件test_.rb.所以我正在做的是创建一个以“测试”命名空间内的文件名命名的任务。使用下面的代码,我可以用raketest:调用所有测试require'rake/testtask'task:default=>'test:all'namespace:testdodesc"Runalltests"Rake::TestTask.new(:all)do|t|t.test_files=FileList['test_*.rb']endFileList['test_*.rb'].eachdo|task|n
我想要像“嘿那里”这样的东西变成,例如,#316583。我希望将任意长度的字符串“归结”为十六进制颜色。我不知道从哪里开始。我在想,每个字符串的MD5散列都是不同的-但如何将该散列转换为十六进制颜色数字? 最佳答案 你可以只取几位前几位:require'digest/md5'color=Digest::MD5.hexdigest('Mytext')[0..5] 关于ruby-如何使用Ruby基于字母数字字符串生成颜色?,我们在StackOverflow上找到一个类似的问题:
文章目录1.自动驾驶实战:基于Paddle3D的点云障碍物检测1.1环境信息1.2准备点云数据1.3安装Paddle3D1.4模型训练1.5模型评估1.6模型导出1.7模型部署效果附录show_lidar_pred_on_image.py1.自动驾驶实战:基于Paddle3D的点云障碍物检测项目地址——自动驾驶实战:基于Paddle3D的点云障碍物检测课程地址——自动驾驶感知系统揭秘1.1环境信息硬件信息CPU:2核AI加速卡:v100总显存:16GB总内存:16GB总硬盘:100GB环境配置Python:3.7.4框架信息框架版本:PaddlePaddle2.4.0(项目默认框架版本为2.3
在Rails中,什么是集成更新模型某些元素的UDP监听过程的最佳方式(特别是它将向其中一个表添加行)。简单的答案似乎是在同一个进程中使用UDP套接字对象启动一个线程,但我什至不清楚我应该在哪里做适合Rails方式的事情。有没有一种巧妙的方法来开始收听UDP?具体来说,我希望能够编写一个UDPController并在每个数据报消息上调用一个特定的方法。理想情况下,我希望避免在UDP上使用HTTP(因为它会浪费一些在这种情况下非常宝贵的空间),但我完全控制消息格式,因此我可以为Rails提供它需要的任何信息。 最佳答案 Rails是一个