問題:
某芯片,有500個寄存器,需要在上電的時候由FPGA向這些寄存器中寫入初始值,初始值已經通過相應的文檔給出了具體值,這些值都是已知的。
分析關鍵點:
數據量比較多(Verilog代碼,通過case語句、always語句這種查找表的方式,數據量比較大,很不方便)
數值都是已知的 (數據內容固定)
整個過程只需要工作一次
、
ROM : 只讀存儲器-----read only memory?
非易失性,斷電后數據不會丟失。嵌入電腦主板或者做移動存儲介質就很合適,體積夠小,提供的容量可以比光盤和軟盤的大,速度也不慢。
接下來 我們在Vivado中如何實現ROM IP核。
創建工程,進入Vivado界面
兩者最主要的差別是生成的IP核所占用的FPGA資源不一樣,
從Distributed Memory Generator 生成的ROM/RAM Core占用的資源是LUT (查找表,查找表本質就是一個小的RAM);
從Block Memory Generator生成的ROM/RAMCore 占用的資源是 Block Memory (嵌入式的硬件RAM) ,
根據需求選擇Block Memory Generator
然后編寫ROM測試文件
代碼如下
`timescale 1ns / 1ps
module rom_tb;reg clka;reg [9:0]addra;wire [9:0]douta;rom rom(.clka(clka),.addra(addra),.douta(douta));initial clka = 10;always #10 clka = ~clka;initial beginaddra = 100;#201;repeat(3000) beginaddra = addra + 1'd1;#20;end#2000$stop;endendmodule
仿真波形
然后把波形調為模擬輸出
觀察輸出波形(正弦波)