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

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

3天內不再提示

如何使用FPGA內部的ROM以及程序對該ROM的數據讀操作

電子設計 ? 來源:電子設計 ? 作者:電子設計 ? 2022-02-08 16:30 ? 次閱讀

作者: ALINX

適用于板卡型號:
AXU2CGA/AXU2CGB/AXU3EG/AXU4EV-E/AXU4EV-P/AXU5EV-E/AXU5EV-P /AXU9EG/AXU15EG

實驗Vivado工程為“rom_test”

FPGA本身是SRAM架構的,斷電之后,程序就消失,那么如何利用FPGA實現一個ROM呢,我們可以利用FPGA內部的RAM資源實現ROM,但不是真正意義上的ROM,而是每次上電都會把初始化的值先寫入RAM。本實驗將為大家介紹如何使用FPGA內部的ROM以及程序對該ROM的數據讀操作。

1.實驗原理

Xilinx在VIVADO里為我們已經提供了ROM的IP核, 我們只需通過IP核例化一個ROM,根據ROM的讀時序來讀取ROM中存儲的數據。實驗中會通過VIVADO集成的在線邏輯分析儀ila,我們可以觀察ROM的讀時序和從ROM中讀取的數據。

2. 程序設計

2.1 創(chuàng)建ROM初始化文件

既然是ROM,那么我們就必須提前給它準備好數據,然后在FPGA實際運行時,我們直接讀取這些ROM中預存儲好的數據就行。Xilinx FPGA的片內ROM支持初始化數據配置。如下圖所示,我們可以創(chuàng)建一個名為rom_init.coe的文件,注意后綴一定是“.coe”,前面的名稱當然可以隨意起。

pIYBAGAJlkSADj6fAAAXhmyP0T4901.png

ROM初始化文件的內容格式很簡單, 如下圖所示。第一行為定義數據格式, 16代表ROM的數據格式為16進制。從第3行開始到第34行,是這個32*8bit大小ROM的初始化數據。每行數字后面用逗號,最后一行數字結束用分號。

pIYBAGAJloGAAPqdAABmGOBr0NA634.jpg

rom_init.coe編寫完成后保存一下, 接下去我們開始設計和配置ROM IP核。

2.2 添加ROM IP核

在添加ROM IP之前先新建一個rom_test的工程, 然后在工程中添加ROM IP,方法如下:

2.2.1 點擊下圖中IP Catalog,在右側彈出的界面中搜索rom,找到Block Memory Generator,雙擊打開。

o4YBAGAJlsKACHUcAACIrr-GvG0236.jpg

2.2.2 將Component Name改為rom_ip,在Basic欄目下,將Memory Type改為Single Prot ROM。

pIYBAGAJlwmAWbGhAACSuvD2380169.jpg

2.2.3 切換到Port A Options欄目下,將ROM位寬Port A Width改為8,將ROM深度Port A Depth改為32,使能管腳Enable Port Type改為Always,并取消Primitives Output Register

o4YBAGAJl0eAAWVBAAB8UIy6iWc134.jpg

2.2.4 切換到Other Options欄目下,勾選Load Init File,點擊Browse,選中之前制作好的.coe文件。

pIYBAGAJl7uAPgKHAABmm59nQ1c005.jpg

2.2.5 點擊ok,點擊Generate生成ip核。

pIYBAGAJl_qAZK3jAABTQh9aB0g294.jpg

3. ROM測試程序編寫

ROM的程序設計非常簡單, 在程序中我們只要每個時鐘改變ROM的地址, ROM就會輸出當前地址的內部存儲數據,例化ila,用于觀察地址和數據的變化。ROM IP的實例化及程序設計如下:

`timescale1ns/1ps module rom_test( input sys_clk, //25MHz時鐘 input rst_n //復位,低電平有效 ); wire[7:0] rom_data; //ROM讀出數據 reg [4:0] rom_addr;//ROM輸入地址 //產生ROM地址讀取數據 always@(posedge sys_clk ornegedge rst_n) begin if(!rst_n) rom_addr <=10'd0; else rom_addr <= rom_addr+1'b1; end //實例化ROM rom_ip rom_ip_inst ( .clka (sys_clk ),//inoput clka .addra (rom_addr ),//input [4:0] addra .douta (rom_data )//output [7:0] douta ); //實例化邏輯分析儀 ila_0 ila_m0 ( .clk (sys_clk), .probe0 (rom_addr), .probe1 (rom_data) ); endmodule

綁定引腳
##################Compress Bitstream############################
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]set_property PACKAGE_PIN AB11 [get_ports sys_clk]set_property IOSTANDARD LVCMOS33 [get_ports sys_clk]create_clock -period 40.000 -name sys_clk -waveform {0.000 20.000} [get_ports sys_clk]set_property IOSTANDARD LVCMOS33 [get_ports {rst_n}]set_property PACKAGE_PIN W13 [get_ports {rst_n}]

4. 仿真

仿真結果如下,符合預期,與RAM的讀取數據一樣,數據也是滯后于地址一個周期。

5. 板上驗證

以地址0為觸發(fā)條件,可以看到讀取的數據與仿真一致。

審核編輯:何安

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

    關注

    1625

    文章

    21623

    瀏覽量

    601242
收藏 人收藏

    評論

    相關推薦

    ROM對計算機性能的影響

    是一種非易失性存儲器,即使在斷電的情況下也能保持數據不丟失。它通常用于存儲固件,這些固件是計算機啟動和運行操作系統(tǒng)所必需的。ROM的內容在制造過程中被寫入,并且通常不能被用戶更改。 ROM
    的頭像 發(fā)表于 11-04 10:31 ?119次閱讀

    ROM數據丟失的常見原因

    的常見原因 1. 硬件故障 1.1 物理損壞 ROM芯片可能因為物理沖擊、高溫、濕度、腐蝕等因素而損壞。這些因素可能導致芯片內部電路斷裂或短路,從而造成數據丟失。 1.2 老化 隨著時間的推移,
    的頭像 發(fā)表于 11-04 10:29 ?141次閱讀

    了解ROM與固態(tài)硬盤的關系

    ,但同時也存在一定的聯系。 1. ROM的定義與特點 ROM是一種非易失性存儲器,這意味著即使在斷電的情況下,存儲在ROM中的數據也不會丟失。ROM
    的頭像 發(fā)表于 11-04 10:24 ?149次閱讀

    手機中的ROM與內存的區(qū)別

    1. ROM(只讀存儲器) 定義: ROM是一種非易失性存儲器,這意味著即使在斷電的情況下,存儲在ROM中的數據也不會丟失。在智能手機中,ROM
    的頭像 發(fā)表于 11-04 10:23 ?181次閱讀

    ROM在嵌入式系統(tǒng)中的應用

    ROM(Read-Only Memory,只讀存儲器)是一種非易失性存儲器,即使在斷電的情況下也能保持存儲的數據。在嵌入式系統(tǒng)中,ROM扮演著至關重要的角色,它用于存儲固件、操作系統(tǒng)、
    的頭像 發(fā)表于 11-04 10:06 ?120次閱讀

    如何選擇適合的ROM類型

    在現代電子設備和計算機系統(tǒng)中,ROM扮演著至關重要的角色。它用于存儲固件、操作系統(tǒng)、啟動代碼以及其他重要的系統(tǒng)信息。隨著技術的發(fā)展,ROM的種類和特性也在不斷變化。 1.
    的頭像 發(fā)表于 11-04 10:04 ?93次閱讀

    固態(tài)ROM的工作原理

    、數據總線和控制邏輯組成。存儲單元是ROM的核心,用于存儲數據;地址解碼器負責將輸入的地址信號轉換為存儲單元的選擇信號;數據總線用于傳輸數據
    的頭像 發(fā)表于 11-04 10:03 ?146次閱讀

    什么是ROM存儲器的定義

    一、ROM存儲器的定義 ROM存儲器是一種在計算機和電子設備中用于存儲固定數據的存儲器。與RAM(隨機存取存儲器)不同,ROM存儲器中的數據
    的頭像 發(fā)表于 11-04 09:59 ?123次閱讀

    在Keystone II器件上使用Arm ROM引導加載程序

    電子發(fā)燒友網站提供《在Keystone II器件上使用Arm ROM引導加載程序.pdf》資料免費下載
    發(fā)表于 09-19 12:33 ?0次下載
    在Keystone II器件上使用Arm <b class='flag-5'>ROM</b>引導加載<b class='flag-5'>程序</b>

    rom和ram都是內存儲器嗎

    存儲的數據在斷電后仍然可以保持。ROM主要用于存儲計算機啟動時所需的系統(tǒng)程序和固件,如BIOS、操作系統(tǒng)等。 1.2 RAM(Random Access Memory):隨機存取存儲器
    的頭像 發(fā)表于 08-06 09:09 ?499次閱讀

    rom斷電后數據會丟失嗎

    ROM的內容通常是在制造過程中被編程的,而且其內容在正常操作期間是只讀的,用戶無法對其進行改寫。因此,ROM非常適用于存儲固定的操作系統(tǒng)、固件、BIOS固件和其他嵌入式設備所需的固定
    的頭像 發(fā)表于 02-09 07:38 ?6490次閱讀

    rom是什么存儲器是內存還是外存

    ROM(Read-Only Memory)是一種只讀存儲器,用于存儲計算機程序數據,它在計算機系統(tǒng)中扮演著非常重要的角色。ROM的存儲內容在制造時就被寫入,并且在計算機運行過程中不能
    的頭像 發(fā)表于 02-05 10:05 ?5575次閱讀

    ram和rom的作用和區(qū)別是什么

    詳細探討RAM和ROM的作用和區(qū)別。 一、RAM的作用: 臨時存儲:RAM被用作臨時存儲器,用于計算機處理數據程序時的工作區(qū)域。當計算機啟動時,操作系統(tǒng)和應用
    的頭像 發(fā)表于 02-04 17:05 ?4339次閱讀

    RAM和ROM的區(qū)別,哪個與CPU連接

    數據和指令,而ROM則用于存儲計算機的基本操作系統(tǒng)和啟動程序。本文將探討RAM和ROM的區(qū)別,以及
    的頭像 發(fā)表于 01-31 14:14 ?2156次閱讀

    rom與ram的主要區(qū)別 rom斷電后數據會丟失嗎

    ,斷電后數據不會丟失。ROM中的數據在制造過程中被永久地寫入芯片中,并且無法從ROM中刪除或修改數據。這使得
    的頭像 發(fā)表于 01-25 10:46 ?3388次閱讀