老古开发网首页
导航:老古开发网首页文章索引文章分类EDA/IC设计→[基于FPGA的非对称同步FIFO设计]
| -文章搜索 - 最新文章 - |

基于FPGA的非对称同步FIFO设计

发布时间:2005年3月23日 点击次数:741
来源:电子设计应用   作者: 中南民族大学电子信息工程学院 张明 王礼平
 

摘    要:本文在分析了非对称同步FIFO的结构特点及其设计难点的基础上,采用VHDL描述语言,并结合FPGA,实现了一种非对称同步FIFO的设计。
关键词:非对称同步FIFO;VHDL;FPGA;DLL;BlockRAM

引言
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<Wout这两种情况进行写数据与读数据总线宽度的正确转换。
(2) 如何协调内部处理过程中不同的时钟频率。例如输入2个8位字节需2个时钟周期,而输出1个16位字节只需1个时钟周期,所以必须为内部数据处理提供不同的时钟频率。
(3) 由于写数据与读数据总线宽度不同,所以,要操作正确,必须保证数据存储排列的顺序及空/满标志产生的正确。
另外,由于FPGA中的寄存器个数有限,而FIFO是一种基于RAM的器件,需要占用大量的存储空间。通常在编写VHDL程序时用数组描述的方法来设计数据存储结构,在综合时会耗用大量的寄存器,所以这种方法在FIFO的设计中是不可行的。

非对称同步FIFO的设计
针对以上设计中的难点,本文采用VHDL描述语言,利用Xilinx公司Spartan II FPGA设计实现了一种非对称同步FIFO,设计中充分利用了FPGA中的资源如时钟延迟锁相环(DLL)和BlockRAM。
FPGA中的DLL
FPGA 中的DLL是一种很好的资源,Xilinx公司Spartan II、Spartan IIE、Virtex-E等系列器件中就采用时钟延迟锁相环技术进行FPGA内部的时钟控制,它可以对时钟进行倍频、锁相等操作。
本设计中要利用Spartan II系列器件中的DLL产生二倍频时钟信号,电路原理图如图1所示。其中IBUFG、IBUF、BUFG、OBUF是时钟缓冲器,提供时钟信号的最小时延。
FPGA中的RAM
Xilinx公司的FPGA器件提供了片内RAM可供直接使用,而不必使用寄存器来构成存储空间,从而大大提高了芯片的利用率。根据型号的不同,FPGA中提供了两种结构的RAM:分布式RAM和BlockRAM。分布式RAM可以利用可配置逻辑模块(CLB) 设计实现,主要用于小容量片内存储;BlockRAM是FPGA内部的专用RAM模块,通常沿芯片的垂直边排列。根据具体型号不同,FPGA内部的BlockRAM在单位容量和总体容量上都有较大的不同。本设计将采用BlockRAM用于FIFO的编写。由于在Xilinx公司Spartan II FPGA器件库中没有现成的宏模块,就需要自己生成BlockRAM模块,具有较高的灵活度。利用Xilinx公司的配套软件ISE Foundation和ISE WebPACK中都带有的CoreGenerator程序包,可以很方便地建立用户所需的模块。只需要输入BlockRAM模块的名称、BlockRAM的类型(如单口还是双口)、地址线和数据线的宽度,就可以生成用户希望得到的结构。一般来说,生成的结构会自动加载到当前的项目中,从而可以像器件库中的元件一样调用。
非对称同步FIFO的结构
下面以Win<Wout(设Win=8,Wout=16)这种情形为例,介绍非对称同步FIFO模块的设计。非对称同步FIFO的结构框图如图2所示,图中还显示了各模块端口及信号互连关系。其主要设计特点为:
(1) 由于写数据与读数据总线宽度不同,所以在设计双口RAM时把双口RAM设计成写口RAM和读口RAM两个部分。例如FIFO写口RAM部分为512×8,读口RAM部分为256×16,这样通过数据存储格式的改变达到写数据与读数据总线宽度的转换。
(2) 由于读数据时钟频率是写数据时钟频率的两倍,因此可利用FPGA中的DLL产生二倍频时钟信号来提高写数据的时钟频率,使读数据和写数据的时钟频率相等。二倍频时钟信号提供给写口RAM、写地址产生模块,而源时钟信号(一倍频)提供给读口RAM、读地址产生模块及空/满标志产生模块,从而解决了内部数据处理同步的问题。
(3) 由于双口RAM中存在两种数据存储格式,因此地址位数不同,读地址和写地址不能一一对应,例如FIFO写口RAM部分为512×8,读口RAM部分为256×16,因此写地址要求9位,而读地址要求8位,对于同一数据的写地址与读地址,写地址的高8位与读地址的8位相等,它们的区别仅在写地址的最低一位。因此可把写地址的高8位与读地址一同输入空/满标志产生模块,从而得到正确的full和empty信号。下面仅给出读写地址产生逻辑及空/满标志产生逻辑的VHDL设计程序:
fifo_write :  process
begin
          wait until rising_edge(clk);
          if rst = '1' then
wr_addr <= 0; //写地址初始化
else
if (wr_en = '1' and full = '0')then
wr_data_buf (wr_addr) <= To_Bitvector(wr_data (7 downto 0));
//写数据,其中wr_data_buf定义为基于BlockRAM的存储矩阵
wr_addr <= (wr_addr + 1) mod 8;// 写地址增加1
          end if;
          end if;
          end process;
fifo_read :  process
         begin
         wait until rising_edge(clk);
         if rst = '1' then
         rd_addr <= 0;
//读地址初始化
         else
         if (rd_en = '1' and empty = '0') then
         rd_data (15 downto 0) <= wr_data_buf (rd_addr);//读数据
         rd_addr <= (rd_addr - 1) mod 16;// 读地址减1
         end if;
         end if;
         end process;
  wr_addr1 <= wr_addr / 2 ;//取写地址的高8bit
  Offset <= (wr_addr1 - rd_addr) when (wr_addr 1> rd_addr)
       else (m - (rd_addr - wr_addr1)) when (rd_addr > wr_addr1) ;// m定义为fifo的深度
 &a


欢迎进入老古论坛进行讨论
[EDA/IC设计] 相关文章:
CPLD在发射机控制保护系统中的应用
简介:
摘要: 可编程控制器(PLD)自20世纪60年代末出现以来,就以其灵活、高效、可靠性高等优点受到设计者的青睐。而CPLD是20世纪90年代推出的一种复杂的PLD,其主要特征是集成规模大于1000门以上的可编程逻辑器件。它以其更大的容量,更快的速度,更强的仿真能力,增强了电路设计的灵活性。不但降低了开发成本,而且减小了设计风险。因此,在工业领域得到广泛的应用。根据发射机的工作特点,介绍了用CPLD完成对发射机的控制和保护功能。 关键词: 可编程控制器;复杂的可编程控制器;发射机;控制保护系统 引言 ......

一种新型的电子点菜系统
基于Rocket I/O模块的高速工I/O设计
CPU卡中T=0通讯协议的分析与实现
非定长码高速实时拼接专用集成电路的研制
换体DMA高速数据采集电路的CPLD实现
利用FPGA实现模式可变的卫星数据存储器纠错系统
IIC总线通讯接口器件的CPLD实现
PSD813F2在FPGA配置中的应用
基于单片机的 复杂可编程逻辑器件快速配置方法
 
下一个:[EDA/IC设计]混合信号电路设计技术研究
简介:
摘 要:本文针对航天电子系统小型化发展的特殊要求,提出在星载电子系统中进行混合信号电路设计,重点探讨了混合信号电路设计技术所面临的问题及其对策,并以星载计算机的下行信道设计为例,对航天微电子系统的混合信号设计进行了初步探索。 关键词: 系统级芯片;混合信号;设计流程;IP核 引言 航天市场的需求带动了卫星技术的发展,微型、纳型甚至皮型卫星的研究已成为航天技术研究的热点。微电子技术、系统集成技术、微机电技术、微组装技术以及轻型结构材料技术的发展使得卫星进一步小型化成为可能。从星载电子系统方面来说,进行星上微电子一体化设计可以从技术上较好地满足当前和今后较长......
 

上一个:[EDA/IC设计]基于SPW-FSM Editor的CPM调制器的建模

老古开发网版权所有 2006年9月 asp.Net V2.0 设计:老古
页面缓存:10分钟 执行时间:31毫秒