3.1 发送控制逻辑
发送控制逻辑的功能是控制帧、原语信号和原语序列的发送顺序,使之符合光纤通道标准,主要包括保证连续帧之间具有足够的间隔和在帧之间插入原语信号。
发送帧的CRC值也由发送控制逻辑计算,传统的串行计算方法达不到要求的速率,这里采用并行CRC算法进行计算,每个时钟有效沿可以计算32位数据,大大提高了数据吞吐量。
缓冲到缓冲流量控制也在发送控制逻辑中实现。发送控制逻辑维持一个计数器,表示当前已发送但还未被确认的帧的数目,每当发送1帧,计数器加1;当接收到 R_RDY原语信号时,计数器减1。如果这个值小于配置寄存器中的BB_Credit值,则表示可以继续发送帧;否则,表明目标端口已经没有可用的接收缓冲区,发送控制逻辑此时就不往外发出帧。
3.2 接收控制逻辑
8B/10B解码出来的数据是字节数据,而所有的有序集都是字,因此需要在输入的字节流中正确区分出字边界。接收控制逻辑内部的字同步模块和接收状态机协同工作,实现这一功能。标准规定的接收机状态转换图如图4所示。
3.3 8B/1 0B编解码
传统的编解码方法由数字逻辑实现,主要是为了节省逻辑资源。由于FPGA内含有丰富的RAM,使其作为编解码的载体既可以降低复杂程度又可以提高编解码的速度,待编码的数据作为地址线输人,编码数据存在RAM内从数据线输出。
3.4 端口状态机
作为链路级差错检测与恢复的核心,端口状态机对收发链路的状态进行监测。每当链路状态出现异常,端口状态机就根据异常的起因启动不同的链路恢复协议来对链路进行恢复。如果恢复失败,那么端口状态机就通过状态寄存器向上层报告。出于版面的考虑,简化的端口状态机的状态转换图如图5所示。
3.5 其他模块
异步FIFO:由于接口控制芯片的接收部分使用从接收数据中恢复出来的时钟,因此和芯片的主时钟是异步的。当将接收到的数据交给其他工作于主时钟的模块处理时需要进行速率调整。异步FIFO用于实现这个功能。串并/并串转换:高速的串并转换对器件性能有较高要求。FPGA内部集成了专用的硬核 (RocketIO)用来实现这一功能,因此对其进行适当的配置即可。这样节省了专用的串并转换芯片。
配置寄存器存储一系列的工作参数,如(R_T_TOV、E_D_TOV等),复位后以默认值初始化寄存器。完成注册后,使用新值更新寄存器。
光纤通道传输核通过状态寄存器来表示自己当前所处的状态(如在线、离线等)。
4 软件设计
接口控制芯片的软件部分负责进行参数协商和处理与端到端数据传输相关的事务,包括端口注册和交换注册、提供不同类型的服务、端到端流量控制、序列级差错检测和恢复。
为了简化软件的设计,以嵌人式Linux操作系统作为接口控制芯片的软件运行环境。通过设计一系列的操作函数,实现整个软件系统。最重要的函数包括:端口注册函数、IU发送函数和接收帧处理函数。
4.1 端口注册函数PLogin_in()
注册包含端口注册和交换注册。两种注册的流程类似,这里仅分析端口注册。系统启动后,需要对芯片的工作参数进行配置,注册函数根据用户的配置选择注册方式。如果用户指定隐式注册,那么注册函数从配置文件中读取默认配置参数配置芯片;如果用户指定显式注册,那么注册函数发送注册请求,等对方端口返回响应后,注册函数用响应的数据配置参数。端口注册函数的工作流程如图6所示。
4.2 IU发送函数Sen
4.3 接收帧处理函数Frm_Rcved()
当光纤通道传输核将正确的帧接收到并存储于接收缓冲区后,通过状态接口通知PowerPC。此时Frm_Rcved()函数开始处理帧头,帧头中需要检查的参数很多,这里不在赘述。如果帧头中的参数没有错误,那么函数为这个新接收到的帧分配存储空间,然后从接收缓冲区中将帧取到存储器中,并以一定的方式和之前接收到的帧关联起来(例如链表);如果帧头中的参数有误,则将帧丢弃并启动中止序列协议进行序列恢复。
结 语
本文提出的方案以嵌入式技术和FPGA技术为基础,使其具有极大的灵活性和可扩展性。在不同的应用环境中只需要对相应的软硬件代码进行适当的裁减或扩展即可,无需对PCB电路进行任何更改,具有极其广泛的应用价值。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |