chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

跨時(shí)鐘設(shè)計(jì):異步FIFO設(shè)計(jì)

sanyue7758 ? 來(lái)源:IC的世界 ? 2023-07-31 11:10 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1、異步FIFO

ASIC設(shè)計(jì)或者FPGA設(shè)計(jì)中,我們常常使用異步fifo(first in first out)(下文簡(jiǎn)稱(chēng)為afifo)進(jìn)行數(shù)據(jù)流的跨時(shí)鐘,可以說(shuō)沒(méi)使用過(guò)afifo的Designer,其設(shè)計(jì)經(jīng)歷是不完整的。廢話不多說(shuō),直接上接口信號(hào)說(shuō)明。

2、afifo接口信號(hào)說(shuō)明

如下表格為常見(jiàn)的afifo接口信號(hào),非必須指的部分場(chǎng)景的afifo可能不存在此信號(hào)。不同公司對(duì)afifo接口的設(shè)計(jì)可能不一樣,但是基本都包含了如下接口:wr表示write,寫(xiě)側(cè)時(shí)鐘域信號(hào),rd表示read,讀側(cè)時(shí)鐘域信號(hào)。

信號(hào)名稱(chēng) 位寬 必要性 含義
almost_full 1 非必須 將滿信號(hào),1表示afifo快滿了,當(dāng)afifo的有效數(shù)量大于配置時(shí),置1
full 1 非必須 afifo滿信號(hào),1表示afifo已滿
empty 1 非必須 1表示
rd_data [DATA_WIDTH-1:0] 必須 有效數(shù)據(jù)
ovf_int 1 非必須 1表示上溢出,即afifo滿了還有數(shù)據(jù)寫(xiě)入
udf_int 1 非必須 1表示下溢出,即afifo空了外部邏輯還產(chǎn)生了讀使能
data_count [ADDR_WIDTH:0] 非必須 afifo存儲(chǔ)的數(shù)據(jù)量
cfg_almost_full_value [ADDR_WIDTH:0] 非必須 將滿配置信號(hào),一般由配置寄存器模塊提供驅(qū)動(dòng)
wr_rst_n 1 必須 寫(xiě)側(cè)復(fù)位
wr_clk 1 必須 寫(xiě)側(cè)時(shí)鐘
wr_en 1 必須 寫(xiě)使能,1表示有數(shù)據(jù)寫(xiě)入
wr_data [DATA_WIDTH-1:0] 必須 寫(xiě)數(shù)據(jù)
rd_rst_n 1 必須 讀時(shí)鐘與復(fù)位
rd_clk 1 必須 讀時(shí)鐘
rd_en 1 必須 讀使能

3、設(shè)計(jì)原理

為了方便描述,本章節(jié)將以深度為8的afifo進(jìn)行講解,其中讀寫(xiě)地址位寬為3,格雷碼地址位寬為4。

7cc25bde-2ee5-11ee-815d-dac502259ad0.png

圖1 afifo結(jié)構(gòu)圖(來(lái)自eetop ThinkSpark)

7cedfa82-2ee5-11ee-815d-dac502259ad0.png

7d12f972-2ee5-11ee-815d-dac502259ad0.png

圖2:讀寫(xiě)地址計(jì)算圖

(1)存儲(chǔ)模塊:

中間區(qū)域?yàn)閙emory存儲(chǔ)模塊,用于存儲(chǔ)數(shù)據(jù)data,要么是1R1W的ram,要么是普通的寄存器。項(xiàng)目自研代碼中,存儲(chǔ)模塊通常使用1R1W的ram,其需要memory生成器生成,需要與制造工藝匹配。而在soft IP中,針對(duì)小規(guī)格的afifo,為了方便,常常使用寄存器作為afifo的存儲(chǔ)。

(2)寫(xiě)地址產(chǎn)生邏輯

寫(xiě)地址waddr在wr_clk時(shí)鐘域產(chǎn)生,有兩個(gè)作用,作為存儲(chǔ)模塊的寫(xiě)地址并且產(chǎn)生格雷碼waddr_gray。此種需要注意:waddr是遞增的,且會(huì)翻轉(zhuǎn)。如果afifo深度為8(n),則waddr位寬為3(log2(n) ),waddr計(jì)數(shù)到7后,再次寫(xiě)入則翻轉(zhuǎn)為0。

(3)讀地址產(chǎn)生邏輯

讀地址raddr在rd_clk時(shí)鐘域產(chǎn)生,有兩個(gè)作用,作為存儲(chǔ)模塊的讀地址并且產(chǎn)生格雷碼raddr_gray。此種需要注意:raddr是遞增的,且會(huì)翻轉(zhuǎn)。如果afifo深度為8(n),則raddr位寬為3(log2(n) ),raddr計(jì)數(shù)到7后,再次讀出則翻轉(zhuǎn)為0。

(4)讀地址同步

使用2級(jí)或者3級(jí)單bit同步器Synchronizer將讀地址格雷碼raddr_gray同步到wr_clk時(shí)鐘域得到raddr_gray_sync,raddr_gray_sync進(jìn)行格雷碼逆轉(zhuǎn)成二進(jìn)制編碼得到raddr_sync,用于產(chǎn)生將滿信號(hào)和滿信號(hào)。

在fpga設(shè)計(jì)中,2級(jí)單bit同步器Synchronizer就是2個(gè)串聯(lián)的寄存器,在ASIC設(shè)計(jì)中,通常是定制的cell(會(huì)將兩個(gè)/三個(gè)寄存器擺放靠得很近)。

(5)寫(xiě)地址同步器

使用2級(jí)或者3級(jí)單bit同步器Synchronizer將寫(xiě)地址格雷碼waddr_gray同步到rd_clk時(shí)鐘域得到waddr_gray_sync,waddr_gray_sync進(jìn)行格雷碼逆轉(zhuǎn)成二進(jìn)制編碼得到waddr_sync,用于產(chǎn)生將空信號(hào)和空信號(hào)。

(6)滿信號(hào)產(chǎn)生邏輯

此模塊首先計(jì)算在wr_clk時(shí)鐘域的剩余可寫(xiě)afifo深度,即wr_gap[3:0]=raddr_sync[2:0]+4’d8(FIFO深度)-waddr[2:0],然后根據(jù)wr_gap[3:0]產(chǎn)生amost_full和full信號(hào)

always @(posedge wr_clk or negedge wr_rst_n)
    if(~wr_rst_n)
        full <= 1'b0;
    else
        full <= (!(|wr_gap)) || ((wr_gap==1)&wr_en);
always @(posedge wr_clk or negedge wr_rst_n)
    if(~wr_rst_n) 
        begin
            almost_full <= 1'b0;
        end
    else
        begin
            if( wr_data_cnt>=cfg_almost_full_value )
                    almost_full <= 1'b1;
            else
                    almost_full <= almost_full;
        end

(7)空信號(hào)產(chǎn)生邏輯

此模塊首先計(jì)算在rd_clk時(shí)鐘域的可讀afifo深度,即assign {ovf_nc1,rd_gap} = waddr_sync - raddr,然后根據(jù)rd_gap[3:0]產(chǎn)生empty信號(hào)。

always @(posedge rd_clk or negedge rd_rst_n)
    if(~rd_rst_n)
        empty <= 1'b1;
    else 
        empty <= (!(|rd_gap)) || ((rd_gap==1)&rd_en);? ? ? ? ?

4、重點(diǎn)說(shuō)明

(1)格雷碼的優(yōu)勢(shì)

格雷碼的特點(diǎn)就是在遞增,遞減,或者翻轉(zhuǎn)過(guò)程中,只會(huì)有1個(gè)bit位發(fā)生變化。因此單bit同步器Synchronizer同步后,只有存在變化的那一個(gè)bit可能會(huì)發(fā)生亞穩(wěn)態(tài)。即使發(fā)生了亞穩(wěn)態(tài),體現(xiàn)的結(jié)果要么是0,要么是1,在格雷碼上的同步效果就是當(dāng)前clk周期沒(méi)有同步(相當(dāng)于delay了一個(gè)目的周期)到或者當(dāng)前周期已采樣到。

同時(shí)它也有自己的局限性,那就是循環(huán)計(jì)數(shù)深度必須是2的n次冪(也可以不是2的n次冪哦),否則就失去了每次只變化一位的特性。深度為16的二進(jìn)制及格雷碼遞變表如下:

Binary Gray

0 0000 0000

1 0001 0001

2 0010 0011

3 0011 0010

4 0100 0110

5 0101 0111

6 0110 0101

7 0111 0100

8 1000 1100

9 1001 1101

10 1010 1111

11 1011 1110

12 1100 1010

13 1101 1011

14 1110 1001

15 1111 1000

0 0000 0000

(2)空信號(hào)計(jì)算方法的妙處

在rd_clk時(shí)鐘域計(jì)算可讀數(shù)據(jù)量以及empty信號(hào),看圖2會(huì)發(fā)現(xiàn),實(shí)際rd_gap永遠(yuǎn)小于等于真實(shí)可讀數(shù)據(jù)量,能夠保證empty為0時(shí)永遠(yuǎn)不會(huì)發(fā)生空讀現(xiàn)象,即afifo沒(méi)有數(shù)據(jù),也進(jìn)行了讀操作。

(3)滿信號(hào)計(jì)算方法的妙處

在wd_clk時(shí)鐘域計(jì)算可寫(xiě)數(shù)據(jù)量以及full信號(hào),看圖2會(huì)發(fā)現(xiàn),實(shí)際wr_gap永遠(yuǎn)小于等于真實(shí)可寫(xiě)數(shù)據(jù)量,能夠保證full為0時(shí)永遠(yuǎn)不會(huì)發(fā)生寫(xiě)溢出現(xiàn)象,即full為0時(shí),afifo可能存在空閑位置。

(4)格雷碼轉(zhuǎn)二進(jìn)制代碼

function       [ADDR_WIDTH:0]   gray2bin;    //to change the gray code to bin code


   input       [ADDR_WIDTH:0]   gray_in;     //input gray code
   reg         [ADDR_WIDTH:0]   gray_code;   //reg gray 
   reg         [ADDR_WIDTH:0]   bin_code;    //bin code result
   integer i,j;                              //integer
   reg tmp;                                  //tmp
   begin
       gray_code = gray_in;
       for(i=0;i<=ADDR_WIDTH;i=i+1)
           begin
           tmp=1'b0;
           for(j=i;j<=ADDR_WIDTH;j=j+1)
              tmp=gray_code[j]^tmp;
           bin_code[i]=tmp;
           end
       gray2bin= bin_code;
   end
endfunction 

(5)二進(jìn)制轉(zhuǎn)格雷碼

always @(posedge rd_clk or negedge rd_rst_n)
    if(~rd_rst_n)
        raddr_gray  <= {(ADDR_WIDTH + 1){1'b0}};
    else
        raddr_gray  <= raddr ^ {1'b0,raddr[ADDR_WIDTH:1]};

5、結(jié)束語(yǔ)

Afifo代碼寫(xiě)出來(lái)還不夠,還需要設(shè)置約束條件,后期我們會(huì)再講講afifo的格雷碼如何約束。

審核編輯:湯梓紅

聲明:本文內(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
    +關(guān)注

    關(guān)注

    1645

    文章

    22044

    瀏覽量

    618250
  • asic
    +關(guān)注

    關(guān)注

    34

    文章

    1246

    瀏覽量

    122372
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8999

    瀏覽量

    153710
  • fifo
    +關(guān)注

    關(guān)注

    3

    文章

    401

    瀏覽量

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

    關(guān)注

    11

    文章

    1900

    瀏覽量

    133201

原文標(biāo)題:

文章出處:【微信號(hào):處芯積律,微信公眾號(hào):處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    基于FPGA器件實(shí)現(xiàn)異步FIFO讀寫(xiě)系統(tǒng)的設(shè)計(jì)

    異步 FIFO 讀寫(xiě)分別采用相互異步的不同時(shí)鐘。在現(xiàn)代集成電路芯片中,隨著設(shè)計(jì)規(guī)模的不斷擴(kuò)大,一個(gè)系統(tǒng)中往往含有數(shù)個(gè)時(shí)鐘,多
    發(fā)表于 07-16 17:41 ?1358次閱讀
    基于FPGA器件實(shí)現(xiàn)<b class='flag-5'>異步</b><b class='flag-5'>FIFO</b>讀寫(xiě)系統(tǒng)的設(shè)計(jì)

    關(guān)于異步fifo的安全問(wèn)題:

    由于,如果異步fifo的雙口ram真的空了,而時(shí)鐘域延遲造成的rdempty仍然非空,則讀fifo的邏輯,就有可能根據(jù)rdempty信號(hào)(
    發(fā)表于 03-05 10:40

    使用Xilinx異步FIFO常見(jiàn)的坑

    FIFO是FPGA處理時(shí)鐘和數(shù)據(jù)緩存的必要IP,可以這么說(shuō),只要是任意一個(gè)成熟的FPGA涉及,一定會(huì)涉及到FIFO。但是我在使用異步
    發(fā)表于 02-04 06:23

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

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

    基于FPGA的異步FIFO設(shè)計(jì)方法詳解

    在現(xiàn)代電路設(shè)計(jì)中,一個(gè)系統(tǒng)往往包含了多個(gè)時(shí)鐘,如何在異步時(shí)鐘間傳遞數(shù)據(jù)成為一個(gè)很重要的問(wèn)題,而使用異步FIFO可以有效地解決這個(gè)問(wèn)題。
    發(fā)表于 07-17 08:33 ?8650次閱讀
    基于FPGA的<b class='flag-5'>異步</b><b class='flag-5'>FIFO</b>設(shè)計(jì)方法詳解

    基于異步FIFO結(jié)構(gòu)原理

    在現(xiàn)代的集成電路芯片中,隨著設(shè)計(jì)規(guī)模的不斷擴(kuò)大,一個(gè)系統(tǒng)中往往含有數(shù)個(gè)時(shí)鐘。多時(shí)鐘域帶來(lái)的一個(gè)問(wèn)題就是,如何設(shè)計(jì)異步時(shí)鐘之間的接口電路。異步
    發(fā)表于 02-07 14:22 ?0次下載
    基于<b class='flag-5'>異步</b><b class='flag-5'>FIFO</b>結(jié)構(gòu)原理

    關(guān)于一種面向異步FIFO的低開(kāi)銷(xiāo)容錯(cuò)機(jī)制研究

    異步FIFO(Fist-In-First-Out)是一種先入先出的數(shù)據(jù)緩沖器[1]。由于可以很好地解決時(shí)鐘域問(wèn)題和不同模塊之間的速度匹配問(wèn)題,而被廣泛應(yīng)用于全局
    的頭像 發(fā)表于 06-19 15:34 ?3503次閱讀
    關(guān)于一種面向<b class='flag-5'>異步</b><b class='flag-5'>FIFO</b>的低開(kāi)銷(xiāo)容錯(cuò)機(jī)制研究

    如何解決異步FIFO時(shí)鐘域亞穩(wěn)態(tài)問(wèn)題?

    時(shí)鐘域的問(wèn)題:前一篇已經(jīng)提到要通過(guò)比較讀寫(xiě)指針來(lái)判斷產(chǎn)生讀空和寫(xiě)滿信號(hào),但是讀指針是屬于讀時(shí)鐘域的,寫(xiě)指針是屬于寫(xiě)時(shí)鐘域的,而異步
    的頭像 發(fā)表于 09-05 14:29 ?6345次閱讀

    Xilinx異步FIFO的大坑

    FIFO是FPGA處理時(shí)鐘和數(shù)據(jù)緩存的必要IP,可以這么說(shuō),只要是任意一個(gè)成熟的FPGA涉及,一定會(huì)涉及到FIFO。但是我在使用異步
    發(fā)表于 03-12 06:01 ?12次下載
    Xilinx<b class='flag-5'>異步</b><b class='flag-5'>FIFO</b>的大坑

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

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

    異步fifo詳解

    和寫(xiě)入數(shù)據(jù)(對(duì)于大型數(shù)據(jù)存儲(chǔ),在性能上必然緩慢),其數(shù)據(jù)地址是由內(nèi)部讀寫(xiě)指針自動(dòng)加一完成的,不能像普通的存儲(chǔ)器一樣,由地址線決定讀取或者寫(xiě)入某個(gè)特定地址的數(shù)據(jù),按讀寫(xiě)是否為相同時(shí)鐘域分為同步和異步FIFO,這里主要介紹
    的頭像 發(fā)表于 12-12 14:17 ?4862次閱讀

    Verilog電路設(shè)計(jì)之單bit時(shí)鐘域同步和異步FIFO

    FIFO用于為匹配讀寫(xiě)速度而設(shè)置的數(shù)據(jù)緩沖buffer,當(dāng)讀寫(xiě)時(shí)鐘異步時(shí),就是異步FIFO。多bit的數(shù)據(jù)信號(hào),并不是直接從寫(xiě)
    發(fā)表于 01-01 16:48 ?1589次閱讀

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

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

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

    簡(jiǎn)單的一種,其特點(diǎn)是輸入和輸出都與時(shí)鐘信號(hào)同步,當(dāng)時(shí)鐘到來(lái)時(shí),數(shù)據(jù)總是處于穩(wěn)定狀態(tài),因此容易實(shí)現(xiàn)數(shù)據(jù)的傳輸和存儲(chǔ)。 而異步FIFO則是在波形的上升沿和下降沿上進(jìn)行處理,在輸入輸出端口處
    的頭像 發(fā)表于 10-18 15:23 ?2134次閱讀

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

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