一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

同步FIFO設(shè)計(jì)(上)

冬至子 ? 來源:兩猿社 ? 作者:IC猿 ? 2023-06-05 14:39 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1.介紹

FIFO ,F(xiàn)irst In First Out,先入先出隊(duì)列,顧名思義,即第一個(gè)到達(dá)的數(shù)據(jù)也將會(huì)是第一個(gè)離開。由于同步FIFO的操作速度非???,并且能 降低系統(tǒng)的復(fù)雜性 ,因此在很多高性能系統(tǒng)中是非常理想的選擇。且同步FIFO相比異步FIFO來說實(shí)現(xiàn)起來更簡(jiǎn)單。所以在實(shí)際項(xiàng)目中用得相對(duì)較多。

UART項(xiàng)目中也使用了同步FIFO進(jìn)行數(shù)據(jù)的緩存,本文主要對(duì)此進(jìn)行講解。

2.FIFO設(shè)計(jì)

圖片

同步fifo架構(gòu),取自《硬件架構(gòu)的藝術(shù)》

根據(jù)系統(tǒng)時(shí)鐘和響應(yīng)速度,需要確定 FIFO深度 。本設(shè)計(jì)中深度設(shè)置為15,數(shù)據(jù)寬度8bit。同步FIFO設(shè)計(jì)的關(guān)鍵在于空滿信號(hào)的產(chǎn)生。

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

wfull為 寫滿信號(hào) ,表示FIFO空間已經(jīng)寫滿,不能再寫入數(shù)據(jù);rempty為 讀空信號(hào) ,表示FIFO內(nèi)沒有可供讀寫的有效數(shù)據(jù)??諠M信號(hào)的產(chǎn)生是根據(jù)讀寫指針(讀寫地址)產(chǎn)生的。

  • FIFO復(fù)位

此FIFO模塊中有兩個(gè)復(fù)位,一個(gè)是系統(tǒng)復(fù)位rst_,一個(gè)是FIFO復(fù)位fifo_rst。

系統(tǒng)復(fù)位為是整系統(tǒng)復(fù)位信號(hào),該系統(tǒng)中所有寄存器會(huì)在此復(fù)位信號(hào)有效時(shí)有一個(gè)初始值,避免不定態(tài)的產(chǎn)生。

FIFO復(fù)位信號(hào)是同步FIFO的復(fù)位信號(hào),只對(duì)此模塊有效,該信號(hào)有效時(shí)讀寫指針會(huì)歸0。

滿足FIFO復(fù)位單獨(dú)可控的設(shè)計(jì)要求。

  • 空滿信號(hào)產(chǎn)生

當(dāng)FIFO復(fù)位信號(hào)fifo_rst有效時(shí),讀寫指針會(huì)歸零,這時(shí)rempty信號(hào)會(huì)拉起,表示FIFO為空狀態(tài),此時(shí)往fifo中寫數(shù)據(jù);當(dāng)fifo中沒有空間可以寫時(shí),寫地址是ram的深度即15,寫指針指向下一個(gè)寫地址會(huì)回到0,此時(shí)fifo為滿狀態(tài),wfull信號(hào)拉起。

圖片

空滿產(chǎn)生

可以發(fā)現(xiàn),在讀寫指針相等時(shí),F(xiàn)IFO要么空要么滿。那么我們?cè)趺磳?duì)空滿狀態(tài)進(jìn)行區(qū)分呢?

FIFO深度為15,正常地址應(yīng)該為4bit[3:0],為了區(qū)分空滿狀態(tài),我們將指針設(shè)置為5bit[4:0]。

根據(jù)上述的空滿狀態(tài)產(chǎn)生原理,可以發(fā)現(xiàn):

1) 當(dāng)FIFO為空時(shí),讀寫指針完全相等;

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

圖片

空滿信號(hào)產(chǎn)生

  • FIFO數(shù)據(jù)狀態(tài)指示

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

最后附上本項(xiàng)目中所用到的同步FIFO代碼,可將FIFO數(shù)據(jù)位寬和深度參數(shù)化,減少改動(dòng)方便重復(fù)調(diào)用。另外要養(yǎng)成良好的代碼習(xí)慣,多加注釋。

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

    關(guān)注

    31

    文章

    5433

    瀏覽量

    124341
  • RAM
    RAM
    +關(guān)注

    關(guān)注

    8

    文章

    1392

    瀏覽量

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

    關(guān)注

    0

    文章

    103

    瀏覽量

    6186
  • UART接口
    +關(guān)注

    關(guān)注

    0

    文章

    124

    瀏覽量

    15863
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    同步FIFO設(shè)計(jì)詳解及代碼分享

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

    握手型接口的同步FIFO實(shí)現(xiàn)

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

    異步FIFO的設(shè)計(jì)分析及詳細(xì)代碼

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

    FPGA之FIFO練習(xí)3:設(shè)計(jì)思路

    根據(jù)FIFO工作的時(shí)鐘域,可以將FIFO分為同步FIFO和異步FIFO。同步
    的頭像 發(fā)表于 11-29 07:08 ?2090次閱讀

    同步FIFO之Verilog實(shí)現(xiàn)

    FIFO的分類根均FIFO工作的時(shí)鐘域,可以將FIFO分為同步FIFO和異步FIFO。
    的頭像 發(fā)表于 11-01 09:57 ?2357次閱讀

    異步FIFO之Verilog代碼實(shí)現(xiàn)案例

    同步FIFO的意思是說FIFO的讀寫時(shí)鐘是同一個(gè)時(shí)鐘,不同于異步FIFO,異步FIFO的讀寫時(shí)鐘是完全異步的。
    發(fā)表于 11-01 09:58 ?1979次閱讀

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

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

    FIFO設(shè)計(jì)—同步FIFO

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

    FIFO設(shè)計(jì)—異步FIFO

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

    一個(gè)簡(jiǎn)單的RTL同步FIFO設(shè)計(jì)

    FIFO 是FPGA設(shè)計(jì)中最有用的模塊之一。FIFO 在模塊之間提供簡(jiǎn)單的握手和同步機(jī)制,是設(shè)計(jì)人員將數(shù)據(jù)從一個(gè)模塊傳輸?shù)搅硪粋€(gè)模塊的常用選擇。
    發(fā)表于 06-14 08:59 ?598次閱讀

    基于寄存器的同步FIFO

    ? FIFO 是FPGA設(shè)計(jì)中最有用的模塊之一。FIFO 在模塊之間提供簡(jiǎn)單的握手和同步機(jī)制,是設(shè)計(jì)人員將數(shù)據(jù)從一個(gè)模塊傳輸?shù)搅硪粋€(gè)模塊的常用選擇。 在這篇文章中,展示了一個(gè)簡(jiǎn)單的 RTL
    的頭像 發(fā)表于 06-14 09:02 ?1068次閱讀

    基于Verilog的同步FIFO的設(shè)計(jì)方法

    同步FIFO的設(shè)計(jì)主要包括讀寫地址的產(chǎn)生、數(shù)據(jù)的讀寫、以及狀態(tài)的控制。下面我們將分別介紹這三個(gè)方面的設(shè)計(jì)。
    發(fā)表于 08-31 12:53 ?1234次閱讀

    同步FIFO設(shè)計(jì)分析

    模塊雖小但是要有新意,首先寫一個(gè)同步FIFO,這是一個(gè)爛大街的入門級(jí)項(xiàng)目,但是我肯定不會(huì)寫的那么簡(jiǎn)單
    的頭像 發(fā)表于 09-11 17:11 ?902次閱讀
    <b class='flag-5'>同步</b><b class='flag-5'>FIFO</b>設(shè)計(jì)分析

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

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

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

    ,并且間隔時(shí)間長,也就是突發(fā)寫入。那么通過設(shè)置一定深度的FIFO,可以起到數(shù)據(jù)暫存的功能,且使得后續(xù)處理流程平滑。 時(shí)鐘域的隔離:主要用異步FIFO。對(duì)于不同時(shí)鐘域的數(shù)據(jù)傳輸,可以通過FIFO進(jìn)行隔離,避免跨時(shí)鐘域的數(shù)據(jù)傳輸帶來
    的頭像 發(fā)表于 06-04 14:27 ?2646次閱讀
    <b class='flag-5'>同步</b><b class='flag-5'>FIFO</b>和異步<b class='flag-5'>FIFO</b>區(qū)別介紹