FPGA高速接口设计之SpaceWire——发送模块

目录

 

一、发送模块概述

二、发送模块功能

三、发送模块功能框图:

四、流控机制


一、发送模块概述

    发送器使用DS编码技术对数据进行编码发送两路数据。它接收主机的N-Char并向外传输。在不要求发送时间码,FCT或者N-Char字符(数据,EOP或EEP)的时候,发送器会一直发送NULL字符来保持链路活动。若链路接口发送了一个FCT,代表了它已经准备好接收8个N-Char。发送器内部的计数器负责统计接口接收到的FCT和已经发送的N-Char数目,以防链路另一端的缓冲区溢出。因此,发送器内需要增加一个信用计数器来记录它被要求发送的字符数。

二、发送模块功能

1、发送数据:根据协议中所规定的字符优先级(①Time-Code; ②FCT; ③N-Char; ④NULL)来发送数据。

2、DS编码:即Data信号直接发送,strobe的值在连续两个时钟周期下data信号相同时才会发生翻转。Strobe信号和Data信号共同作为同步信息用于自同步,发送器不会再额外发送时钟信号。而只有当有来自State Machine的传输许可时,写入发送 FIFO 的数据才会被转换成Data和Strobe信号。

3、错误检测:发送器中主要是检测信用错误。即,当接收 FIFO 满或者信用计数(credit count)错误,如creditCount接近或等于其最大值时接收到FCT时产生的。接收方每接收到一个FCT,该接口将信用计数的值增加8,若发送了一个N-Char,它从可发送的号码中减1。同样,当发送器发送了一个FCT 后,接口可接收计数增加8,若接收器收到一个N-Char,可接收计数会减少1。 当可能的传输次数达到56及以上或者当可接收的号码为0时,若接收器收到N-Char,就向状态机报告信用错误。

4、发送状态机:发送状态机有下面四种状态,即:

①IDLE:发送器不做任何操作。

②Send NULLs:此时发送器还不能从发送主机读取数据,不能发送FCT和时间码,只能一直发送NULL。

③Send FCT/NULL:在此状态下它可以发送FCT或NULL,但仍不能从主机接口读取数据和发送时间码。

④Send Time-Code/FCT/N-char/NULL:发送器可以发送NULL,FCT,时间码和数据。

5、发送顺序

发送器在发送数据时按照优先级发送,其发送顺序情况如下图:

FPGA高速接口设计之SpaceWire——发送模块_第1张图片

图1 字符发送顺序

三、发送模块功能框图:

根据上述发送器功能可绘制发送器的功能框图:

FPGA高速接口设计之SpaceWire——发送模块_第2张图片

图2发送器结构图

四、流控机制

在链路建立起连接后,发送器内部设置的两个信用计数器creditCount和 outstandingCount开始工作。creditCount用来存储链路链路另一端节点可接受的数据字符数量,即可发送的数据数量,outstandingCount用来存储本节点可以接收的数据数量。

creditCount在系统初始化后置0,接收器每收到一个FCT,表示链路另一端的接收FIFO可以接收8个数据字符,发送器给creditCount的值加8,只要creditCount的值不为0,就可以发送数据。每发送一个N-Char,creditCount的值就减去1,当creditCount的值大于 48时(与最大值56相差小于8),如果此时再次接收到了FCT,则标记为出现了流控错误,报告给状态机,链路将重新启动来恢复正常数据传输。发送器也可以向对方发送FCT表示本节点可以接收数据,其内部的outstandingCount计数器表示可以接收的数据数量,outstandingCount在系统初始化时置为0,每发送一个FCT就给其加8,每当收到一个N-Char时就将其减1。若当outstandingCount的值为0时收到N-Char,则标记出现了流控错误,报告给状态机进行错误恢复。

下图较清晰的阐释了发送器的流控计数过程:

FPGA高速接口设计之SpaceWire——发送模块_第3张图片

图 3 流控原理图

你可能感兴趣的:(FPGA,接口,SPW)