下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
FIFO同步、异步以及Verilog代码实现FIFO很重要,之前参加的各类电子公司的逻辑设计的笔试几乎都会考到。
FIFO是英文FirstInFirstOut的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。
FIFO一般用于不同时钟域之间的数据传输,比如FIFO的一端是AD数据采集,另一端是计算机的PCI总线,假设其AD采集的速率为16位100KSPS,那么每秒的数据量为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设计的核心问题。
.........................................................................................................................................
同步FIFO的Verilog代码之一在modlesim中验证过。
/******************************************************Afifocontrollerverilogdescription.******************************************************/modulefifo(datain,rd,wr,rst,clk,dataout,full,empty);input[7:0]datain;inputrd,wr,rst,clk;output[7:0]dataout;outputfull,empty;wire[7:0]dataout;regfull_in,empty_in;reg[7:0]mem[15:0];reg[3:0]rp,wp;assignfull=full_in;assignempty=empty_in;//memoryreadoutassigndataout=mem[rp];//memorywriteinalways@(posedgeclk)begin
if(wr&&~full_in)mem[wp]<=datain;end//memorywritepointerincrementalways@(posedgeclkornegedgerst)begin
if(!rst)wp<=0;
elsebegin
if(wr&&~full_in)wp<=wp+1'b1;
endend//memoryreadpointerincrementalways@(posedgeclkornegedgerst)begin
if(!rst)rp<=0;
elsebegin
if(rd&&~empty_in)rp<=rp+1'b1;
endend//Fullsignalgeneratealways@(posedgeclkornegedgerst)begin
if(!rst)full_in<=1'b0;
elsebegin
if((~rd&&wr)&&((wp==rp-1)||(rp==4'h0&&wp==4'hf)))
full_in<=1'b1;
elseif(full_in&&rd)full_in<=1'b0;
endend//Emptysignalgeneratealways@(posedgeclkornegedgerst)begin
if(!rst)empty_in<=1'b1;
elsebegin
if((rd&&~wr)&&(rp==wp-1||(rp==4'hf&&wp==4'h0)))
empty_in<=1'b1;
elseif(empty_in&&wr)empty_in<=1'b0;
endendendmodule
...........................................................................................................................
同步FIFO的Verilog代码之二这一种设计的FIFO,是基于触发器的。宽度,深度的扩展更加方便,结构化跟强。以下代码在modelsim中验证过。
modulefifo_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);
parameterWIDTH=8;
parameterD=2;
inputsys_clk;
inputsys_rst_n;
inputread_fifo,write_fifo;
input[WIDTH-1:0]fifo_input_data;
input[WIDTH-1:0]next_cell_data;
inputnext_cell_full,last_cell_full;
output[WIDTH-1:0]cell_data_out;
outputcell_full;
reg[WIDTH-1:0]cell_data_reg_array;
reg[WIDTH-1:0]cell_data_ld;
regcell_data_ld_en;
regcell_full;
regcell_full_next;
assigncell_data_out=cell_data_reg_array;
always@(posedgesys_clkornegedgesys_rst_n)
if(!sys_rst_n)
cell_full<=#D0;
elseif(read_fifo||write_fifo)
cell_full<=#Dcell_full_next;
always@(write_fifoorread_fifoornext_cell_fullorlast_cell_fullorcell_full)
casex({read_fifo,write_fifo})
2'b00:cell_full_next=cell_full;
2'b01:cell_full_next=next_cell_full;
2'b10:cell_full_next=last_cell_full;
2'b11:cell_full_next=cell_full;
endcase
always@(posedgesys_clkornegedgesys_rst_n)
if(!sys_rst_n)
cell_data_reg_array[WIDTH-1:0]<=#D0;
elseif(cell_data_ld_en)
cell_data_reg_array[WIDTH-1:0]<=#Dcell_data_ld[WIDTH-1:0];
always@(write_fifoorread_fifoorcell_fullorlast_cell_full)
casex({write_fifo,read_fifo,cell_full,last_cell_full})
4'bx1_xx:cell_data_ld_en=1'b1;
4'b10_01:cell_data_ld_en=1'b1;
default:cell_data_ld_en=1'b0;
endcase
always@(write_fifoorread_fifoornext_cell_fullorcell_fullorlast_cell_fullorfifo_input_dataornext_cell_data)
casex({write_fifo,read_fifo,next_cell_full,cell_full,last_cell_full})
5'b10_x01:cell_data_ld[WIDTH-1:0]=fifo_input_data[WIDTH-1:0];
5'b11_01x:cell_data_ld[WIDTH-1:0]=fifo_input_data[WIDTH-1:0];
default:cell_data_ld[WIDTH-1:0]=next_cell_data[WIDTH-1:0];
endcaseendmodule
modulefifo_4cell(sys_clk,sys_rst_n,fifo_input_data,write_fifo,fifo_out_data,
read_fifo,full_cell0,full_cell1,full_cell2,full_cell3);
parameterWIDTH=8;
parameterD=2;
inputsys_clk;
inputsys_rst_n;
input[WIDTH-1:0]fifo_input_data;
output[WIDTH-1:0]fifo_out_data;
inputread_fifo,write_fifo;
outputfull_cell0,full_cell1,full_cell2,full_cell3;
wire[WIDTH-1:0]dara_out_cell0,data_out_cell1,data_out_cell2,
data_out_cell3,data_out_cell4;
wirefull_cell4;
fifo_cell#(WIDTH,D)cell0
(.sys_clk(sys_clk),
.sys_rst_n(sys_rst_n),
.fifo_input_data(fifo_input_data[WIDTH-1:0]),
.write_fifo(write_fifo),
.next_cell_data(data_out_cell1[WIDTH-1:0]),
.next_cell_full(full_cell1),
.last_cell_full(1'b1),
.cell_data_out(fifo_out_data[WIDTH-1:0]),
.read_fifo(read_fifo),
.cell_full(full_cell0)
);
fifo_cell#(WIDTH,D)cell1
(.sys_clk(sys_clk),
.sys_rst_n(sys_rst_n),
.fifo_input_data(fifo_input_data[WIDTH-1:0]),
.write_fifo(write_fifo),
.next_cell_data(data_out_cell2[WIDTH-1:0]),
.next_cell_full(full_cell2),
.last_cell_full(full_cell0),
.cell_data_out(data_out_cell1[WIDTH-1:0]),
.read_fifo(read_fifo),
.cell_full(full_cell1)
);
fifo_cell#(WIDTH,D)cell2
(.sys_clk(sys_clk),
.sys_rst_n(sys_rst_n),
.fifo_input_data(fifo_input_data[WIDTH-1:0]),
.write_fifo(write_fifo),
.next_cell_data(data_out_cell3[WIDTH-1:0]),
.next_cell_full(full_cell3),
.last_cell_full(full_cell1),
.cell_data_out(data_out_cell2[WIDTH-1:0]),
.read_fifo(read_fifo),
.cell_full(full_cell2)
);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2034年中国IT通讯市场调查研究及行业投资潜力预测报告2
- 2024-2034年中国AR购物行业市场深度分析及发展前景预测报告
- 2024年功能性棚模新材料及各种助剂项目发展计划
- 2024年制砖机械:砌块机项目合作计划书
- 2024年二元酸二甲酯合作协议书
- 2024-2030年全球及中国剥离柱行业现状规模及盈利趋势预测报告版
- 2024-2030年全球及中国丙二醇醚(PGE)发展趋势及前景动态预测报告
- 2024-2030年全球健康医疗大数据行业竞争格局及发展模式研究报告
- 2024-2030年全球与中国超细纳米铜粉行业产销状况与需求前景预测报告
- 2024-2030年全球与中国硬脂酸铝行业需求态势及应用前景预测研究报告
- 华北理工大学学术答辩通用ppt模板
- PTA术后动静脉内瘘可视化B超穿刺效果评价
- 八年级下册第五单元《国防建设与外交成就》复习课 课件
- 苏教版小学五年级数学下册全册试卷共22份(含答案)【最新】
- 气体设备的基础知识
- 绘本《月亮的味道》PPT
- 产品生产过程潜在风险分析
- 产后出血指南解读新PPT课件
- 麻类脱胶酶脱胶应用前景及工艺研究
- 华为P型标签光纤标签模板29041060改进版
- 城市合伙人合作协议
评论
0/150
提交评论