FIFO存储器的Verilog代码

此项目是FIFO存储器的Verilog代码。在该项目中,提供了用于FIFO存储器的Verilog代码。 在Verilog中实现了具有以下规范的先进(FIFO)存储器:16个阶段、8位数据宽度、状态信号。Verilog测试平台用于调试和验证FIFO是否正确运行。 此外,有必要查看仿真波形和存储器以了解数据如何流动。想了解更多请下载附件。

应用介绍

此项目是FIFO存储器的Verilog代码。

在该项目中,提供了用于FIFO存储器的Verilog代码。 在Verilog中实现了具有以下规范的先进(FIFO)存储器:

16个阶段

8位数据宽度

状态信号:

已满:当FIFO已满时为高,否则为低。

空:FIFO为空时为高,否则为低。

溢出:当FIFO已满并且仍将数据写入FIFO时为高,否则为低。

下溢:当FIFO为空且仍从FIFO读取数据时为高,否则为低。

阈值:当FIFO中的数据数量小于特定阈值时为高,否则为低。

附件文件包括:FIFO存储器的Verilog代码、FIFO存储器的Verilog测试代码。

本人在下面展示了FIFO存储器的Verilog测试代码;如想了解更多请下载附件。

// 1. The timescale directive  
 `timescale     10 ps/ 10 ps  
// fpga4student.com: FPga projects, Verilog projects, VHDL projects
// Verilog project: Verilog code for FIFO memory
// Verilog Testbench code for FIFO memory 
 // 2. Preprocessor Directives  
 `define          DELAY 10  
 // 3. Include Statements  
 //`include     "counter_define.h"  
 module     tb_fifo_32;  
 // 4. Parameter definitions  
 parameter     ENDTIME      = 40000;  
 // 5. DUT Input regs  
 reg     clk;  
 reg     rst_n;  
 reg     wr;  
 reg     rd;  
 reg     [7:0] data_in;  
 // 6. DUT Output wires  
 wire     [7:0] data_out;  
 wire     fifo_empty;  
 wire     fifo_full;  
 wire     fifo_threshold;  
 wire     fifo_overflow;  
 wire     fifo_underflow;  
 integer i;  
 // 7. DUT Instantiation
// fpga4student.com: FPga projects, Verilog projects, VHDL projects  
 fifo_mem tb (/*AUTOARG*/  
   // Outputs  
   data_out, fifo_full, fifo_empty, fifo_threshold, fifo_overflow,   
   fifo_underflow,   
   // Inputs  
   clk, rst_n, wr, rd, data_in  
   );  
 // 8. Initial Conditions  
 initial  
      begin  
           clk     = 1'b0;  
           rst_n     = 1'b0;  
           wr     = 1'b0;  
           rd     = 1'b0;  
           data_in     = 8'd0;  
      end  
 // 9. Generating Test Vectors  
 initial  
      begin  
           main;  
      end  
 task main;  
      fork  
           clock_generator;  
           reset_generator;  
           operation_process;  
           debug_fifo;  
           endsimulation;  
      join  
 endtask  
 task clock_generator;  
      begin  
           forever #`DELAY clk = !clk;  
      end  
 endtask  
 task reset_generator;  
      begin  
           #(`DELAY*2)  
           rst_n = 1'b1;  
           # 7.9  
           rst_n = 1'b0;  
           # 7.09  
           rst_n = 1'b1;  
      end  
 endtask  
 task operation_process;  
      begin  
           for (i = 0; i < 17; i = i + 1) begin: WRE  
                #(`DELAY*5)  
                wr = 1'b1;  
                data_in = data_in + 8'd1;  
                #(`DELAY*2)  
                wr = 1'b0;  
           end  
           #(`DELAY)  
           for (i = 0; i < 17; i = i + 1) begin: RDE  
                #(`DELAY*2)  
                rd = 1'b1;  
                #(`DELAY*2)  
                rd = 1'b0;  
           end  
      end  
 endtask  
 // 10. Debug fifo  
 task debug_fifo;  
      begin  
           $display("----------------------------------------------");  
           $display("------------------   -----------------------");  
           $display("----------- SIMULATION RESULT ----------------");  
           $display("--------------       -------------------");  
           $display("----------------     ---------------------");  
           $display("----------------------------------------------");  
           $monitor("TIME = %d, wr = %b, rd = %b, data_in = %h",$time, wr, rd, data_in);  
      end  
 endtask  
 // 11. Self-Checking  
 reg [5:0] waddr, raddr;  
 reg [7:0] mem[64:0];  
 always @ (posedge clk) begin  
      if (~rst_n) begin  
           waddr     <= 6'd0;  
      end  
      else if (wr) begin  
           mem[waddr] <= data_in;  
           waddr <= waddr + 1;  
      end  
      $display("TIME = %d, data_out = %d, mem = %d",$time, data_out,mem[raddr]);  
      if (~rst_n) raddr     <= 6'd0;  
      else if (rd & (~fifo_empty)) raddr <= raddr + 1;  
      if (rd & (~fifo_empty)) begin  
           if (mem[raddr]  
            == data_out) begin  
                $display("=== PASS ===== PASS ==== PASS ==== PASS ===");  
                if (raddr == 16) $finish;  
           end  
           else begin  
                $display ("=== FAIL ==== FAIL ==== FAIL ==== FAIL ===");  
                $display("-------------- THE SIMUALTION FINISHED ------------");  
                $finish;  
           end  
      end  
 end  
 //12. Determines the simulation limit  
 task endsimulation;  
      begin  
           #ENDTIME  
           $display("-------------- THE SIMUALTION FINISHED ------------");  
           $finish;  
      end  
 endtask  
 endmodule  

文件列表(部分)

名称 大小 修改日期
FIFO存储器的Verilog代码-附件.txt1.91 KB2020-04-01

立即下载

相关下载

[基于PLL信号发生器的设计论文资料] 此文档是基于PLL信号发生器的设计论文资料。 随着无线通信技术的应用和发展,对高质量的高频信号源要求日益迫切,这主要表现在对频率的稳定度和准确度的要求越来越高,并且希望能方便地调整频率。常见的信号产生方法很难满足这些要求,如石英晶体振荡器可以达到很高的频率稳定度,但是调整频率困难;LC振荡器调整频率比较容易,但是频率稳定度和精度方面又达不到要求。而锁相环频率合成技术则可以同时满足两方面的要求。
[FIFO存储器的Verilog代码] 此项目是FIFO存储器的Verilog代码。在该项目中,提供了用于FIFO存储器的Verilog代码。 在Verilog中实现了具有以下规范的先进(FIFO)存储器:16个阶段、8位数据宽度、状态信号。Verilog测试平台用于调试和验证FIFO是否正确运行。 此外,有必要查看仿真波形和存储器以了解数据如何流动。想了解更多请下载附件。

评论列表 共有 0 条评论

暂无评论

微信捐赠

微信扫一扫体验

立即
上传
发表
评论
返回
顶部