国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

FPGA — BRAM學(xué)習(xí)筆記—讀寫操作

這篇具有很好參考價值的文章主要介紹了FPGA — BRAM學(xué)習(xí)筆記—讀寫操作。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

使用軟件: Vivado
開發(fā)板: EGO1采用Xilinx Artix-7系列XC7A35T-1CSG324C FPGA

BRAM介紹

BRAM 即塊 RAM, 是 FPGA 的固有硬件資源。 另一種形式的 RAM 是分布RAM(Distribution RAM), 是由 FPGA 邏輯資源查找表 LUT 拼起來的 。這兩種 RAM 最本質(zhì)的區(qū)別是塊RAM 默認輸入有寄存器,所以它在讀、寫使能信號后的下個時鐘邊沿返回數(shù)據(jù),而分布式RAM就沒有,就是個組合邏輯,讀、寫使能的同一時刻返回數(shù)據(jù)。從時序的角度上來說,塊RAM更好,唯一不足的是,它是珍貴的硬件資源。一般來說,芯片越高級,塊RAM資源越多。

Artix- - 7 FPGA 的最高型號具有可分配的 13Mbit雙端口BRAM, 而實驗電路板選型的XC7A35T具備 18Kbit 的BRAM100 個 ,36Kbit 的BRAM 50 個,共1800Kbit 。 Xilinx 7系列 FPGA 可將 BRAM 配置為同步雙端口 RAM或單端口 RAM。

同步雙端口BRAM

方便通過一個端口寫的同時可以從另一個端口進行讀取
每個真正的雙端口的36Kbit BRAM 包含 36Kbit 個存儲單元以及2個完全獨立的訪問接口A 和B 。每個 18Kbit BRAM 雙端口內(nèi)存包含18Kbit 個存儲單元以及2個完全獨立的訪問接口A和B 。內(nèi)存的結(jié)構(gòu)完全對稱, 雙端口可互換。
vivado對bram進行連續(xù)讀操作,FPGA,fpga開發(fā),學(xué)習(xí)
vivado對bram進行連續(xù)讀操作,FPGA,fpga開發(fā),學(xué)習(xí)

BRAM讀寫操作

(1)讀操作

讀操作是在一個時鐘邊沿完成讀取RAM指定單元(讀地址)內(nèi)容的操作。首先將讀取地址寄存在讀端口,并在RAM讀取時間之后將存儲的數(shù)據(jù)加載到輸出鎖存器中。當(dāng)使用輸出寄存器時,讀操作需要一個額外的等待周期。

(2)寫操作

寫操作是一個時鐘邊沿寫入RAM的操作。寫地址寄存在寫入端口,數(shù)據(jù)輸入存儲在內(nèi)存中。

(3)寫模式

寫模式有三種,決定了寫入時鐘邊沿后,有效數(shù)據(jù)出現(xiàn)在輸出鎖存器的時間。
三種模式是: 寫優(yōu)先模式WRITE_FIRST、讀優(yōu)先模式READ_FIRST不變模式。每個端口的寫模式可以通過配置過程單獨配置。
默認模式是寫優(yōu)先模式,在這種模式總是將最新寫入的數(shù)據(jù)送到輸出總線上。
在讀優(yōu)先模式,當(dāng)新的數(shù)據(jù)被寫入時,仍然輸出先前存儲的數(shù)據(jù)。
在不變模式,輸出總線上保持先前的輸出。

寫優(yōu)先模式

在第一個時鐘的上升沿,將地址aa的數(shù)據(jù)MEM(aa)讀出放在數(shù)據(jù)總線DO上。在第二個時鐘的上升沿,寫有效,因此將DI上的1111寫入地址bb。因為寫優(yōu)先,所以出現(xiàn)在數(shù)據(jù)總線上的是新寫入的1111。
vivado對bram進行連續(xù)讀操作,FPGA,fpga開發(fā),學(xué)習(xí)

讀優(yōu)先模式

在第一個時鐘的上升沿,將地址aa的數(shù)據(jù)MEM(aa)讀出放在數(shù)據(jù)總線DO上。在第二
個時鐘的上升沿,寫有效,因此將DI上的1111寫入地址bb。因為讀優(yōu)先,所以出現(xiàn)在數(shù)據(jù)總線上的不是新寫入的1111,而是原來地址bb的內(nèi)存的值old MEM(bb)。
vivado對bram進行連續(xù)讀操作,FPGA,fpga開發(fā),學(xué)習(xí)

不變模式

在第一個時鐘的上升沿,將地址aa的數(shù)據(jù)MEM(aa)讀出放在數(shù)據(jù)總線DO上。在第二個時鐘的上升沿,寫有效,因此將DI上的1111寫入地址bb。因為不變模式,所以在寫有效的時候出現(xiàn)在數(shù)據(jù)總線上的數(shù)據(jù)是不變的,仍然是MEM(aa),直到寫無效后的第一個時鐘上升沿才變?yōu)镸EM(dd)。
vivado對bram進行連續(xù)讀操作,FPGA,fpga開發(fā),學(xué)習(xí)

雙端口塊內(nèi)存接口

vivado對bram進行連續(xù)讀操作,FPGA,fpga開發(fā),學(xué)習(xí)

BRAM IP的使用及仿真驗證

IP核使用

coe文件

使用matlab生成.coe文件:
vivado對bram進行連續(xù)讀操作,FPGA,fpga開發(fā),學(xué)習(xí)
l.coe文件內(nèi)容如下,注意前兩行要添加~
vivado對bram進行連續(xù)讀操作,FPGA,fpga開發(fā),學(xué)習(xí)

將IP核添加到工程
  1. 在工程管理欄下點擊[IP Catalog],然后搜索RAM,找到塊RAM生成器[Block Memory Generator],如下圖所示:
    vivado對bram進行連續(xù)讀操作,FPGA,fpga開發(fā),學(xué)習(xí)
  2. 將組件名稱改為“ram”,其他設(shè)置如下圖所示:
    讀寫模式改為讀優(yōu)先“Read First”
    vivado對bram進行連續(xù)讀操作,FPGA,fpga開發(fā),學(xué)習(xí)

取消勾選Primitives Output Register,不然輸出會滯后一個時鐘周期
vivado對bram進行連續(xù)讀操作,FPGA,fpga開發(fā),學(xué)習(xí)

  1. 在[Other Options]選項中勾選Load Init File,點擊Browse添加前面用matlab生成的要存入RAM的初始數(shù)據(jù)。
    vivado對bram進行連續(xù)讀操作,FPGA,fpga開發(fā),學(xué)習(xí)

代碼

verilog代碼
`timescale 1ns / 1ps
//
// Module Name: BRAM_test
// Revision 0.01 - File Created
// Additional Comments:
// 
//
module BRAM_test(clk,ena,wea,addra,dina,douta);
input clk,ena,wea;
input[9:0] addra;
input[14:0] dina;
output[14:0] douta;

ram ram(clk,ena,wea,addra,dina,douta);

endmodule
仿真代碼
`timescale 1ns / 1ps
//
// Create Date: 2022/10/20 10:59:14
// Design Name: 
// Module Name: sim_bram
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module sim_bram();
reg clk;//時鐘輸入
reg wea;//寫使能
reg[9:0] addra;//地址輸入
reg[14:0] dina;//數(shù)據(jù)輸入
wire[14:0] douta;//數(shù)據(jù)輸出
reg[9:0] cnt1,cnt2;
initial begin
    clk=0;
    wea=0;
    cnt1=0;
    cnt2=0;
end
BRAM_test uut(//調(diào)用被仿真的模塊完成內(nèi)存讀寫
.clk(clk),
.ena(1),
.wea(wea),
.addra(addra),
.dina(dina),
.douta(douta)
);
always #10 clk=~clk;//周期20ns,模擬50M時鐘
always@(posedge clk)
begin
    if(cnt1==8)
    begin
        cnt1=0;
        cnt2=cnt2+1;//cnt2低位每9個周期翻轉(zhuǎn)一次
    end
    else
        cnt1=cnt1+1;
end
//負邊沿寫地址,寫數(shù)據(jù)輸入,寫使能信號,保證時鐘上升沿時這些值是穩(wěn)定的
always@(negedge clk)
begin
    dina=cnt1;//數(shù)據(jù)輸入總線是哪個的值是計數(shù)值cnt1
    addra=cnt1;
    if(cnt2[0]==0) wea=0;//每9個周期寫使能翻轉(zhuǎn)
    else wea=1;
end
endmodule

仿真結(jié)果

仿真結(jié)果如下圖所示:
vivado對bram進行連續(xù)讀操作,FPGA,fpga開發(fā),學(xué)習(xí)
初始時,在時鐘上升沿讀取RAM中addra地址(000 ~ 008)下存儲的值(100 ~ 108)。
在寫使能wea=1之后,因為是讀優(yōu)先,所以先讀出該地址的值,再將dina內(nèi)容寫入,所以看到douta的值還是(100 ~ 108)。
寫使能結(jié)束之后,再讀取ram對應(yīng)地址中的內(nèi)容,可以看出douta結(jié)果為寫入的數(shù)值(0 ~ 8)。文章來源地址http://www.zghlxwxcb.cn/news/detail-790899.html

到了這里,關(guān)于FPGA — BRAM學(xué)習(xí)筆記—讀寫操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • FPGA設(shè)計中BRAM(Block RAMs)資源的使用(綜合為BRAM)

    FPGA設(shè)計中BRAM(Block RAMs)資源的使用(綜合為BRAM)

    ??RAM分為BRAM(Block RAMs)和DRAM(Distributed RAM),即塊RAM與分布式RAM,這兩個差別在于BRAM是FPGA上固有的一些存儲資源(針對不同型號的FPGA,其存儲資源大小會有差別),而DRAM則是由LUT組合而成的。所以在數(shù)據(jù)量較大的情況下,一般使用BRAM,盡量避免使用DRAM,導(dǎo)致LUT資源的

    2024年01月17日
    瀏覽(23)
  • FPGA | BRAM和DRAM

    Block ram 由一定數(shù)量固定大小的存儲塊構(gòu)成的,使用 BLOCK RAM 資源不占用額外的邏輯資源,并且速度快。 但是 使用的時候消耗的 BLOCK RAM 資源是其塊大小的整數(shù)倍 。如?Xilinx公司的結(jié)構(gòu)中每個 BRAM 有 36Kbit 的容量,既可以作為一個 36Kbit 的存儲器使用,也可以拆分為兩個獨立的

    2024年02月12日
    瀏覽(24)
  • 【FPGA/數(shù)字IC】Multiport RAM,多讀多寫寄存器-——基于FPGA BRAM的多端口地址查找表與FPGA BRAM的資源分析

    【FPGA/數(shù)字IC】Multiport RAM,多讀多寫寄存器-——基于FPGA BRAM的多端口地址查找表與FPGA BRAM的資源分析

    目錄 背景 手寫Multiport Ram Multiport RAM 代碼方案 資源評估 Multiport RAM 資源利用的優(yōu)化 資源評估 防止讀寫沖突的組合邏輯設(shè)計(寫優(yōu)先) 仿真和時序 單口寫數(shù)據(jù) 單端口讀數(shù)據(jù) 多口讀相同數(shù)據(jù) 多口同時讀不同數(shù)據(jù) 背景 ????????在多端口交換機的設(shè)計中,交換機的每個端口

    2024年04月26日
    瀏覽(38)
  • [FPGA IP系列] 2分鐘了解FPGA中的BRAM

    [FPGA IP系列] 2分鐘了解FPGA中的BRAM

    FPGA設(shè)計中,BRAM是一項非常關(guān)鍵的內(nèi)置存儲資源,F(xiàn)PGA開發(fā)需要熟練使用BRAM,今天再復(fù)習(xí)一下BRAM的知識,包括BRAM的定義、組成、應(yīng)用等等。 RAM是Random Access Memory,也就是隨機訪問數(shù)據(jù)存儲器,RAM的內(nèi)部是一個一個小內(nèi)存單元(可以看成是一個小格子)組成。 每個內(nèi)存單元都對應(yīng)

    2024年02月12日
    瀏覽(30)
  • [FPGA IP系列] BRAM IP參數(shù)配置與使用示例

    [FPGA IP系列] BRAM IP參數(shù)配置與使用示例

    FPGA開發(fā)中使用頻率非常高的兩個IP就是FIFO和BRAM,上一篇文章中已經(jīng)詳細介紹了Vivado FIFO IP,今天我們來聊一聊BRAM IP。 本文將詳細介紹Vivado中BRAM IP的配置方式和使用技巧。 1、打開BRAM IP核 在Vivado的IP Catalog中找到Block Memory Generator IP核,雙擊打開參數(shù)配置界面。 2、配置BRAM I

    2024年02月04日
    瀏覽(22)
  • vivado報錯
Validation Failed:User configuration exceeds BRAM count in the selected device!

    vivado報錯 Validation Failed:User configuration exceeds BRAM count in the selected device!

    最近課設(shè),使用vivado調(diào)用一個rom的IP,但是報錯如上,從網(wǎng)上查閱說是FPGA的資源不夠,但是我的資源量肯定是足夠的,為此,不得其解,經(jīng)猜測試驗,最終問題是由于給的深度(下圖中的Port A Depth)大于存儲的數(shù)據(jù)量太多;將深度減少部分即可; ?

    2024年02月14日
    瀏覽(54)
  • PS和PL使用BRAM進行數(shù)據(jù)交互

    PS和PL使用BRAM進行數(shù)據(jù)交互

    BRAM(Block RAM)是 PL 部分的存儲器陣列,PS 和 PL 通過對 BRAM 進行讀寫操作,來實現(xiàn)數(shù)據(jù)的交互。在 PL 中,通過輸出時鐘、地址、讀寫控制等信號來對 BRAM 進行讀寫操作。而在 PS 中,處理器并不需要直接驅(qū)動 BRAM 的端口,而是通過 AXI BRAM 控制器來對 BRAM 進行讀寫操作。AXI BR

    2024年02月02日
    瀏覽(24)
  • FPGA原理與結(jié)構(gòu)(8)——塊RAM(Block RAM,BRAM)

    FPGA原理與結(jié)構(gòu)(8)——塊RAM(Block RAM,BRAM)

    系列文章目錄:FPGA原理與結(jié)構(gòu)(0)——目錄與傳送門 ? ? ? ? 大家對于RAM應(yīng)該并不陌生,RAM就是一張可讀可寫的存儲表,它經(jīng)常被拿來與ROM進行對比,相比之下,ROM只可讀。而在FPGA中,RAM一般可以分成兩種,一種是使用LUT資源組成的分布式RAM(DRAM),另一種就是塊RAM(B

    2024年02月08日
    瀏覽(26)
  • 如何創(chuàng)建 Xilinx BRAM 或 ROM 初始化文件(.COE)并實現(xiàn)初始化數(shù)據(jù)在 FPGA 上的載入

    如何創(chuàng)建 Xilinx BRAM 或 ROM 初始化文件(.COE)并實現(xiàn)初始化數(shù)據(jù)在 FPGA 上的載入 在 FPGA 開發(fā)中,初始化數(shù)據(jù)是一個非常重要的內(nèi)容,它決定了電路從上電開始的初始狀態(tài),對于保證正確性和可靠性有著至關(guān)重要的作用。其中,BRAM(Block RAM)和 ROM(Read-Only Memory)是兩種常見的

    2024年02月09日
    瀏覽(189)
  • VIM 編輯器: Bram Moolenaar

    VIM 編輯器: Bram Moolenaar

    ??? VIM 用了很長時間, 個人的 VIM 配置文件差不多10年沒有更新了。以前寫程序的時候, 編輯都用這個。 linux kernel, boost規(guī)模的代碼都不在話下?,F(xiàn)在雖然代碼寫的少了,依然是我打開文件的首選。 ??? 現(xiàn)在用手機了,配個藍牙鍵盤就可以隨時隨地擼代碼。 ??? 紀念下

    2024年02月13日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包