付費限定

[Verilog] 再次征戰FIFO地獄 - (2) sync fifo

更新於 發佈於 閱讀時間約 11 分鐘

前面介紹完sync fifo的function block用途後,

這篇開始來帶入code要怎麼implement.


raw-image

Full code:

module sync_fifo #(parameter N=8, parameter depth=8)
(input clk,
input rst_n,
input [N-1:0] wdata,
output [N-1:0] rdata,
input wen,
input ren,
output full,
output empty
);

// mem
reg [N-1:0] mem [depth-1:0];
// ptr
reg [$clog2(depth)-1 :0] wptr,rptr;
//cnt
reg [$clog2(depth)-1 :0] cnt;

//------------- mem w/r --------------//
// mem write
always @ (posedge clk) begin
if (wen & !full)
mem [wptr] <= wdata;
end
//mem read
always @ (posedge clk or negedge rst_n) begin
if (!rst_n)
rdata <= 'b0;
else if (ren & !empty)
rdata <= mem [rptr];
end

//------------------ ptr --------------------//
// wptr
always @ (posedge clk or negedge rst_n) begin
if (!rst_n)
wptr <= 'b0;
else if (wen & !full)
wptr <= wptr + 'd1;
end
// rptr
always @ (posedge clk or negedge rst_n) begin
if (!rst_n)
rptr <= 'b0;
else if (ren & !empty)
rptr <= rptr + 'd1;
end

//------------------- cnt --------------------//
//cnt
always @ (posedge clk or negedge rst_n) begin
if (!rst_n)
cnt <= 'd0;
else if (wen & !full & !(ren & !empty))
cnt <= cnt + 'd1;
else if (ren & !empty & !(wen & !full))
cnt <= cnt - 'd1;
end

//--------------- full/empty------------------//
// full
assign full = (cnt == depth)? 1:0;
//empty
assign empty = (cnt == 'd0)? 1:0;

endmodule


要如何簡單的理解這個code的內容

我們可以利用每個function block的功能慢慢的組出

raw-image

主要的block有4個部分

(1) mem : write data / read data

以行動支持創作者!付費即可解鎖
本篇內容共 4303 字、0 則留言,僅發佈於IC面試專班你目前無法檢視以下內容,可能因為尚未登入,或沒有該房間的查看權限。
留言
avatar-img
留言分享你的想法!
avatar-img
數位IC設計第一品牌
76會員
26內容數
數位IC設計第一品牌 從0到1用嘴做IC 觀念大權
2025/05/02
FIFO題目答得好不好可以直接看出面試者的程度為何, FIFO看似簡單卻濃縮了非常多的design細節在裡面, 在這邊來和各位分享一下我個人的心得. 作為designer最常使用到的fifo就只有兩種屬性 1.sync fifo 2.async fifo 那這邊的sync或asy
Thumbnail
2025/05/02
FIFO題目答得好不好可以直接看出面試者的程度為何, FIFO看似簡單卻濃縮了非常多的design細節在裡面, 在這邊來和各位分享一下我個人的心得. 作為designer最常使用到的fifo就只有兩種屬性 1.sync fifo 2.async fifo 那這邊的sync或asy
Thumbnail
2025/04/23
作為designer一定經常看到spec中描述當edge出現時需要trigger電路運作, 舉個實際的例子 2 phase的handshake protocal, 以下方paper中的圖例來看. Quasi Delay-Insensitive High Speed Two-Phase Prot
Thumbnail
2025/04/23
作為designer一定經常看到spec中描述當edge出現時需要trigger電路運作, 舉個實際的例子 2 phase的handshake protocal, 以下方paper中的圖例來看. Quasi Delay-Insensitive High Speed Two-Phase Prot
Thumbnail
2024/10/28
前面探討完setup time / hold time violation的原因跟解法, 來更進一步探討一下現實面, 實際ic design中, 我們有可能會碰到一個狀況, synthesis過後path出現了setup time violation 或 hold time violatio
Thumbnail
2024/10/28
前面探討完setup time / hold time violation的原因跟解法, 來更進一步探討一下現實面, 實際ic design中, 我們有可能會碰到一個狀況, synthesis過後path出現了setup time violation 或 hold time violatio
Thumbnail
看更多
你可能也想看
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
此章節的目的是介紹Java程式語言中的流程控制結構,包括條件語句(if, else if, else)、三元運算子、switch語句,以及各種迴圈(for, foreach, while)。同時,也解釋了如何在迴圈中使用控制語句來改變程式的執行流程。每種主題都配有示例程式碼以幫助理解。
Thumbnail
此章節的目的是介紹Java程式語言中的流程控制結構,包括條件語句(if, else if, else)、三元運算子、switch語句,以及各種迴圈(for, foreach, while)。同時,也解釋了如何在迴圈中使用控制語句來改變程式的執行流程。每種主題都配有示例程式碼以幫助理解。
Thumbnail
在網路速度有限的情況下,依序記錄不斷產生的資訊,能統計使用者在頁面上操作了哪些功能。
Thumbnail
在網路速度有限的情況下,依序記錄不斷產生的資訊,能統計使用者在頁面上操作了哪些功能。
Thumbnail
本章節提供了關於Typescript中流程控制元素的詳細介紹,包括if, else if, else語句,三元運算子,switch語句,各種for迴圈,while迴圈,循環嵌套和控制迴圈語句(break,continue和標籤)的使用。
Thumbnail
本章節提供了關於Typescript中流程控制元素的詳細介紹,包括if, else if, else語句,三元運算子,switch語句,各種for迴圈,while迴圈,循環嵌套和控制迴圈語句(break,continue和標籤)的使用。
Thumbnail
Lua 開檔寫檔的運用 io.output()...
Thumbnail
Lua 開檔寫檔的運用 io.output()...
Thumbnail
Function的使用方式
Thumbnail
Function的使用方式
Thumbnail
User Input & Tables 的使用
Thumbnail
User Input & Tables 的使用
Thumbnail
本章節主要介紹了JavaScript中的流程控制,包括條件語句(如if、else if、else和三元運算子)和循環結構(如for迴圈、while迴圈等)。同時,也提供了如何使用break、continue和label來控制迴圈的執行。
Thumbnail
本章節主要介紹了JavaScript中的流程控制,包括條件語句(如if、else if、else和三元運算子)和循環結構(如for迴圈、while迴圈等)。同時,也提供了如何使用break、continue和label來控制迴圈的執行。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News