一种基于M-LVDS实时多主高速总线的通信系统的制作方法

文档序号:14847695发布日期:2018-06-30 16:56阅读:478来源:国知局
一种基于M-LVDS实时多主高速总线的通信系统的制作方法

本发明涉及于总线通信领域,尤其是涉及一种基于M-LVDS实时多主高速总线的通信系统。



背景技术:

在安全系统设计中,总线通信需要满足几大基本要求:不同节点间电气隔离、不同节点间高速通信、不同节点间实时通信、不同节点间故障容忍与故障隔离。

在业内存在多种总线机制,但是都不能完全满足这几个要求,例如

1、高速的并行总线能够满足实时性要求,但无法满足不同节点间的隔离要求;

2、网络通信能够满足隔离要求,但是不能满足实时性要求;

3、CAN总线满足隔离和实时性的要求,但是又无法实现高速通信。

经过检索,中国专利公开号为CN107317734A公开了一种基于SOC技术的集成CN总线节点芯片结构,该节点芯片,由总控制器、CAN总线协议控制器单元、收发电路单元构成,总控制器用于实现对CAN总线协议控制器的寄存器配置并且完成数据的读出与写入;CAN总线协议控制器单元用于实现CAN总线数据链路层内容,包括数据成帧、错误检测和验收滤波;CAN收发电路单元实现CAN总线物理层内容,完成物理总线电平与逻辑电平的转换,该发明简化CAN总线通信系统的节点设计,减小CAN总线通信系统设计人员的设计与调试难度,提高系统的稳定性与可靠性。但该发明针对的是CAN总线通信,由于自身局限性,无法实现高速通信。



技术实现要素:

本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种基于M-LVDS实时多主高速总线的通信系统。

本发明的目的可以通过以下技术方案来实现:

一种基于M-LVDS实时多主高速总线的通信系统,该通信系统包括:系统A、系统B和M-LVDS总线,所述的系统A和系统B分别包括若干个节点,在所述的系统A或系统B内部的节点之间通过背板和PCB走线互连;在所述的系统A和系统B之间的节点间通过M-LVDS总线互连。

优选地,所述的M-LVDS总线为双绞线电缆。

优选地,在所述的M-LVDS总线上当有多个节点同时有驱动请求时,进行总线仲裁:当一个新的节点加入到M-LVDS总线上时,该节点不能驱动M-LVDS总线,只能接收M-LVDS总线上的信号;当M-LVDS总线处于空闲状态时,所述的节点才仲裁M-LVDS总线使用权;所述的节点获得M-LVDS总线仲裁使用权之后发送数据。

优选地,所述的M-LVDS总线仲裁的规则是:所述的节点发送数据0,但接收到的数据是1,表明M-LVDS总线上有其它节点同时在驱动M-LVDS总线,且优先级高于自己,该节点中止当前的发送操作。

优选地,所述的系统A和系统B的每个节点均包括一个独立的嵌入式板卡,所述的板卡内部包括处理器、存储器和M-LVDS总线控制器。

优选地,所述的M-LVDS总线控制器为FPGA。

优选地,所述的FPGA包括:mlvds_regs寄存器子模块、mlvds_tx_queue发送队列子模块、mlvds_transmitter发送子模块、mlvds_sample接收采样子模块、mlvds_rx_queue接收队列子模块和mlvds_link_monitor链路状态监测子模块;

所述的mlvds_regs寄存器子模块上设有与CPU的接口,所述的mlvds_regs寄存器子模块分别连接mlvds_tx_queue发送队列子模块和mlvds_rx_queue接收队列子模块;

所述的mlvds_tx_queue发送队列子模块内部设有数据FIFO缓存区,所述的mlvds_tx_queue发送队列子模块连接mlvds_transmitter发送子模块;

所述的mlvds_transmitter发送子模块分别连接M-LVDS总线和mlvds_link_monitor链路状态监测子模块;

所述的mlvds_sample接收采样子模块分别连接M-LVDS总线和mlvds_link_monitor链路状态监测子模块,所述的mlvds_sample接收采样子模块包括相位依次相差90°的4个时钟,所述的4个时钟同时对M-LVDS总线上的数据进行采样;

所述的mlvds_rx_queue接收队列子模块分别连接mlvds_sample接收采样子模块和mlvds_regs寄存器子模块,所述的mlvds_rx_queue接收队列子模块接收MLVDS总线上的数据帧,并对接收到的数据帧进行过滤检查,判断是否符合本地节点的接收过滤规则,同时会将接收过程中的错误状态信息反馈给CPU;

所述的mlvds_link_monitor链路状态监测子模块监测链路的当前状态,包括所述的M-LVDS总线是否已经连接上和M-LVDS总线是否处于空闲状态。

优选地,所述的mlvds_link_monitor链路状态监测子模块包括以下监测状态:

(1)NODE_POWER_ON状态:结点刚上电复位后的状态,以及软复位以后的状态,如果允许节点接收,即bus_rx_en=1,则开始检测输入的总线信号,进入LOOK_FOR_IDLE状态;

(2)LOOK_FOR_IDLE状态:在该状态,主要是判断总线是否处于空闲状态,通过两点来判断:一是在3072周期内,总线是否一直为0,即没有任何节点使用总线,此时节点将进入到BUS_IDLE状态;另一点是总线上有活动,则等到活动结束,即进入帧间隔期间,此时总线可找到总线上的空闲状态;如果在3072周期内,总线一直为高,此时总线可能有故障,将进入BUS_ERROR状态;如果在3072周期内,cdr_rec_bit_valid=1,表示总线上有活动,即时钟数据恢复单元再监测到同步码之后,会将cdr_rec_bit_valid置为1,此时进入WAIT_CDR_INVALID状态;

(3)BUS_IDLE状态:在找到总线上的空闲状态之后,如果检测到仲裁码,即总线值变成1,且持续6个周期,则进入BUS_WAIT_ARBIT状态;

(4)BUS_WAIT_ARBIT状态:在该状态,等待仲裁码传输完成,仲裁码传输总共需160个周期,考虑进该状态之前,已经消耗了6个周期,故等待155个周期后,检查cdr_rec_bit_valid信号,如果cdr_rec_bit_valid=1,仲裁码传输完成,且检测到同步码,时钟数据恢复电路已锁定恢复时钟,总线正在传输数据,此时进入WAIT_CDR_INVALID状态,如果cdr_rec_bit_valid=0,表示时钟数据恢复电路还没有锁定恢复时钟,此时进入WAIT_CDR_VALID状态;

(5)WAIT_CDR_VALID状态:正常情况下,在仲裁码之后是同步码,如果在32个周期内没有检测到同步码,则总线可能错误,此时进入BUS_ERROR状态;如果在32周期内,cdr_rec_bit_valid=1,表示链路工作正常,此时进入WAIT_CDR_INVALID状态;

优选地,所述的M-LVDS总线上的节点发送数据的流程包括以下步骤:

步骤1,当节点有数据帧要发送时,首先从发送FIFO读取一帧数据;

步骤2,数据帧先进入发送缓冲区,使发送缓冲区不为空;

步骤3,当发送缓冲区不为空时,会触发一个数据发送请求;

步骤4,当节点检测到有数据发送请求后,该节点就参与M-LVDS总线仲裁,在进行M-LVDS总线仲裁时,节点会根据数据帧的优先级向M-LVDS总线发送一个16位的仲裁码,其中仲裁码16’HFFFF的优先级最高,仲裁码16’H0000的优先级最低,当M-LVDS总线上其他节点发送的仲裁码小于该数据帧的仲裁码时,该节点仲裁通过,转到步骤5,否则,转到步骤步骤3;

步骤5,根据CRC生成多项式:G(x)=x16+x15+x2+1,计算得到数据帧的CRC校验值,将该CRC校验值附在数据帧的后面一起进行并串转换;

步骤6,将并串转换后的数据发送到M-LVDS总线上。

优选地,所述的M-LVDS总线上的节点接收数据的流程包括以下步骤:

步骤1,M-LVDS总线控制器用4个相位依次相差90°的时钟同时对总线上的数据进行串行采样,从而保证至少有一个时钟能够采样到正确的数据;

步骤2,将采样到的数据进行串并转换,然后进行帧解析,提取出帧长,帧类型的字段;

步骤3,预先设定的帧长范围是0~256字节,当收到的数据帧的长度不超过这个范围时,转入步骤4,当收到的数据帧的长度超过这个范围时则认为数据帧不合法,并丢弃;

步骤4,根据CRC生成多项式:G(x)=x16+x15+x2+1,对收到的数据帧及其附带的CRC值一起进行CRC计算,计算值为0则说明数据接收正确,转入步骤5,否则说明数据接收错误,将数据帧丢弃;

步骤5,判断节点的接收FIFO是否还有空间存放接收到的数据帧,如果有,转入步骤6,否则将数据帧丢弃,并产生错误报警;

步骤6,将数据帧放入接收FIFO中,供CPU读取。

与现有技术相比,本发明具有以下优点:

1、灵活性:M-LVDS总线不需要改变任何节点的相关软件或硬件,就可以在总线上直接添加新的节点,即支持节点的动态加入或退出;

2、报文路由:网络上所有节点可以通过某种方式对报文进行识别,确定是否应对该数据做出反应,即报文需携带标识信息,接收节点通过标识信息决定是否对报文做出反应。

3、M-LVDS总线传输速率可通过软件进行配置,数据传输速率可以分为3个档:10Mbps、50Mbps、100Mbps。

4、M-LVDS总线的每一个节点均能进行错误检测,保证了数据的安全发送。

5、总线帧的发送采用双网的方式,双网的物理和功能都保持独立,各自采用重发机制,以保证数据有效性。

6、M-LVDS节点能够把永久故障和短暂扰动区分开来。永久故障节点会被关闭,并且不会影响其他节点的正常工作。

附图说明

图1为本发明的通信结构拓扑结构示意图;

图2为本发明的M-LVDS总线控制器结构示意图;

图3为本发明的mlvds_link_monitor链路状态监测子模块的监测状态图;

图4为本发明的节点发送数据流程图;

图5为本发明的节点接收数据流程图。

具体实施方式

下面将对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都应属于本发明保护的范围。

如图1所示,一种基于M-LVDS实时多主高速总线的通信系统,该通信系统包括:系统A、系统B和M-LVDS总线,所述的M-LVDS总线为双绞线电缆,所述的系统A和系统B分别包括若干个节点,在所述的系统A或系统B内部的节点之间通过背板和PCB走线互连;在所述的系统A和系统B之间的节点之间通过双绞线电缆互连。

在所述的M-LVDS总线上当有多个节点同时有驱动请求时,必须要进行总线仲裁:当一个新的节点加入到M-LVDS总线上时,该节点不能驱动M-LVDS总线,只能接收M-LVDS总线上的信号;当M-LVDS总线处于空闲状态时,所述的节点才可以仲裁M-LVDS总线使用权;所述的节点获得M-LVDS总线仲裁使用权之后发送数据。

所述的M-LVDS总线仲裁的规则是:所述的节点发送数据0,但接收到的数据是1,说明M-LVDS总线上有其它节点同时在驱动M-LVDS总线,且优先级高于自己,该节点中止当前的发送操作。

所述的系统A和系统B的每个节点都是一个独立的嵌入式板卡,所述的板卡内部包括处理器、存储器和M-LVDS总线控制器,所述的M-LVDS总线控制器为FPGA。

如图2所示,所述的FPGA包括:mlvds_regs寄存器子模块、mlvds_tx_queue发送队列子模块、mlvds_transmitter发送子模块、mlvds_sample接收采样子模块、mlvds_rx_queue接收队列子模块和mlvds_link_monitor链路状态监测子模块。

所述的mlvds_regs寄存器子模块上设有与CPU的接口,所述的mlvds_regs寄存器子模块分别连接mlvds_tx_queue发送队列子模块和mlvds_rx_queue接收队列子模块,所述的mlvds_regs寄存器子模块维护M-LVDS总线控制器中的可编程寄存器,包括:控制寄存器、状态寄存器、中断寄存器。

所述的mlvds_tx_queue发送队列子模块内部设有数据FIFO缓存区,所述的mlvds_tx_queue发送队列子模块连接mlvds_transmitter发送子模块,当一个完整帧写入到数据FIFO时,将向mlvds_transmitter请求发送数据。

所述的mlvds_transmitter发送子模块分别连接M-LVDS总线和mlvds_link_monitor链路状态监测子模块,该模块负责仲裁M-LVDS总线的使用权,节点在发送数据之前,必须先通过总线仲裁获得总线使用权。只有获得总线使用权后,才能将本节点的数据帧发送到总线上。

所述的mlvds_sample接收采样子模块分别连接M-LVDS总线和mlvds_link_monitor链路状态监测子模块,所述的mlvds_sample接收采样子模块包括相位依次相差90°的4个时钟,所述的4个时钟同时对M-LVDS总线上的数据进行采样,从而确保其中至少有1个时钟采样到了正确的数据帧。

所述的mlvds_rx_queue接收队列子模块分别连接mlvds_sample接收采样子模块和mlvds_regs寄存器子模块,所述的mlvds_rx_queue接收队列子模块接收MLVDS总线上的数据帧,并对接收到的数据帧进行过滤检查,判断是否符合本地节点的接收过滤规则,同时会将接收过程中的错误状态信息反馈给CPU。

所述的mlvds_link_monitor链路状态监测子模块监测链路的当前状态,包括所述的M-LVDS总线是否已经连接上和M-LVDS总线是否处于空闲状态。

如图3所示,所述的mlvds_link_monitor链路状态监测子模块包括以下监测状态:

(1).NODE_POWER_ON状态:结点刚上电复位后的状态,以及软复位以后的状态。如果允许节点接收,即bus_rx_en=1,则开始检测输入的总线信号,进入LOOK_FOR_IDLE状态。

(2).LOOK_FOR_IDLE状态:在该状态,主要是判断总线是否处于空闲状态,主要是通过2点来判断:一是在3072周期内,总线是否一直为0,即没有任何节点使用总线,此时节点将进入到BUS_IDLE状态。另一点是总线上有活动,则等到活动结束,即进入帧间隔期间,此时总线可找到总线上的空闲状态。如果在3072周期内,总线一直为高,此时总线可能有故障,将进入BUS_ERROR状态。如果在3072周期内,cdr_rec_bit_valid=1,表示总线上有活动(时钟数据恢复单元再监测到同步码之后,会将cdr_rec_bit_valid置为1),此时进入WAIT_CDR_INVALID状态。

(3).BUS_IDLE状态:在找到总线上的空闲状态之后,如果检测到仲裁码(总线值变成1,且持续6个周期),则进入BUS_WAIT_ARBIT状态。

(4).BUS_WAIT_ARBIT状态:在该状态,等待仲裁码传输完成。仲裁码传输总共需160个周期,考虑进该状态之前,已经消耗了6个周期,故等待155个周期后,检查cdr_rec_bit_valid信号。如果cdr_rec_bit_valid=1,仲裁码传输完成,且检测到同步码,时钟数据恢复电路已锁定恢复时钟,总线正在传输数据,此时进入WAIT_CDR_INVALID状态。如果cdr_rec_bit_valid=0,表示时钟数据恢复电路还没有锁定恢复时钟,此时进入WAIT_CDR_VALID状态。

(5).WAIT_CDR_VALID状态:正常情况下,在仲裁码之后是同步码,如果在32个周期内没有检测到同步码,则总线可能错误,此时进入BUS_ERROR状态。如果在32周期内,cdr_rec_bit_valid=1,表示链路工作正常,此时进入WAIT_CDR_INVALID状态。

如图4所示,以发送数据帧0x1A2B3C4D为例,M-LVDS总线上节点发送数据的流程包括以下步骤:

步骤1,当节点有数据帧要发送时,首先从发送FIFO读取一帧数据,假设这帧数据为8个字节,值为:0x1A2B3C4D;

步骤2,数据帧0x1A2B3C4D先进入发送缓冲区,使发送缓冲区不为空;

步骤3,当发送缓冲区不为空时,会触发一个数据发送请求;

步骤4,当节点检测到有数据发送请求后,该节点就会参与M-LVDS总线仲裁,在进行M-LVDS总线仲裁时,节点会根据数据帧0x1A2B3C4D的优先级向M-LVDS总线发送一个16位的仲裁码,仲裁码16’HFFFF的优先级最高,仲裁码16’H0000的优先级最低,假设数据帧0x1A2B3C4D的仲裁码为16’HFFEE,当M-LVDS总线上其他节点发送的仲裁码小于16’HFFEE时,则该节点仲裁通过;

步骤5,根据CRC生成多项式:G(x)=x16+x15+x2+1,计算得到数据帧0x1A2B3C4D的CRC校验值为0x7BD2,将该CRC校验值附在数据帧0x1A2B3C4D的后面一起进行并串转换;

步骤6,将并串转换后的数据发送到M-LVDS总线上。

如图5所示,以接收数据帧0x1A2B3C4D为例,M-LVDS总线上的节点接收数据的流程包括以下步骤:

步骤1,M-LVDS总线控制器用4个相位依次相差90°的时钟同时对总线上的数据进行串行采样,从而保证至少有一个时钟能够采样到正确的数据;

步骤2,将采样到的数据进行串并转换,然后进行帧解析,提取出帧长,帧类型等字段;

步骤3,预先设定的帧长范围是0~256字节,当收到的数据帧的长度超过这个范围时则认为数据帧不合法,并丢弃

步骤4,根据CRC生成多项式:G(x)=x16+x15+x2+1(该多项式与发送流程中的生成多项式是相同的),对收到的数据帧0x1A2B3C4D及其附带的CRC值0x7BD2一起进行CRC计算,计算值为0则说明数据接收正确,否则说明数据接收错误,将数据帧丢弃;

步骤5,判断节点的接收FIFO是否还有空间存放接收到的数据帧0x1A2B3C4D,如果没有足够的空间则会将数据帧0x1A2B3C4D丢弃,并产生错误报警;

步骤6,将数据帧0x1A2B3C4D放入接收FIFO中,供CPU读取。

本发明已经被应用于安全计算机平台CVC-200的开发,根据应用环境的不同,CVC-200分为两种配置,分别为CVC-200C和CVC-200T。CVC-200C是车载型,基于CVC-200C平台可以形成iCC、CTCS-KA等地铁和国铁的车载产品。CVC-200T是轨旁型,基于CVC-200T平台可以形成联锁、列控、ZC、LC、RBC、TSRS、CCS等轨旁产品。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1