⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tb_fifo.v

📁 32位单精度浮点加法器
💻 V
字号:
//-----------------------------------------------------------------------------//  //  Copyright (c) 2009 Xilinx Inc.////  Project  : Programmable Wave Generator//  Module   : tb_fifo.v//  Parent   : tb_uart_rx//  Children : none////  Description: //    This module is a generic FIFO for testbench applications. It stores data//    internally in a verilog memory, and provides access to it via the tasks//    and functions push, pop, is_empty, is_full.////  Parameters: //    WIDTH        : Width of the data to be pushed and popped//    DEPTH        : Number of entries. The FIFO will signal full when DEPTH-1//                   entries are in the FIFO////  Tasks://    push         : Pushes data into the FIFO - if the FIFO is full, an//                   error message is generated////  Functions:////    is_empty     : Returns 1 if the FIFO is empty//    pop          : Returns the element at the front of the FIFO//////  Internal variables://    reg [WIDTH-1:0] data [0:DEPTH-1] - the array for storing data//    integer         head             - head pointer//    integer         tail             - tail pointer////  Notes       : //    ////  Multicycle and False Paths//    None - this is a testbench file only, and is not intended for synthesis//// All times in this testbench are expressed in units of nanoseconds, with a // precision of 1ps increments`timescale 1ns/1psmodule tb_fifo ();//***************************************************************************// Parameter definitions//***************************************************************************  parameter         WIDTH        = 8;  parameter         DEPTH        = 256;//***************************************************************************// Register declarations//***************************************************************************  reg [WIDTH-1:0] data [0:DEPTH-1]; // the array for storing data  integer         head;             // head pointer  integer         tail;             // tail pointer//***************************************************************************// Functions//***************************************************************************  function [31:0] next_ptr;    input [31:0] ptr;  begin    next_ptr = (ptr + 1) % DEPTH;  end  endfunction  function is_empty;    input ignore; // A function must have at least one input  begin    is_empty = (head == tail);  end  endfunction  function is_full;    input ignore; // A function must have at least one input  begin    is_full = (next_ptr(head) == tail);  end  endfunction  function [WIDTH-1:0] pop;    input ignore; // A function must have at least one input  begin    if (is_empty(0))    begin      $display ("%t ERROR: Popping an empty FIFO in %m",$realtime);      pop = {WIDTH{1'bx}};    end    else    begin      pop = data[tail];      tail = next_ptr(tail);    end  end  endfunction//***************************************************************************// Tasks//***************************************************************************  task push (    input [WIDTH-1:0] new_data  );  begin    if (is_full(0))    begin      $display ("%t ERROR: Pushing a full FIFO in %m",$realtime);    end    else    begin      data[head] = new_data;      head = next_ptr(head);    end  end     // task  endtask // full//***************************************************************************// Code//***************************************************************************  initial  begin    head = 0;    tail = 0;  endendmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -