?? async_fifo.v
字號:
// FIFO頂層模塊
module async_fifo (rdata, wfull, rempty, wdata,
wreq, wclk, wrst_n, rreq, rclk, rrst_n);
parameter DATA_WIDTH = 8; // FIFO數據位寬
parameter ADDR_WIDTH = 4; // FIFO地址位寬
output [DATA_WIDTH-1:0] rdata;
output wfull;
output rempty;
input [DATA_WIDTH-1:0] wdata;
input wreq, wclk, wrst_n;
input rreq, rclk, rrst_n;
wire [ADDR_WIDTH-1:0] wptr, rptr;
wire [ADDR_WIDTH-1:0] waddr, raddr;
wire aempty_n, afull_n;
dp_ram dp_ram(.rdata(rdata), // 雙端口RAM
.wdata(wdata),
.waddr(wptr),
.raddr(rptr),
.wclken(wreq),
.wclk(wclk));
defparam dp_ram.DATA_WIDTH = DATA_WIDTH,
dp_ram.ADDR_WIDTH = ADDR_WIDTH;
async_cmp async_cmp(.aempty_n(aempty_n), // 異步讀/寫地址指針比較器
.afull_n(afull_n),
.wptr(wptr),
.rptr(rptr),
.wrst_n(wrst_n));
defparam async_cmp.ADDR_WIDTH = ADDR_WIDTH;
rptr_empty rptr_empty(.rempty(rempty), // 讀地址指針與"空"標志控制邏輯
.rptr(rptr),
.aempty_n(aempty_n),
.rreq(rreq),
.rclk(rclk),
.rrst_n(rrst_n));
defparam rptr_empty.ADDR_WIDTH = ADDR_WIDTH;
wptr_full wptr_full(.wfull(wfull), // 寫地址指針與"滿"標志控制邏輯
.wptr(wptr),
.afull_n(afull_n),
.wreq(wreq),
.wclk(wclk),
.wrst_n(wrst_n));
defparam wptr_full.ADDR_WIDTH = ADDR_WIDTH;
endmodule
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -