0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

利用光纤通道协议和异步FIFO实现FC-AL通信弹性缓存的设计

电子设计 来源:单片机与嵌入式系统应用 作者:何晓蓉,周东 2020-05-13 08:01 次阅读

引 言

一个简化的异步数据通信系统如图1所示。接收机端从接收到的来自串行链路的比特流中提取时钟信号Clk1,作为其工作时钟源;而发送机端采用本地晶振和锁相环产生的时钟Clk2,作为其工作时钟源。接收机在时钟Clk1的上升沿把数据写入弹性缓存,发送机在时钟Clk2的上升沿从弹性缓存中读出数据,从而实现数据的同步。

利用光纤通道协议和异步FIFO实现FC-AL通信弹性缓存的设计

虽然光纤通道仲裁环中的所有通信设备必须工作在同一频率,但图1中两个不同源的时钟信号Clk1和Clk2除了在相位上可能存在差异外,由于制造工艺的因素,晶振产生时钟时其频率也是被允许有一定误差存在的。这个误差范围为±100×10-6,即在每一百万个理想时钟周期的时间内容许±100个时钟周期的偏差。两个不同的晶振产生同一频率的时钟时,它们之间可能存在的误差最大为200×10-6。所以,对于由不同晶振产生的同一频率的2个时钟,除了相位上的不同外,在最坏情况下,经过106/200=5 000个周期后,它们之间将出现一个时钟周期的偏移。对于连续的数据流,由于用于时钟同步的弹性缓存的大小有限,如果不能正确处理这个时钟周期的偏移,将会导致缓存溢出,损坏有效数据,严重影响系统的性能。

1、 FC-AL弹性缓存管理的基本原理

FC-AL通信系统中,也采用弹性缓存来解决数据在不同时钟域的同步问题,并通过对弹性缓存的管理适时地向缓存中添加或删除填充字,以控制缓存中有效传输字的数量(本设计中弹性缓存的存储单位为字),从而达到对时钟倾斜的补偿。填充字是FC-AL协议中定义的一类特殊的传输字,它们在帧与帧的间隙,且在帧界定符之外被传输。所以,弹性缓存的管理对这些特殊传输字进行的适当的添加或删除操作,不会损坏数据帧或影响环网的正常运作。何时对弹性缓存添加或删除填充字,是由缓存的占用率来决定的。弹性缓存空间的使用状态分为4个等级:添加填充字等待、保持状态、低级别的删除填充字等待以及高级别的删除填充字等待。当弹性缓存的写时钟慢于读时钟时(如图1中Clk1的频率略低于Clk2的频率),缓存可能被读空而出现误读,此时需要添加填充字,相当于增加缓存中可读的数据量,防止缓存出现下溢;当弹性缓存的写时钟快于读时钟时(如图1中Clk1的频率略高Clk2的频率),缓存可能出现被写满导致错误的数据覆盖,此时需要删除填充字,以增加缓存中的可用空间防止缓存出现上溢。

弹性缓存管理的基本原理如图2所示。假设弹性缓存的深度为4,图中被标识为0或1的每一个小格代表弹性缓存的一个存储空间。置1,表示相应的存储空间已被写入有效数据,且未被读出;置0,表示相应的存储空间未被写入,或写入的数据已被读出。

由于对于缓存的读操作必须是在有数据已写入缓存后才能开始,假设当缓存中有2个空间被写入时才开始读操作。所以,对于随后的弹性缓存管理,当缓存中刚好有2个空间被占用时,其处于保持状态,执行正常的读写操作;当缓存中超过2个的空间被占用时,其处于删除填充字等待的状态,说明写时钟的频率高于读时钟的频率,需要进行删除填充字的操作;当缓存中少于2个空间被占用,其处于添加填充字等待状态,说明写时钟的频率低于读时钟的频率,需要进行添加填充字的操作。

2、硬件电路设计

用异步FIFO实现弹性缓存的关键是监测缓存空间的占用率,以此来判断读写时钟可能存在的微小差异,预见弹性缓存可能出现读空还是写满,并决定在何时进行填充字的添加或删除操作,以及何种等级的删除操作,并保证在添加或删除操作之后不对其后的数据读写产生任何影响。需要注意的是,这里的添加或删除填充字的操作都必须在读时钟域进行。

在异步数据通信系统中,使用弹性缓存实现数据在多时钟域之间的同步存在两个问题——数据延时和缓存大小。数据延时指的是,数据从被写入缓存到从缓存中读出的时间差。假设弹性缓存的大小为N,在不出现数据覆盖的前提下,当前数据被写入缓存的第N个存储空间,而此时缓存中还有N-1个空间中的数据还未被读出,至少在读时钟域看来是这样的,那么当前被写入的数据需要至少N-1个读时钟周期的延时后才能被读出。由此可见,缓存空间越大,经过缓存的数据的延时可能越大。但是,为了防止缓存将满或将空而添加或删除填充字的操作不能得到及时的执行而致使缓存溢出,须设置较大的缓存空间,给缓存管理提供较充足的时间范围,从而减小了缓存出现溢出的可能性。

为了获得尽可能小的数据延时,同时不对数据的正常传输产生影响,在缓存大小满足系统基本要求的情况下,如何更精确地判断弹性缓存空间的占用率就变得很重要了。为了提高缓存管理的精度,本文中所采取的弹性缓存的设计方法如图3所示。在写时钟的上升沿将数据写入到基于写时钟上升沿的写地址产生逻辑的输出,即写指针所指向的弹性缓存空间;在读时钟的上升沿将基于读时钟上升沿的读地址产生逻辑的输出,即读指针所指向的弹性缓存空间的数据读出。此外,还各设置了一个基于时钟下降沿的读和写地址产生逻辑,但它们不对弹性缓存的读写操作产生影响。分别对基于读时钟上升沿的读地址和经过延时后的基于写时钟上升沿的写地址,以及基于读时钟下降沿的读地址和经过延时后的基于写时钟下降沿的写地址进行异步比较。综合两个比较结果,判断因同频但不同源的读写时钟之间可能存在的差异而导致的弹性缓存空间占用率的变化。判断得到的异步信号通过一个同步逻辑被同步到读时钟域,控制基于读时钟上升沿的读地址产生逻辑的输出,从而实现对弹性缓存中填充字的添加或删除,达到预防缓存出现溢出的目的。

3、仿真结果分析

Verilog语言实现图3所示电路的RTL描述,并对其用ModelSim进行仿真,仿真结果如图4和图5所示。两图中,CLK_rcv和CLK_local分别为频率非常相近的缓存的写时钟和读时钟。

图4中,CLK_rcv的时钟频率略低于CLK_local的时钟频率,弹性缓存有被读空的可能。当CLK_local比CLK_rcv多出半个时钟周期左右后,缓存管理就发出添加填充字的请求,以在最近的帧间隙进行添加操作。

图5中,CLK_rcv的时钟频率略高于CLK_local的时钟频率,弹性缓存有被写满的可能。当CLK_local比CLK_rcv少了半个时钟周期左右后就发出较低级别的删除填充字的请求,以在最近的间隙进行删除操作。若低级别的删除操作未被及时执行,致使缓存空间占用率进一步提高,则请求较高级别的删除操作。

从图4和图5中可以看出,添加填充字,即在当前时钟周期不读缓存空间的数据,而是发送一个当前填充字;删除填充字,即在条件满足的情况下跳过当前读地址空间,直接读取下一个地址空间中的数据。

4、结 语

本文提出的弹性缓存设计方法,充分利用了光纤通道协议的特性,通过提高对弹性缓存的管理精度,减小了数据在弹性缓存中可能的最大延时,有利于提高仲裁环网的整体性能。

责任编辑:gt


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 光纤
    +关注

    关注

    19

    文章

    3889

    浏览量

    73033
  • 通信
    +关注

    关注

    18

    文章

    5985

    浏览量

    135902
  • fifo
    +关注

    关注

    3

    文章

    387

    浏览量

    43585
收藏 人收藏

    评论

    相关推荐

    基于FPGA的异步FIFO实现

    大家好,又到了每日学习的时间了,今天我们来聊一聊基于FPGA的异步FIFO实现。 一、FIFO简介 FIFO是英文First In Fir
    的头像 发表于 06-21 11:15 6496次阅读
    基于FPGA的<b class='flag-5'>异步</b><b class='flag-5'>FIFO</b>的<b class='flag-5'>实现</b>

    FC(Fibre Channel光纤通道)仿真测试(通讯)卡

    美国AIT公司的FC(Fibre Channel光纤通道)仿真测试卡,支持XMC、PXI express、PCI、PCI-X、PCI express等多种总线平台。 FC(Fibre
    发表于 02-18 10:13

    基于FC-AL系统中FPGA的弹性缓存方案设计

    采用本地晶振和锁相环产生的时钟Clk2,作为其工作时钟源。接收机在时钟Clk1的上升沿把数据写入弹性缓存,发送机在时钟Clk2的上升沿从弹性缓存中读出数据,从而
    发表于 07-05 08:23

    如何利用FC-AL系统设计FPGA的弹性缓存

    如何利用FC-AL系统设计FPGA的弹性缓存?需要注意哪些事项?
    发表于 08-05 08:07

    什么是光纤通道Fibre Channel

    127个节点,但是实际上更接近20。FC-AL目前大多数都是用于特殊用途,包括但不限于内部磁盘阵列通信,以及高端服务器的内部存储。  FC交换机可以按照你喜欢的任意方式进行连接,因为光纤
    发表于 07-14 17:27

    光纤通道FC存储交换机的常见问题有哪些

    :FibreChannelArbitratedLoop(FC-AL)和Fabric。我们常说的的FibreChannelHub和LoopSwitch使用FC-AL协议,而FabricSwitch使用
    发表于 07-14 17:29

    怎么利用异步FIFO和PLL结构来实现高速缓存?

    结合高速嵌入式数据采集系统,提出一种基于CvcloneⅢ FPGA实现异步FIFO和锁相环(PLL)结构来实现高速缓存,该结构可成倍提高数
    发表于 04-30 06:19

    高速异步FIFO的设计与实现

    本文主要研究了用FPGA 芯片内部的EBRSRAM 来实现异步FIFO 设计方案,重点阐述了异步FIFO 的标志信号——空/满状态的设计思路
    发表于 01-13 17:11 40次下载

    FC-AL系统中FPGA的弹性缓存设计

    FC-AL系统中FPGA的弹性缓存设计 引  言一个简化的异步数据通信系统如图1所示。接收机端从接收到的来自串行链路的比特流中提取时钟信号
    发表于 02-06 08:58 591次阅读
    <b class='flag-5'>FC-AL</b>系统中FPGA的<b class='flag-5'>弹性</b><b class='flag-5'>缓存</b>设计

    异步FIFO在FPGA与DSP通信中的运用

    文中给出了异步FIFO实现代码和FPGA与DSP的硬件连接电路。经验证,利用异步FIFO的方法
    发表于 12-12 14:28 51次下载
    <b class='flag-5'>异步</b><b class='flag-5'>FIFO</b>在FPGA与DSP<b class='flag-5'>通信</b>中的运用

    异步FIFO在FPGA与DSP通信中的应用解析

    摘要 利用异步FIFO实现FPGA与DSP进行数据通信的方案。FPGA在写时钟的控制下将数据写入FIFO
    发表于 10-30 11:48 2次下载
    <b class='flag-5'>异步</b><b class='flag-5'>FIFO</b>在FPGA与DSP<b class='flag-5'>通信</b>中的应用解析

    Emulex引导的光纤通道和NVMe FC协议用户指南 14.2版

    电子发烧友网站提供《Emulex引导的光纤通道和NVMe FC协议用户指南 14.2版.pdf》资料免费下载
    发表于 08-18 09:38 0次下载
    Emulex引导的<b class='flag-5'>光纤</b><b class='flag-5'>通道</b>和NVMe <b class='flag-5'>FC</b><b class='flag-5'>协议</b>用户指南 14.2版

    利用光纤通道释放NVMe的威力

    电子发烧友网站提供《利用光纤通道释放NVMe的威力.pdf》资料免费下载
    发表于 08-29 15:04 0次下载
    <b class='flag-5'>利用光纤</b><b class='flag-5'>通道</b>释放NVMe的威力

    基于循环队列的FIFO缓存实现

    FIFO缓存是介于两个子系统之间的弹性存储器,其概念图如图1所示。它有两个控制信号,wr和rd,用于读操作和写操作。当wr被插入时,输入的数据被写入缓存,此时读操作被忽视。
    的头像 发表于 09-11 10:12 785次阅读
    基于循环队列的<b class='flag-5'>FIFO</b><b class='flag-5'>缓存</b><b class='flag-5'>实现</b>

    光纤通信利用光纤来传送什么信号

    光纤通信是一种基于光传输的通信技术,利用光纤来传输不同类型的信号,包括音频、视频、数据和互联网通信等。 光纤通信的原理是通过将光信号转换为
    的头像 发表于 04-03 17:54 1513次阅读