123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- `default_nettype none
- module mc97_fifo (
-
- input wire [15:0] wr_data,
- input wire wr_ena,
- output wire wr_full,
-
- output wire [15:0] rd_data,
- input wire rd_ena,
- output wire rd_empty,
-
- output reg [ 8:0] ctl_lvl,
- input wire ctl_flush,
-
- input wire clk,
- input wire rst
- );
-
-
- (* keep *) reg [8:0] mod;
- wire wr_ena_i;
- wire rd_ena_i;
-
-
- fifo_sync_ram #(
- .DEPTH(256),
- .WIDTH(16)
- ) fifo_I (
- .wr_data (wr_data),
- .wr_ena (wr_ena_i),
- .wr_full (wr_full),
- .rd_data (rd_data),
- .rd_ena (rd_ena_i),
- .rd_empty (rd_empty),
- .clk (clk),
- .rst (rst)
- );
-
-
- assign wr_ena_i = ~wr_full & wr_ena ;
- assign rd_ena_i = ~rd_empty & (rd_ena | ctl_flush);
-
-
-
- always @(posedge clk)
- if (rst)
- ctl_lvl <= 0;
- else
- ctl_lvl <= ctl_lvl + mod;
- assign mod = { {8{rd_ena_i & ~wr_ena_i}}, rd_ena_i ^ wr_ena_i };
- endmodule
|