DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 293|回复: 0
打印 上一主题 下一主题

基于VHDL和FPGA的非对称同步FIFO设计实现

[复制链接]
跳转到指定楼层
楼主
发表于 2011-4-25 09:20:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
FIFO是一种常用于数据缓存的电路器件,可应用于包括高速数据采集、多处理器接口和通信中的高速缓冲等各种领域。然而在某些应用,例如在某数据采集和处理系统中,需要通过同步FIFO来连接8位A/D和16位数据总线的MCU,但是由于目前同步FIFO器件的输入与输出数据总线宽度相等,不能满足这种应用,因此通常采用输入与输出数据总线宽度均为8位的同步FIFO作为它们之间的数据缓冲,并对MCU数据总线的高8位采用软件进行屏蔽,或是在同步FIFO外围增加数据锁存器及逻辑控制器件的方法解决。为了提高效率和降低系统设计的难度,本文采用VHDL描述语言,充分利用Xilinx公司Spartan II FPGA的系统资源,设计实现了一种非对称同步FIFO(输入与输出数据总线宽度不一致的同步FIFO),它不仅提供数据缓冲,而且能进行数据总线宽度的转换。



非对称同步FIFO的设计难点
对于非对称同步FIFO的设计来说,不能简单地通过修改现成的同步FIFO模块而得到,这是因为非对称同步FIFO的设计有以下几个需要解决的难点问题:



(1) 写数据与读数据总线宽度不同。设写数据与读数据总线宽度分别为Win和Wout,必须对Win>Wout和Win rd_addr)

else (m - (rd_addr - wr_addr1)) when (rd_addr > wr_addr1) ;// m定义为fifo的深度

else 0;

empty<= '1' when (Offset = 0) else '0';

full<= '1' when (Offset = (m-1)) else '0';
方案实现
文中用VHDL语言描述了硬件结构,在Xilinx 公司Spartan II FPGA XC2S100-TQ144中通过了Xilinx ISE WebPACK的综合及布局布线。FPGA的规模是10万门,速度可达到56.344MHz。
有几点需要说明的是:(1) VHDL程序设计采用多层次的结构设计方法,把系统分解成若干个模块,其中模块又由若干个元件构成。设计从元件开始,其中设计中用到的CLKDLL、IBUFG、IBUF、BUFG、OBUF等元件位于Xilinx公司 FPGA专用器件库UNISIM中,在编写VHDL程序时,用COMPONENT和PORT MAP指令调用专门的模块,就可以在程序中导入所需元件。(2) 作为非对称同步FIFO,用波形图的方式进行仿真不太合适,可用VHDL建立测试平台的方式进行仿真,测试平台中把非对称同步FIFO主程序作为一个元件调用,主要包括初始化、时钟产生块、读写数据等内容,输入激励由测试平台产生。(3)由于Spartan II FPGA中BlockRAM单位容量和总体容量有限,如XC2S100中BlockRAM的单位容量为4Kbit,共10个, 则总体容量为40Kbit。设计时可以用多个BlockRAM组成不同深度和宽度的存储单元,如果容量还是不够则需要选用其它型号的FPGA。   
结语
采用本文的设计思路,同样可以设计出Win>Wout情形下的非对称同步FIFO,而且该方案具有很强的灵活性并易于实现。如通信只需单向进行,则只用一片FPGA即可;双向通信时需用两片FPGA。经过实际验证,该方案可以满足一般需要.
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-8-2 18:31 , 耗时 0.080326 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表