ImageVerifierCode 换一换
你正在下载:

fifo.docx

[预览]
格式:DOCX , 页数:12 ,大小:296.04KB ,
资源ID:6756994      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6756994.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(fifo.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

fifo.docx

1、fifoFIFO 很重要,之前参加的各类电子公司的逻辑设计的笔试几乎都会考到。FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据, 其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。FIFO一般用于不同时钟域之间的数据传输,比如FIFO的一端是AD数据采集, 另一端是计算机的PCI总线,假设其AD采集的速率为16位 100K SPS,那么每秒的数据量为100K16bit=1.6Mbps,而PCI总线的速

2、度为33MHz,总线宽度32bit,其最大传输速率为 1056Mbps,在两个不同的时钟域间就可以采用FIFO来作为数据缓冲。另外对于不同宽度的数据接口也可以用FIFO,例如单片机位8位数据输出,而 DSP可能是16位数据输入,在单片机与DSP连接时就可以使用FIFO来达到数据匹配的目的。FIFO的分类根均FIFO工作的时钟域,可以将FIFO分为同步FIFO和异步FIFO。同步FIFO是指读时钟和写时钟为同一个时钟。在时钟沿来临时同时发生读写操作。异步FIFO是指读写时钟不一致,读写时钟是互相独立的。FIFO设计的难点 FIFO设计的难点在于怎样判断FIFO的空/满状态。为了保证数据正确的写入

3、或读出,而不发生益处或读空的状态出现,必须保证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;wi

4、re 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 outassign dataout = memrp;/ memory write inalways(posedge clk) beginif(wr & full_in) memwp=datain;end/ memory write pointer incrementalways(posedge clk or negedge rst) beg

5、inif(!rst) wp=0;else beginif(wr & full_in) wp= wp+1b1;endend/ memory read pointer incrementalways(posedge clk or negedge rst)beginif(!rst) rp = 0;else beginif(rd & empty_in) rp = rp + 1b1;endend/ Full signal generatealways(posedge clk or negedge rst) beginif(!rst) full_in = 1b0;else beginif( (rd & w

6、r)&(wp=rp-1)|(rp=4h0&wp=4hf)full_in = 1b1;else if(full_in & rd) full_in = 1b0;endend/ Empty signal generatealways(posedge clk or negedge rst) beginif(!rst) empty_in = 1b1;else beginif(rd&wr)&(rp=wp-1 | (rp=4hf&wp=4h0)empty_in=1b1;else if(empty_in & wr) empty_in=1b0;endendendmodule.同步FIFO的Verilog代码 之

7、二这一种设计的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

8、;input WIDTH-1:0 fifo_input_data;input WIDTH-1:0 next_cell_data;input next_cell_full, last_cell_full;output WIDTH-1:0 cell_data_out;output cell_full;reg WIDTH-1:0 cell_data_reg_array;reg WIDTH-1:0 cell_data_ld;reg cell_data_ld_en;reg cell_full;reg cell_full_next;assign cell_data_out=cell_data_reg_ar

9、ray;always (posedge sys_clk or negedge sys_rst_n)if (!sys_rst_n)cell_full = #D 0;else if (read_fifo | write_fifo)cell_full = #D cell_full_next;always (write_fifo or read_fifo or next_cell_full or last_cell_full or cell_full)casex (read_fifo, write_fifo)2b00: cell_full_next = cell_full;2b01: cell_ful

10、l_next = next_cell_full;2b10: cell_full_next = last_cell_full;2b11: cell_full_next = cell_full;endcasealways (posedge sys_clk or negedge sys_rst_n)if (!sys_rst_n)cell_data_reg_array WIDTH-1:0 = #D 0;else if (cell_data_ld_en)cell_data_reg_array WIDTH-1:0 = #D cell_data_ld WIDTH-1:0;always (write_fifo

11、 or read_fifo or cell_full or last_cell_full) casex (write_fifo,read_fifo,cell_full,last_cell_full)4bx1_xx: cell_data_ld_en = 1b1;4b10_01: cell_data_ld_en = 1b1;default: cell_data_ld_en =1b0;endcasealways (write_fifo or read_fifo or next_cell_full or cell_full or last_cell_full or fifo_input_data or

12、 next_cell_data)casex (write_fifo, read_fifo, next_cell_full, cell_full, last_cell_full)5b10_x01: cell_data_ldWIDTH-1:0 = fifo_input_dataWIDTH-1:0;5b11_01x: cell_data_ldWIDTH-1:0 = fifo_input_dataWIDTH-1:0;default: cell_data_ldWIDTH-1:0 = next_cell_dataWIDTH-1:0;endcaseendmodulemodule fifo_4cell(sys

13、_clk, sys_rst_n, fifo_input_data, write_fifo, fifo_out_data,read_fifo, full_cell0, full_cell1, full_cell2, full_cell3);parameter WIDTH = 8;parameter D = 2;input sys_clk;input sys_rst_n;input WIDTH-1:0 fifo_input_data;output WIDTH-1:0 fifo_out_data;input read_fifo, write_fifo;output full_cell0, full_

14、cell1, full_cell2, full_cell3;wire WIDTH-1:0 dara_out_cell0, data_out_cell1, data_out_cell2,data_out_cell3, data_out_cell4;wire full_cell4;fifo_cell #(WIDTH,D) cell0( .sys_clk (sys_clk),.sys_rst_n (sys_rst_n),.fifo_input_data (fifo_input_dataWIDTH-1:0),.write_fifo (write_fifo),.next_cell_data (data_

15、out_cell1WIDTH-1:0),.next_cell_full (full_cell1),.last_cell_full (1b1),.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_dataWIDTH-1:0),.write_fifo (write_fifo),.n

16、ext_cell_data (data_out_cell2WIDTH-1:0),.next_cell_full (full_cell2),.last_cell_full (full_cell0),.cell_data_out (data_out_cell1WIDTH-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_dataWIDTH-1:0)

17、,.write_fifo (write_fifo),.next_cell_data (data_out_cell3WIDTH-1:0),.next_cell_full (full_cell3),.last_cell_full (full_cell1),.cell_data_out (data_out_cell2WIDTH-1:0),.read_fifo (read_fifo),.cell_full (full_cell2); fifo_cell #(WIDTH,D) cell3( .sys_clk (sys_clk),.sys_rst_n (sys_rst_n),.fifo_input_dat

18、a (fifo_input_dataWIDTH-1:0),.write_fifo (write_fifo),.next_cell_data (data_out_cell4WIDTH-1:0),.next_cell_full (full_cell4),.last_cell_full (full_cell2),.cell_data_out (data_out_cell3WIDTH-1:0),.read_fifo (read_fifo),.cell_full (full_cell3); assign data_out_cell4WIDTH-1:0 = WIDTH1B0;assign full_cell4 = 1b0;endmodule

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1