基于FPGA状态机设计实现EtherCAT从站_fpga 从站-程序员宅基地

技术标签: fpga开发  ETHERCAT  

0 引言
EtherCAT是由BECKHOFF提出的在工业控制领域获得广泛应用的现场总线之一,该总线具备全双工工作模式,可基于主站(Master)和从站(Slave)连接的模式实现数据传递,且具有低延时、高安全性的特点。EtherCAT从站控制器ESC(EtherCAT Slave Controller)是从站模块实现EtherCAT通信协议的关键,目前国内基于EtherCAT协议的通信功能基本都采用ET1100/ET1200等从站芯片来实现[1-4]。然而,由于这类芯片除基本通信功能外,还具备大量其他功能,而此类额外通信机制并不对我国技术人员公开,造成对此类通信芯片还无法实现完全自主可控,采用有效的安全机制提升系统安全性更是无从谈起。随着工业控制领域的信息安全问题日益突出,此类不可自主可控通信芯片的应用给我国核心控制系统的运行引入一定安全风险。为了实现对控制系统用通信芯片的完全自主可控,基于FPGA实现EtherCAT通信协议的自主化开发显得非常必要,同时也是采用自主安全机制提升通信系统安全能力的重要前提。

基本通信链路是实现收发EtherCAT协议数据的核心,因此,本研究基于EtherCAT协议特征及数据传递机制,设计关键通信节点的FPGA状态机,验证FPGA实现EtherCAT从站控制器基本通信链路功能的可行性,为完善EtherCAT其他通信功能及安全机制奠定重要基础。

1 EtherCAT从站控制器框架
EtherCAT主站与各从站之间的通信链路如图1所示。通信过程中,数据帧遍历所有从站设备,数据帧通过某一从站时,从站设备根据报文命令分析寻址到本机报文并进行读/写数据到指定位置,数据帧到达最后一个从站后,该从站把处理后的数据帧发送给主站。主站收到此上行电报后处理返回数据,一次通信结束[5-6]。

 

EtherCAT从站控制器主要包括数据帧处理单元、EBUS接口编码/解码模块、Auto-forwarder模块、Loop-back funcTIon模块等。以ET1100/ET1200从站控制器为例,其内部框架如图2所示,主要包括MII、EBUS接口,EtherCAT数据帧处理单元,现场总线内存管理单元(FMMU,Fliedbus Memory Management Unit),存储同步管理通道(SM,SyncManager),分布时钟,PDI接口,ESC地址空间(包括寄存器和用户数据存储器),EEPROM控制,以及状态控制、中断、看门狗和物理层管理等部分。

 

其中,帧处理单元(EtherCAT Processing Unit)分析并处理EtherCAT数据流。现场总线内存管理单元(FMMU,Fliedbus Memory Management Unit)是EtherCAT从站控制IP核中的核心模块之一,用于实现主站对从站的逻辑寻址。存储同步管理通道(SM,SyncManager)实现主站和本地应用数据交换。Ethercat帧和PDI接口都必须轮询处理器来判断另一端是否完成访问。PDI接口模块是ESC芯片的应用数据接口。

在FPGA实现EtherCAT从站控制器的过程中,如果能实现数据链路的通路,数据帧能够通过EBUS、MII接口传输到FPGA中,FPGA将数据帧进行识别并进行CRC校验,解包出EtherCAT的帧格式和协议命令,并通过端口连接状态将数据帧发送。那么,可以说明EtherCAT从站控制器是可以在FPGA中进行自主开发实现。在以上的数据链路中,EBUS接口涉及到EBUS模块,EBUS模块主要对EBUS协议进行解析,通过曼彻斯特编码/解码接收或发送数据;FPGA将数据帧进行识别并进行CRC校验是Auto-Forwarder模块;通过Loop-back funcTIon模块将数据帧发送。以下分别介绍上述各模块的实现过程。

2 各模块实现逻辑
2.1 EBUS编码/解码模块
对于EBUS实现方式,EBUS接口的LVDS信号数据率是100 Mb/s,EBUS接口是利用曼彻斯特编码/解码(Manchester encoded)通过LVDS方式实现。

在实现EBUS部分时,根据EBUS协议要求,需要实现曼彻斯特解码和曼彻斯特波编码。其中“0”用“01”表示,“1”用“10”表示。EBUS协议中分为idle标识符、开始帧标识符(SOF)、结束帧标识符(EOF)。Idle标识符为“0”,开始帧标识符为连续3个时钟(200 MHz)连续的1,结束帧标识符为连续3个时钟(200 MHz)连续的0。EBUS协议如图3所示。

曼彻斯特编码状态机如图4所示,曼彻斯特编码的状态机共分为8个状态,分别为初始1状态(IDLE_1C)、初始2状态(IDLE_2C)、帧开始1状态(SOFR_1C)、帧开始2状态(SOFR_2C)、编码1状态(ENCO_1C)、编码2状态(ENCO_2C)、结束帧1状态(EOFR_1C)、结束帧2状态(EOFR_2C),处理时钟为200 MHz。

各状态说明如下:

IDLE_1C为初始1状态,对应发送EBUS协议的idle标识符,发送的数据为‘0’。下一时钟即进入IDLE_2C状态。

IDLE_2C为初始2状态,对应发送EBUS协议的idle标识符,发送的数据为‘1’。当发送数据有效时进入SOFR_1C状态,否则进入IDLE_1C状态。

SOFR_1C为帧开始1状态,对应的发送EBUS协议的开始帧标识符,下一时钟进入SOFR_1C状态。

SOFR_2C为帧开始2状态,对应的发送EBUS协议的开始帧标识符,下一时钟进入ENCO_1C状态。

ENCO_1C为编码1状态,对应发送帧数据,下一时钟进入ENCO_2C。

ENCO_2C为编码2状态,对应发送帧数据,当发送数据无效时进入EOFR_1C状态,否则进入ENCO_1C状态。

EOFR_1C为结束帧1状态,对应发送帧结束标识符,下一时钟进入ENCO_2C状态。

EOFR_2C为结束帧2状态,对应发送帧结束标识符,此时一帧数据发送完毕,下一时钟回到IDLE_1C状态。

曼彻斯特解码状态机如图5所示,曼彻斯特解码的状态机共分为5个状态,分别为初始状态(IDLE)、帧开始状态(SOFR)、编码1状态(ENCO_1C)、编码2状态(ENCO_2C)、结束帧状态(EOFR),处理时钟为200 MHz。

各状态说明如下:

IDLE为初始状态,对应接收EBUS协议的idle标识符,下一时钟即进入SODR状态。

SOFR为帧开始状态,对应的接收EBUS协议的开始帧标识符,当接收到连续3个‘1’即rx_sof_dv为1时,下一时钟进入ENCO_1C状态,否则进入IDLE状态。

ENCO_1C为编码1状态,对应接收帧数据,下一时钟进入ENCO_2C。

ENCO_2C为编码2状态,对应接收帧数据,当接收到连续3个‘0’时,进入EOFR状态,否则进入ENCO_1C状态。

EOFR_1C为结束帧状态,此时已经接收到完整的EtherCAT帧,下一时钟进入IDLE状态。

2.2 Auto-forwarder模块
Auto-forwarder模块是MII和EBUS模块进入IPCORE的第一个处理模块,主要实现MII/EBUS数据缓存、检测帧导码、错误检测、将数据发送到自动回环(Loop-back funcTIon)和帧处理单元(EtherCAT Processing Unit)。Auto-forwarder模块实现MII/EBUS数据缓存功能是将EtherCAT帧数据存到FIFO中,并经过IPCORE处理时钟(25 MHz)数据读出,实现帧数据与IPCORE时钟同步,再进入到下一模块处理。检测帧导码是在数据帧数据有效后,通过检测帧导码(0x55555555555555555D),从而确定此帧为以太网帧。数据检测主要检测3种错误:物理层错误(RX错误)、数据帧错误、CRC错误。在数据经过FIFO同步后,在以太网帧的条件下,进行CRC校验,如果CRC校验正确,把帧数据发送到自动回环或帧处理单元中;如果CRC校验错误,将此帧丢弃。将数据发送到自动回环和帧处理单元是在CRC校验正确和无其他错误的条件下,将帧数据发送到自动回环和帧处理单元中。Auto-forwarder模块的状态机如图6所示。

Auto-forwarder模块的状态机共分为5个状态,分别为初始状态(IDLE)、检测前导码状态(DETECT_PREAM)、检测前导码开始状态(DETECT_START)、帧开始状态(FRAME_START)、帧处理状态(FRAME_PROC)。处理时钟为25 MHz。各状态说明如下:

IDLE为初始状态,当没有帧数据时,状态处于IDLE状态。当检测到帧数据为5时,进入到DETECT_PREAM状态。

DETECT_PREAM 为检测前导码状态,帧接收帧导码5,当检测到D时,进入到DETECT_START状态。

DETECT_START为检测帧导码开始状态,在下一时钟进入到FRAME_START状态。

FRAME_START为帧开始状态,开始接收帧数据,在下一时钟进入到FRAME_PROC状态。

FRAME_PROC为帧处理状态,正式处理帧数据,当没有帧数据时就进入IDLE状态。

2.3 Loop-back function模块
自动回环(Loop-back function)是根据端口打开状态确定数据帧转发状态,IP共有4个端口,如果当前端口处于闭合或未建立连接状态,则回环功能转发EtherCAT帧到下一个逻辑端后,端口0(PORT0)的回环功能会转发帧数据到数据帧处理单元。端口状态分别为:自动闭合、手动打开。不同端口数据帧的处理顺序如下:

(1)0→EtherCAT Processing Unit→0

(2)0→EtherCAT Processing Unit→1 / 1→0

(3)0→EtherCAT Processing Unit→1 / 1→2 / 2→0 (log. ports 0,1, and 2)or0→EtherCATProcessing Unit→3 / 3→1 / 1→0 (log. ports 0,1, and 3)

(4)0→EtherCAT Processing Unit→3 / 3→1 / 1→2 / 2→0

为便于验证及测试,本文重点探讨双端口情况下的数据转发功能及测试。

3 功能测试
为了对基于FPGA的通信链路进行系统测试,搭建如图7所示的测试环境。

其中,EtherCAT主站是指倍福EtherCAT主站,可以将指定EtherCAT帧发送到从站中;EtherCAT从站(ASIC)是指倍福的以ET1100芯片为核心的EtherCAT从站,ETherCAT主站通过MII信号将EtherCAT帧发送到EtherCAT从站(ASIC)中,EtherCAT从站(ASIC)将EtherCAT帧转换成EBUS信号,将数据传输到EtherCAT测试板中;EtherCAT测试板是以FPGA为核心的测试板。

在测试中,测试板通过EBUS接口,将数据帧传输到FPGA中,FPGA通过EBUS解码得到数据帧,数据帧到FPGA将进行识别并进行CRC校验,解包出EtherCAT帧格式和协议命令。通过MII转发到PC上,PC通过wireshark进行抓包验证数据帧的正确性。

3.1 解码状态测试
解码状态测试结果如图8所示,其中rx_data_interal为EBUS差分转单端信号,current_state为状态机信号,rx_dv为数据有效信号,rx_data为接收数据。可以看出,EBUS协议的LVDS信号通过差分转单端后,通过状态机处理,得到帧数据。

3.2 编码状态测试
编码状态测试结果如图9所示,tx_data_interal为单端信号转EBUS差分信号,current_state为状态机信号,tx_dv为数据有效信号,tx_data为接收数据。可以看出,发送数据有效后,通过状态机将数据单端转差分发送出去。

3.3 Auto-forwarder数据状态
经过Auto-forwarder状态的数据如图10所示,其中frame为帧数据,fifo为帧数据通过数据同步后的数据,state为状态机信号,frame_done为数据帧结束信号,frame_start为帧开始信号,frame_data_valid为数据帧有效信号,frame_crc_err为帧错误信号。结果表明,数据帧可以正确识别并进行解析,在帧结束后,可以看到frame_crc_err有一拍为低。

3.4 数据帧验证
用wireshark抓取的数据结果表明,数据帧可以由FPGA正确处理,wireshark抓取报文正确接收到EtherCAT类型的转发报文,说明数据链路已打通。

4 结论
本文通过解析各阶段数据结果,验证了关键通信链路上EBUS编码/解码、Auto-forwarder、Loop-back function模块的FPGA状态机的正确性,说明FPGA实现EtherCAT从站基本通信链路是完全可行的,为开发完善的ESC从站控制器创造了条件。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/YEYUANGEN/article/details/128461175

智能推荐

艾美捷Epigentek DNA样品的超声能量处理方案-程序员宅基地

文章浏览阅读15次。空化气泡的大小和相应的空化能量可以通过调整完全标度的振幅水平来操纵和数字控制。通过强调超声技术中的更高通量处理和防止样品污染,Epigentek EpiSonic超声仪可以轻松集成到现有的实验室工作流程中,并且特别适合与表观遗传学和下一代应用的兼容性。Epigentek的EpiSonic已成为一种有效的剪切设备,用于在染色质免疫沉淀技术中制备染色质样品,以及用于下一代测序平台的DNA文库制备。该装置的经济性及其多重样品的能力使其成为每个实验室拥有的经济高效的工具,而不仅仅是核心设施。

11、合宙Air模块Luat开发:通过http协议获取天气信息_合宙获取天气-程序员宅基地

文章浏览阅读4.2k次,点赞3次,收藏14次。目录点击这里查看所有博文  本系列博客,理论上适用于合宙的Air202、Air268、Air720x、Air720S以及最近发布的Air720U(我还没拿到样机,应该也能支持)。  先不管支不支持,如果你用的是合宙的模块,那都不妨一试,也许会有意外收获。  我使用的是Air720SL模块,如果在其他模块上不能用,那就是底层core固件暂时还没有支持,这里的代码是没有问题的。例程仅供参考!..._合宙获取天气

EasyMesh和802.11s对比-程序员宅基地

文章浏览阅读7.7k次,点赞2次,收藏41次。1 关于meshMesh的意思是网状物,以前读书的时候,在自动化领域有传感器自组网,zigbee、蓝牙等无线方式实现各个网络节点消息通信,通过各种算法,保证整个网络中所有节点信息能经过多跳最终传递到目的地,用于数据采集。十多年过去了,在无线路由器领域又把这个mesh概念翻炒了一下,各大品牌都推出了mesh路由器,大多数是3个为一组,实现在面积较大的住宅里,增强wifi覆盖范围,智能在多热点之间切换,提升上网体验。因为节点基本上在3个以内,所以mesh的算法不必太复杂,组网形式比较简单。各厂家都自定义了组_802.11s

线程的几种状态_线程状态-程序员宅基地

文章浏览阅读5.2k次,点赞8次,收藏21次。线程的几种状态_线程状态

stack的常见用法详解_stack函数用法-程序员宅基地

文章浏览阅读4.2w次,点赞124次,收藏688次。stack翻译为栈,是STL中实现的一个后进先出的容器。要使用 stack,应先添加头文件include<stack>,并在头文件下面加上“ using namespacestd;"1. stack的定义其定义的写法和其他STL容器相同, typename可以任意基本数据类型或容器:stack<typename> name;2. stack容器内元素的访问..._stack函数用法

2018.11.16javascript课上随笔(DOM)-程序员宅基地

文章浏览阅读71次。<li> <a href = "“#”>-</a></li><li>子节点:文本节点(回车),元素节点,文本节点。不同节点树:  节点(各种类型节点)childNodes:返回子节点的所有子节点的集合,包含任何类型、元素节点(元素类型节点):child。node.getAttribute(at...

随便推点

layui.extend的一点知识 第三方模块base 路径_layui extend-程序员宅基地

文章浏览阅读3.4k次。//config的设置是全局的layui.config({ base: '/res/js/' //假设这是你存放拓展模块的根目录}).extend({ //设定模块别名 mymod: 'mymod' //如果 mymod.js 是在根目录,也可以不用设定别名 ,mod1: 'admin/mod1' //相对于上述 base 目录的子目录}); //你也可以忽略 base 设定的根目录,直接在 extend 指定路径(主要:该功能为 layui 2.2.0 新增)layui.exten_layui extend

5G云计算:5G网络的分层思想_5g分层结构-程序员宅基地

文章浏览阅读3.2k次,点赞6次,收藏13次。分层思想分层思想分层思想-1分层思想-2分层思想-2OSI七层参考模型物理层和数据链路层物理层数据链路层网络层传输层会话层表示层应用层OSI七层模型的分层结构TCP/IP协议族的组成数据封装过程数据解封装过程PDU设备与层的对应关系各层通信分层思想分层思想-1在现实生活种,我们在喝牛奶时,未必了解他的生产过程,我们所接触的或许只是从超时购买牛奶。分层思想-2平时我们在网络时也未必知道数据的传输过程我们的所考虑的就是可以传就可以,不用管他时怎么传输的分层思想-2将复杂的流程分解为几个功能_5g分层结构

基于二值化图像转GCode的单向扫描实现-程序员宅基地

文章浏览阅读191次。在激光雕刻中,单向扫描(Unidirectional Scanning)是一种雕刻技术,其中激光头只在一个方向上移动,而不是来回移动。这种移动方式主要应用于通过激光逐行扫描图像表面的过程。具体而言,单向扫描的过程通常包括以下步骤:横向移动(X轴): 激光头沿X轴方向移动到图像的一侧。纵向移动(Y轴): 激光头沿Y轴方向开始逐行移动,刻蚀图像表面。这一过程是单向的,即在每一行上激光头只在一个方向上移动。返回横向移动: 一旦一行完成,激光头返回到图像的一侧,准备进行下一行的刻蚀。

算法随笔:强连通分量-程序员宅基地

文章浏览阅读577次。强连通:在有向图G中,如果两个点u和v是互相可达的,即从u出发可以到达v,从v出发也可以到达u,则成u和v是强连通的。强连通分量:如果一个有向图G不是强连通图,那么可以把它分成躲个子图,其中每个子图的内部是强连通的,而且这些子图已经扩展到最大,不能与子图外的任一点强连通,成这样的一个“极大连通”子图是G的一个强连通分量(SCC)。强连通分量的一些性质:(1)一个点必须有出度和入度,才会与其他点强连通。(2)把一个SCC从图中挖掉,不影响其他点的强连通性。_强连通分量

Django(2)|templates模板+静态资源目录static_django templates-程序员宅基地

文章浏览阅读3.9k次,点赞5次,收藏18次。在做web开发,要给用户提供一个页面,页面包括静态页面+数据,两者结合起来就是完整的可视化的页面,django的模板系统支持这种功能,首先需要写一个静态页面,然后通过python的模板语法将数据渲染上去。1.创建一个templates目录2.配置。_django templates

linux下的GPU测试软件,Ubuntu等Linux系统显卡性能测试软件 Unigine 3D-程序员宅基地

文章浏览阅读1.7k次。Ubuntu等Linux系统显卡性能测试软件 Unigine 3DUbuntu Intel显卡驱动安装,请参考:ATI和NVIDIA显卡请在软件和更新中的附加驱动中安装。 这里推荐: 运行后,F9就可评分,已测试显卡有K2000 2GB 900+分,GT330m 1GB 340+ 分,GT620 1GB 340+ 分,四代i5核显340+ 分,还有写博客的小盒子100+ 分。relaybot@re...

推荐文章

热门文章

相关标签