微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 关于FIFO设计求助 (Verilog)

关于FIFO设计求助 (Verilog)

时间:10-02 整理:3721RD 点击:

小弟是个新手,看了http://info.ec.hc360.com/2009/09/240954138409-3.shtml
及http://www.cicmag.com/Ebook/0709/05.pdf几位前辈的文章,想自己设计异步FIFO,但是双端口RAM小弟不太清楚如何设计,而且在时间模拟的时候如我把空满信号回受到读写端地址产生器中会仿真不出来,不知道是不是结构和想法上有错误,请问各位高手们有没有设计过的异步FIFO可以参考一下的,小弟感激不尽

以下是小弟的源碼

module rwpr(wclk,rclk,wrst,rrst,full,empty,wradd,radd);
input wclk,rclk,full,empty,rrst,wrst;
output reg [4:0]wradd,radd;
always@(posedge[/email] wclk or posedge wrst)//讀地址產生程序
begin
if(wrst)
begin
  wradd<=0;
end
else
begin
  if(full == 1)//時序模擬實無法接收來自空滿產生程序的訊號
   wradd <= wradd;
  else
   wradd <= wradd+1'b1;
end
end
always@(posedge[/email] rclk or posedge rrst)//寫地址產生程序
begin
if(rrst)
begin
  radd<=0;
end
else
begin
  if(empty == 1)//時序模擬實無法接收來自空滿產生程序的訊號
   radd <= radd;
  else
   radd <= radd+1'b1;
end
end
endmodule
//空滿標誌產生及讀寫使能信號
module fifo_ctrl(wclk,rclk,wradd,radd,full,empty,en_wr,en_rd);
input wclk,rclk;
input [4:0]wradd,radd;
output reg  full=0,empty=1'b1,en_wr=0,en_rd=0;
always@(wradd[/email] or radd)
begin
  if((wradd[3:0]==radd[3:0]) && (wradd[4]!= radd[4]))
  begin
   full=1;
   en_wr=0;
   en_rd=1;
  end
  else if (radd==wradd)
  begin
   empty=1;
   en_rd=0;
   en_wr=1;
  end
  else
  begin
   empty=0;
   full=0;
   en_rd=1;
   en_wr=1;
  end
  
end
endmodule


代码贴出来给大家看看,不要害羞吗,哈哈
另外关于双端口RAM一定要搞清楚的,可以看Xilinx的用户手册,不是很难的说。

我也是新手啊,,,,

不知道这个对你有没有帮助  http://d-waves.blogspot.com/2010/03/fifo.html

异步FIFO地址比较时,应该用格雷码进行同步吧,异步时钟域很危险的。毛刺亚稳态

我觉得异步FIFO最重要的就是两个clock之间的同步问题。
可以用格雷码比较地址产生full、empty信号,如果速度当求不高的话可以简单一点,直接用DFF同步两个clock之间的信号

学习来了

学习中。

thank you

sung上有两片文章关于此的,写的很详细,可以找来看看!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top