tag 标签: fpga、嵌入式系统、ic

相关博文
  • 热度 15
    2014-7-17 19:38
    3154 次阅读|
    4 个评论
    FIFO 在 FPGA 设计中除了上篇所介绍的功能之外, 还有以下作为以下功能使用: (1)        内存申请   在软件设计中,使用 malloc ()和 free ()等函数可以用于内存的申请和释放。特别是在有操作系统的环境下,可以保证系统的内存空间被动态的分配和使用,非常的方便。如果在 FPGA 内部实现此动态的内存分配和申请,相对来说较为复杂,例如某些需要外部数据存储且需动态改变的应用需求下,需要对 FPGA 外部 DDR( 或 SRAM 等 ) 的存储空间,进行动态的分配和释放。通过使用 FIFO 作为内存分配器,虽然比不上软件的灵活和方便,但是使用也较为简便。 举例说明假设外部存储空间为 8Mbyte ,可将其划分为 8192 个 1Kbyte 空间。并将数值 0-8191 存储 FIFO 中, FIFO 内部存储所标示可用的内存空间。如下图所示。 首先,进行内存的初始化,即将 0-8191 写入 FIFO 中。   如需申请内存后,从 FIFO 中读取值 A ,然后根据 A 的标示,写入 A 所指示的外部存储区( DDR )中相应的位置,即申请 {A , 10’ h0_00} -{A,10’h3_FF} 的空间区域。   如释放内存后,即可向 FIFO 中写入相应的值。即可保证下次该空间能够被设计使用。   在此种设计中, FIFO 承担了内存分配和释放器的角色。此时只能申请或释放最小单元倍数的内存空间,如本例所示:为 1Kbit 。如 FIFO 读空,则代表申请内存失败,需要等待其他块内存释放后再写入 FIFO 中,才能再次申请。 (2)        串并转换 对于串并转换,可能对于 FPGA 工程师来说,非常常见,但是如果有专门的 IP 实现此功能,可简化设计,减少出错及验证的工作量。例如:对于外部输入的需要进行串并转换的信号,并进行存储的信号,如设计进行串并转换在存储等操作,设计,可以直接通过例化读写位宽不一致的 FIFO ,例如 1 入 8 出的 FIFO ,可直接将外部输入信号直接转换成 8BIT 信号并进行存储后,供后续处理使用(其他的)。 (3)        业务优先级划分 通过 FIFO 设置不同水位线,可以划分不同的业务优先级,保证高业务优先级数据流在带宽受限时,优先通过,而低业务优先级只能在满足高优先级需求后有多余的带宽时才能通过。并且可以划分多个优先级,满足多种业务的需求。设计将在以后篇幅中详述。 ( 4 )固定带宽设定 通过对 FIFO 接口的读出使能,能够保证实现固定带宽的输出,例如 FIFO 读接口为 32bit ,而读时钟为 50Mhz ,则输出为 1.6Gbit/S 。如实现固定带宽的输出(如 1Gbit/S ),有两种方式 , 一种可以通过降低时钟频率到 31.25Mhz 。另一种方式,可通过读信号中间插入等待周期,如果读出长度为 N 的数据所需时钟周期为 M ,则需等待( 3M /5 )的周期,从而降低至 1Gbit/S 的处理能力,这在某些需要进行流量限制的业务方式中使用。 对于 FIFO 来说,作为 FPGA 内部资源的一个常用器件,最常见应用于异步时钟域划分和缓冲数据,但不仅限于此,简化设计、减少耦合、输入输出接口固定,便于仿真和验证,都是使用 FIFO 带来的设计上的益处。