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

📄 syn_fifo.v

📁 同步FIFO的verilog编码 同步FIFO的verilog编码
💻 V
字号:
//-----------------------------------------------------// Design Name : syn_fifo// File Name   : syn_fifo.v// Function    : Synchronous (single clock) FIFO// Coder       : Deepak Kumar Tala//-----------------------------------------------------module syn_fifo (clk      , // Clock inputrst      , // Active high resetwr_cs    , // Write chip selectrd_cs    , // Read chipe selectdata_in  , // Data inputrd_en    , // Read enablewr_en    , // Write Enabledata_out , // Data Outputempty    , // FIFO emptyfull       // FIFO full);     // FIFO constantsparameter DATA_WIDTH = 8;parameter ADDR_WIDTH = 8;parameter RAM_DEPTH = (1 << ADDR_WIDTH);// Port Declarationsinput clk ;input rst ;input wr_cs ;input rd_cs ;input rd_en ;input wr_en ;input [DATA_WIDTH-1:0] data_in ;output full ;output empty ;output [DATA_WIDTH-1:0] data_out ;//-----------Internal variables-------------------reg [ADDR_WIDTH-1:0] wr_pointer;reg [ADDR_WIDTH-1:0] rd_pointer;reg [ADDR_WIDTH :0] status_cnt;reg [DATA_WIDTH-1:0] data_out ;wire [DATA_WIDTH-1:0] data_ram ;//-----------Variable assignments---------------assign full = (status_cnt == (RAM_DEPTH-1));assign empty = (status_cnt == 0);//-----------Code Start---------------------------always @ (posedge clk or posedge rst)begin : WRITE_POINTER  if (rst) begin    wr_pointer <= 0;  end else if (wr_cs && wr_en ) begin    wr_pointer <= wr_pointer + 1;  endendalways @ (posedge clk or posedge rst)begin : READ_POINTER  if (rst) begin    rd_pointer <= 0;  end else if (rd_cs && rd_en ) begin    rd_pointer <= rd_pointer + 1;  endendalways  @ (posedge clk or posedge rst)begin : READ_DATA  if (rst) begin    data_out <= 0;  end else if (rd_cs && rd_en ) begin    data_out <= data_ram;  endendalways @ (posedge clk or posedge rst)begin : STATUS_COUNTER  if (rst) begin    status_cnt <= 0;  // Read but no write.  end else if ((rd_cs && rd_en) && !(wr_cs && wr_en)                 && (status_cnt != 0)) begin    status_cnt <= status_cnt - 1;  // Write but no read.  end else if ((wr_cs && wr_en) && !(rd_cs && rd_en)                && (status_cnt != RAM_DEPTH)) begin    status_cnt <= status_cnt + 1;  endend    ram_dp_ar_aw #(DATA_WIDTH,ADDR_WIDTH)DP_RAM (.address_0 (wr_pointer) , // address_0 input .data_0    (data_in)    , // data_0 bi-directional.cs_0      (wr_cs)      , // chip select.we_0      (wr_en)      , // write enable.oe_0      (1'b0)       , // output enable.address_1 (rd_pointer) , // address_q input.data_1    (data_ram)   , // data_1 bi-directional.cs_1      (rd_cs)      , // chip select.we_1      (1'b0)       , // Read enable.oe_1      (rd_en)        // output enable);     endmodule

⌨️ 快捷键说明

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