首页

异步FIFO的VHDL设计

2008-06-17 11:30:50 来源:与非网 关键字: 异步 FIFO VHDL 设计

程序3:写地址产生模块,此程序同时产生写地址的自然码和格雷码

waddp<=wadd+1;

u1:norm_to_grey

port map(waddp,wadd_grey_temp);

wadd_process:process(clr,wr_clk)

begin

if clr='0'then

wadd<=(others=>'0');

wadd_grey<=(others=>'0');

elsif wr_clk'event and wr_clk='1'then

if wren='1'then

wadd<=waddp;

wadd_grey<=wadd_grey_temp;

end if;

end if;

end process;

程序4:满标志和满标志产生模块,以8位地址为例。

u2:grey_to_norm

port map(wr_radd_grey,wr_radd_temp);

process(clr,wr_clk~

begin

if clr='0'then

wr_radd_grey<=(others=>'0');

wr_radd<=(Others=>'0')

elsif wr_clk'event and wr_clk='1'then

wr_radd_grey<=radd_grey;

wr_radd<=wr_radd_temp;

end if;

end process;

wr_compare<=wadd-wr_radd;

full_process:process(clr,wr_clk)

begin

if clr='0'then

full<='0';

elsif wr_clk'event and wr_clk='1'then

if(wren='1')then

if wr_compare="11111110"then

full<='1';

else full<='0';

end if;

else

if wr_compare="11111111"then

full<='1';

else full<='0';

end if;

end if;

end if;

end process;

almost_full_process:process(clr,wr_clk)

begin

if clr='0' then

almost_full<='0';

elsif wr_clk'event and wr_clk='1'then

if(wren='1')then

if wr_compare>("11111110"-almost_length)then

almost_full<='1';

else almost_full<='0';

end if;

else

if wr_compare>("11111111"-almost_length)then

almost_full<='1';

else almost_full<='0';

end if;

end if;

end if;

end process;

读地址的产生模块和空标志及空标志的产生模块与写地址模块类似。

4 结论

为了解决FIFO的异步操作问题,本文提出了一种利用格雷码对地址进行编码的异步FIFO的设计,并采用VHDL语言进行电路设计,利用Altera公司FLEX10KE系列FPGA得以实现,该电路软件仿真和硬件实现已经通过验证,并被应用到各种电路中。实践证明它可以解决由于异步产生的错误,同时增加了应用灵活性。

1 2
相关文章
»
  • 解密Maxim芯片在Galaxy Note N7000中的应用...

    这次拿到的Galaxy Note N7000是一个支持3G功能的版本,下面来看看这款全世界独一无二的智能手机里面的秘密…... [详细]