本技术属于总线技术领域,具体涉及一种高速串行总线与低速串行总线数据传输和转换方法。
背景技术:
及应用前景
目前在机载、车载等军用领域,及民用领域中,高速串行总线逐渐被普及,但同时一些低速串行接口仍然会有应用需求,此时需要高速串行总线和低速串行总线进行数据之间的传输与转换,所以高速串行总线与低速串行总线结合的应用场景是总线接口设计的一个常态,目前通常的方法是利用主控芯片(cpu或mpu)作管理,数据的传输需要经过主控芯片来完成。
精工爱普生株式会社申请的专利“显示驱动器及电子设备”(专利号cn200610067406.7,公开号cn1841489a)公开了一种高速串行接口向低速串行接口传输的一种方法,该方法的数据流是单向的,接口转换使用了专用的驱动电路,驱动电路的中包含了一个主控微处理器(mpu)单元,负责控制和转发来自高速接口的数据。
苏州皓泰视频技术有限公司申请的专利“一种基于多核处理器的可扩展nvr系统”(专利号cn201310106753.6,公开号cn103179385a)公开了一种pcie与低速串行接口数据交互的一种方法,该方法主要利用了多核处理器作为主控,来完成各个子系统的交互。
以fpga开发为例,目前低速串并转换协议的ip是基于16c552此类串并转换协议芯片开发的,该ip的并行接口为带片选的局部并行总线接口,该类型接口主要为主控芯片设计。高速串行总线ip如xilinx的官方pcie或srioip核中的并行接口为axi总线接口,该接口也主要为主控芯片设计。
可见目前高低速串行总线转换后的并行接口都主要是需要增加额外主控芯片管理,两类串行数据的传输与转换都需要通过主控芯片来完成,该方法配置简单,但也一定的缺点,即一方面增加了主控芯片的开销,另一方面数据经过主控芯片的转发也降低了总线之间传输的效率。
本发明属于总线技术领域,为了消除主控芯片在总线转换过程中带来的影响,本发明基于fpga设计了提出了一种不需要主控芯片,高速串行总线与低速串行总线直接进行数据转换与传输的方法。本发明充分发挥了fpga灵活性的特点,总线的转换方法灵活快速。且实现高速与低速串行总线转换时因为不需要主控芯片,既降低了功耗,又节约了成本,同时还提高了总线的传输效率,保证了系统的低功耗以及高性能设计,在嵌入式领域具有广阔的应用前景。
技术实现要素:
本发明的目的:针对机载、车载等军用领域,及民用领域,一种高速串行总线与低速串行总线转换与传输方法,该方法不需要增加额外的主控芯片,且可灵活配置,实现了数据的双向高效传输。
本发明的技术方案:
一种高速串行总线与低速串行总线数据传输和转换方法,其特征在于,在fpga中对高速串行总线和低速串行总线的的并行接口部分作封装,利用状态机或者组合逻辑,提取出有效数据,使得并行接口数据可以直接对缓存进行读写操作,具体方法实现包括以下步骤:
步骤一、利用高速总线中特殊的数据格式或者数据包,初始化并配置低速串行总线:
高速串行总线在传输开始之前,向fpga发送多个中断、消息包、门铃包类特殊数据格式或数据包,每一个包中都包含初始化低速串行总线或传输链路状态的参数值,fpga解析此类型数据包后,依次配置低速串行总线的波特率,停止位、校验位等数据格式,中断或查询方式,传输链路中发送接收数据的最大长度;
步骤二、将高速串行总线与低速串行总线中的并行数据接口封装,封装后两种串行总线的转换出的并行数据可以互相传递并识别;
步骤三、将收到的并行数据作转换,转换为需要的串行数据输出。
所述的步骤二具体实现形式为:
高速串行总线速率远大于低速串行总线速率,为提高从高速到低速串行总线的传输效率,设计两个fifo缓冲区,缓存连续到来的高速串行总线数据,对两个fifo进行乒乓操作,将当前数据填到第一个fifo中时,对第二个缓冲区的填充到发送缓冲fifo中进行低速串行总线发送,从而完成高速到低速串行总线数据的传递;
由低速向高速发送数据时发送数据时,当fpga缓存接收完毕数据后,向高速串行总线发送通知,通知其读出相应缓存的数据,从而完成低速到高速串行数据的传递。
还包括有特殊收发机制:fpga接收到开始数据标志时,如收到0x5a5a,后续数据为有效数据,当发送端超过1ms无数据传输时,fpga则认为数据传输结束。
有益效果:
附图说明
图1为本发明方法的原理示意图。
具体实施方式
本发明所述高速串行总线与低速串行总线的传输与转换已经在某型模块中成功实施,能够实现自动完成srio对rs422的初始化配置,以及srio总线协议与rs422协议之间数据实时传输和互相转换。
为了屏蔽两种ip核的axi接口和局部总线接口,在srio的ip核的axi总线接口上封装了一层组合逻辑,根据axi总线时序特点,使得axi接口的数据可以直接写入fpga内部ram或者从ram读出。针对rs422的局部总线接口,利用状态机来模拟对局部总线的读写操作,使得局部总线的数据可以直接存入fpga内部缓存或者从缓存读出。封装好并行接口后,srio和rs422间就可以通过fpga内部缓存进行数据的传递。
如图1所示,在数据发送前,首先要对rs422作初始化配置,本例中srio向fpfa发送门铃包,fpga收到门铃包后解析出16位附带的数据,本方式主要利用低8位数据,即info[7:0],首先判断info[2:0]是否为010,当info[2:0]为010时,该门铃即为rs422初始化配置门类,具体如下所示:
当info[5:3]为001代表初始化波特率,info[7:6]为00时代表波特率为115200bps,01代表1mbps,10代表3.125mbps,11代表5mbps;
当info[5:3]为010代表初始化数据格式,info[7:6]为00时代表8位数据长度,1位停止位,无校验位。其余编码暂时保留;
当info[5:3]为011代表设置中断或查询方时,info[7:6]为00时代表查询方式,11时代表中断方式。其余编码暂时保留;
当info[5:3]为100代表初始化发送长度,info[7:6]为00时代表发送长度不超过255字节,其余编码暂时保留;
当info[5:3]为101代表初始化接收长度,info[7:6]为00时代表接收长度不超过255字节,其余编码暂时保留;
当info[7:3]为00000代表低速串行总线配置完成。
门铃包配置串口完成后,srio与422开始互发数据:
从srio到rs422方向,srio通过nwirte包向fpga的缓存写数据,当fpga收到0x5a5a的数据后,则认为后续数据为有效数据,开始用乒乓操作开始向rs422发送数据,当超过1ms无数据传输时,则认为该帧数据传输完成,当发送数据长度大于预定发送长度时,只发送预定长度的数据,超出部分丢弃,如果发送数据长度小于发送长度时,按照原数据长度发送。
从rs422到srio方向,当fpga检测到rs422发送了0x5a5a则认为后续数据有效,将对应数据记录到缓存中,超过1ms无数据时,则认为该帧数据传送完成,同理,当接收数据超过预定接收长度时,只缓存预定长度的数据,当接收数据小于预定接受数据长度时,按原数据长度缓存。当缓存完成后,向srio发门铃通知数据准备好,srio通过nread方式将缓存数据读出。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细地说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。