1. POWERLINK的实现方案
POWERLINK可以运行在任何具有标准以太网的平台上,ARM , DSP , FPGA ,X86CPU;任意的操作系统:windows,Linux, Vxworks或者无操作系统。有两种典型的方案:
方案一:基于FPGA的纯硬件解决方案 (HDL POWERLINK),FPGA芯片做为POWERLINK的通信芯片,通过并行接口或者PCIE接口与应用MCU相连。
l 采用Verilog 语言实现。
l 成本低,单芯片解决方案。
l 性能高,最短循环周期小于50us。
l 容易使用,无需FPGA和嵌入式开发经验。
l 支持环网冗余,双网冗余,多主站冗余。
l 支持定制化应用层协议, 以及CANopen应用层协议。
l 支持100Mbps/1000Mbps传输速率。
l 支持并行接口或者PCIE接口。
l 在同一FPGA种可增加用户的其他应用。
该方案性能高,可靠性高,实现简单,系统升级时改动少。但是每个从站需要一片FPGA,增加成本。
该方案目前支持的硬件平台:
ü XILINX spartan6
ü XILINX zynq
ü 高云FPGA
ü 复旦微电子FPGA
方案二:C语言解决方案,运行于MCU 或CPU的解决方案
l 支持各种ARM平台,X86 CPU , DSP,PowerPC等
l 支持各种操作系统,或者无操作系统
l 支持各种以太网芯片
l 通常只能星型拓扑
l 该方案用于实时性要求较低,成本低的场合。
l 该方案也可以运行于FPGA + 软核。
l 该方案采用VHDL + C语言实现。
l 以太网MAC,HUB等由VHDL实现,POWERLINK协议栈由C语言实现。
l 可提供主站/从站的全套代码。
l 应用层和数据链路层不可分割,都在FPGA或者MCU中实现。
l 该方案用于要求不高的IO控制, 以及运动控制,控制周期最短为400us。
该方案实现成本低,一颗MCU或FPGA即可实现,性能较低,每一次MCU或者FPGA的软件或硬件升级,POWERLINK都需要重新编译,可能会有不兼容风险。
该方案目前已经移植好的平台如下:
ü ALTERA CYCLONE4
ü XILINX SPARTAN6
ü LINUX
ü WINCE
ü VxWorks
ü Windows
ü STM32 裸片
2. HDL POWERLINK方案介绍
物理层: 物理层的MAC和HUB以及环形冗余,双网冗余在FPGA采用Verilog HDL实现。
数据链路层: POWERLINK的DLL状态机,NMT网络管理等在FPGA采用Verilog HDL实现。
应用层: 在上位机实现。 可以使用CANopen做为应用层,也可以使用其它任意的应用层。
API接口:应用层与POWERLINK数据链路层之间的接口为API接口。该接口物理上采用寄存器,以及双口RAM。 上位机可以采用8/16/32 并行总线来访问,也可以采用SPI, PCI,PCIE等总线;或者自己定义的总线来访问。
硬件框图:
一个POWELRINK的FPGA系统包括Flash, PHY。
PHY: 以太网的物理层硬件,与FPGA之间通过MII或RMII接口连接。
Flash: 用于保存FPGA内的程序。支持串行或者并行的flash。
FPGA资源在下表中说明。
表2.1 本FPGA资源
项目 |
内容 |
备考 |
|
器件型号 |
|
|
|
时钟周期 |
MAC接口 |
50MHz |
|
AP接口(Host并行接口) |
50MHz |
|
|
内部各逻辑电路 |
50MHz |
|
|
FPGA资源 |
IOB使用个数 |
63 |
|
内部BlockRAM使用个数 |
16 |
|
|
内部寄存器使用个数 |
3,230 |
|
|
内部LUT使用个数 |
5,044 |
|
|
全体SLICE使用情况 |
3,976 |
|
|
内部DCM使用个数 |
2 |
|
|
内部PLL使用个数 |
0 |
|
异步并行总线接口,支持8bits和16bits数据宽度,16bits的地址线。
“CS”为片选信号;“WR”为写信号;“RD”为读信号;“DATA”为数据信号;“ADDR”为地址信号;“IRQ”为中断信号。Ack信号是总线读写的控制信号,该信号为可选。
BE信号是Byte Enable的简写,即字节使能信号。
当并行总线的数据宽度选择16bits时。此时如果Host一侧需要字节(8bits)操作,就需要BE信号,此时MCU一侧的地址addr[15..1]与POWERLINK 的FPGA一侧的地址addr[15..1]连接,把地址addr[0]省略(为了安全起见,可以将FPGA的addr[0]在FPGA内部接地),这样MCU一侧每次寻址空间为16bits。Be信号的宽度为2 bits, Be[1,0]={0,1}时,表示选择16bits数据的低8位;Be[1,0]={1,0}时,表示选择16bits数据的高8位;Be[1,0]={1,1}时,表示选择全部的16bits数据。ARM既支持8bits操作,也支持16bits操作。
如果MCU一侧只支持16bits操作,例如部分DSP。可以将这Be[1,0]两个信号在FPGA内部接到高电平,无需将其引出。
QQ群:2589 004343
电话:18018889452
邮箱:openpowerlink@163.com