|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 ultra055012 于 2010-2-27 22:20 编辑
小弟是个新手,看了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;
[email=always@(posedge]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
[email=always@(posedge]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;
[email=always@(wradd]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
|
|