图4.软FIFO结构图
由图4可以看出,写地址产生模块根据写时钟和写有效信号产生递增的写地址,读地址产生模块根据读时钟和读有效信号产生递增的读地址。FIFO的操作如下:在写时钟wr_clk的升沿,当wren有效时,将wr_data写入双口RAM中写地址对应的位置中;始终将读地址对应的双口RAM中的数据输出到读数据总线上。这样就实现了先进先出的功能。写地址产生模块还根据读地址和写地址关系产生FIFO的满标志。当wren有效时,若写地址+2=读地址时,full为1;当wren无效时,若写地址+ 1=读地址时,full为1。读地址产生模块还根据读地址和写地址的差产生FIFO的空标志。当rden有效时,若写地址-1=读地址时,empty为 1;当rden无效时,若写地址=读地址时,empty为1。按照以上方式产生标志信号是为了提前一个时钟周期产生对应的标志信号。 3 FPGA内部软FIFO的仿真
现场可编程门阵列FPGA是在专用ASIC 的基础上发展出来的,它克服了专用ASIC不够灵活的缺点。与其它中小规模集成电路相比,它有很强的灵活性,即其内部的具体逻辑功能可以根据需要配置,对电路的修改和维护很方便目前FPGA的容量已经跨过了百万门级使得FPGA 成为解决系统级设计的重要选择方案之一。现在FPGA 已经成为多种数据采集系统应用的强有力的解决方案。由于可编程方案的灵活性,数据采集系统设计可以适应日益变化的标准协议和性能需求,FPGA具有集成优势和更低的系统成本。
甚高速集成电路硬件描述语言VHDL 广泛用于描述数字系统的结构、行为、功能和接口。它的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。
本文利用XILINX 公司Spartan-ⅡE 系列的FPGA器件现场用VHDL编程实现了软FIFO设计。在Quartus II 4.0 环境中仿真,得到了很不错的效果。部分程序和仿真结果分别如以下程序和图5所示。
部分VHDL 程序
…
FIFO1TO2:FIFO32TO32 PORT MAP
( wrclk=>FIFO1TO2WE,
rdreq=>FIFO1TO2RREQ,
rdclk=>FIFO1TO2RE,
wrreq=>FIFO1TO2WREQ,
data=>FIFO1TO2DATAIN,
rdempty=>FIFO1TO2EMPTY,
wrfull=>FIFO1TO2FULL,
q=>FIFO1TO2DATAOUT);
…
------------------------------PROCESS_FIFO_DSP1_TO_DSP2FIFO1TO2WRITEROCESS(FIFO1TO2WE)
bEGIN
IF (FIFO1TO2WREQ='1'? AND FIFO1TO3FULL='0')
THEN
FIFO1TO2DATAIN<=DSP1DATA;
END IF;
END PROCESS FIFO1TO2WRITE;
FIFO1TO2READROCESS(FIFO1TO2RE)
bEGIN
IF (FIFO1TO2RREQ='1' AND FIFO1TO2EMPTY='0')
THEN
DSP2DATA<=FIFO1TO2DATAOUT;
ELSE
DSP2DATA<="ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ";
END IF;
END PROCESS FIFO1TO2READ;
图5 部分防真结果 4 结论
文中针对异步FIFO设计中的难点和要点,提出了具体的解决方案,并用VHDL语言给出了电路的设计,利用XILINX的Spartan-ⅡE 系列FPGA实现,并被应用于多种电路中,在实际应用中取得了较好的效果。
? 参考文献:
[1]徐庆元,张天序,钟胜. 基于USb总线的高速视频采集系统设计[J]. 微计算机信息.2006,10-1:247-249.
[2]余松煌,周源华数字图像处理[M]北京:电子工业出版社,1987
[3] Martti Juhola.Comparison of Algorithms for Standand Median Filtering? IEEE-trANS ASSP-39 1991
[4] 林敏,方颖立? VHDL数字系统设计与高层次综合「M」.北京:电子工业出版社,2002