【ZYNQ Ultrascale+ MPSOC FPGA教程】第七章 FPGA片內ROM測試實驗

原創聲明:

本原創教程由芯驛電子科技(上海)有限公司(ALINX)創做,版權歸本公司全部,如需轉載,需受權並註明出處。node

適用於板卡型號:

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的數據讀操做。spa

1.實驗原理設計

Xilinx在VIVADO裏爲咱們已經提供了ROM的IP核, 咱們只需經過IP核例化一個ROM,根據ROM的讀時序來讀取ROM中存儲的數據。實驗中會經過VIVADO集成的在線邏輯分析儀ila,咱們能夠觀察ROM的讀時序和從ROM中讀取的數據。3d

2. 程序設計code

2.1 建立ROM初始化文件orm

既然是ROM,那麼咱們就必須提早給它準備好數據,而後在FPGA實際運行時,咱們直接讀取這些ROM中預存儲好的數據就行。Xilinx FPGA的片內ROM支持初始化數據配置。以下圖所示,咱們能夠建立一個名爲rom_init.coe的文件,注意後綴必定是「.coe」,前面的名稱固然能夠隨意起。blog

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

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

2.2 添加ROM IP核

在添加ROM IP以前先新建一個rom_test的工程, 而後在工程中添加ROM IP,方法以下:

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

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

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

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

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

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爲觸發條件,能夠看到讀取的數據與仿真一致。

相關文章
相關標籤/搜索