260 likes | 592 Views
基于 FPGA 中软异步 FIFO 设计和实现. 宋文 SA10225236. 2009 年 9 月. 概况. 什么是 FIFO FIFO 是英文 First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加 1 完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。异步是指读写不是由一个时钟信号控制的,用于解决高速器件和低速器件之间数据暂存问题。. 概况. 什么是 FPGA
E N D
基于FPGA中软异步FIFO设计和实现 宋文 SA10225236 2009年9月
概况 什么是FIFO FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。异步是指读写不是由一个时钟信号控制的,用于解决高速器件和低速器件之间数据暂存问题。
概况 什么是FPGA FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
概况 FIFO的应用背景 随着计算机、多媒体和数据通信技术的高速发展,数字图像、语音等数据传输技术近年来得到了极大的重视和长足的发展,并取得了广泛的应用。 如何保障这些语音、图像等数据传输的准确性、及时性? 如何高效率高速度地传输这些数据? 这些都是当今信息领域的科研人员所必须回 答和解决的问题。
概况 • 而往往在数据传输系统中,会遇到不同系统接口间数据的传输。 • 通常在两个相连接的不同电路系统之间(因为每个系统的数据传输速度不同,在系统的接口部分就会出现数据输入速度和输出速度不同)会发生数据传输速率不匹配的问题。这种情况往往会让传输的数据产生复写或者丢失,降低数据的传输速率,同时也因为数据复写、丢失和无效数据的读入,将会产生数据出错。 • 因此需要在不同系统的接口处设计数据传输单元来实现数据的高速高效传输。
概况 在现代的系统设计中,为了提高系统的性能,设计者对数据的传输率、数据的传输量,对系统各部分之间的接口部分不同的数据输入和接收传输率的匹配有越来越高的要求,而 FIFO 存储器以其合理的价格、使用的方便灵活性以及上述的对速度匹配的应用而成为解决这类问题的理想途径,因此FIFO 存储器在计算机、多媒体和数据通信领域都有着广泛的应用,因此对 FIFO 的研究与设计应用具有理论上和实际应用上的双重意义。
主流解决方案 目前市场上实现FIFO的方案 一.基于FPGA的双端口的RAM 二. ASIC的专用电路 三.基于单片机的单端口RAM
方案选择 对以上三种方案的对比,鉴于FPGA的在现场可编程,容量可改动性大,实现简单,生产周期短,速度快,开发时间快,可移植性好的优点,以及学校实验室提供的软硬件平台,我们选择基于FPGA作为工程实践的方案。 所设计的FIFO用于图像采集中的数据缓冲器,连接图像采集器和图像处理器。
方案设计 FIFO的基本单元是寄存器,作为存储器件,FIFO的存储能力是由其内部定义的存储寄存器的数量决定的。 rdata rinc full empty wdata FIFO rclk winc wclk rst_n
端口说明 wdata:输入数据端口; rdata:输出数据端口 rinc: 读使能端,当rinc=1时,可以读出数据 rclk: 读时钟,rclk上升沿时才能读出数据 winc: 写使能端,当rinc=1时,可以写入数据 wclk: 写时钟,wclk上升沿时才能写入数据 rst_n: 清零端,rst_n=0时,读写都被清零(即:读写地 址指针都指向0) full: FIFO状态信号,full=1时,表明该FIFO存储器已 经写满 empty:FIFO状态信号,empty=1时,表明该FIFO存储 器已经读空
需要解决的技术难题 要完成一个异步FIFO 的设计,必须要解决2 个问题: 1.避免亚稳态的产生 2.产生正确的空、满标志
亚稳态 亚稳态产生的原因 在时序电路中,通常采用触发器和锁存器作为存储单元。对于触发器,在时钟沿触发前后有一段判决时间,这段判决时间由建立时间( set up time) 和保持时间(hold time) 组成,输入信号在这段时间内,必须保持稳定。否则,无法输出一个确定的值,如图1中rdata1所示。
亚稳态 wdata1 在时钟rclk 的上升沿时刻发生翻转,则采样结果rdata1 可能是0 ,也可能是1 ,或是0 、1 之间的某个值,并且在未知时刻会固定到高电平或低电平。此时寄存器进入亚稳态,亚稳态产生后若不做处理,直接把信号送到组合电路中,经过布线延迟再经过各种逻辑门将产生不可预知的后果。
亚稳态解决方法 在涉及到触发器的电路中,亚稳态无法彻底消除,只能想办法将其发生的概率降到最低。其中的一个方法就是使用格雷码。格雷码在相邻的两个码元之间只由一位变换(二进制码在很多情况下是很多码元在同时变化)。这就会避免计数器与时钟同步的时候发生亚稳态现象 。
2.空满判断 空/满标志产生的原则是:写满不溢出,读空不多读。即无论在什么情况下都不应出现读写地址同时对一个存储器地址操作的情况。在读写地址相等或相差一个或多个地址的时候,满标志应该有效,表示此时FIFO已满,外部电路应对FIFO发数据。在满信号有效时写数据,应根据设计的要求,或保持、或抛弃重发。
2.空满判断 在读写有效的情况下,根据系统读地址信号和写地址信号的对比来控制是否产生读空标志或是写满标志:若是读地址加1与写地址相等,则产生读空标志;若是写地址加1与读地址相等,则产生写满标志。
改进之处 功耗的控制 通过采用对异步读写指针的前两个状态位直接比较的方法,减少格雷码向二进制转换的电路,并增加门控时钟电路,从而大大降低了存储器的动态功耗。 采用门控时钟技术,是对RTL 级降低功耗的有效手段。此技术主要是对触发器或锁存器的时钟输入进行门控。当子模块处于空闲状态时关断其时钟,既可以使本模块时序电路保持静态,又可以使其后组合逻辑没有翻转。因此门控时钟技术很好地达到了关闭子电路的目的,有效地降低了时钟功耗。
门控时钟电路 在本设计中,时钟模块主要是读写指针的产生电路。对于写指针电路而言, 如图所示, 当写复位(wrst) 有效或满标志(full) 有效或写指针增加量(inwptr) 为零时,关断写时钟,使其不翻转,这样减少了大量触发器的工作。从而降低了写指针产生电路的功耗。
开发与测试环境 FPGA采用的是Xilinx公司的软硬件 Modelsim 6.5a用于前期功能设计 编程语言选用Verilog HDL
预期目标 完成一个通用型低功耗的FIFO的软核或硬核
主要参考文献 Verilong数字系统设计教程 夏宇文 北京航空航天大学出版社 数字系统设计(第四版)【美】M.Morris mano & Michael D.Ciletti 电子工业出版社