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

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

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

RAM的兩種應(yīng)用:統(tǒng)計(jì)計(jì)數(shù)和位寬轉(zhuǎn)換

sanyue7758 ? 來(lái)源:IC的世界 ? 2023-12-05 09:48 ? 次閱讀

應(yīng)用1 統(tǒng)計(jì)計(jì)數(shù)

在進(jìn)行模塊設(shè)計(jì)時(shí),我們經(jīng)常需要統(tǒng)計(jì)報(bào)文的數(shù)量,以供軟件(or 主機(jī))讀取,有些統(tǒng)計(jì)僅僅用于debug,有些統(tǒng)計(jì)是協(xié)議要求,有些統(tǒng)計(jì)是為了便于功能實(shí)現(xiàn)。

當(dāng)需要統(tǒng)計(jì)的數(shù)量較多時(shí),為了降低功耗和減少面積,我們通常采用RAM去實(shí)現(xiàn)。

如下案例中,統(tǒng)計(jì)有效數(shù)據(jù)包的個(gè)數(shù)。

假設(shè)數(shù)據(jù)中存在pkt_id,pkt_id為0~63,則ram的深度為64。pkt_id用于作為讀寫(xiě)地址。RAM讀延時(shí)為3個(gè)時(shí)鐘周期。

有數(shù)據(jù)來(lái)臨時(shí),pkt_vld作為讀使能,讀出當(dāng)前包計(jì)數(shù)rdata,三個(gè)周期后,rdata加1回寫(xiě)到ram。

如下圖所示:需要有三個(gè)注意事項(xiàng)

NOTE1:需要有讀寫(xiě)保護(hù),因?yàn)榭赡艹霈F(xiàn)連續(xù)4個(gè)周期內(nèi),pkt_vld為1,且pkt_id相同,此時(shí)會(huì)出現(xiàn)同一個(gè)周期對(duì)相同的地址進(jìn)行讀寫(xiě),因此需要RAM需要添加讀寫(xiě)保護(hù)模塊,保證數(shù)據(jù)能夠正確寫(xiě)入,且讀出的都是最新值,否則就會(huì)出現(xiàn)統(tǒng)計(jì)錯(cuò)誤。

NOTE2:圖中既有軟件讀、又存在硬件讀,且硬件讀優(yōu)先級(jí)更高,軟件讀優(yōu)先級(jí)低,因此為了保證軟件讀能夠在有效周期內(nèi)得到響應(yīng),因此需要在主數(shù)據(jù)流上插入空拍,避免出現(xiàn)軟件讀長(zhǎng)時(shí)間無(wú)法響應(yīng)而產(chǎn)生超時(shí)。

wKgZomVugViATGPZAABdxDuAeHU769.png

應(yīng)用2 位寬轉(zhuǎn)換

在進(jìn)行模塊設(shè)計(jì)時(shí),我們經(jīng)常需要進(jìn)行數(shù)據(jù)位寬的轉(zhuǎn)換,常見(jiàn)的兩種轉(zhuǎn)換場(chǎng)景有同步時(shí)鐘域位寬轉(zhuǎn)換和異步時(shí)鐘域位寬轉(zhuǎn)換。本文將介紹異步時(shí)鐘域位寬轉(zhuǎn)換

異步時(shí)鐘域的位寬轉(zhuǎn)換讀時(shí)鐘和寫(xiě)時(shí)鐘屬于兩個(gè)時(shí)鐘。如下案例中,數(shù)據(jù)位寬由32bit轉(zhuǎn)40bit,寫(xiě)時(shí)鐘頻率156.25MHz,讀時(shí)鐘頻率125Mhz,寫(xiě)數(shù)據(jù)為32bit,讀數(shù)據(jù)位寬為40bit,通過(guò)計(jì)算得到入口數(shù)據(jù)速率和出口數(shù)據(jù)速率保持一致(156.2532==40125)。

存儲(chǔ)模塊是由寄存器搭建的。那么需要多大存儲(chǔ)模塊呢?32和40的最小公倍數(shù)為160,極限場(chǎng)景下,只需要160bit的寄存器作為存儲(chǔ)就夠了,但是讀操作通常晚于寫(xiě)操作,并且考慮到時(shí)鐘有抖動(dòng)有偏移,為了避免溢出,稍微增加一部分緩存,我們可以采用320bit作為存儲(chǔ)模塊。因此寫(xiě)側(cè)32bit寫(xiě)10次,讀側(cè)40bit讀8次,讀寫(xiě)兩側(cè)所需的時(shí)間相等。

注意事項(xiàng):寫(xiě)地址(wr_addr)跳轉(zhuǎn)范圍是09,讀地址(rd_addr)跳轉(zhuǎn)范圍07。

wKgaomVugViAHCE3AACFx-wvlYA974.png

wKgaomVugViAIYjXAAFTzh9fxhU679.png

如圖所示:

buff_array為320bit的數(shù)據(jù)存儲(chǔ)。

vld_array為80bit的有效標(biāo)志位存儲(chǔ):vld_array[n]為1表示buff_array[4n+3:4n]存在4bit的有效數(shù)據(jù)。

wKgaomVugViAFRVZAABOda71nBA740.png

always @(posedge wr_clk or negedge wr_rst_n) begin
  if (~wr_rst_n) begin
    buff_array  <= {DATA_FIFO_DEPTH{1'b0}};
    vld_array <= {VALID_FIFO_DEPTH{1'b0}};
  end else begin
    if (wr_en) begin
        buff_array[ wr_addr*32  +: 32]  <= wr_data_i;
        vld_array[wr_addr*8 +: 8] <= {8{wr_valid_i}};
      end
    end
  end


reg [10-1:0] rd_valid_bus;
reg [40-1:0]  rd_data_bus;
always @(*) begin
  rd_data_bus[40-1:0]  = buff_array[  rd_addr*40  +: 40];
  rd_valid_bus[10-1:0] = vld_array[rd_addr*10 +: 10];
end
integer i;
reg [40-1:0] rd_data_valid_mask;
always @(*) begin
  for(i = 0; i < 40; i = i + 1) begin
      rd_data_valid_mask[i] = rd_valid_bus[i/4];
  end
end
always @(posedge rd_clk or negedge rd_rst_n) begin
  if (~rd_rst_n) begin
    rd_data_o  <= {40{1'b0}};
    rd_valid_o <= 1'b0;
  end else begin
    if (rd_en) begin
      rd_data_o  <= rd_data_bus & rd_data_valid_mask;
      rd_valid_o <= |rd_valid_bus;
    end else begin
      rd_data_o  <= {40{1'b0}};
      rd_valid_o <= 1'b0;
    end
  end
end

審核編輯:湯梓紅

聲明:本文內(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)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5294

    瀏覽量

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

    關(guān)注

    8

    文章

    1354

    瀏覽量

    114441
  • 數(shù)據(jù)包
    +關(guān)注

    關(guān)注

    0

    文章

    248

    瀏覽量

    24344
  • 讀寫(xiě)保護(hù)
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    5863

原文標(biāo)題:ram的兩種應(yīng)用~統(tǒng)計(jì)計(jì)數(shù)和位寬轉(zhuǎn)換

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    測(cè)量開(kāi)關(guān)電源轉(zhuǎn)換效率的兩種不同方法

    本文將向大家介紹測(cè)量開(kāi)關(guān)電源轉(zhuǎn)換效率的兩種不同方法。
    發(fā)表于 08-09 16:45 ?4349次閱讀
    測(cè)量開(kāi)關(guān)電源<b class='flag-5'>轉(zhuǎn)換</b>效率的<b class='flag-5'>兩種</b>不同方法

    IC設(shè)計(jì):ram的應(yīng)用-異步時(shí)鐘域轉(zhuǎn)換

    在進(jìn)行模塊設(shè)計(jì)時(shí),我們經(jīng)常需要進(jìn)行數(shù)據(jù)轉(zhuǎn)換,常見(jiàn)的兩種轉(zhuǎn)換場(chǎng)景有同步時(shí)鐘域
    的頭像 發(fā)表于 11-23 16:41 ?787次閱讀
    IC設(shè)計(jì):<b class='flag-5'>ram</b>的應(yīng)用-異步時(shí)鐘域<b class='flag-5'>位</b><b class='flag-5'>寬</b><b class='flag-5'>轉(zhuǎn)換</b>

    OpenCV兩種不同方法實(shí)現(xiàn)粘連大米分割計(jì)數(shù)

    測(cè)試圖如下,圖中有個(gè)別米粒相互粘連,本文主要演示如何使用OpenCV用兩種不同方法將其分割并計(jì)數(shù)。
    的頭像 發(fā)表于 01-22 14:55 ?1446次閱讀
    OpenCV<b class='flag-5'>兩種</b>不同方法實(shí)現(xiàn)粘連大米分割<b class='flag-5'>計(jì)數(shù)</b>

    基于FPGA的HDTV視頻圖像灰度直方圖統(tǒng)計(jì)算法設(shè)計(jì)

    結(jié)構(gòu),即在內(nèi)存中開(kāi)辟一個(gè)整數(shù)數(shù)組來(lái)進(jìn)行計(jì)數(shù),但是在FPGA 中定義數(shù)組是非常消耗資源的,尤其是當(dāng)數(shù)組成員的很大時(shí)。例如用觸發(fā)器來(lái)統(tǒng)計(jì)256 灰度的720p 圖像的直方圖,將消耗40
    發(fā)表于 05-14 12:37

    AVR的兩種操作及比較

    AVR的兩種操作的比較(域方式和移位宏方式) 測(cè)試環(huán)境如下: 硬件:AT90S2313 軟件: WiinAVR gcc3.3-Os級(jí)優(yōu)化(最小size)。 說(shuō)明: 由于AVR不支持
    發(fā)表于 09-06 10:24

    STC12系列單片機(jī)的定時(shí)器有兩種計(jì)數(shù)速率

    STC12系列單片機(jī)的定時(shí)器有兩種計(jì)數(shù)速率:一是12T模式,每12個(gè)時(shí)鐘加1,與傳統(tǒng)8051單片機(jī)相同;另一是1T模式,每個(gè)時(shí)鐘加1,速度是傳統(tǒng)8051單片機(jī)的12倍。
    發(fā)表于 11-25 06:13

    ROM和RAM兩種寄存器的區(qū)別是什么呢

    ROM或者對(duì)于玩電腦的人并不陌生,什么內(nèi)存3G(內(nèi)存就是RAM),硬盤(pán)100G(硬盤(pán)就是ROM)單片機(jī)里面和電腦一樣,有ROM和RAM之分..那這兩種寄存器的區(qū)別是什么呢?1 . ROM的功能:ROM的數(shù)據(jù)在程序運(yùn)行的時(shí)候是不容
    發(fā)表于 03-01 07:35

    求分享S32G2內(nèi)存映射系統(tǒng)計(jì)數(shù)器的地址

    計(jì)時(shí)器: ? 提供一個(gè)系統(tǒng)計(jì)數(shù)器,用于實(shí)時(shí)測(cè)量時(shí)間的流逝。 在同一參考文獻(xiàn)的 D7.1.1 節(jié)中,指出: 內(nèi)存映射計(jì)數(shù)器模塊,需要 此模塊控制系統(tǒng)計(jì)數(shù)器。它有個(gè)框架: ? 一個(gè)控制
    發(fā)表于 05-12 06:18

    使用IP方法的獨(dú)特統(tǒng)計(jì)計(jì)數(shù)

      網(wǎng)絡(luò)路由器帶有用于性能監(jiān)控、流量管理、網(wǎng)絡(luò)追蹤和網(wǎng)絡(luò)安全的統(tǒng)計(jì)計(jì)數(shù)器。計(jì)數(shù)器用來(lái)記錄數(shù)據(jù)包到達(dá)和離開(kāi)的次數(shù)以及特定事件的次數(shù),比如當(dāng)網(wǎng)絡(luò)出現(xiàn)壞包時(shí)。數(shù)據(jù)包的到達(dá)會(huì)使多個(gè)不同的統(tǒng)計(jì)
    發(fā)表于 09-18 19:52 ?10次下載
    一<b class='flag-5'>種</b>使用IP方法的獨(dú)特<b class='flag-5'>統(tǒng)計(jì)</b><b class='flag-5'>計(jì)數(shù)</b>器

    FPGA設(shè)計(jì)中的RAM兩種實(shí)現(xiàn)方法

    大家好,又到了每日學(xué)習(xí)的時(shí)間了,今天我們來(lái)聊一聊在FPGA設(shè)計(jì)中RAM兩種使用方法,RAM是用來(lái)在程序運(yùn)行中存放隨機(jī)變量的數(shù)據(jù)空間,使用時(shí)可以利用QuartusII的LPM功能實(shí)現(xiàn)RAM
    的頭像 發(fā)表于 06-08 11:30 ?2w次閱讀

    統(tǒng)計(jì)信號(hào)連接到定時(shí)器的兩種模式

    對(duì)于這種情況,我們可以將被統(tǒng)計(jì)信號(hào)連接到定時(shí)器的ETR腳,并作為定時(shí)器的計(jì)數(shù)時(shí)鐘。開(kāi)啟定時(shí)器更新中斷對(duì)溢出次數(shù)進(jìn)行統(tǒng)計(jì),擇時(shí)讀取計(jì)數(shù)器的值和溢出次數(shù)即可。這樣既避免了CPU頻繁進(jìn)中斷而
    的頭像 發(fā)表于 06-08 09:18 ?2606次閱讀

    FPGA設(shè)計(jì)中這兩種情形該怎么約束

    在FPGA設(shè)計(jì)中,我們經(jīng)常會(huì)碰到這樣的情形:從快時(shí)鐘域到慢時(shí)鐘域完成轉(zhuǎn)換,這時(shí),這個(gè)時(shí)鐘是同步的。例如:源時(shí)鐘是400MHz,數(shù)據(jù)
    的頭像 發(fā)表于 09-07 09:47 ?510次閱讀
    FPGA設(shè)計(jì)中這<b class='flag-5'>兩種</b>情形該怎么約束

    IC設(shè)計(jì):RAM的應(yīng)用-統(tǒng)計(jì)計(jì)數(shù)

    在進(jìn)行模塊設(shè)計(jì)時(shí),我們經(jīng)常需要統(tǒng)計(jì)報(bào)文的數(shù)量,以供軟件(or 主機(jī))讀取,有些統(tǒng)計(jì)僅僅用于debug,有些統(tǒng)計(jì)是協(xié)議要求,有些統(tǒng)計(jì)是為了便于功能實(shí)現(xiàn)。
    的頭像 發(fā)表于 11-17 17:16 ?676次閱讀
    IC設(shè)計(jì):<b class='flag-5'>RAM</b>的應(yīng)用-<b class='flag-5'>統(tǒng)計(jì)</b><b class='flag-5'>計(jì)數(shù)</b>

    淺析多晶硅錠中錯(cuò)存在的兩種來(lái)源

    根據(jù)晶體凝固生長(zhǎng)與錯(cuò)形成、運(yùn)動(dòng)與增殖的理論,多晶硅錠中錯(cuò)存在兩種來(lái)源:原生和增殖。
    的頭像 發(fā)表于 03-27 11:09 ?476次閱讀
    淺析多晶硅錠中<b class='flag-5'>位</b>錯(cuò)存在的<b class='flag-5'>兩種</b>來(lái)源

    同步計(jì)數(shù)器和異步計(jì)數(shù)器的區(qū)別

    在數(shù)字電子領(lǐng)域中,計(jì)數(shù)器是一用于統(tǒng)計(jì)脈沖信號(hào)數(shù)量的重要設(shè)備。其中,同步計(jì)數(shù)器和異步計(jì)數(shù)器是兩種
    的頭像 發(fā)表于 05-24 14:36 ?3250次閱讀