RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

冬至子 ? 來(lái)源:FPGA開(kāi)發(fā)備忘錄 ? 作者:小創(chuàng) ? 2023-04-25 15:55 ? 次閱讀

1

定義

FIFO(First In First Out )先入先出存儲(chǔ)器,在FPG設(shè)計(jì)中常用于跨時(shí)鐘域的處理,F(xiàn)IFO可簡(jiǎn)單分為同步FIFO和異步FIFO。同步FIFO可理解為讀寫(xiě)時(shí)鐘同源且頻率相同的FIFO,異步FIFO為讀寫(xiě)時(shí)鐘不同源,時(shí)鐘頻率不一樣的FIFO。

2

同步FIFO的仿真

該仿真基于XIlinx的fifo generator13.2進(jìn)行設(shè)計(jì),IP core的配置如下。

圖片

由圖所示,時(shí)鐘模式配置為common clock,F(xiàn)IFO深度為16,F(xiàn)IFO數(shù)據(jù)位寬為36bit,其中32bit為數(shù)據(jù)位寬,4bit為用戶自定義比特tuser。下圖為FIFO例化的IPcore。

圖片

理論情況下FIFO的數(shù)據(jù)傳輸時(shí)序如下

圖片

當(dāng)復(fù)位拉高后,F(xiàn)IFO模塊若沒(méi)有滿,s_axis_tready信號(hào)會(huì)拉高,然后用戶將s_axis_valid信號(hào)拉高就可以向FIFO里面寫(xiě)入有效的數(shù)據(jù)了,這就發(fā)起了寫(xiě)操作;此時(shí)在主端口用戶可將m_axis_tready拉高,F(xiàn)IFO若不為空,則m_tvalid信號(hào)會(huì)拉高,此時(shí)就可以源源不斷的從FIFO里讀出數(shù)據(jù)了,這就發(fā)起了讀操作。

下面討論下在同步FIFO中的兩種情況

2.1 讀寫(xiě)時(shí)鐘為100M,m_axis_tready在m_axis_tvaild后,此時(shí)的仿真圖如下所示。

圖片

由上圖所示,在用戶側(cè)還未將m_axis_tready拉高之前,valid到來(lái)后,F(xiàn)IFO輸出的數(shù)據(jù)就不為0了,而是FIFO中存入的第一個(gè)數(shù)據(jù),一直到用戶將m_axis_tready拉高,才會(huì)輸出FIFO里的下一個(gè)數(shù)據(jù)。所以并不是我們理解的,只有用戶發(fā)起FIFO讀,F(xiàn)IFO才會(huì)輸出數(shù)據(jù)。

2.2 讀寫(xiě)時(shí)鐘為100M,m_axis_tready在m_axis_tvaild前,此時(shí)的仿真圖如下所示。

圖片

由上圖所示,在FIFO的valid數(shù)據(jù)到來(lái)之前,我們先將tready拉高,這樣就不會(huì)在讀操作之前FIFO就吐出數(shù)據(jù)了。在做設(shè)計(jì)時(shí),將復(fù)位拉高后,隨即將tready拉高即可。

3

** 異步FIFO的仿真**

做異步FIFO時(shí),IPCORE的配置如下圖所示

圖片

時(shí)鐘模式配置為independent clock,F(xiàn)IFO深度為16,F(xiàn)IFO數(shù)據(jù)位寬為36bit,其中32bit為數(shù)據(jù)位寬,4bit為用戶自定義比特tuser。

理論情況下FIFO的數(shù)據(jù)傳輸時(shí)序如下

圖片

由上圖所示,讀速率是寫(xiě)速率的1/2,因此寫(xiě)不是連續(xù)的,讀速率是連續(xù)的。下面分幾個(gè)情況進(jìn)行討論。

3.1 寫(xiě)為100M讀為30.3M,m_trady在m_tvaild前

圖片

由上圖所示,寫(xiě)數(shù)據(jù)也不連續(xù),s_tready為周期性有效,切換周期和讀時(shí)鐘周期一樣,其中高電平時(shí)間為一個(gè)寫(xiě)數(shù)據(jù)時(shí)鐘周期。

3.2 寫(xiě)為50M讀為100M,m_trady在m_tvaild前

圖片

由上圖所示,此時(shí)讀數(shù)據(jù)不連續(xù),m_tvalid為周期性有效,切換周期和寫(xiě)時(shí)鐘周期一樣,其中高電平時(shí)間為一個(gè)讀數(shù)據(jù)時(shí)鐘周期。

4

對(duì)不同深度配置進(jìn)行討論

4.1當(dāng)FIFO深度為16時(shí)

圖片

由上圖可知,若讀數(shù)據(jù)不及時(shí),比較滯后,則FIFO可以存入15個(gè)數(shù)據(jù),當(dāng)FIFO滿后,s_axis_tready拉低,不能繼續(xù)寫(xiě)FIFO,當(dāng)讀操作開(kāi)始時(shí),F(xiàn)IFO將從存入的第一個(gè)數(shù)據(jù)依次輸出。

4.2 當(dāng)fifo為32時(shí)

圖片

由上圖可知,若讀數(shù)據(jù)不及時(shí),比較滯后,則FIFO可以存入33個(gè)數(shù)據(jù),當(dāng)FIFO滿后,s_axis_tready拉低,不能繼續(xù)寫(xiě)FIFO,當(dāng)讀操作開(kāi)始時(shí),F(xiàn)IFO將從存入的第一個(gè)數(shù)據(jù)依次輸出。

5

在仿真時(shí)遇到的問(wèn)題

圖片

在仿真時(shí)提示說(shuō)t_user管腳找不到,但打開(kāi)代碼和block_design看了下,該端口是存在的,后面把block_design刪掉,重新例化新模塊后,問(wèn)題解決,目前不知道是什么問(wèn)題導(dǎo)致。

6

激勵(lì)文件

`timescale 1ns / 1ps
module tb_fifo( );
reg [31:0] s_axis_tdata ; 
wire       s_axis_tready;
reg        s_axis_tvalid;
reg [3:0]  s_axis_tuser ;     
reg        m_aclk       ;      
reg        s_aclk       ;       
reg        s_aresetn    ;  
wire [31:0] m_axis_tdata ; 
reg         m_axis_tready;
wire        m_axis_tvalid;
wire [3:0]  m_axis_tuser ;


initial begin 
  s_aresetn = 1'b0;
  s_axis_tdata = 32'h0000_0001;
  s_axis_tvalid = 1'b0;
  m_aclk =1'b1;
  s_aclk =1'b1;
  s_axis_tuser = 4'b1010;
  #50
  s_aresetn = 1'b1;
  #10
  s_axis_tvalid = 1'b1;
end


initial begin
  m_axis_tready = 1'b0;
  #340
  m_axis_tready= 1'b1;
end
always #10 s_aclk = ~s_aclk;
always #5 m_aclk = ~m_aclk;


always @(posedge s_aclk) begin
  s_axis_tdata = s_axis_tdata +1'b1;
end


design_1_wrapper tb_design_fifo_wrapper (
  .S_AXIS_0_tdata (s_axis_tdata ),
  .S_AXIS_0_tready(s_axis_tready),
  .S_AXIS_0_tvalid(s_axis_tvalid),
  .S_AXIS_0_tuser (s_axis_tuser ),
  .m_aclk_0       (m_aclk       ),
  .s_aclk_0       (s_aclk       ),
  .s_aresetn_0    (s_aresetn    ),
  .M_AXIS_0_tdata (m_axis_tdata ),
  .M_AXIS_0_tready(m_axis_tready),
  .M_AXIS_0_tvalid(m_axis_tvalid),
  .M_AXIS_0_tuser (m_axis_tuser)
);
endmodule

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA設(shè)計(jì)
    +關(guān)注

    關(guān)注

    9

    文章

    428

    瀏覽量

    26506
  • 存儲(chǔ)器
    +關(guān)注

    關(guān)注

    38

    文章

    7484

    瀏覽量

    163760
  • FIFO存儲(chǔ)
    +關(guān)注

    關(guān)注

    0

    文章

    103

    瀏覽量

    5968
  • 時(shí)鐘源
    +關(guān)注

    關(guān)注

    0

    文章

    93

    瀏覽量

    15956
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Efinity FIFO IP仿真問(wèn)題 -v1

    Efinity目前不支持聯(lián)合仿真,只能通過(guò)調(diào)用源文件仿真。 我們生成一個(gè)fifo IP命名為fifo_sim 在Deliverables中保留Testbench的選項(xiàng)。 在IP的生成目
    的頭像 發(fā)表于 10-21 11:41 ?980次閱讀
    Efinity <b class='flag-5'>FIFO</b> IP<b class='flag-5'>仿真</b>問(wèn)題 -v1

    異步FIFO結(jié)構(gòu)及FPGA設(shè)計(jì)

    首先介紹異步FIFO 的概念、應(yīng)用及其結(jié)構(gòu),然后分析實(shí)現(xiàn)異步FIFO的難點(diǎn)問(wèn)題及其解決辦法; 在傳統(tǒng)設(shè)計(jì)的基礎(chǔ)上提出一種新穎的電路結(jié)構(gòu)并對(duì)其
    發(fā)表于 04-16 09:25 ?46次下載

    基于LPM的高速FIFO的設(shè)計(jì)

    利用參數(shù)可設(shè)置模塊庫(kù)(LPM)中的兆功能模塊,根據(jù)實(shí)際系統(tǒng)的需要,對(duì)其參數(shù)進(jìn)行必要的調(diào)整設(shè)置,介紹了一個(gè)高速FIFO 存儲(chǔ)器的設(shè)計(jì)方法和步驟,給出了仿真結(jié)果,方便實(shí)用。
    發(fā)表于 09-02 09:33 ?26次下載

    異步FIFO結(jié)構(gòu)

    設(shè)計(jì)一個(gè)FIFO是ASIC設(shè)計(jì)者遇到的最普遍的問(wèn)題之一。本文著重介紹怎樣設(shè)計(jì)FIFO——這是一個(gè)看似簡(jiǎn)單卻很復(fù)雜的任務(wù)。一開(kāi)始,要注意,FIFO通常用于時(shí)鐘域的過(guò)渡,是雙時(shí)鐘設(shè)計(jì)
    發(fā)表于 10-15 08:44 ?94次下載

    高速異步FIFO的設(shè)計(jì)與實(shí)現(xiàn)

    本文主要研究了用FPGA 芯片內(nèi)部的EBRSRAM 來(lái)實(shí)現(xiàn)異步FIFO 設(shè)計(jì)方案,重點(diǎn)闡述了異步FIFO 的標(biāo)志信號(hào)——空/滿狀態(tài)的設(shè)計(jì)思路,并且用VHDL 語(yǔ)言實(shí)現(xiàn),最后進(jìn)行了仿真驗(yàn)證。
    發(fā)表于 01-13 17:11 ?40次下載

    異步FIFO結(jié)構(gòu)及FPGA設(shè)計(jì)

    摘要:首先介紹異步FIFO的概念、應(yīng)用及其結(jié)構(gòu),然后分析實(shí)現(xiàn)異步FIFO的難點(diǎn)問(wèn)題及其解決辦法;在傳統(tǒng)設(shè)計(jì)的基礎(chǔ)上提出一種新穎的電路結(jié)構(gòu)并對(duì)
    發(fā)表于 06-20 12:46 ?3864次閱讀
    異步<b class='flag-5'>FIFO</b>結(jié)構(gòu)及FPGA設(shè)計(jì)

    嵌入式 FIFO 數(shù)據(jù)傳輸系統(tǒng)設(shè)計(jì)

    本文以dMAX和EMIF接口的數(shù)據(jù)傳輸為例,介紹嵌入式FIFO的設(shè)計(jì)、配置及其使用。
    發(fā)表于 06-23 17:19 ?1211次閱讀
    嵌入式 <b class='flag-5'>FIFO</b> 數(shù)據(jù)傳輸系統(tǒng)設(shè)計(jì)

    SVPWM原理及其Simulink仿真

    SVPWM原理及其Simulink仿真
    發(fā)表于 04-15 17:49 ?71次下載

    基于FLASH的FIFO讀寫(xiě)

    基于FLASH的FIFO讀寫(xiě),介紹的比較詳細(xì),值得一讀。
    發(fā)表于 04-28 10:30 ?22次下載

    LED照明節(jié)電裝置的技術(shù)要求及其應(yīng)用條件介紹

    本文介紹了照明節(jié)電裝置及其應(yīng)用技術(shù)的條件分析。
    發(fā)表于 10-23 16:54 ?2次下載
    LED照明節(jié)電裝置的技術(shù)要求<b class='flag-5'>及其</b>應(yīng)用<b class='flag-5'>條件</b>的<b class='flag-5'>介紹</b>

    以太網(wǎng)基礎(chǔ)介紹:MAC地址,FIFO, DMA

    介紹了STM32中以太網(wǎng)外設(shè)的特性:MAC地址,FIFO, DMA
    的頭像 發(fā)表于 07-03 05:04 ?7728次閱讀

    系統(tǒng)仿真及其Matlab實(shí)現(xiàn)

    系統(tǒng)仿真及其Matlab的實(shí)現(xiàn)方法介紹。
    發(fā)表于 06-17 17:13 ?27次下載

    FIFO的使用介紹

    FIFO的使用非常廣泛,一般用于不同時(shí)鐘域之間的數(shù)據(jù)傳輸,或者用于不同數(shù)據(jù)寬度之間的數(shù)據(jù)匹配。在實(shí)際的工程應(yīng)用,可以根據(jù)需要自己寫(xiě)FIFO。不考慮資源的情況下,也可以使用Xilinx提供的IP核來(lái)完成。
    的頭像 發(fā)表于 08-14 10:49 ?5192次閱讀

    同步FIFO和異步FIFO的區(qū)別 同步FIFO和異步FIFO各在什么情況下應(yīng)用

    同步FIFO和異步FIFO的區(qū)別 同步FIFO和異步FIFO各在什么情況下應(yīng)用? 1. 同步FIFO和異步
    的頭像 發(fā)表于 10-18 15:23 ?1681次閱讀

    同步FIFO和異步FIFO區(qū)別介紹

    1. FIFO簡(jiǎn)介 FIFO是一種先進(jìn)先出數(shù)據(jù)緩存器,它與普通存儲(chǔ)器的區(qū)別是沒(méi)有外部讀寫(xiě)地址線,使用起來(lái)非常簡(jiǎn)單,缺點(diǎn)是只能順序讀寫(xiě),而不能隨機(jī)讀寫(xiě)。 2. 使用場(chǎng)景 數(shù)據(jù)緩沖:也就是數(shù)據(jù)寫(xiě)入過(guò)快
    的頭像 發(fā)表于 06-04 14:27 ?1563次閱讀
    同步<b class='flag-5'>FIFO</b>和異步<b class='flag-5'>FIFO</b>區(qū)別<b class='flag-5'>介紹</b>
    RM新时代网站-首页