基于Verilog利用SRAM设计一个FIFO.doc

基于Verilog利用SRAM设计一个FIFO.doc

ID:57275319

大小:114.50 KB

页数:8页

时间:2020-08-08

基于Verilog利用SRAM设计一个FIFO.doc_第1页
基于Verilog利用SRAM设计一个FIFO.doc_第2页
基于Verilog利用SRAM设计一个FIFO.doc_第3页
基于Verilog利用SRAM设计一个FIFO.doc_第4页
基于Verilog利用SRAM设计一个FIFO.doc_第5页
资源描述:

《基于Verilog利用SRAM设计一个FIFO.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、基于Verilog利用SRAM设计一个FIFO专业:电子信息工程班级:电子092学号:姓名:2012年11月23日一、设计要求:本练习要求同学设计的FIFO为同步FIFO,即对FIFO的读/写使用同一个时钟。该FIFO应当提供用户读使能(fiford)和写使能(fifowr)输入控制信号,并输出指示FIFO状态的非空(nempty)和非满(nfull)信号,FIFO的输入、输出数据使用各自的数据总线:in_data和out_data。下图为FIFO接口示意图。二、FIFO接口的设计思路FIFO的数据读写操作与SRAM的数据读写操作基本上相同,只是

2、FIFO没有地址。所以用SRAM实现FIFO的关键点是如何产生正确的SRAM地址。我们可以借用软件中的方法,将FIFO抽象为环形数组,并用两个指针:读指针(fifo_rp)和写指针(fifo_wp)控制对该环形数组的读写。其中,读指针fifo_rp指向下一次读操作所要读取的单元,并且每完成一次读操作,fifo_rp加一;写指针fifo_wp则指向下一次写操作时存放数据的单元,并且每完成一次写操作,fifo_wp加一。由fifo_rp和fifo_wp的定义易知,当FIFO被读空或写满后,fifo_rp和fifo_wp将指向同一单元,但在读空和写满之

3、前FIFO的状态是不同的,所以如果能区分这两种状态,再通过比较fifo_rp和fifo_wp就可以得到nempty和nfull信号了。下图为FIFO工作状态的示意。在得到nfull和nempty信号后,就需要考虑如何应用这两个信号来控制对FIFO的读写,使得FIFO在被写满后不能再写入,从而防止覆盖原有数据,并且在被读空后也不能再进行读操作,防止读取无效数据。此外,在进SRAM读写操作时,应该注意建立地址、数据和控制信号的先后顺序。一般情况下,希望对SRAM读写的波形时序如下图所示:即写SRAM时,先建立地址和数据,然后置写使能信号WR有效,在W

4、R保持有效一定时间后,先复位WR,然后释放地址和数据总线。而读取SRAM时,则先建立地址,然后置读使能RD有效,在RD维持有效一定时间后,复位RD,同时读取数据总线上的值,然后再释放地址总线。在进行FIFO操作时,用户一般希望除了没有地址外,其它三个信号的时序关系能保持不变。请同学们在设计FIFO控制信号与SRAM控制信号间逻辑关系时注意这一点。三、FIFO接口的测试在完成一个设计后,需要进行测试以确认设计的正确性和完整性。而要进行测试,就需要编写测试激励和结果检查程序,即测试平台(testbench)。在某些情况下,如果设计的接口能够预先确定,

5、测试平台的编写也可以在设计完成之前就进行,这样做的好处是在设计测试平台的同时也在更进一步深入了解设计要求,有助于理清设计思路,及时发现设计方案的错误。编写测试激励时,除了注意对实际可能存在的各种情况的覆盖外,还要有意针对非正常情况下的操作进行测试。在本练习中,就应当进行在FIFO读空后继续读取、FIFO写满后继续写入、FIFO复位后马上读取等操作的测试。测试激励中通常会有一些复杂操作需要反复进行,如本练习中对FIFO的读写操作。这时可以将这些复杂操作纳入到几个task中,即减小了激励编写的工作量,也使得程序的可读性更好。下面的测试程序给同学们做为

6、参考,希望同学们能先用这段程序测试所设计的FIFO接口,然后编写自己更全面的测试程序。`defineFIFO_SIZE8`include“sram.v”//有的仿真工具不需要加这句,只要sram.v模块编译过就可以了`timescale1ns/1nsmodulet;reg[7:0]in_data;//FIFO数据总线regfiford,fifowr;//FIFO控制信号wire[7:0]out_data;wirenfull,nempty;//FIFO状态信号regclk,rst;wire[7:0]sram_data;//SRAM数据总线wire[

7、10:0]address;//SRAM的地址总线wirerd,wr;//SRAM读写控制信号reg[7:0]data_buf[`FIFO_SIZE:0];//数据缓存,用于结果检查integerindex;//用于读写data_buf的指针//系统时钟initialclk=0;always#25clk=~clk;//测试激励序列initialbeginfiford=1;fifowr=1;rst=1;#40rst=0;#42rst=1;if(nempty)$display($time,"Error:FIFObeempty,nemptyshouldb

8、elow.");//连续写FIFOindex=0;repeat(`FIFO_SIZE)begindata_buf[index]=$r

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。