日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Xilinx IP解析之FIFO Generator v13.2

發(fā)布時(shí)間:2025/3/13 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Xilinx IP解析之FIFO Generator v13.2 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一. IP概述

可參考Xilinx官網(wǎng)fifo_generator概述,

以下翻譯自官網(wǎng)此IP的概述。

產(chǎn)品描述:

LogiCORE?IP FIFO生成器內(nèi)核生成經(jīng)過(guò)充分驗(yàn)證的先進(jìn)先出(FIFO)內(nèi)存隊(duì)列,非常適合需要按順序存儲(chǔ)和檢索數(shù)據(jù)的應(yīng)用。

該內(nèi)核為所有FIFO配置提供了優(yōu)化的解決方案,并在利用最少資源的同時(shí)提供了最高性能(高達(dá)500 MHz)。通過(guò)Vivado?Design Suite提供的結(jié)構(gòu)可以由用戶自定義,包括寬度,深度,狀態(tài)標(biāo)志,存儲(chǔ)器類型以及寫/讀端口的寬高比。

主要功能和優(yōu)勢(shì):

  • FIFO深度高達(dá)4,194,304字
  • FIFO數(shù)據(jù)寬度從1到1024位(對(duì)于本機(jī)FIFO配置),最大4096位(對(duì)于AXI FIFO配置)
  • 非對(duì)稱縱橫比(讀寫端口比率范圍為1:8至8:1)
  • 支持獨(dú)立或通用時(shí)鐘域
  • 可選的存儲(chǔ)器類型(塊RAM,分布式RAM,移位寄存器或內(nèi)置FIFO)
  • 本機(jī)或AXI接口(AXI4,AXI4-Lite或AXI4-Stream)
  • 同步或異步重置選項(xiàng)
  • 支持分組模式
  • 支持某些配置的糾錯(cuò)(ECC)和注入功能
  • 支持首字直通(FWFT)
  • 支持用于Block RAM和基于內(nèi)置FIFO原語(yǔ)的實(shí)現(xiàn)的Embedded Register選項(xiàng)
  • 支持–空/滿,幾乎空/滿和可編程的空/滿信號(hào)

二. IP產(chǎn)品手冊(cè)

可參考Xilinx官網(wǎng)fifo_generator文檔

可下載PG057 - FIFO Generator v13.2 Product Guide (v13.2)

三. IP框圖與信號(hào)端口

XILINX的FIFO Generator IP提供了三種接口的FIFO,分別是Native,AXI Memory Mapped 以及 AXI Sream,我個(gè)人只用過(guò)Native即普通FIFO,所以下文只介紹這一種FIFO類型。

3.1 IP模塊框圖(普通FIFO)

3.2 IP信號(hào)列表

信號(hào)名位寬必須/可選說(shuō)明
wr_clk1必須寫時(shí)鐘,提供給寫端口使用的時(shí)鐘
wr_en1必須寫使能,高有效,
在每個(gè)寫時(shí)鐘上升沿被捕捉,捕捉一次寫入一次數(shù)據(jù)
full1必須滿信號(hào),高有效,
FIFO內(nèi)部寫數(shù)據(jù)個(gè)數(shù) = FIFO寫深度的第一個(gè)時(shí)鐘上升沿置高,
FIFO內(nèi)部寫數(shù)據(jù)個(gè)數(shù) < FIFO寫深度的第一個(gè)時(shí)鐘上升沿拉低。
在full有效時(shí),FIFO會(huì)關(guān)閉寫功能,如果此時(shí)wr_en有效,full會(huì)置高overflow即輸出滿溢信號(hào),FIFO中的數(shù)據(jù)沒(méi)有變化,往滿FIFO中寫不是破壞性的。
din1, 2, … , 1024必須寫入的數(shù)據(jù),當(dāng)wr_en高被捕捉時(shí),din被寫入到FIFO中
almost_full1可選快滿信號(hào),高有效,
FIFO內(nèi)部寫數(shù)據(jù)個(gè)數(shù) = FIFO深度 - 1的第一個(gè)寫時(shí)鐘上升沿置高,
FIFO內(nèi)部寫數(shù)據(jù)個(gè)數(shù) < FIFO深度 - 1的第一個(gè)寫時(shí)鐘上升沿拉低
prog_full1可選設(shè)定滿信號(hào),高有效,
參考4.3.3 Programmable Flags —— 可編程標(biāo)志
wr_rst1可選寫復(fù)位,高有效,
寫復(fù)位信號(hào)有效后的第一個(gè)寫時(shí)鐘上升沿,FIFO被清空,并不再響應(yīng)寫使能,
直到寫復(fù)位信號(hào)失效后下一個(gè)寫時(shí)鐘上升沿(包括)開(kāi)始再去響應(yīng)寫使能
rd_clk1可選讀時(shí)鐘,
對(duì)于同步FIFO,FIFO讀寫時(shí)鐘合一
對(duì)于異步FIFO,FIFO會(huì)有分開(kāi)的寫時(shí)鐘和讀時(shí)鐘
rd_en1必須讀使能,高有效,在每個(gè)讀時(shí)鐘上升沿被捕捉,捕捉一次讀出一次數(shù)據(jù)
empty1必須空信號(hào),高有效,
FIFO內(nèi)部讀數(shù)據(jù)個(gè)數(shù) = 0的第一個(gè)讀時(shí)鐘上升沿置高,
直到FIFO內(nèi)部讀數(shù)據(jù)個(gè)數(shù) > 0的第一個(gè)讀時(shí)鐘上升沿拉低。
在empty有效時(shí),FIFO會(huì)關(guān)閉讀功能,如果此時(shí)rd_en有效,FIFO會(huì)置高underflow即輸出空溢信號(hào),FIFO內(nèi)部的數(shù)據(jù)沒(méi)有變化,讀取空FIFO不是破壞性的。
dout可設(shè)定位寬 =
din位寬 *(1/8,1/4,1/2,1,2,4,8)
必須讀數(shù)據(jù),讀數(shù)據(jù)位寬 * 讀深度 = FIFO容量 = 寫數(shù)據(jù)位寬 * 寫深度
對(duì)于FWFT FIFO,dout預(yù)先有效,在讀使能被捕捉的同時(shí)更新下一個(gè)讀數(shù)據(jù),
對(duì)于標(biāo)準(zhǔn)FIFO,在讀使能被捕捉的時(shí)鐘過(guò)后的第二個(gè)時(shí)鐘上升沿,dout才是讀出的數(shù)據(jù)
almost_empty1可選快空信號(hào),高有效,
FIFO內(nèi)部讀數(shù)據(jù)個(gè)數(shù) = 1的第一個(gè)讀時(shí)鐘上升沿置高,
FIFO內(nèi)部讀數(shù)據(jù)個(gè)數(shù) > 1的第一個(gè)讀時(shí)鐘上升沿被拉低
prog_empty1可選設(shè)定空信號(hào),高有效,
參考4.3.3 Programmable Flags —— 可編程標(biāo)志

其它信號(hào)很少使用,這里不做介紹。

3.3 設(shè)計(jì)注意事項(xiàng)

3.3.1 rst —— 復(fù)位

在FPGA配置完成后,讀寫操作開(kāi)始之前,FIFO必須被復(fù)位,有同步/異步兩種復(fù)位可用。

3.3.2 clk —— 時(shí)鐘

Xilinx建議,不要通過(guò)改變clk來(lái)改變FIFO的讀寫行為,而應(yīng)該去控制讀寫使能信號(hào),當(dāng)時(shí)鐘未穩(wěn)定時(shí),不要去操作FIFO,當(dāng)時(shí)鐘穩(wěn)定后,先對(duì)FIFO進(jìn)行復(fù)位,然后再去操作FIFO。

3.3.2 wr_en 和 rd_en

雖然寫滿和讀空行為都不是破壞性的,但仍然強(qiáng)烈建議不要在FIFO滿時(shí)置高寫使能,不要在FIFO空時(shí)置高讀使能。也就是wr_en的用戶邏輯需要考慮full信號(hào),rd_en的用戶邏輯需要考慮empty信號(hào)。

四. IP配置

4.1 Basic

4.1.1 FIFO接口類型

最常用的就是Native接口類型的FIFO,即普通FIFO。

4.1.2 FIFO實(shí)現(xiàn)

FIFO實(shí)現(xiàn)有兩個(gè)方面的含義:

① FIFO時(shí)鐘,公共時(shí)鐘就是同步FIFO,此時(shí)讀寫操作共用一個(gè)時(shí)鐘;獨(dú)立時(shí)鐘就是異步FIFO,此時(shí)寫操作用寫時(shí)鐘,讀操作用讀時(shí)鐘。

當(dāng)選擇異步FIFO時(shí),會(huì)出現(xiàn)Synchronization stages —— 同步級(jí)數(shù)的選項(xiàng),此選項(xiàng)的意思是,當(dāng)FIFO中寫入數(shù)據(jù)后,empty信號(hào)并不會(huì)立刻拉低,因?yàn)閷懭霐?shù)據(jù)是基于寫時(shí)鐘的,而empty信號(hào)是基于讀時(shí)鐘的,如果Synchronization stages設(shè)定為2,則意味著empty會(huì)在FIFO中寫入數(shù)據(jù)成功后的2個(gè)讀時(shí)鐘周期后拉低。選3就是3個(gè)讀時(shí)鐘周期后,以此類推。

最小的Synchronization stages值通常和具體的器件型號(hào)有關(guān),器件頻率越快,則此選項(xiàng)最小選值越大,例如200MHz器件最低可以選2,而400MHz器件最低只能選4。這也告訴我們,速度越快,跨時(shí)鐘域的同步越可能不穩(wěn)定,需要更多級(jí)數(shù)的D觸發(fā)器。

總的來(lái)說(shuō),Synchronization stages貌似是一個(gè)不那么關(guān)鍵的參數(shù),通常不需要修改

② 存儲(chǔ)類型,有以下四種:

1)Block RAM,塊RAM,簡(jiǎn)稱BRAM,是在FPGA內(nèi)部嵌入的硬核存儲(chǔ)器,BRAM數(shù)量是衡量FPGA性能的重要指標(biāo),采用BRAM做FIFO是性能最優(yōu)的,但一個(gè)BRAM是18Kb,即使FIFO容量很小,也最少使用一個(gè)BRAM,這就造成了存儲(chǔ)容量的浪費(fèi)。

2)Distributed RAM,分布式RAM,是使用FPGA內(nèi)部的LUT即查找表資源搭建的FIFO,它的性能不及BRAM FIFO,但好處是它容量可以很靈活的配置,需要多少容量就用多少LUT去搭建,不會(huì)存在容量浪費(fèi)的情況。

3)Shift Register,移位寄存器,此存儲(chǔ)類型只支持公共時(shí)鐘,沒(méi)用過(guò)。

4)Built-in FIFO,內(nèi)置FIFO,沒(méi)用過(guò)。

說(shuō)明,BRAM和分布式RAM是創(chuàng)建FIFO最常選用的存儲(chǔ)類型,一般來(lái)說(shuō),FIFO容量超過(guò)1024個(gè)字節(jié)就考慮使用BRAM,沒(méi)超過(guò)1024字節(jié)選擇分布式RAM。當(dāng)然,如果芯片BRAM資源很富余的話,全部采用BRAM也是可以的。后兩種基本用不到。

4.1.3 FIFO支持的功能

不同的芯片型號(hào)與不同的實(shí)現(xiàn)形式的FIFO會(huì)支持不同的功能,不必去記憶這些,在Basic界面會(huì)將對(duì)應(yīng)實(shí)現(xiàn)的功能展示出來(lái)。功能含義如下:

(1)non-symmetric aspect ratios(different read and write data widths),非對(duì)稱縱橫比 即 不同的寫入與讀取數(shù)據(jù)位寬,支持此功能允許讀取數(shù)據(jù)位寬與寫入數(shù)據(jù)位寬不同,具體的讀取位寬可為輸入位寬的1/8,1/4,1/2,1倍,2倍,4倍 或 8倍,當(dāng)然位寬必須是整數(shù),例如寫入數(shù)據(jù)位寬=3時(shí),讀取數(shù)據(jù)位寬就只能取3,6,12,24。

(2)First-Word Fall-Through,首字直通,簡(jiǎn)稱FWFT。FIFO按是否支持此功能分別兩種:

1)Standard FIFO,標(biāo)準(zhǔn)FIFO,寫入在wr_en有效的第一個(gè)wr_clk時(shí)鐘上升沿完成。讀數(shù)據(jù)時(shí),rd_en有效,rdata端口經(jīng)過(guò)幾個(gè)讀時(shí)鐘周期的延遲才裝載完成最外側(cè)讀數(shù)據(jù),具體延遲周期數(shù)跟FIFO設(shè)置有關(guān),下面會(huì)講到。

2)FWFT FIFO,首字直通FIFO,寫入和標(biāo)準(zhǔn)FIFO完全相同,但FWFT FIFO會(huì)將讀數(shù)據(jù)預(yù)先就裝載到rdata端口上,rd_en并不是控制FIFO去輸出讀數(shù)據(jù),而是控制FIFO去更新下一個(gè)讀數(shù)據(jù)到rdata端口上。

通常來(lái)說(shuō),FWFT FIFO是更易使用的,讀取無(wú)延遲的優(yōu)勢(shì)使得讀時(shí)序很容易控制。

(3) Uses Bulit-in FIFO primitives,使用內(nèi)置FIFO原語(yǔ)。

(4)ECC support,ECC是Error Injection and Correction的簡(jiǎn)稱,意思是錯(cuò)誤注入和糾正。

(5)Dynamic Error Injection,動(dòng)態(tài)錯(cuò)誤注入。

4.1.4 Using Block RAM FIFOs Versus Built-in FIFOs,BRAM FIFO與 內(nèi)置FIFO使用對(duì)比

參考手冊(cè)16頁(yè):

內(nèi)置FIFO解決方案旨在利用內(nèi)置FIFO宏內(nèi)部的邏輯。對(duì)于快滿,快空以及其它幾個(gè)特性,內(nèi)置FIFO沒(méi)有實(shí)現(xiàn),因?yàn)樗鼈儾皇呛甑脑匦?#xff0c;需要額外邏輯來(lái)實(shí)現(xiàn)。

手冊(cè)中寫道:基準(zhǔn)測(cè)試表明,采用內(nèi)置FIFO + 外部邏輯實(shí)現(xiàn)宏的非原生特性 的解決方案與直接使用BRAM FIFO相比,邏輯資源消耗小的優(yōu)勢(shì)在減弱。特別是對(duì)于大容量的FIFO,BRAM更具優(yōu)勢(shì),所以我們強(qiáng)烈建議,當(dāng)需要FIFO具備內(nèi)置FIFO的非原生特性時(shí),采用BRAM的實(shí)現(xiàn)形式而不是內(nèi)置FIFO

4.2 Native Ports

4.2.1 Read Mode —— 讀取模式

選擇標(biāo)準(zhǔn)FIFO與FWFT FIFO,推薦總是使用FWFT FIFO。

4.2.2 Data Port Parameters —— 數(shù)據(jù)端口參數(shù)

選擇寫位寬與寫深度,以及讀位寬與讀深度。只有支持讀寫位寬不一致功能的FIFO,讀位寬才是可選的,不支持此功能的話,讀位寬必須等于寫位寬。

4.2.3 ECC,Output Register and Power Gating Options —— 錯(cuò)誤注入與糾正,輸出寄存器 和 功率控制選項(xiàng)

ECC:只有BRAM FIFO 和 內(nèi)置FIFO支持ECC功能,

Output Register:輸出寄存器,勾選此選項(xiàng)意思是在輸出端口再插入寄存器,插入寄存器會(huì)增加輸出延遲,這點(diǎn)在設(shè)計(jì)讀取時(shí)序時(shí)需要特別注意。共有三種輸出寄存器可以選擇:

1)Embedded Registers,嵌入式寄存器

2)Fabric Registers,光纖寄存器

3)Embedded Reg And Fabric Reg,嵌入式寄存器 + 光纖寄存器

Power Gating:功率控制,只有UltraScale類型芯片的built-in FIFO才支持功率控制功能。當(dāng)勾選Dynamic Power Gating(動(dòng)態(tài)功率控制)時(shí),輸入端口會(huì)增加一個(gè)sleep信號(hào),當(dāng)sleep信號(hào)高有效時(shí),FIFO會(huì)進(jìn)入省電模式,省電模式禁止寫和讀,此時(shí)wr_en與rd_en都應(yīng)該為低,FIFO保留內(nèi)部的數(shù)據(jù)不改變,直到sleep低電平失效。

Initialization:初始化,其實(shí)就是復(fù)位,復(fù)位總是高電平有效,無(wú)法修改FIFO的復(fù)位電平。同步FIFO支持同步復(fù)位和異步復(fù)位,而異步FIFO只支持異步復(fù)位。

異步復(fù)位可控制full信號(hào)在復(fù)位期間的值。可配置復(fù)位期間讀數(shù)據(jù)端口的值,不配置的話讀數(shù)據(jù)端口默認(rèn)為0。

Read Latency:讀延遲,只有標(biāo)準(zhǔn)FIFO才有讀延遲,且會(huì)受Output Register的配置影響;FWFT FIFO讀延遲始終為0。

4.3 Status Flags

4.3.1 Optional Flag —— 可選標(biāo)志

Almost Full Flag:快滿信號(hào),高有效,在FIFO內(nèi)部寫數(shù)據(jù)個(gè)數(shù) >= FIFO深度 - 1之后的第一個(gè)寫時(shí)鐘上升沿置高,直到FIFO內(nèi)部寫數(shù)據(jù)個(gè)數(shù) < FIFO深度 - 1后的第一個(gè)寫時(shí)鐘上升沿拉低。

Almost Empty Flag:快空信號(hào),高有效,在FIFO內(nèi)部讀數(shù)據(jù)個(gè)數(shù) <= 1之后的第一個(gè)讀時(shí)鐘上升沿置高,直到FIFO內(nèi)部讀數(shù)據(jù)個(gè)數(shù) > 1后的第一個(gè)讀時(shí)鐘上升沿拉低。

4.3.2 Handshaking Options —— 握手選項(xiàng)

Write Port Handshaking:寫端口握手

Write Ackongledge:寫應(yīng)答,在每次寫完成后的第一個(gè)時(shí)鐘上升沿置高/拉低(有效電平可配置),一次成功寫入對(duì)應(yīng)一個(gè)寫時(shí)鐘周期的寫應(yīng)答。

Overflow:滿溢出,在FIFO滿之后仍有wr_en信號(hào)使能的第一個(gè)時(shí)鐘上升沿置高/拉低(有效電平可配置),一次滿溢出有效電平持續(xù)一個(gè)寫時(shí)鐘。

Read Port Handshaking:讀端口握手

Valid Ackongledge:數(shù)據(jù)有效應(yīng)答,在每次讀完成后的第一個(gè)時(shí)鐘上升沿置高/拉低(有效電平可配置),一次成功讀取對(duì)應(yīng)一個(gè)讀時(shí)鐘周期的數(shù)據(jù)有效應(yīng)答。

Underflow:空溢出,在FIFO空之后仍有rd_en信號(hào)使能的第一個(gè)時(shí)鐘上升沿置高/拉低(有效電平可配置),一次空溢出有效電平持續(xù)一個(gè)讀時(shí)鐘。

4.3.3 Programmable Flags —— 可編程標(biāo)志

Programmable Full Type:可編程滿類型,有五個(gè)選項(xiàng)可選:

No Programmable Full Threshold:無(wú)可編程滿臨界點(diǎn)

Single Programmable Full Threshold Constant:單個(gè)可編程滿臨界點(diǎn)常量

Multiple Programmable Full Threshold Constant:雙向可編程滿臨界點(diǎn)常量

Single Programmable Full Threshold Input Port:單個(gè)可編程滿臨界點(diǎn)輸入端口

Multiple Programmable Full Threshold Input Port:雙向可編程滿臨界點(diǎn)輸入端口

下面是Programmable Full Type:可編程空類型,同理,不再贅述。

可編程滿標(biāo)志的產(chǎn)生邏輯:

當(dāng)FIFO中的寫數(shù)據(jù) >= Full Therhold Assert Value中規(guī)定的數(shù)據(jù)量(取值范圍:13 ~ 寫入深度-1)時(shí),可編程滿置高;

當(dāng)FIFO中的寫數(shù)據(jù) <= Full Therhold Negate Value中規(guī)定的數(shù)據(jù)量(取值范圍:12 ~ Full Therhold Assert Value中的值-1)時(shí),可編程滿拉低。

可編程空標(biāo)志的產(chǎn)生邏輯:

同理,取值范圍需要注意:

Empty Therhold Assert Value的范圍:4 ~ 讀取深度-3;

Empty Therhold Negate Value的范圍:Empty Therhold Assert Value+1 ~ 讀取深度-2。

4.4 Data Counts

同步FIFO對(duì)應(yīng) Data Count,異步FIFO對(duì)應(yīng) Write Data Count 以及 Read Data Count。

Data count的位寬是可選的,當(dāng)選擇標(biāo)準(zhǔn)FIFO時(shí),范圍是1 ~ log2(數(shù)據(jù)深度);當(dāng)選擇FWFT FIFO時(shí),范圍是1 ~ log2(數(shù)據(jù)深度)+1。舉例說(shuō)明:

如果數(shù)據(jù)深度 = 16,Data count位寬選擇4,那顯然Data count的取值范圍是0~15,這意味著計(jì)數(shù)最多記到15,當(dāng)FIFO滿時(shí)計(jì)數(shù)應(yīng)該是16,但這最后一個(gè)數(shù)不會(huì)被記。如果此時(shí)Data count位寬選為3,那么Data count可表示的數(shù)是0~7,那么FIFO中數(shù)據(jù)量 = 2,Data count才會(huì)加1,數(shù)據(jù)量 = 4,Data count才會(huì)加2,也就是說(shuō)Data count被低位截?cái)?/font>了;如果此時(shí)Data count位寬選為1,那所有低位都被截?cái)嗔?#xff0c;意味這FIFO中數(shù)據(jù)量 = 8,Data count才會(huì)加1。

如果勾選More Accurate Data Counts(精確計(jì)數(shù)),位寬變?yōu)?~5可選,5位寬最大可表示31,前面選的FIFO深度是16,意味著FIFO滿時(shí)的最后計(jì)數(shù)16也會(huì)被記入。還有一點(diǎn),選擇FWFT FIFO時(shí),FIFO的實(shí)際深度會(huì)大于設(shè)定的深度,如上面Native Ports界面的圖所示,設(shè)定深度16而FWFT FIFO的實(shí)際深度是17,精確計(jì)數(shù)可以計(jì)數(shù)到實(shí)際深度17,這就是精確計(jì)數(shù)的概念。

當(dāng)選擇同步FWFT FIFO時(shí),默認(rèn)就應(yīng)用了精確計(jì)數(shù),而無(wú)需手動(dòng)選擇。

還需要說(shuō)明的是,計(jì)數(shù)是有延遲的,不是FIFO中數(shù)據(jù)量一改變,計(jì)數(shù)值馬上改變的,這個(gè)延時(shí)的周期數(shù)和器件有關(guān)。

另外,計(jì)數(shù)通常只適用于調(diào)試,調(diào)試結(jié)束后就不在需要了,應(yīng)該計(jì)數(shù)會(huì)增加額外的資料消耗,而且計(jì)數(shù)到某一個(gè)值的功能可以由可編程滿/空信號(hào)來(lái)代替,顯然單比特的信號(hào)更易接收和使用。

4.5 Summary

五. IP仿真

仿真框圖:

對(duì)于以下關(guān)心的問(wèn)題分別仿真:

5.1 復(fù)位是否會(huì)清空FIFO,清空需要多長(zhǎng)時(shí)間?

仿真顯示:對(duì)于同步,復(fù)位置高后,會(huì)在下一個(gè)時(shí)鐘上升沿清空FIFO;對(duì)于異步復(fù)位則是立即清空FIFO,無(wú)需等待時(shí)鐘上升沿。復(fù)位還會(huì)同時(shí)置高full和empty。

5.2 復(fù)位結(jié)束后FIFO能馬上進(jìn)行寫和讀嗎?不能的話需要間隔多少時(shí)鐘周期?

上圖顯示,復(fù)位結(jié)束后即rst=0后,full信號(hào)還會(huì)一直為高持續(xù)多個(gè)周期,此時(shí)FIFO不能寫也不能讀(沒(méi)有數(shù)據(jù)),這個(gè)持續(xù)周期數(shù)對(duì)于16深度的FIFO是13個(gè)寫時(shí)鐘周期,對(duì)于深度32的FIFO還是13個(gè)寫時(shí)鐘周期,對(duì)于深度1024的FIFO是14個(gè)寫時(shí)鐘周期,可見(jiàn)FIFO從復(fù)位結(jié)束到恢復(fù)讀寫功能需要大約13個(gè)寫時(shí)鐘周期

5.3 FWFT FIFO的實(shí)際深度會(huì)大于設(shè)定深度,那么full和almost_full信號(hào)是當(dāng)數(shù)據(jù)量達(dá)到設(shè)定深度置高,還是達(dá)到實(shí)際深度才置高?

對(duì)于設(shè)定深度16,實(shí)際深度17的FWFT FIFO,almost_full在寫入16個(gè)數(shù)據(jù)后置高,full在寫入17個(gè)數(shù)據(jù)后置高,所以滿信號(hào)是以實(shí)際深度為準(zhǔn)的。

5.4 FIFO寫入一個(gè)數(shù)據(jù)后,多久empty會(huì)失效?

仿真結(jié)果顯示:寫入第一個(gè)數(shù)據(jù)后,經(jīng)過(guò)8個(gè)讀時(shí)鐘周期,empty才拉低。

5.5 可編程滿和可編程空的產(chǎn)生邏輯是什么?

確實(shí)如4.3.3 Programmable Flags —— 可編程標(biāo)志節(jié)描述的一致,不好展示,讀者可自行仿真驗(yàn)證。

六. FIFO使用建議

1.總是使用FWFT FIFO,無(wú)延遲的讀便于控制

2.資源足夠時(shí)總是使用BRAM FIFO;資源緊張時(shí),小型FIFO可使用分布式FIFO

3.FIFO在使用之前必須復(fù)位,復(fù)位時(shí)置高full,禁止一切讀寫操作

4.在產(chǎn)生wr_en信號(hào)時(shí),必須和~full信號(hào)進(jìn)行與操作,且必須是組合邏輯,因?yàn)闀r(shí)序邏輯會(huì)延遲一個(gè)寫時(shí)鐘才起作用,可能造成寫滿的情況發(fā)生,示例代碼如下:

reg wr_en_temp; always @(posedge clk) beginif (~rstn)wr_en_temp <= 1'b0;else if (data_valid)wr_en_temp <= 1'b1;elsewr_en_temp <= 1'b0;assign wr_en = ~full && wr_en_temp;

5.與產(chǎn)生wr_en同理,產(chǎn)生rd_en信號(hào)時(shí),必須和~empty信號(hào)進(jìn)行與操作,且必須是組合邏輯,防止讀空的情況發(fā)生,示例代碼如下:

reg rd_en_temp; always @(posedge clk) beginif (~rstn)rd_en_temp <= 1'b0;else if (ready)rd_en_temp <= 1'b1;elserd_en_temp <= 1'b0;assign rd_en = ~empty && rd_en_temp;

七. 工程分享

Xilinx IP解析——FIFO Generator V13.2 Vivado 2021.2工程:

鏈接:https://pan.baidu.com/s/1FIqZx29V2zkiqfib380amw
提取碼:q9fs

總結(jié)

以上是生活随笔為你收集整理的Xilinx IP解析之FIFO Generator v13.2的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。