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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

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

3天內不再提示

Vivado:ROM和RAM的verilog代碼實現

CHANBAEK ? 來源:FPGA入門到精通 ? 作者:未可知摩爾 ? 2023-05-16 16:57 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文主要介紹ROMRAM實現的verilog代碼版本,可以借鑒參考下。

一、ROM設計方法

Read-only memory(ROM)使用ROM_STYLE屬性選擇使用寄存器或塊RAM資源來實現ROM,示例代碼如下:

//使用塊RAM資源實現ROM
module rams_sp_rom_1 (
    input clk, 
    input rd_en, 
    input [5:0] rd_addr, 
    output [19:0] dout
);

(*rom_style = "block" *) reg [19:0] data;

always @(posedge clk) begin
    if (rd_en)
        case(rd_addr)
        6'd0: data <= 20'h0200A; 
        6'd1: data <= 20'h00300;
        6'd2: data <= 20'h08101; 
        ......
        6'd32: data <= 20'h00301; 
        default: data <= 20'h00102;
        endcase
end

assign dout = data;

endmodule

二、RAM設計方式

RAM設計方式有很多,可以用BRAM、LUT、分布式RAM、URAM實現,可以使用RAM_STYLE屬性強制規定使用的資料類型。

  • (*ram_style = "block" *)表示用Block RAM實現
  • (*ram_style = "reg" *)表示用寄存器實現
  • (*ram_style = "distributed" *)表示用分布式 RAM實現
  • (*ram_style = "uram" *)表示用uram實現

1、單端口RAM

端口RAM支持3種不同的讀寫同步模式,解決同時讀寫同一地址的情況,每一個讀、寫端口都可以配置為:

  • Write-First模式:新內容載入時可以馬上被讀取;
  • Read-First模式:新內容載入時,先讀取舊的內容;
  • No-Change模式:新內容載入時,不讀取該地址的內容(即維持之前的值不變);
// 數據輸出可復位的單端塊RAM,Read_first
module rams_sp_rf_rst (
    input clk, 
    input en, 
    input we, 
    input rst, 
    input [9:0]addr, 
    input [15:0]di, 
    output reg [15:0]dout
);

reg [15:0] ram [1023:0];

always @(posedge clk)
    if (en) begin //塊RAM使能
        if (we) ram[addr] <= di; //寫使能
        if (rst) dout <= 0;   //輸出復位
        else dout <= ram[addr];
    end

endmodule


// 寫優先模式的單端塊RAM,Wrist_first
module rams_sp_wf (
    input clk, 
    input en, 
    input we, 
    input [9:0] addr, 
    input [15:0] di, 
    output reg [15:0] dout
);

reg [15:0] ram [1023:0];

always @(posedge clk)
    if (en) begin
        if (we) begin
            RAM[addr] <= di;
            dout <= di;
        end
        else dout <= RAM[addr];
    end

endmodule


// No-Change模式的單端塊RAM
module rams_sp_wf (
    input clk, 
    input en, 
    input we, 
    input [9:0] addr, 
    input [15:0] di, 
    output reg [15:0] dout
);

reg [15:0] ram [1023:0];

always @(posedge clk)
    if (en) begin
        if (we) RAM[addr] <= di;
        else dout <= RAM[addr];
    end

endmodule

3、偽雙端口RAM

// 單時鐘控制,偽雙端塊RAM
module simple_dual_one_clock (
    input clk,
    input ena,
    input enb,
    input wea,
    input [9:0] addra,
    input [15:0] dia,
    input [9:0] addrb,
    output reg [15:0] dob
);

reg [15:0] ram [1023:0];

always @(posedge clk)  //寫
    if (ena) 
        if (wea) ram[addra] <= dia;

always @(posedge clk) 
    if (enb) dob <= ram[addrb];  //讀

endmodule


// 雙時鐘控制,偽雙端塊RAM
module simple_dual_two_clocks (
    input clk,
    input ena,
    input enb,
    input wea,
    input [9:0] addra,
    input [15:0] dia,
    input [9:0] addrb,
    output reg [15:0] dob
);

reg [15:0] ram [1023:0];

always @(posedge clka)  //寫
    if (ena)
        if (wea) ram[addra] <= dia;

always @(posedge clkb)
    if (enb) dob <= ram[addrb];  //讀

endmodule

4、真雙端口RAM

// 帶有兩個寫端口的雙端塊RAM
module rams_tdp_rf_rf (
    input clka,
    input clkb,
    input ena,
    input enb,
    input wea,
    input web,
    input [9:0] addra,
    input [9:0] addrb,
    input [15:0] dia,
    input [15:0] dib,
    output reg [15:0] doa,
    output reg [15:0] dob
);

reg [15:0] ram [1023:0];

always @(posedge clka)      //端口1
    if (ena) begin
        if (wea) ram[addra] <= dia;
        doa <= ram[addra];
    end

always @(posedge clkb)      //端口2
    if (enb) begin
        if (web) ram[addrb] <= dib;
        dob <= ram[addrb];
    end

endmodule


// 帶有可選輸出寄存器的塊RAM
module rams_pipeline (
    input clk1, 
    input clk2, 
    input we, 
    input en1, 
    input en2, 
    input [9:0] addr1, 
    input [9:0] addr2, 
    input [15:0] di, 
    output reg [15:0] res1, 
    output reg [15:0] res2
);

reg [15:0] RAM [1023:0];
reg [15:0] do1;
reg [15:0] do2;

always @(posedge clk1) begin  //端口1可讀可寫
    if (we == 1'b1) RAM[addr1] <= di;
    do1 <= RAM[addr1];
end

always @(posedge clk2)      //端口2只用于讀
    do2 <= RAM[addr2];

always @(posedge clk1)
    if (en1 == 1'b1) res1 <= do1;

always @(posedge clk2)
    if (en2 == 1'b1) res2 <= do2;

endmodule

5、初始化RAM內容

初始化RAM可以在HDL源代碼中進行,也可以利用外部數據文件設置。

//Verilog初始化為一個值
reg [DATA_WIDTH-1:0] ram [DEPTH-1:0];
integer i;
initial for (i=0; i < DEPTH; i=i+1) ram[i] = 0;

//讀取二進制形式存儲文件
reg [31:0] ram [0:3];
initial begin
    $readmemb("ram.data", ram, 0, 3);
end

//讀取16進制形式存儲文件
reg [31:0] ram [0:3];
initial begin
    $readmemh("ram.data", ram, 0, 3);
end

三、總結

本文介紹了如何使用Verilog HDL實現ROM和RAM,以及一些常見的設計方法和示例代碼。對于不同類型的存儲器,我們介紹了不同的實現方式,包括分布式RAM、單端口RAM和偽雙端口RAM等。在任何情況下,都要格外注意存儲器的讀寫一致性和正確性,確保系統的穩定性和正確性。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • ROM
    ROM
    +關注

    關注

    4

    文章

    578

    瀏覽量

    87181
  • RAM
    RAM
    +關注

    關注

    8

    文章

    1391

    瀏覽量

    117126
  • Verilog
    +關注

    關注

    29

    文章

    1366

    瀏覽量

    112062
  • 代碼
    +關注

    關注

    30

    文章

    4894

    瀏覽量

    70452
  • Vivado
    +關注

    關注

    19

    文章

    834

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Vivado的多種RAM編寫方式

    過多介紹。下面給出幾個各種實現方式的Verilog示例代碼。分布式RAM下面給出一個異步讀模式的雙口分布式RAM的示例:module ram
    發表于 09-29 09:40

    Vivado中進行HDL代碼設計

    代碼中初始化RAM組件更容易;支持package;自定義類型;枚舉類型;沒有reg和wire之間的混淆。Verilog語言的優勢有:與C語言類似的語法;代碼結構更緊湊;支持塊注釋(老
    發表于 09-29 10:08

    fpga實現jpeg Verilog代碼

    本站提供的fpga實現jpeg Verilog代碼資料,希望能夠幫你的學習。
    發表于 05-27 15:09 ?202次下載

    Vivado Synthesis中如何為Verilog代碼中的“include file”設置路徑?

    Verilog代碼開發時,我們可以把經常會用到的公共變量和參數,單獨放在一個cfg.v文件中,然后在別的文件中include這個文件,這樣便于代碼的組織管理,可以使得代碼結構更加清晰
    發表于 11-10 14:49 ?1w次閱讀

    ROMRAM、DRAM、SRAM和FLASH的區別

    常見存儲器概念辨析:RAM、SRAM、SDRAM、ROM、EPROM、EEPROM、Flash存儲器可以分為很多種類,其中根據掉電數據是否丟失可以分為RAM(隨機存取存儲器)和ROM
    發表于 12-04 14:23 ?3574次閱讀

    ramrom的區別之處

    存儲器是數字系統中用以存儲大量信息的設備或部件,是計算機和數字設備中的重要組成部分。存儲器可分為隨機存取存儲器(ram)和只讀存儲器(rom)兩大類。要說它倆有什么區別,下面就由英尚微電子為大家解惑
    發表于 05-10 10:28 ?3541次閱讀

    ROMRAM有哪些區別

    RAMROM的區別在概念、運行速度、在手機存儲的功能上有不同。
    的頭像 發表于 11-19 15:30 ?1.4w次閱讀

    采用IEEE745格式的浮點+ROM RAM的方式成功實現FFT的設計

    采用IEEE745格式的浮點+ROM RAM的方式成功實現FFT的設計(嵌入式開發要學什么知乎)-采用IEEE745格式的浮點+ROM RAM
    發表于 07-30 16:21 ?9次下載
    采用IEEE745格式的浮點+<b class='flag-5'>ROM</b> <b class='flag-5'>RAM</b>的方式成功<b class='flag-5'>實現</b>FFT的設計

    淺談單片機romram代碼的關系,以及為什么要加上拉電阻

    ROM,RAM以及code,dataram掉電丟失rom掉電不丟失因為單片機RAM很有限,所以將不變的保存到ROM中CODE關鍵字的作用就是
    發表于 11-25 18:36 ?8次下載
    淺談單片機<b class='flag-5'>rom</b>和<b class='flag-5'>ram</b>與<b class='flag-5'>代碼</b>的關系,以及為什么要加上拉電阻

    一個單片機軟件需要多少ROMRAM

    :Total ROM size: 即所需實際ROM最小值,包括代碼code, 只讀數據RO Data,還需包括初始化的讀寫數據,因為斷電后這部分數據需存儲于ROM中,上電后裝載到
    發表于 12-20 19:14 ?0次下載
    一個單片機軟件需要多少<b class='flag-5'>ROM</b>和<b class='flag-5'>RAM</b>

    Vivado使用技巧-支持的Verilog語法

    )和連線(wire)息息相關。Verilog便具有將ASM圖表和電路框圖用計算機語言表達的能力,本文將講述Vivado綜合支持的Verilog硬件描述語言; Verilog提供了行為化
    的頭像 發表于 12-29 10:30 ?6588次閱讀

    手機上的ROMRAM技術原理

    ROMRAM的區別是什么?ROMRAM都是一種存儲技術,只是兩者原理不同,RAM為隨機存儲,掉電不會保存數據,而
    的頭像 發表于 03-30 14:53 ?3371次閱讀

    單片機中的RAM vs ROM

    單片機中的RAM vs ROM
    的頭像 發表于 09-28 17:57 ?1609次閱讀

    巧言單片機RAMROM

    巧言單片機RAMROM
    的頭像 發表于 10-17 15:45 ?1102次閱讀

    什么是RAMROM

    RAM(Random Access Memory,隨機存取存儲器)和ROM(Read-Only Memory,只讀存儲器)是計算機存儲系統中的兩種重要組成部分,它們在計算機的性能和功能上扮演著不同的角色。下面將分別詳細解釋RAM
    的頭像 發表于 08-30 11:38 ?9484次閱讀
    主站蜘蛛池模板: 欧美不卡一区二区三区 | 99精品视频在线观看re | jazzjazzjazz欧美 | 日韩 国产 欧美视频二区 | 亚洲视频在线观看免费 | 九九热视频免费 | 99精品热视频30在线热视频 | 久久久96人妻无码精品蜜桃 | 国产午夜精品一区二区理论影院 | 四虎4hu亚洲精品 | 揉抓捏打抽插射免费视频 | 飘雪韩国在线观看免费高清完整版 | 久见久热 这里只有精品 | 久久伊人青青 | 国产精品乱人无码伦AV在线A | 小舞被爆操| 成片免费观看视频大全 | 亚洲 欧美 国产 综合不卡 | 精品人妻伦一二三区久久AAA片 | 国产69精品久久久久乱码免费 | 国产乱码卡二卡三卡4W | 快穿之诱受双性被灌满h | 久久五月综合婷婷中文云霸高清 | 囚禁固定在调教椅上扩张H 秋霞最新高清无码鲁丝片 秋霞在线看片无码免费 | 国产婷婷午夜无码A片 | 欧美阿v在线天堂 | 国内精品不卡一区二区三区 | 91av影院| 久久久视频2019午夜福利 | 掀开奶罩边躁狠狠躁软学生 | 中文字幕亚洲无线码在线 | 国产视频这里只有精品 | md2.pud 麻豆传媒官网 | 欧美日韩视频一区二区三区 | 久久综合色悠悠 | 99久久re6热精品首页 | 在线视频 中文字幕 | 抽插H浊水H嫩B父皇 虫族bl文全肉高h | 亚洲福利天堂网福利在线观看 | 肉动漫3D卡通无修在线播放 | YELLOW日本动漫免费动漫 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品