没有合适的资源?快使用搜索试试~ 我知道了~
首页同步FIFO和异步FIFO的Verilog实现
同步FIFO和异步FIFO的Verilog实现
需积分: 50 21 下载量 80 浏览量
更新于2023-03-03
评论 1
收藏 65KB DOC 举报
介绍同步FIFO原理,并且提供了verilog源代码;详细介绍了异步FIFO原理和两种实现方法,并提供verilog源代码。
资源详情
资源评论
资源推荐
FIFO 是英文 First In First Out 的缩写,是一种先进先出的数据缓存器,
他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简
单,但缺点就是只能顺序写入数据,顺序的读出数据, 其数据地址由
内部读写指针自动加 1 完成,不能像普通存储器那样可以由地址线决
定读取或写入某个指定的地址。
FIFO 一般用于不同时钟域之间的数据传输,比如 FIFO 的一端是 AD
数据采集, 另一端是计算机的 PCI 总线,假设其 AD 采集的速率为 16
位 100K SPS,那么每秒的数据量为 100K×16bit=1.6Mbps,而 PCI 总
线的速度为 33MHz,总线宽度 32bit,其最大传输速率为 1056Mbps,在
两个不同的时钟域间就可以采用 FIFO 来作为数据缓冲。另外对于不同
宽度的数据接口也可以用 FIFO,例如单片机位 8 位数据输出,而
DSP 可能是 16 位数据输入,在单片机与 DSP 连接时就可以使用 FIFO
来达到数据匹配的目的。
FIFO 的分类根据 FIFO 工作的时钟域,可以将 FIFO 分为同步 FIFO 和
异步 FIFO。同步 FIFO 是指读时钟和写时钟为同一个时钟。在时钟沿
来临时同时发生读写操作。异步 FIFO 是指读写时钟不一致,读写时钟
是互相独立的。
FIFO 设计的难点在于怎样判断 FIFO 的空/满状态。为了保证数据正确
的写入或读出,而不发生益处或读空的状态出现,必须保证 FIFO 在满
的情况下,不能进行写操作。在空的状态下不能进行读操作。怎样判
断 FIFO 的满/空就成了 FIFO 设计的核心问题。
..............................................................................................................
...........................
同步 FIFO 的 Verilog 代码 之一
在 modlesim 中验证过。
/******************************************************
A fifo controller verilog description.
******************************************************/
module fifo(datain, rd, wr, rst, clk, dataout, full, empty);
input [7:0] datain;
input rd, wr, rst, clk;
output [7:0] dataout;
output full, empty;
wire [7:0] dataout;
reg full_in, empty_in;
reg [7:0] mem [15:0];
reg [3:0] rp, wp;
assign full = full_in;
assign empty = empty_in;
// memory read out
assign dataout = mem[rp];
// memory write in
always@(posedge clk) begin
if(wr && ~full_in) mem[wp]<=datain;
end
// memory write pointer increment
always@(posedge clk or negedge rst) begin
if(!rst) wp<=0;
else begin
if(wr && ~full_in) wp<= wp+1'b1;
end
end
// memory read pointer increment
always@(posedge clk or negedge rst)begin
if(!rst) rp <= 0;
else begin
if(rd && ~empty_in) rp <= rp + 1'b1;
end
end
// Full signal generate
always@(posedge clk or negedge rst) begin
if(!rst) full_in <= 1'b0;
else begin
if( (~rd && wr)&&((wp==rp-1)||(rp==4'h0&&wp==4'hf)))
full_in <= 1'b1;
else if(full_in && rd) full_in <= 1'b0;
end
end
// Empty signal generate
always@(posedge clk or negedge rst) begin
if(!rst) empty_in <= 1'b1;
else begin
if((rd&&~wr)&&(rp==wp-1 || (rp==4'hf&&wp==4'h0)))
empty_in<=1'b1;
else if(empty_in && wr) empty_in<=1'b0;
end
end
endmodule
..............................................................................................................
.............
同步 FIFO 的 Verilog 代码 之二
这一种设计的 FIFO,是基于触发器的。宽度,深度的扩展更加方便,
结构化跟强。以下代码在 modelsim 中验证过。
module fifo_cell (sys_clk, sys_rst_n, read_fifo, write_fifo,
fifo_input_data,
next_cell_data, next_cell_full, last_cell_full,
cell_data_out, cell_full);
parameter WIDTH =8;
parameter D = 2;
input sys_clk;
input sys_rst_n;
input read_fifo, write_fifo;
input [WIDTH-1:0] fifo_input_data;
input [WIDTH-1:0] next_cell_data;
剩余12页未读,继续阅读
woshihuangayn3
- 粉丝: 1
- 资源: 19
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0