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

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

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

3天內不再提示

同步FIFO設計(上)

冬至子 ? 來源:兩猿社 ? 作者:IC猿 ? 2023-06-05 14:39 ? 次閱讀

1.介紹

FIFO ,First In First Out,先入先出隊列,顧名思義,即第一個到達的數據也將會是第一個離開。由于同步FIFO的操作速度非常快,并且能 降低系統的復雜性 ,因此在很多高性能系統中是非常理想的選擇。且同步FIFO相比異步FIFO來說實現起來更簡單。所以在實際項目中用得相對較多。

UART項目中也使用了同步FIFO進行數據的緩存,本文主要對此進行講解。

2.FIFO設計

圖片

同步fifo架構,取自《硬件架構的藝術》

根據系統時鐘和響應速度,需要確定 FIFO深度 。本設計中深度設置為15,數據寬度8bit。同步FIFO設計的關鍵在于空滿信號的產生。

設計中rptr為 讀指針 ,指向下一個要讀的地址;wptr為 寫指針 ,同樣指向下一個要寫的地址。有效的讀寫使能使讀寫指針遞增。

wfull為 寫滿信號 ,表示FIFO空間已經寫滿,不能再寫入數據;rempty為 讀空信號 ,表示FIFO內沒有可供讀寫的有效數據。空滿信號的產生是根據讀寫指針(讀寫地址)產生的。

  • FIFO復位

此FIFO模塊中有兩個復位,一個是系統復位rst_,一個是FIFO復位fifo_rst。

系統復位為是整系統復位信號,該系統中所有寄存器會在此復位信號有效時有一個初始值,避免不定態的產生。

FIFO復位信號是同步FIFO的復位信號,只對此模塊有效,該信號有效時讀寫指針會歸0。

滿足FIFO復位單獨可控的設計要求。

  • 空滿信號產生

當FIFO復位信號fifo_rst有效時,讀寫指針會歸零,這時rempty信號會拉起,表示FIFO為空狀態,此時往fifo中寫數據;當fifo中沒有空間可以寫時,寫地址是ram的深度即15,寫指針指向下一個寫地址會回到0,此時fifo為滿狀態,wfull信號拉起。

圖片

空滿產生

可以發現,在讀寫指針相等時,FIFO要么空要么滿。那么我們怎么對空滿狀態進行區分呢?

FIFO深度為15,正常地址應該為4bit[3:0],為了區分空滿狀態,我們將指針設置為5bit[4:0]。

根據上述的空滿狀態產生原理,可以發現:

1) 當FIFO為空時,讀寫指針完全相等;

2) 當FIFO為滿時,讀寫指針的最高位是相反的,而低4位一定相等。

圖片

空滿信號產生

  • FIFO數據狀態指示

由于設計要求FIFO數據量需要可查詢,所以增加一個fifo_cnt,它的值為寫指針與讀指針的差值。表示FIFO中剩余的數據量,作為輸出傳遞到寄存器配置模塊供系統查詢。

最后附上本項目中所用到的同步FIFO代碼,可將FIFO數據位寬和深度參數化,減少改動方便重復調用。另外要養成良好的代碼習慣,多加注釋。

同步FIFO Verilog代碼:

1`timescale 1ns/1ps
 2
 3module    UART_FIFO(
 4    //inputs
 5    clk,
 6    rst_,
 7    fifo_rst,
 8    rinc,
 9    winc,
10    data_i,
11    //outputs
12    data_o,
13    wfull,
14    rempty,
15    fifo_cnt
16);
17
18input           clk;                 // ARM clock
19input           rst_;                // ARM reset
20input           fifo_rst;            // FIFO reset control signal.high active
21input           rinc;                // FIFO read enable signal
22input           winc;                // FIFO write enable signal
23input  [7:0]    data_i;              // in data line
24
25output          wfull;               // write full signal
26output          rempty;              // read empty signal
27output [7:0]    data_o;              // FIFO out data
28output [4:0]    fifo_cnt;            // FIFO statu register
29
30reg  [7:0]      data_o;
31reg  [4:0]      fifo_cnt;
32reg  [4:0]      wptr;                // write pointer
33reg  [4:0]      rptr;                // read pointer
34reg  [7:0]      ram[15:0];           // ram in FIFO
35
36// write data in ram
37always@(posedge clk or negedge rst_) begin
38    if(!rst_) begin
39        data_o <= 8'd0;
40        rptr   <= 5'd0;
41    end
42    else begin
43        if(fifo_rst) begin
44            rptr <= 5'd0;
45        end
46        else begin
47            if(rinc && !rempty) begin
48                data_o <= ram[rptr[3:0]];
49                rptr   <= rptr + 1'b1;
50            end
51        end
52    end
53end
54
55// read data from ram
56always@(posedge clk or negedge rst_) begin
57    if(!rst_) begin
58        wptr <= 5'd0;
59    end
60    else begin
61        if(fifo_rst) begin
62            wptr <= 5'd0;
63        end
64        else begin
65            if(winc && !wfull) begin
66                ram[wptr[3:0]] <= data_i;
67                wptr           <= wptr + 1'b1; 
68            end
69        end
70    end
71end
72
73// the number of data in the FIFO
74always@(posedge clk or negedge rst_) begin
75    if(!rst_) begin
76        fifo_cnt <= 5'd0;
77    end
78    else begin
79        fifo_cnt <= wptr - rptr;
80    end
81end
82
83// produce full and empty signal
84assign    wfull  = ({!wptr[4],wptr[3:0]}==rptr)? 1'b1 : 1'b0;
85assign    rempty = (wptr==rptr)? 1'b1:1'b0;
86
87endmodule
88
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5363

    瀏覽量

    120954
  • RAM
    RAM
    +關注

    關注

    8

    文章

    1369

    瀏覽量

    114899
  • FIFO存儲
    +關注

    關注

    0

    文章

    103

    瀏覽量

    6026
  • UART接口
    +關注

    關注

    0

    文章

    124

    瀏覽量

    15331
收藏 人收藏

    評論

    相關推薦

    同步FIFO設計詳解及代碼分享

    FIFO (先入先出, First In First Out )存儲器,在 FPGA 和數字 IC 設計中非常常用。 根據接入的時鐘信號,可以分為同步 FIFO 和異步 FIFO
    發表于 06-27 10:24 ?2191次閱讀
    <b class='flag-5'>同步</b><b class='flag-5'>FIFO</b>設計詳解及代碼分享

    握手型接口的同步FIFO實現

    按照正常的思路,在前文完成前向時序優化和后向時序優化后,后面緊跟的應該是雙向時序優化策略了,不過不急,需要先實現一下握手型同步FIFO
    的頭像 發表于 12-04 14:03 ?788次閱讀
    握手型接口的<b class='flag-5'>同步</b><b class='flag-5'>FIFO</b>實現

    異步FIFO的設計分析及詳細代碼

    (每個數據的位寬) FIFO同步和異步兩種,同步即讀寫時鐘相同,異步即讀寫時鐘不相同 同步FIFO用的少,可以作為數據緩存 異步
    發表于 11-15 12:52 ?8693次閱讀
    異步<b class='flag-5'>FIFO</b>的設計分析及詳細代碼

    FPGA之FIFO練習3:設計思路

    根據FIFO工作的時鐘域,可以將FIFO分為同步FIFO和異步FIFO同步
    的頭像 發表于 11-29 07:08 ?1900次閱讀

    同步FIFO之Verilog實現

    FIFO的分類根均FIFO工作的時鐘域,可以將FIFO分為同步FIFO和異步FIFO
    的頭像 發表于 11-01 09:57 ?2044次閱讀

    異步FIFO之Verilog代碼實現案例

    同步FIFO的意思是說FIFO的讀寫時鐘是同一個時鐘,不同于異步FIFO,異步FIFO的讀寫時鐘是完全異步的。
    發表于 11-01 09:58 ?1716次閱讀

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

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

    FIFO設計—同步FIFO

    FIFO是異步數據傳輸時常用的存儲器,多bit數據異步傳輸時,無論是從快時鐘域到慢時鐘域,還是從慢時鐘域到快時鐘域,都可以使用FIFO處理。
    發表于 05-26 16:12 ?1548次閱讀
    <b class='flag-5'>FIFO</b>設計—<b class='flag-5'>同步</b><b class='flag-5'>FIFO</b>

    FIFO設計—異步FIFO

    異步FIFO主要由五部分組成:寫控制端、讀控制端、FIFO Memory和兩個時鐘同步
    發表于 05-26 16:17 ?1574次閱讀
    <b class='flag-5'>FIFO</b>設計—異步<b class='flag-5'>FIFO</b>

    一個簡單的RTL同步FIFO設計

    FIFO 是FPGA設計中最有用的模塊之一。FIFO 在模塊之間提供簡單的握手和同步機制,是設計人員將數據從一個模塊傳輸到另一個模塊的常用選擇。
    發表于 06-14 08:59 ?475次閱讀

    基于寄存器的同步FIFO

    ? FIFO 是FPGA設計中最有用的模塊之一。FIFO 在模塊之間提供簡單的握手和同步機制,是設計人員將數據從一個模塊傳輸到另一個模塊的常用選擇。 在這篇文章中,展示了一個簡單的 RTL
    的頭像 發表于 06-14 09:02 ?793次閱讀

    基于Verilog的同步FIFO的設計方法

    同步FIFO的設計主要包括讀寫地址的產生、數據的讀寫、以及狀態的控制。下面我們將分別介紹這三個方面的設計。
    發表于 08-31 12:53 ?910次閱讀

    同步FIFO設計分析

    模塊雖小但是要有新意,首先寫一個同步FIFO,這是一個爛大街的入門級項目,但是我肯定不會寫的那么簡單
    的頭像 發表于 09-11 17:11 ?667次閱讀
    <b class='flag-5'>同步</b><b class='flag-5'>FIFO</b>設計分析

    同步FIFO和異步FIFO的區別 同步FIFO和異步FIFO各在什么情況下應用

    同步FIFO和異步FIFO的區別 同步FIFO和異步FIFO各在什么情況下應用? 1.
    的頭像 發表于 10-18 15:23 ?1749次閱讀

    同步FIFO和異步FIFO區別介紹

    ,并且間隔時間長,也就是突發寫入。那么通過設置一定深度的FIFO,可以起到數據暫存的功能,且使得后續處理流程平滑。 時鐘域的隔離:主要用異步FIFO。對于不同時鐘域的數據傳輸,可以通過FIFO進行隔離,避免跨時鐘域的數據傳輸帶來
    的頭像 發表于 06-04 14:27 ?1778次閱讀
    <b class='flag-5'>同步</b><b class='flag-5'>FIFO</b>和異步<b class='flag-5'>FIFO</b>區別介紹
    主站蜘蛛池模板: 国产精品久久久久久久久久影院 | 蜜芽国产在线精品欧美 | 久久热在线视频精品 | 少妇人妻偷人精品视蜜桃 | 古代又黄又肉到湿的爽文 | 色中色最新地址登陆 | 大学生高潮无套内谢视频 | 99久久伊人一区二区yy5099 | 青青草原网址 | 国产精品热久久高潮AV袁孑怡 | 女人一级毛片免费视频观看 | 在线亚洲精品福利网址导航 | 久久99影院| 日韩在线av免费视久久 | 成人在线视频观看 | 女人张腿让男人桶免费 | 极品色αv影院 | 亚洲视频在线观看地址 | 久久精品无码人妻无码AV蜜臀 | 日韩精品一区二区亚洲AV观看 | 一受n攻高h全肉np | 两个洞一起插哦!好刺激 | 丰满人妻妇伦又伦精品APP国产 | 色女仆影院 | 2224x最新网站 | 国产超碰人人爱被IOS解锁 | 97色香蕉在线 | 一区二区三区无码被窝影院 | 亚洲精品不卡在线 | 忘忧草直播 | 被滋润的艳妇疯狂呻吟白洁老七 | 嫩草www视频在线观看高清 | 亚洲欧美日韩中字视频三区 | 俄罗斯aaaaa一级毛片 | 欧美AAAAAA级午夜福利视频 | 99久久免费看少妇高潮A片 | 亚洲欧洲久久 | 日本又黄又裸一级大黄裸片 | 日韩人妻少妇一区二区三区 | 欧美一级成人影院免费的 | 久久久久99精品成人片三人毛片 |