0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于FPGA的工业以太网的硬件IP开发流程

电子设计 作者:电子设计 2018-10-02 01:10 次阅读

引言

现在有很多以以太网为基础的工业通信协议,并都有自己的优缺点,其中有些协议是开 源的,这让开发者可以设计出自己的协议。这也意味着这些开源的协议在工业上将更加受到 欢迎,应用也更加广泛。现在还没有统一的协议,而且协议的发展影响着以太网标准的变化, 这就要求能够支持多种协议的设计方法。本文主要提出使用FPGA 来尽可能支持较多的工业 以太网协议并能支持新协议的加入和系统改进。

2 基于FPGA 的工业以太网解决方案

支持多种协议的一般的方法可以通过针对每一种协议都设计一块板卡,在需要时互相替 换来实现。但随着市场上标准的增加和发展,则需要设计出一种性价比高而且还能快速支持 新协议的解决方法。 随着以太网的不断变化,需要开发设计新的电路板,这就会使得成本加大,而且实现的 慢。然而,通过使用带有FPGA 的工业以太网接口就可以解决以上的问题,使用FPGA 最主要 的好处在于它容易重新配置。

在任何时候只需要构造一个电路板和能支持任一种工业以太网 协议的硬件程序。如果要使用不同的协议或是用户改变执行命令,只需花费几秒钟根据具体 需要改写FPGA 的配置文件。这种多协议方法大大降低了开发成本,减小编码量[1]。

FPGA 与以太网收发器(通常为PHY)结合使用时,它可以完成所有以太网接口的功能。 PHY 和电路板中的物理层接口,数据链路层(MAC)硬件功能可由FPGA 硬件配置程序来实现; 再往上层(3 层以上)的功能是由运行在FPGA 逻辑电路配置的核心处理器上的软件实现的。

FPGA 逻辑电路是可编程的,I/O 管脚支持多种协议,现有的IP 接口应用广泛,所以在现有 的应用处理器和FPGA 之间很容易实现通信信道。一般现有的处理器接口(如I2C,SPI,其他 一些本地并行总线)或系统(PCI,PCI Express,CANopen 等)都可以与FPGA 通信。

由于FPGA 硬件是可编程的,如果想把应用程序封装到FPGA 中,那么可以设计含有多个 微处理器软核。这样做的好处在于它可以减少组件数量,降低成本和功率消耗。此外,完全 基于IP 设计易于移植到新设备上,而且FPGA 的使用周期长,所以这种设计不会很快被淘汰。

对于工业以太网,设计FPGA 也可以有hub 或可以增强以太网通信的相似的硬件。 FPGA 不仅可以实现处理器的复杂结构设计,而且可以实现灵活多变的接口设计,比如 简单的通信接口(如UARTS,并行I/O 等),支持新的存储器的复杂接口(如DRR2/3 等)。以 及新的通信技术(如Bluetooth,Gigabit Ethernet,PCI Express 等)构造基于FPGA 的硬件 设计。

3 构造基于FPGA 的硬件IP 设计

设计处理器和以太网 MAC 硬件看起来很难,但实际上,SOPC Builder 提供了处理器和 以太网MAC 的IP 核,这就变得简单多了。Altera’s QuartusⅡ的开发环境包含SOPC Builder[2],SOPC Builder 能快速并自动配置、集成和生成基于IP 的系统。

GUI 的截图(图2)中左边列表显示了可用的IP 核。若想在现使用的系统中加入IP 核, 设计者只需双击所需的IP 模块。 选定IP 模块后,会出现配置信息,可以选择相应的选项(图2 右边)。完成这些后,配 置好的IP 功能块就会出现在当前系统设计中,如图窗口的右边。该部件的地址和中断级别 可以改变,可通过GUI 修改系统内的互联结构来改变IP 部件间的连接。处理器能够快速设 计模块和高度优化系统(如图3)。

图中窗口下面显示设计的出错信息,因而开发者可以很容 易的查错纠错。 系统设计好后,设计人员点击“generate”后即生成所要求的系统。该系统生成后,可 作为QuartusⅡ原理图设计编辑器的一个功能模块。 如果以后需要修改设计,设计人员只需打开SOPC Builder 使用GUI 来修改,再重新生 成系统,然后用QuartusⅡ软件重新组合,就生成了新的配置文件,这样在很短的时间内生 成了一个新的工业以太网协议的硬件设计。

4 网络协议设计

硬件 IP 通常封装作为SOPC Builder 的一个部件,它包含了MAC 和其它的所需的逻辑 电路。对于软件IP 可在经销商出购买,也可以自己通过移植LwIP 协议实现。 LwIP 是Light-weight Internet Protocol 的缩写,即轻量级网络协议。LwIP 是瑞典计算机 科学院的Adam Dunkels 等开发的用于嵌入式系统的TCP/IP 协议栈[5]。

LwIP 实现的重点是 在保持TCP/IP 协议主要功能的基础上减少对RAM 的占用[3],一般它只需要几十K Byte 的 RAM 和40K 左右的ROM 就可以运行,在嵌入式系统中应用相当广泛。在使用和移植的过 程中可根据传输数据的不同要求进行删减或增补。 在设计 LwIP 时,就要考虑到移植问题,把所有和硬件、编译器相关的部分独立出来[4], 放在/src/arch 下面。若要移植,只要修改这个目录下的文件即可。

(1)与CPU或编译器相关的include 文件。在LwIP/src/arch/include/arch 目录下,cc.h、cpu.h、 perf.h 中有一些与CPU 或编译器相关的定义,如数据长度、字的高低位顺序等。这应该与用 户的操作系统定义的参数一致。通常,C 语言的结构体(struct)是4 字节对齐的,但是在处理 数据包的时候,LwIP 是通过结构体中不同数据的长度来读取相应的数据的,所以,一定要 在定义struct 的时候使用_packed 关键字,让编译器放弃struct 的字节对齐。

LwIP 也考虑到 了这个问题,所以,在它的结构体定义中有几个PACK_STRUCT_xxx 宏,在移植的时候添 加编译器所对应的_packed 关键字。

(2)sys_arch 操作系统相关部分。sys_arch.c 中的内容是与操作系统相关的一些结构和函 数,主要可以分为四个部分: ①sys_sem_t 信号量。LwIP 中需要使用信号量进行通信,所以在sys_arch 中应实现信号 量结构体和处理函数: struct sys_sem_t

sys_sem_new() //创建一个信号量结构

sys_sem_free() //释放一个信号量结构

sys_sem_signal() //发送信号量

sys_arch_sem_wait() //请求信号量

② sys_mbox_t 消息。LwIP 使用消息队列来缓冲、传递数据报文,因此要在sys_arch 中实现消息队列结构。

sys_mbox_t 以及相应的操作函数:

sys_mbox_new() //创建一个消息队列

sys_mbox_free() //释放一个消息队列

sys_mbox_post() //向消息队列发送消息

sys_arch_mbox_fetch() //从消息队列中获取消息

③ sys_arch_timeout 函数。LwIP 中每个与外界网络连接的线程都有自己的timeout 属性, 即等待超时时间。这个属性表现为每个线程都对应一个sys_timeout 结构体队列,它包括这 个线程的timeout 时间长度,以及超时后应调用的timeout 函数,该函数会做一些释放连接、 回收资源的工作。Timeout 结构体已经在sys.h 中定义好了,而且对结构体队列的数据操作 也由LwIP 负责,我们所要实现的是如下函数:

struct sys_timeouts * sys_arch_timeouts(void)

这个函数的功能是返回目前正处于运行状态的线程所对应的timeout 队列指针。Timeout 队列属于线程的属性,因此是与操作系统相关的函数。

④sys_thread_new 创建新线程函数。LwIP 可以是单线程运行,即只有一个tcpip 线程 (tcpip_thread),负责处理所有的TCP 或UDP 连接,各种网络程序都通过tcpip 线程与网络 交互。它也可以多线程运行,以提高效率。

(3) lib_arch 中库函数。LwIP 用到8 个外部函数,这些函数通常与用户使用的系统或编 译器有关。

u16_t htons(u16_t n);//16 位数据高低字节交换

u16_t ntons(u16_t n);

u32_t htonl(u32_t n);//32 位数据大小端对调

u32_t ntonl(u32_t n);

int strlen(const char *str);

int stmcmp(const char *str1,const char *str2,int len);

void bcopy(const void *src,void *dest,int len);

void bzero(void *data,int n);

5 测试

将修改后的 LwIP 进行测试,比如移植到μC/OS-II 中。先对LwIP 进行初始化,再创建TCP 或UDP 任务,然后就可以测试了,关键部分的代码和说明如下:

main(){

OSInit();

OSTaskCreate(lwip_init_task,&task1_data,&lwip_init_stk[TASK_STK_SIZE-1],0);

OSTaskCreate(user_task,&task2_data,&user_stk[TASK_STK_SIZE-1],1);

OSStart();

}

主程序中,创建了lwip_init_task 初始化LwIP 任务(优先级0)和user_task 用户任务(优先级1) 。lwip_init_task 任务中除了初始化之外, 还创建了tcpip_thread( 优先级3) 和tcpecho_thread(优先级4),实际上tcpip_thread 才是LwIP 的主线程,tcpecho_thread 线程也要依靠tcpip_thread 线程来与外界通信。

编译运行后,用 telnet 命令可以看到回显结果,说明正确运行,LwIP 移植是正确的。

6 结束语

成本低廉的 FPGA 和微处理器软核IP 使得工业以太网具有高性价比可编程解决方案成 为可能。该方案只需用一个电路板就能实现传送不同的工业以太网协议,并且具有开发成本 低、使用周期长的特点。由于协议的发展,已经不同于以往的实现方法,而且有很多新的协 议形成,能支持任何工业以太网协议的灵活可变的且具有成本效益的解决方案显得越来越重 要。对于工业设备制造商来说,用FPGA 实现工业以太网也是势在必行。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1602

    文章

    21302

    浏览量

    593104
  • IP
    IP
    +关注

    关注

    5

    文章

    1402

    浏览量

    148267
  • 工业以太网
    +关注

    关注

    10

    文章

    576

    浏览量

    42052
收藏 人收藏

    评论

    相关推荐

    设计坊第三期:灵活的工业以太网解决方案

    本期和大家分享的是灵活的工业以太网解决方案。这篇文章主要介绍利用 Altera ® FPGA 在一块 PCB 上实现多标准工业以太网功能。阐
    发表于 12-25 11:17

    基于FPGA以太网系统软硬件实现方案

    ,希望有兴趣的同志和我联系!FPGA以太网传输系统介绍:1)平台:ALTERA FPGA,cyclone系列器件即可支持;2)系统架构:硬件FPG
    发表于 06-19 12:04

    基于FPGA以太网系统软硬件实现方案

    ,希望有兴趣的同志和我联系!FPGA以太网传输系统介绍:1)平台:ALTERA FPGA,cyclone系列器件即可支持;2)系统架构:硬件FPG
    发表于 06-19 12:06

    探讨工业以太网技术~(二)

    所谓工业以太网就是在以太网技术和TCP/IP技术的基础上开发出来的一种现场总线。作为现场总线的工业
    发表于 12-15 14:29

    剖析:WIZnet以太网核心技术–全硬件TCP/IP协议栈

    WIZnet,是全球第一家专注于全硬件TCP/IP协议栈技术(iOffloadTM Tech)的半导体公司,精心为用户提供高速稳定的以太网解决方案,广泛应用在工业自动化、智能电网、安防
    发表于 04-09 09:44

    基于FPGA和W5500的以太网传输系统实现

    的数据发送和接收功能的实现。图 9 W5500功能实测结果图3 结语本系统实现了基于FPGA的,采用嵌入式以太网W5500芯片以硬件形式实现的TCP/IP协议栈,提高了CPU的处理效率
    发表于 08-07 10:10

    面向工业自动化的多协议工业以太网协议检测固件设计方案

    描述工业自动化领域的工业以太网现有 30 多种行业标准。某些成熟的实时以太网协议(如 EtherCAT、EtherNet/IP、PROFIN
    发表于 08-30 08:48

    工业以太网标准:Sercos III的功能了解

    以太网通信协议。这可能会帮您更好地选择最适合您应用的标准。 工业以太网适用于工厂自动化与控制、流程自动化、楼宇自动化以及许多其它工业应用。和
    发表于 09-07 14:59

    以太网工业以太网的不同

    用专用协议。目前较受欢迎的工业以太网协议包括:PROFINET®、EtherNet/IP®、EtherCAT®、SERCOS III以及POWERLINK®。使用工业
    发表于 10-23 14:20

    以太网工业以太网的区别

    ,电缆,最重要的是更好的确定性。为了实现更好的确定性,工业以太网使用专用协议和以太网。目前比较流行的工业以太网协议是PROFINET ®,E
    发表于 10-24 10:41

    如何开始实施工业以太网

    和控制系统中部署的数字现场总线是不可替代的。工业以太网的创新与实现对上述这些问题的解决方案是应用层协议,如PROFINET开发®,EtherNet / IP的®,EtherCAT的®,
    发表于 10-24 10:39

    如何选择合适的工业以太网

    的PRU-ICSS固件交换在多工业以太网标准中进行表达。PRU-ICSS解决了软件多协议支持问题(在PRU-ICSS中为可编程的解决方案),而非像多个ASIC或FPGA硬件问题。基于
    发表于 07-18 04:45

    采用多种工业以太网标准的单个FPGA平台设计

    ,即第1层上实现基于相同的IEEE 802.3标准,因此可以使用一个基于FPGA的平台来支持不同的工业以太网协议,不论这些协议有怎样的实时属性和实现方法。对于速度和实时性能要求非常高的协议,在
    发表于 07-29 07:40

    简谈基于FPGA的千兆以太网设计

    大侠带来简谈基于FPGA的千兆以太网设计,话不多说,上货。今天我们来简单的聊一聊以太网以太网FPGA学习中属于比较高级的内容了,有些大侠
    发表于 06-01 18:39

    工业以太网领域采用FPGA的好处

    您的工厂或者工艺自动化系统需要采用多种工业以太网协议吗?请观看这一10分钟的视频,了解怎样采用FPGA来轻松开发工业
    的头像 发表于 06-20 14:00 4239次阅读