一种医疗CT数据采集系统解决方案
对于FPGA底层,采用运输层接入用户数据,按照标准以太网形式将数据封装成完整的UDP数据格式,向下再封装成IP数据报形式:增加IP数据报的版本号,生存时间,原地址及目的地址等信息,向下再封装成MAC数据帧,增加数据的MAC地址及CRC校验等信息。在实现完整的四层以太网的过程中均采用HDL语言进行描述,不调用IPCORE。
本文引用地址://m.amcfsurvey.com/article/256099.htm为了充分利用FPGA并行处理的优势,增加数据处理的速率,数据通常采用并行的方式进行打包和编码。但是光纤通信传输的是串行数据,一对,两条,一收一发的方式。因此,借助于FPGA的ROCKET IO模块,将并行的数据输入到FPGA的GTP IP CORE将数据串行化及8B10B编码等,GTP就相当于传统意义的PHY,在内部完成了PCS(物理编码子层)和PMA(物理媒介适配层),从PHY出来的信号直连MDI接入现成的光模块,光模块经过光电转换将电信号转换成光信号在链路中进行传输。
4 IEEE802.3z光纤协议的实现
自协商协议:
由于在以太网通信过程中,有10M的、100M、1000M甚至10G的,为了支持多种不同标准的混合通信,IEEE802.3Z提出了一套自协商协议(Auto-nego),通信的双方通过互发各自的通信能力信息,进行协商,从而达到最佳的通信模式,且只有当自动协商完成以后双方才能进行通信。自协商通常用于通信速率、流量控制,状态等信息的交互,其基本单元为一个16bit的寄存器,通过配置这个寄存器达到协商的目的。如下图所示:rsvd为保留位,默认为0,D5为全双工标志位,D6为半双工标志位,为1时有效D7和D8和流量控制相关,RF1、RF2表明通信双方自协商的结果。D14为应答标志位,NP为下一页标志位,通常用于协商更为具体的内容,在本数据采集系统中将其置为0(图3)。
在本系统的设计过程中,由于数据量大,且连续,因此采用传统的Annex31B标准进行流量控制及重传基本不可能,数据的可靠性只能靠系统的设计及链路的链接进行加固,且用FPGA实现流量控制较复杂且需消耗大量的逻辑资源,因此我们不进行流量的控制,数据直接编码进行实时传送。又由于上行数据量大,下行数据量较少,因此,上行链路采用UDP协议进行以太网格式的传送,下行链路直接用串口替代。这样做还有一个好处就是将数据和指令进行了完全的分离。具体实现过程如下:
本设计用6个状态实现自动协商的过程:IDLE,READY,CONF,ACK_CONF,SYNC,AUTO_OK;上电复位以后,FPGA进入IDLE状态,连续发送IDLE指令,使对端能正确识别FPGA的通信速率,当接收到3个以上的对方IDLE反馈以后,状态机跳转到READY状态,发送配置准备状态,表明FPGA方已准备进行配置,在收到3个以上的PC反馈过来的配置准备状态指令以后,提取对端的通信模式的信息,写入FPGA的寄存器,然后将其D14置1,作为反馈(FPGA的实际通信能力也许并不和对方对等,这样设计简化了自动协商的过程,消耗的逻辑资源更低),表明FPGA和PC具有相同的通信能力,一直发送反馈,直到接收到PC反馈的具有3个连续相同的配置能力的配置指令的字符,则跳入到SYNC,发送到同步指令,如果收到对方的3个连续的SYNC指令表示自动协商成功,否则协商失败,重新跳入到IDLE进行协商,当跳入到AUTO_OK状态则可以进行用户数据的发送,如图4为自动协商的过程。
西门子plc相关文章:西门子plc视频教程
评论