摘要:讨论了一种hdlc协议数据转发的全自动硬件设计。在sdh产品的ecc接口中采用硬件实现,通过自动控制bd的方式,实现hdlc协议的数据重新打包转发、错误处理、重发帧数据等操作,不必cpu干预。该设计实现了两个ecc口收发全双工、8个dcc口点对点同时收发的高速率、多通道设计。
在传输产品中,ip>本文讨论如何用全自动硬件方式实现图1中所示的hdlc模块。1 传统的cpu实现方式
在图1中,hdlc模块实现一个hdlc总线到多个点对点hdlc接口之间的数据转发。将hdlc总线的接口称为ecc口,hdlc点对点接口称为dcc口。传统的实现方法如图2所示,是若干hdlc控制器芯片加一块cpu实现ecc到dcc的数据转发功能。cpu通过软件配置,向hdlc帧中插入或提取用户自定义的10个字节(包括源地址、目标地址、dcc端口号、帧长度等)。以下行为例,hdlc控制器在ecc接口接收数据后,向cpu申请使用sram中的缓冲区,cpu进行仲裁,分配缓冲区描述符bd,数据就可以存放在sram中。cpu在这些数据发送时需要指定dcc通信。由于数据量较大,每一帧都要进行bd的处理,且数据申请导致中断处理频繁,软件很容易出错。
另外,随着单板集成度的提高,ecc接口的数据量越来越大,dcc接口的通道也越来越多。如果采用传统的cpu实现方式,就必须不断增加hdlc控制器,所要求的cpu性能也越来越高,这在技术上难以实现,成本上也不能接受,因而必须确定一种更经济、有效的技术方式来实现大容量、高效率、低成本的ecc转发技术。采用硬件方式,无须或尽量减少cpu的干预,在ecc接口实现自动的hdlc数据转发。
笔者的目的是将hdlc控制器和cpu的大部分功能用硬件实现,在整个运作过程中,不需要cpu实时协助,可实现全自动控制,cpu只需在开始进行一些初始化和配置工作,同时为cpu提供一些统计信息,方便cpu了解模块数据传送的性能。
2 全自动硬件结构设计
硬件结构如图3所示,可划分为六大块:ecc接口的发送模块、ecc接口的接收模块、dcc接口的发送模块、dcc接口的接收模块、sram控制器和cpu接口。图3 ecc_tx控制:
·仲裁dcc_rx发过来的数据申请;
·从sram内读取数据到内部;
·按照要求添加前10个字节的信息;
·按照协议产生新的16位crc;
·按照协议发送数据;
·按照协议进行重发操作;
·在操作正确完成后,更新bd和发送指针。ecc_rx控制;
·实时监控hdlc总线上的变化;
·解析正确的hdlc数据包,进行crc检查;
·接收属于本地址的数据包到sram内;
·在发生错误的情况下,放弃已经存入sram内的数据;
·在数据包正确接收到sram之后,产生新bd并更新接收指针;
dcc_rx控制:
·接收的逻辑有8组,可同时接收;
·实时监控hdlc点对点的数据变化;
·解析正确的hdlc数据包,进行crc检查;
·接收数据包到sram内;
·在发生错误的情况下,放弃已经存入sram内的数据;
·在数据包正确接收到sram之后,产生新bd并更新接收指针。
dcc_tx控制:
·发送是由自己控制,只需一套逻辑,8个通道轮流发送;
·判断是否有新的数据要发送(判断发送指令是否与接收指针一致);
·从sram内读取数据到内部;
·分析前10个字节的信息,决定8个发送端口的其中1个发送;
·去除前10个字节的信息;
·按照协议产生新的16位crc;
·按照协议发送数据;
·在操作正确完成之后,更新bd和发送指针。图4 sram控制器:
·这一部分实现数据的存取,ecc接收和发送各1个,dcc接收8个,dcc发送1个,共有11个数据申请;
·考虑到数据流量,sram采用16位宽。
cpu接口:
·配置前10个字节的信道,设置源地址和目标地址;
·复位通道;
·提供统计信息,供cpu分析运作情况。
3 数据流
(1)上行数据流
如图4所示,dcc接收到的数据(8个同时)→正确数据存放于sram内→数据取出,添加10字节,从ecc_tx发送出去。
(2)下行数据流
如图5所示,hdlc总线的数据→地址匹配且正确的数据存到sram内→数据取出,从dcc_tx的其中一个端口发送出去。
4 cpu干预程度分析和性能分析
(1) 系统使能后硬件即可正常工作,不需要cpu任何配置,相当于一个自动的微引擎;
(2) 发送部分不受寄存器控制,始终在动作,通过与接收的bd指针比较决定有没有数据要发送;同理、接收部分通过bd指针的比较决定sram中还有没有bd空间存放数据,通过buf指针比较决定要不要存放数据;
(3) 接收部分和发送部分有一个共同的bd和buf基准地址,有一个各自初始值为0的指针,接收部分每接收一帧数据,指针加2,发送部分可以看到这个批易地的变化;
(4) 通过bd的结构,可以完成接收与发送部分关于数据帧的长度通知;接收部分收到一帧,将统计下来的帧长度存放在bd中,发送部分读到bd中的帧长度,按该长度向sram申请数据;
(5) 通过wrap设置,可以完成自动检测空间和返回缓冲区起始地址,重用缓冲区;
(6) 错误处理可以自动恢复和重发。只有发生致命错误,如下溢时,才需要cpu对系统进行复位;图5 (7) 如果考虑最差情况下的速率,最高速度是5mhz(ecc_hdlc接口),现在sram采用16位操作,并且fifo只有一级,则访问频率为5mhz/16, 一次sram访问需要5个时钟, 此时最坏情况是其它9个接口也同时申请数据操作(共11个接口,ecc_hdlc占两个接口,但在5mhz情况下这两个接口只能有一个在运作之中)。此时系统时钟必须满足以下条件才不会产生下溢错误:5mhz/16 本系统实现sdh产品中ecc接口到开销处的数据交换,以hdlc协议实现ecc和dcc两边的数据传送,整个传送过程不需要cpu实时控制。采用该设计,可不再使用多个hdlc控制器,cpu可由原来的高性能改为低档cpu,极大地降低成本,同时可具有良好的扩展性。该设计采用xilinx的spartan 600e实现,已成功在产品中应用。
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』