可见,每一路传送的数据均不是连续的,且都按模4余数分配。为了方便数据并行送出,需要将数据进行拆包整理。每个clkin周期收到8位数据,将此按位号由大到小的顺序整理,并放入mid(7:O)中。其间增加一级触发器作为缓冲。
接收缓冲:此部分主要由状态机和FIFO构成,其中状态机主要控制FIFO写命令的产生,由链路口时钟Lxclk和时钟信号clkin共同产生,即当Lxclk产生第一个上升沿时计数器开始计数从O~15,每次计数就会将相应的FIFO写许可we d置为有效。将128位数据每8位为一组,分别送入16个8位F1FO中,由外部的FIFO_oe读信号和sysclk时钟信号控制128位数据并行读出。即将FIFO_oe信号同时接到16个FIFO上,当FIFO_oe有效时,从16个FIFO中同时读出数据。并根据FIFO存储状态发送Lxacko信号和fuiIflag信号,若FIF0不满则将Lxacko信号置为1(高有效)允许发送端继续通过链路口发送数据;否则Lxacko置为O。
其中,FIFO 8由Core generator直接生成,是异步8位先进先出存储器。下面涉及的FIFO 16,FIFO 32均这样生成。接收(Rx)流程图如图5所示。
综合后此电路的主时钟Clkin频率最快可达到368 MHz。由于一个FIFO 8就占用了一个18 Kb的嵌入式FIFO资源,而16个FIFO就占据了16个块的资源,这不仅造成了资源的浪费,还增加了布局布线所需要的时间。因此,为了优化结构,增加一级寄存器,扩展数据的位数,使得数据在未进入FIFO前就已得到处理,由原来的8位数据mid连成16位数据Data,再送入16位的FIFO 16中。优化后,FIFO 16的使用率由原来的22%减少到11%,大大减少了线上延迟。综合此电路的主时钟clkin频率最高可实现500 MHz。具体结构如图6所示。
2.2 发送电路