付費限定

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

更新 發佈閱讀 11 分鐘

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

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


vocus|新世代的創作平台

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的功能慢慢的組出

vocus|新世代的創作平台

主要的block有4個部分

(1) mem : write data / read data

以行動支持創作者!付費即可解鎖
本篇內容共 4303 字、0 則留言,僅發佈於IC面試專班你目前無法檢視以下內容,可能因為尚未登入,或沒有該房間的查看權限。
留言
avatar-img
數位IC設計第一品牌
186會員
30內容數
數位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
在網路速度有限的情況下,依序記錄不斷產生的資訊,能統計使用者在頁面上操作了哪些功能。
Thumbnail
在網路速度有限的情況下,依序記錄不斷產生的資訊,能統計使用者在頁面上操作了哪些功能。
Thumbnail
本章節主要介紹了JavaScript中的流程控制,包括條件語句(如if、else if、else和三元運算子)和循環結構(如for迴圈、while迴圈等)。同時,也提供了如何使用break、continue和label來控制迴圈的執行。
Thumbnail
本章節主要介紹了JavaScript中的流程控制,包括條件語句(如if、else if、else和三元運算子)和循環結構(如for迴圈、while迴圈等)。同時,也提供了如何使用break、continue和label來控制迴圈的執行。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
此章節的目的是介紹Java程式語言中的流程控制結構,包括條件語句(if, else if, else)、三元運算子、switch語句,以及各種迴圈(for, foreach, while)。同時,也解釋了如何在迴圈中使用控制語句來改變程式的執行流程。每種主題都配有示例程式碼以幫助理解。
Thumbnail
此章節的目的是介紹Java程式語言中的流程控制結構,包括條件語句(if, else if, else)、三元運算子、switch語句,以及各種迴圈(for, foreach, while)。同時,也解釋了如何在迴圈中使用控制語句來改變程式的執行流程。每種主題都配有示例程式碼以幫助理解。
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
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
User Input & Tables 的使用
Thumbnail
User Input & Tables 的使用
Thumbnail
Function的使用方式
Thumbnail
Function的使用方式
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News