色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

FPGA設計過程中常用的FIFO

OpenFPGA ? 來源:OpenFPGA ? 作者:OpenFPGA ? 2022-09-20 09:10 ? 次閱讀

介紹

無論何時,在復雜的 FPGA 設計過程中,都不可避免地需要在模塊之間發送數據,實現這一點的常用的是 FIFO。

FIFO

寫入:當寫入 FIFO 時,需要確保不要寫入太多數據以致 FIFO 溢出。為了幫助解決這個問題,FIFO 通常有一個完整的計數標志,有時還可以使用一個watermark端口

watermark:本質上告訴 FIFO 中的項目何時超過一定數量,這時候應該放慢速度或不放入數據。但如果想發送特定數量的數據,將需要添加額外的步驟在狀態機中管理“above watermark”的情況。在狀態機上工作時,可能需要添加狀態和寄存器來管理邊緣情況(空滿情況)。

full flag:比較棘手的信號,因為 full flag 可能會在輸入數據的同一時鐘變高。如果有流水線設計,則需要在檢測到“full”狀態時緩沖這些數據。

count:計數可以大致了解可以進入 FIFO 的數據量。計數的更新比watermark和full flag慢,并且會給你一個保守的 FIFO 內的空間計數。我很想經常使用它,但我發現我需要在狀態機中添加一些狀態來管理它。

Reading:從 FIFO 讀取通常不會那么糟糕,只要在空標志不置位時不讀取即可。

Double Buffer

我師傅讓我考慮使用雙端口block-ram 作為雙緩沖器。就像 FIFO 一樣,類似具有如下行為的讀取器和寫入器:

寫入器:將數據寫入block-ram,然后使用跨時鐘域技術將數據的大小和狀態發送給讀取器。

讀取器:讀取寫入器放入 RAM 的已知數據量。

這種方法的好處在于,寫入器知道它可以寫入多少空間,而讀取器知道它可以讀取多少數據。這非常適合流水線設計。另一個方面是寫入器可以在讀取器讀取數據時開始處理block-ram 的后半部分。不過,這種方法并不是自由操作。以下是現在需要由寫入器和讀取器管理的一些事情:

寫入器

ram中有多少空間(或ram的一半)

開始/結束地址指針

寫入了多少數據

讀取器

有多少數據可供讀取

開始/結束地址指針

我喜歡這種雙緩沖區給我的數據量的預知。這允許我編寫內核,將已知數量的數據從雙緩沖區的輸出轉儲到另一個位置,如音頻視頻緩沖區。不幸的是,每個使用雙緩沖器的模塊都必須設計為能夠處理上述所有問題以及更多的跨時鐘域標志。

如果不需要擔心 FIFO(滿/空)的邊緣情況,這將是最容易使用的機制。下面將這兩種機制結合起來可能是最佳方案。

Ping Pong FIFO

Ping Pong FIFO 本質上是一個上面描述的雙緩沖區,包裹起來看起來像一個 FIFO。所有地址指針和跨時鐘域通信都包含在一個簡單的模塊中。模塊如下所示:

modulePPFIFO
#(parameterDATA_WIDTH=8,
ADDRESS_WIDTH=4
)(

//universalinput
inputreset,

//writeside
inputwrite_clock,
outputreg[1:0]write_ready,
input[1:0]write_activate,
output[23:0]write_fifo_size,
inputwrite_strobe,
input[DATA_WIDTH-1:0]write_data,
outputstarved,

//readside
inputread_clock,
inputread_strobe,
outputregread_ready,
inputread_activate,
outputreg[23:0]read_count,
output[DATA_WIDTH-1:0]read_data,

outputinactive
);

有單獨的寫入端和讀取端時鐘,選通用于寫入和讀取數據。不過也有一些新的信號:

write_ready:這與雙緩沖區有關,需要管理緩沖區的兩側。這2 bit信號告訴雙緩沖區的哪一側已準備好。

0:緩沖區的下半部分準備好

1:上半部分準備好

write_activate:用戶告訴 Ping Pong FIFO 它想要擁有緩沖區的一側

write_fifo_size:表示用戶可以寫入 Ping Pong FIFO(PPFIFO) 的字數。

注意:不需要在完成之前填充寫入端,PPFIFO 將跟蹤寫入的元素數量并將此信息發送到讀取端,作為將遞增數字模式寫入 PPFIFO 的簡單模塊示例

/*Module:ppfifo_source
*
*Description:PopulateaPingPongFIFOwithanincrementingnumberpattern
*/

moduleppfifo_source#(
parameterDATA_WIDTH=8
)(
inputclk,
inputrst,
inputi_enable,

//PingPongFIFOInterface
input[1:0]i_wr_rdy,
outputreg[1:0]o_wr_act,
input[23:0]i_wr_size,
outputrego_wr_stb,
outputreg[DATA_WIDTH-1:0]o_wr_data
);

//LocalParameters
//Registers/Wires
reg[23:0]r_count;
//Submodules
//AsynchronousLogic
//SynchronousLogic
always@(posedgeclk)begin
//De-assertStrobes
o_wr_stb<=?0;

??if?(rst)?begin
????o_wr_act????????<=??0;
????o_wr_stb????????<=??0;
????o_wr_data???????<=??0;
????r_count?????????<=??0;
??end
??else?begin
????if?(i_enable)?begin
??????if?((i_wr_rdy?>0)&&(o_wr_act==0))begin
r_count<=??0;
????????if?(i_wr_rdy[0])?begin
??????????//Channel?0?is?open
??????????o_wr_act[0]??<=??1;
????????end
????????else?begin
??????????//Channel?1?is?open
??????????o_wr_act[1]??<=??1;
????????end
??????end
??????else?if?(o_wr_act?>0)begin
if(r_count

正如所看到的,通過添加一個額外的寄存器來跟蹤添加到 PPFIFO 的數據量,不必擔心full flags、water marks 或者counts。

閱讀方面更容易。PPFIFO 知道首先寫入哪個緩沖區,因此用戶只需要觀察一個read_ready標志,然后使用read_activate告訴它我們有控制權。以下是從 PPFIFO 讀取數據的示例:

這里有更具體的細節:

用戶監視“read_ready”位:當“read_ready”信號為 1 時,ppfifo 為用戶準備好一個數據塊。

用戶使用“read_activate”信號激活該塊并使用“read_strobe”讀取 NEXT 數據

“read_count”是緩沖區中數據元素的總數。

用戶必須在將“read_activate”設置為低之前讀取所有數據

/*Module:ppfifo_sink
*
*Description:WheneverdataisavailablewithintheFIFOactivateitandreaditall
*/

moduleppfifo_sink#(
parameterDATA_WIDTH=8
)(
inputclk,
inputrst,

//PingPongFIFOInterface
inputi_rd_rdy,
outputrego_rd_act,
input[23:0]i_rd_size,
outputrego_rd_stb,
input[DATA_WIDTH-1:0]i_rd_data
);

//LocalParameters
//Registers/Wires
reg[23:0]r_count;
//Submodules
//AsynchronousLogic
//SynchronousLogic
always@(posedgeclk)begin
//De-AssertStrobes
o_rd_stb<=??0;

??if?(rst)?begin
????o_rd_act??????????<=??0;
????r_count???????????<=??0;
????o_rd_stb??????????<=??0;
??end
??else?begin
????if?(i_rd_rdy?&&?!o_rd_act)?begin
??????r_count?????????<=??0;
??????o_rd_act????????<=??1;
????end
????else?if?(o_rd_act)?begin
??????if?(r_count?

下面設計一個簡單的測試模塊來演示 Ping Pong FIFO。

源代碼地址:

https://github.com/CospanDesign/verilog_ppfifo_demo

下面是幾個簡單模擬的截圖:

a16db632-387c-11ed-ba43-dac502259ad0.png

在讀事務開始和下一個寫事務開始時放大仿真區域:

a21b79a2-387c-11ed-ba43-dac502259ad0.png

在讀取事務之間放大

a255998e-387c-11ed-ba43-dac502259ad0.png

半放大

a2bc99ea-387c-11ed-ba43-dac502259ad0.png

截圖可能不清晰,建議自己仿真。

總結

PPFIFO除了上面用于解決FIFO的“痛處”外,常見的還是處理高速數據流處理,下面是一個10M數據流分成兩個5M數據流的例子。

審核編輯:彭靜

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

    關注

    1630

    文章

    21759

    瀏覽量

    604302
  • FPGA設計
    +關注

    關注

    9

    文章

    428

    瀏覽量

    26553
  • 數據
    +關注

    關注

    8

    文章

    7081

    瀏覽量

    89188
  • fifo
    +關注

    關注

    3

    文章

    389

    瀏覽量

    43743

原文標題:乒乓操作實例講解-FIFO

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

收藏 人收藏

    評論

    相關推薦

    FPGA中常用的存儲器資源

    本文主要介紹FPGA中常用的RAM、ROM、CAM、SRAM、DRAM、FLASH等資源,包括特性、工作原理、應用場景等。
    發表于 08-15 15:41 ?3044次閱讀

    FPGA設計中常用的復位設計

    下面對FPGA設計中常用的復位設計方法進行了分類、分析和比較。針對FPGA在復位過程中存在不可靠復位的現象,提出了提高復位設計可靠性的4種方法,包括清除復位信號上的毛刺、異步復位同步釋
    發表于 06-30 07:00

    平衡小車在移植過程中常見的問題有哪些?

    平衡小車在移植過程中常見的問題有哪些?
    發表于 11-10 06:19

    在嵌入式開發過程中常用的庫函數有哪些

    在嵌入式開發過程中常用的庫函數有哪些?有何優勢?
    發表于 02-25 07:07

    基于FPGAFIFO設計和應用

    基于FPGAFIFO設計和應用 引 言   在利用DSP實現視頻實時跟蹤時,需要進行大量高速的圖像采集。而DSP本身自帶的FIFO并不足以支持系統中大量數據的暫時存儲
    發表于 11-20 11:25 ?2221次閱讀
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>FIFO</b>設計和應用

    LabVIEW FPGA模塊實現FIFO深度設定

    為了解決基于LabVIEWFPGA模塊的DMAFIFO深度設定不當帶來的數據不連續問題,結合LabVIEWFPGA的編程特點和DMA FIFO的工作原理,提出了一種設定 FIFO 深度
    發表于 09-26 13:45 ?7403次閱讀
    LabVIEW <b class='flag-5'>FPGA</b>模塊實現<b class='flag-5'>FIFO</b>深度設定

    異步FIFO結構及FPGA設計

    異步FIFO結構及FPGA設計,解決亞穩態的問題
    發表于 11-10 15:21 ?4次下載

    繪制原理圖和PCB圖的過程中常遇到的一些問題

    繪制原理圖和PCB圖的過程中常遇到的一些問題.doc
    發表于 07-12 10:42 ?0次下載

    FPGA電路FIFO設計的源代碼

    FPGA電路FIFO設計的源代碼
    發表于 07-08 17:34 ?15次下載
    <b class='flag-5'>FPGA</b>電路<b class='flag-5'>FIFO</b>設計的源代碼

    FPGA設計中常用的復位設計資料下載

    電子發燒友網為你提供FPGA設計中常用的復位設計資料下載的電子資料下載,更有其他相關的電路圖、源代碼、課件教程、中文資料、英文資料、參考設計、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發表于 04-10 08:40 ?40次下載
    <b class='flag-5'>FPGA</b>設計<b class='flag-5'>中常用</b>的復位設計資料下載

    FPGA調試中常用的TCL語法簡介

    使用Jtag Master調試FPGA程序時用到tcl語言,通過編寫tcl腳本,可以實現對FPGA的讀寫,為調試FPGA程序帶來極大的便利,下面對FPGA調試
    的頭像 發表于 02-19 19:44 ?2769次閱讀

    AXI FIFO和AXI virtual FIFO兩個IP的使用方法

    FIFO 是我們設計中常用的工具,因為它們使我們能夠在進行信號和圖像處理時緩沖數據。我們還使用異步FIFO來處理數據總線的時鐘域交叉問題。
    發表于 11-04 09:14 ?4963次閱讀

    FIFO使用及其各條件仿真介紹

    FIFO(First In First Out )先入先出存儲器,在FPG設計中常用于跨時鐘域的處理,FIFO可簡單分為同步FIFO和異步FIFO
    的頭像 發表于 04-25 15:55 ?4106次閱讀
    <b class='flag-5'>FIFO</b>使用及其各條件仿真介紹

    光模塊使用過程中常見的問題匯總

    光模塊是一種較為敏感的光學器件,在使用過程中常常會出現很多問題,在本文中將光模塊的一些常見問題進行了匯總。
    的頭像 發表于 05-23 16:08 ?1615次閱讀
    光模塊使用<b class='flag-5'>過程中常</b>見的問題匯總

    封裝過程中常用的檢測設備

    封裝過程中常用的檢測設備 在軟件開發過程中,封裝是非常重要的一個概念。它不僅可以提高軟件的可維護性,還可以增加程序員代碼的復用性和安全性等。在封裝過程中,需要使用一些檢測設備對程序進行檢測,以確保
    的頭像 發表于 08-24 10:42 ?911次閱讀
    主站蜘蛛池模板: 熟妇内谢69XXXXXA片| 国产精品嫩草影院| 国产成人在线观看免费网站| 精品久久久久久久高清| 全免费A敌肛交毛片免费懂色AV| 我在厨房摸岳的乳HD在线观看| 2021国产精品视频| 国产精品资源在线观看网站| 男女作爱在线播放免费网页版观看| 亚洲福利网站| 成人中文字幕在线| 麻豆精品传媒一二三区| 亚洲高清中文字幕| 超碰 无码 中文字幕| 久久这里有精品| 亚洲国产成人私人影院| 动漫H片在线播放免费高清| 美国69xxxx59| 亚洲视频一区| 国产精品免费大片一区二区| 欧美亚洲精品一区二三区8V| 一区二区乱子伦在线播放| 国产福利秒拍weipai.ee| 欧美激情视频一区二区| 中文视频在线| 混乱家庭电影完整版在线看| 特级毛片s级全部免费| xxx免费观看| 内射后入在线观看一区| 中文字幕人成乱码熟女APP| 红尘影院在线观看| 亚洲 日韩 在线 国产 精品| 国产99久久久国产精品免费看| 欧美色图天堂网| 99re久久超碰视频精品| 久草在线在线精品观看| 亚洲AV日韩AV欧美在线观看网 | 超碰超碰视频在线观看| 木凡的天空在线收听| 最近免费视频中文2019完整版 | 东北老妇人70OLDMAN|