嵌入式ROM核的調用


本次設計的工具和源碼在:http://download.csdn.net/detail/noticeable/9914766

 

課程目的:調用quartus II提供的rom(read only memory)進行系統項目設計

 

實驗現象:將一組固定的波形數據以MIF的格式存儲於fpga中使用IP核構建的片上ROM中,開發板上電后,系統從ROM 中讀取數據,並將數據通過I/O口輸出,使用signal TAP II取I/O口輸出的數據,即可得到三角波形;並通過quartus II提供的in system memory content editor 工具在線更改ROM 中的數據,然后再次通過signal TAP II將更改后的波形讀取出來。

 

 

 知識點:1、mif文件的生成方法2、ROM IP核的使用。3、In-system memory content editor 內存查看工具的使用。4、signalTap II 調試工具的簡單使用

 

 

開發流程:

首先,自己創建對應波形的mif文件,以便后面調用rom IP核的時候使用

可以自己創建一個文本,然后在文件中輸入自己想自己想要顯示的波形的數據再保存,但是這樣設計使得設計過於繁瑣,這里推薦使用軟件mif_maker2010直接生成.mif文件(軟件在源碼壓縮包中)

打開軟件

設置全局參數

本次設計為256個數據長度8位位寬

選擇期望生成的波形,保存即可得到相應波形對應參數的mif文件。

 

 

新建工程,調用rom ip核

 

 

 之后直接next到finish即完成生成rom文件了。

將IP核設置為頂層文件

然后編寫IP核的testbench文件

`timescale 1ns/1ns
`define clock_period 20
                module rom_tb;
                reg [7:0]addr;
                reg clk;
                wire [7:0]q;
                        rom        rom (
                                                .address(addr),
                                                .clock(clk),
                                                .q(q));
                    initial clk=1;
                    always#(`clock_period/2)
                    clk=~clk;
                
                integer i;
                    initial 
                    begin 
                    addr=0;
                    for(i=0;i<=2550;i=i+1)begin
                    #`clock_period;
                    addr=addr+1;
                    end
                    #(`clock_period*50);
                    $stop;
                    end 
                    
                    
                    


endmodule 

設定仿真路徑進行仿真,可以看到q成功的將mif文件提取出來了,並通過仿真加強對romIP核的理解

 

 選中q,右鍵修改顯示格式,即可看到仿真出來的模擬的鋸齒波形。

 

 將mif未見改為正弦波的mif文件觀察

此時發現波形有斷層

這是因為選擇的顯示格式為無符號的,將格式改為有符號的即可

 

 在這里,波形發生器的仿真設計已經完成了(對於控制頻率,其實就是一個控制地址變化的方式)。

 

新建一個rom_top文件,將其設置為頂層文件,其目的是設計地址發生模塊:

module rom_top(clk,
                                        rst_n,
                                        q
                                        );
                    
                input clk;
                input rst_n;
                output [7:0]q;
                reg [7:0]addr;
                rom        rom_1 (
                                                .address(addr),
                                                .clock(clk),
                                                .q(q));
                
                    always@(posedge clk or negedge rst_n)
                                    if(!rst_n)
                                    addr<=0;
                                    else 
                                    addr<=addr+1;
                
endmodule    

 

 

 

 

下面為了使in system memory content editor 工具在線修改ROM中的數據,需要對IP核進行設置

對引腳進行分配,其中q[0]~q[7]對應開發板上GOIP09~GPIO2

 

 全編譯后,通過FPGA內部搭建一個片上的邏輯分析儀,抓取rom里的文件:

新建一個signal tap II  logic  analyzer file文件

 

 

 

 

保存在工程目錄下

 

 

 將邏輯分析儀工具添加到工程文件夾中,對工程進行全編譯

將工程生成的.sof文件下載到FPGA開發板中,進行板級驗證,燒寫完成后打開logic.stp文件

 

即可看到成功顯示的正弦波波形了

下面通過in system memory content editor 工具對rom 內容進行更改

 

 可以看到signalTap II logic analyzer中顯示的波形變為了鋸齒波了。

至此,整個設計就完成了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM