在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于寄存器的同步FIFO

OpenFPGA ? 來源:OpenFPGA ? 2023-06-14 09:02 ? 次閱讀

FIFO 是FPGA設計中最有用的模塊之一。FIFO 在模塊之間提供簡單的握手和同步機制,是設計人員將數(shù)據(jù)從一個模塊傳輸?shù)搅硪粋€模塊的常用選擇。

在這篇文章中,展示了一個簡單的 RTL 同步 FIFO,可以直接在自己的設計中配置和使用它,該設計是完全可綜合的。

為什么要自己設計FIFO

那么,為什么呢?網(wǎng)上有很多關于 FIFO 的 Verilog/VHDL 代碼的資源,過去,我自己也使用過其中的一些。但令人沮喪的是,它們中的大多數(shù)都存在問題,尤其是在上溢出和下溢出條件下。所以想一勞永逸地解決這些問題。

FIFO 規(guī)格性能

同步,單時鐘。

基于寄存器的 FIFO,適用于中小型 FIFO。

Full、Empty、Almost-full、Almost-empty 標志。

完全可配置的數(shù)據(jù)寬度、深度和標志。

完全可綜合的系統(tǒng) Verilog 代碼。

/*===============================================================================================================================
Design:Single-clockSynchronousFIFO

Description:Fullysynthesisable,configurableSingle-clockSynchronousFIFObasedonregisters.
-ConfigurableDatawidth.
-ConfigurableDepth.
-ConfigurableAlmost-fullandAlmost-emptysignals.
===============================================================================================================================*/

modulemy_fifo#(
parameterDATA_W=4,//Datawidth
parameterDEPTH=8,//DepthofFIFO
parameterUPP_TH=4,//UpperthresholdtogenerateAlmost-full
parameterLOW_TH=2//LowerthresholdtogenerateAlmost-empty
)

(
inputclk,//Clock
inputrstn,//Active-lowSynchronousReset

inputi_wren,//WriteEnable
input[DATA_W-1:0]i_wrdata,//Write-data
outputo_alm_full,//Almost-fullsignal
outputo_full,//Fullsignal

inputi_rden,//ReadEnable
output[DATA_W-1:0]o_rddata,//Read-data
outputo_alm_empty,//Almost-emptysignal
outputo_empty//Emptysignal
);


/*-------------------------------------------------------------------------------------------------------------------------------
InternalRegisters/Signals
-------------------------------------------------------------------------------------------------------------------------------*/

logic[DATA_W-1:0]data_rg[DEPTH];//Dataarray
logic[$clog2(DEPTH)-1:0]wrptr_rg;//Writepointer
logic[$clog2(DEPTH)-1:0]rdptr_rg;//Readpointer
logic[$clog2(DEPTH):0]dcount_rg;//Datacounter

logicwren_s;//WriteEnablesignalgeneratediffFIFOisnotfull
logicrden_s;//ReadEnablesignalgeneratediffFIFOisnotempty
logicfull_s;//Fullsignal
logicempty_s;//Emptysignal


/*-------------------------------------------------------------------------------------------------------------------------------
SynchronouslogictowritetoandreadfromFIFO
-------------------------------------------------------------------------------------------------------------------------------*/
always@(posedgeclk)begin

if(!rstn)begin

data_rg<=?'{default:?'0}?;
??????wrptr_rg??<=?0??????????????;
??????rdptr_rg??<=?0??????????????;??????
??????dcount_rg?<=?0??????????????;

???end

???else?begin

??????ready_rg?<=?1'b1?;
??????
??????/*?FIFO?write?logic?*/????????????
??????if?(wren_s)?begin??????????????????????????
?????????
?????????data_rg?[wrptr_rg]?<=?i_wrdata?;????????//?Data?written?to?FIFO

?????????if?(wrptr_rg?==?DEPTH?-?1)?begin
????????????wrptr_rg?<=?0???????????????;????????//?Reset?write?pointer??
?????????end

?????????else?begin
????????????wrptr_rg?<=?wrptr_rg?+?1????;????????//?Increment?write?pointer????????????
?????????end

??????end

??????/*?FIFO?read?logic?*/
??????if?(rden_s)?begin?????????

?????????if?(rdptr_rg?==?DEPTH?-?1)?begin
????????????rdptr_rg?<=?0???????????????;????????//?Reset?read?pointer
?????????end

?????????else?begin
????????????rdptr_rg?<=?rdptr_rg?+?1????;????????//?Increment?read?pointer????????????
?????????end

??????end

??????/*?FIFO?data?counter?update?logic?*/
??????if?(wren_s?&&?!rden_s)?begin???????????????//?Write?operation
?????????dcount_rg?<=?dcount_rg?+?1?;
??????end????????????????????
??????else?if?(!wren_s?&&?rden_s)?begin??????????//?Read?operation
?????????dcount_rg?<=?dcount_rg?-?1?;?????????
??????end

???end

end


/*-------------------------------------------------------------------------------------------------------------------------------
???Continuous?Assignments
-------------------------------------------------------------------------------------------------------------------------------*/

//?Full?and?Empty?internal
assign?full_s??????=?(dcount_rg?==?DEPTH)???1'b1?:?0?;
assign?empty_s?????=?(dcount_rg?==?0????)???1'b1?:?0?;

//?Write?and?Read?Enables?internal
assign?wren_s??????=?i_wren?&?!full_s????????????????;??
assign?rden_s??????=?i_rden?&?!empty_s???????????????;

//?Full?and?Empty?to?output
assign?o_full??????=?full_s??????????????????????????;
assign?o_empty?????=?empty_s?????????????????????????;

//?Almost-full?and?Almost?Empty?to?output
assign?o_alm_full??=?(dcount_rg?>UPP_TH)?1'b1:0;
assigno_alm_empty=(dcount_rg

基于 RAM 的 FIFO

在上面的步驟中,我們看到了一個基于寄存器的同步FIFO。接下來,我們來看看基于 RAM 的 FIFO。該 FIFO 在 RAM 而不是寄存器上實現(xiàn)其數(shù)據(jù)陣列。這適用于在硬件上實現(xiàn)大型 FIFO ;特別是在 FPGA 上,F(xiàn)PGA 里有大量的Block RAM 可用。這將降低資源利用率,也可以獲得更好的時序性能。

詳細代碼:

?

https://github.com/iammituraj/FIFOs
責任編輯:彭菁

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5397

    瀏覽量

    122692
  • 數(shù)據(jù)

    關注

    8

    文章

    7232

    瀏覽量

    90711
  • fifo
    +關注

    關注

    3

    文章

    397

    瀏覽量

    44450

原文標題:【手撕代碼】同步 FIFO、LIFO/Stack

文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關注!文章轉載請注明出處。

收藏 0人收藏

    評論

    相關推薦

    寄存器是什么?怎么操作寄存器點亮LED燈?

    寄存器,是集成電路中非常重要的一種存儲單元,通常由觸發(fā)組成。在集成電路設計中,寄存器可分為電路內部使用的寄存器和充當內外部接口的寄存器這兩
    的頭像 發(fā)表于 07-21 16:59 ?4388次閱讀
    <b class='flag-5'>寄存器</b>是什么?怎么操作<b class='flag-5'>寄存器</b>點亮LED燈?

    寄存器與移位寄存器

    寄存器與移位寄存器 寄存器是用來寄存數(shù)碼的邏輯部件,所以必須具備接收和寄存數(shù)碼的功能。任何一種觸發(fā)
    發(fā)表于 03-12 15:19 ?59次下載

    寄存器,寄存器是什么意思

    寄存器,寄存器是什么意思 寄存器定義  寄存器是中央處理內的組成部分。寄存器是有限存貯容量
    發(fā)表于 03-08 14:26 ?2.2w次閱讀

    數(shù)據(jù)寄存器,數(shù)據(jù)寄存器是什么意思

    數(shù)據(jù)寄存器,數(shù)據(jù)寄存器是什么意思 數(shù)據(jù)寄存器數(shù)據(jù)寄存器包括累加AX、基址寄存器BX、計數(shù)
    發(fā)表于 03-08 14:38 ?1.3w次閱讀

    移位寄存器,移位寄存器是什么意思

    移位寄存器,移位寄存器是什么意思 移位寄存器_
    發(fā)表于 03-08 14:50 ?1.8w次閱讀

    寄存器與移位寄存器

    寄存器與移位寄存器:介紹寄存器原理和移位寄存器的原理及實現(xiàn)。
    發(fā)表于 05-20 11:47 ?0次下載

    移位寄存器的原理

    移位寄存器按照不同的分類方法可以分為不同的類型。 如果按照移位寄存器的移位方向來進行分類, 可以分為左移移位寄存器、移位寄存器和雙向移位寄存器
    發(fā)表于 07-15 09:38 ?7.6w次閱讀
    移位<b class='flag-5'>寄存器</b>的原理

    AD轉換寄存器設置

    AD轉換寄存器設置AD轉換寄存器設置AD轉換寄存器設置
    發(fā)表于 11-10 17:36 ?16次下載
    AD轉換<b class='flag-5'>寄存器</b>設置

    MPU6050寄存器介紹

    MPU6050寄存器介紹電源管理寄存器1(0X6B)陀螺儀配置寄存器(0X1B)加速度傳感配置寄存器(0X1C)
    發(fā)表于 12-06 11:51 ?21次下載
    MPU6050<b class='flag-5'>寄存器</b>介紹

    ARM通用寄存器及狀態(tài)寄存器詳解

    筆者來聊聊ARM通用寄存器以及狀態(tài)寄存器的認識與理解。
    的頭像 發(fā)表于 01-06 14:58 ?8027次閱讀

    4 位 x16字 FIFO 寄存器-74HC40105

    4 位 x 16 字 FIFO 寄存器-74HC40105
    發(fā)表于 02-20 19:59 ?0次下載
    4 位 x16字 <b class='flag-5'>FIFO</b> <b class='flag-5'>寄存器</b>-74HC40105

    單片機工作寄存器作用 單片機常用專用寄存器

    除了通用寄存器(如累加、通用寄存器等),單片機中還會有特定功能的寄存器,如定時寄存器、中斷控
    的頭像 發(fā)表于 04-08 14:46 ?8099次閱讀

    RAL寄存器模型操作圖鑒

    寄存器模型操作,指的是通過寄存器模型對RTL中寄存器進行讀寫訪問,或者同步寄存器模型與RTL中寄存器
    的頭像 發(fā)表于 05-17 09:01 ?1225次閱讀
    RAL<b class='flag-5'>寄存器</b>模型操作圖鑒

    RAL寄存器模型操作指南

    寄存器模型操作,指的是通過寄存器模型對RTL中寄存器進行讀寫訪問,或者同步寄存器模型與RTL中寄存器
    的頭像 發(fā)表于 07-12 09:37 ?1279次閱讀
    RAL<b class='flag-5'>寄存器</b>模型操作指南

    寄存器分為基本寄存器和什么兩種

    寄存器是計算機中用于存儲數(shù)據(jù)的高速存儲單元,它們是CPU內部的重要組成部分。寄存器可以分為基本寄存器和擴展寄存器兩種類型。 一、基本寄存器
    的頭像 發(fā)表于 07-12 10:31 ?1908次閱讀
    主站蜘蛛池模板: 午夜爱爱毛片xxxx视频免费看 | 婷婷资源综合 | 搜索黄色录像 | 大蕉久久伊人中文字幕 | 天天做天天爱天天操 | 国产主播在线观看 | 天天操狠狠操夜夜操 | 性欧美高清短视频免费 | 欧美色视频超清在线观看 | 五月天情网 | 亚洲国产精品综合久久2007 | 大又大又粗又爽女人毛片 | 国产午夜精品一区二区三区 | 卡2卡三卡四卡精品公司 | 狠狠色欧美亚洲狠狠色www | 人人草人人爽 | 国产三级国产精品国产普男人 | 国模精品视频一区二区三区 | 无遮挡一级毛片 | 欧美不卡视频在线观看 | 欧美三级在线 | 中文在线资源链接天堂 | 亚洲一区中文字幕在线观看 | 五月天婷婷综合 | 影音先锋 色天使 | 亚洲成人精品 | 163黄页网又粗又长又舒服 | 一级特黄a大片免费 | 日韩电影毛片 | 亚欧免费视频一区二区三区 | www.欧美成 | 激情四月婷婷 | 日日噜噜噜噜人人爽亚洲精品 | you ji z z日本人在线观看 | 天堂在线中文字幕 | 日本视频一区在线观看免费 | 你懂的手机在线视频 | 狠狠色狠狠干 | 91青草视频 | 国产精品 视频一区 二区三区 | 1024手机看片国产 |

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品