本實驗基于xilinx ARTIX-7芯片驗證實現,有時間有興趣的朋友可在其他FPGA芯片上實現驗證。
當大家看到《xilinx verilog語法技巧(三)–RAM的初始化》文章的時候很多人認為initial語句,$readmemb語句均是不可綜合語句(只能用來寫測試文件),但是xilinx的綜合器已經悄然改變了這一點。
rams_init_file源碼:
// Initializing Block RAM from external data file // Binary data // File: rams_init_file.v module rams_init_file (clk, we, addr, din, dout); input clk; input we; input [5:0] addr; input [31:0] din; output [31:0] dout; reg [31:0] ram [0:63]; reg [31:0] dout; initial begin $readmemb("rams_init_file.data",ram); end always @(posedge clk) begin if (we) ram[addr] <= din; dout <= ram[addr]; end endmodule
rams_init_file.data源文件:
00001110110000011001111011000110 00101011001011010101001000100011 01110100010100011000011100001111 01000001010000100101001110010100 00001001101001111111101000101011 00101101001011111110101010100111 11101111000100111000111101101101 10001111010010011001000011101111 00000001100011100011110010011111 11011111001110101011111001001010 11100111010100111110110011001010 11000100001001101100111100101001 10001011100101011111111111100001 11110101110110010000010110111010 01001011000000111001010110101110 11100001111111001010111010011110 01101111011010010100001101110001 01010100011011111000011000100100 11110000111101101111001100001011 10101101001111010100100100011100 01011100001010111111101110101110 01011101000100100111010010110101 11110111000100000101011101101101 11100111110001111010101100001101 01110100000011101111111000011111 00010011110101111000111001011101 01101110001111100011010101101111 10111100000000010011101011011011 11000001001101001101111100010000 00011111110010110110011111010101 01100100100000011100100101110000 10001000000100111011001010001111 11001000100011101001010001100001 10000000100111010011100111100011 11011111010010100010101010000111 10000000110111101000111110111011 10110011010111101111000110011001 00010111100001001010110111011100 10011100101110101111011010110011 01010011101101010001110110011010 01111011011100010101000101000001 10001000000110010110111001101010 11101000001101010000111001010110 11100011111100000111110101110101 01001010000000001111111101101111 00100011000011001000000010001111 10011000111010110001001011100100 11111111111011110101000101000111 11000011000101000011100110100000 01101101001011111010100011101001 10000111101100101001110011010111 11010110100100101110110010100100 01001111111001101101011111001011 11011001001101110110000100110111 10110110110111100101110011100110 10011100111001000010111111010110 00000000001011011111001010110010 10100110011010000010001000011011 11001010111111001001110001110101 00100001100010000111000101001000 00111100101111110001101101111010 11000010001010000000010100100001 11000001000110001101000101001110 10010011010100010001100100100111
tb_rams_init_file測試頂層文件:
`timescale 1ns / 1ps module tb_rams_init_file( input clk, input reset, output [2:0] led_rgb0, output [2:0] led_rgb1, output [2:0] led_rgb2, output [2:0] led_rgb3 ); reg [5:0] addr; wire [31:0] dout; reg [27:0] cnt; assign led_rgb0 = dout[2:0]; assign led_rgb1 = dout[5:3]; assign led_rgb2 = dout[8:6]; assign led_rgb3 = dout[11:9]; always @(posedge clk ) begin if(reset==1'b1) begin cnt <= 28'd0; addr <= 0; end else if(cnt == 28'd100000000)begin//1s cnt <= 28'd0; addr <= addr +1; end else begin cnt <= cnt + 1; addr <= addr; end end rams_init_file u_rams_init_file( .clk(clk), .we(1'b0), .addr(addr), .din(32'b0), .dout(dout)); endmodule
約束文件(根據自己板卡):
set_property PACKAGE_PIN E3 [get_ports clk] set_property IOSTANDARD LVCMOS33 [get_ports clk] set_property PACKAGE_PIN D9 [get_ports reset] set_property IOSTANDARD LVCMOS33 [get_ports reset] set_property PACKAGE_PIN E1 [get_ports led_rgb0[0]] set_property IOSTANDARD LVCMOS33 [get_ports led_rgb0[0]] set_property PACKAGE_PIN G6 [get_ports led_rgb0[1]] set_property IOSTANDARD LVCMOS33 [get_ports led_rgb0[1]] set_property PACKAGE_PIN F6 [get_ports led_rgb0[2]] set_property IOSTANDARD LVCMOS33 [get_ports led_rgb0[2]] set_property PACKAGE_PIN G4 [get_ports led_rgb1[0]] set_property IOSTANDARD LVCMOS33 [get_ports led_rgb1[0]] set_property PACKAGE_PIN G3 [get_ports led_rgb1[1]] set_property IOSTANDARD LVCMOS33 [get_ports led_rgb1[1]] set_property PACKAGE_PIN J4 [get_ports led_rgb1[2]] set_property IOSTANDARD LVCMOS33 [get_ports led_rgb1[2]] set_property PACKAGE_PIN H4 [get_ports led_rgb2[0]] set_property IOSTANDARD LVCMOS33 [get_ports led_rgb2[0]] set_property PACKAGE_PIN J3 [get_ports led_rgb2[1]] set_property IOSTANDARD LVCMOS33 [get_ports led_rgb2[1]] set_property PACKAGE_PIN J2 [get_ports led_rgb2[2]] set_property IOSTANDARD LVCMOS33 [get_ports led_rgb2[2]] set_property PACKAGE_PIN K2 [get_ports led_rgb3[0]] set_property IOSTANDARD LVCMOS33 [get_ports led_rgb3[0]] set_property PACKAGE_PIN K1 [get_ports led_rgb3[1]] set_property IOSTANDARD LVCMOS33 [get_ports led_rgb3[1]] set_property PACKAGE_PIN H6 [get_ports led_rgb3[2]] set_property IOSTANDARD LVCMOS33 [get_ports led_rgb3[2]]
審核編輯:劉清
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
RAM
+關注
關注
8文章
1369瀏覽量
114901 -
Xilinx
+關注
關注
71文章
2171瀏覽量
121940 -
Verilog
+關注
關注
28文章
1351瀏覽量
110268 -
FPGA芯片
+關注
關注
3文章
246瀏覽量
39843
原文標題:RAM初始化的下板驗證(Xilinx)
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
電源關閉幾秒后,Ram數據不會初始化
電源關閉幾秒后,Ram數據不會初始化以上來自于谷歌翻譯以下為原文 Ram data not init after power off for seconds
發表于 07-10 14:03
s32k146如何初始化RAM?
我在當前項目中使用 s32k146。因為我需要初始化 RAM,除了上電復位之外的每次復位的特定部分。(On Power On Reset 應初始化所有數據)。有什么辦法可以做到這一點嗎?
發表于 03-31 07:36
手機模塊初始化向導
手機模塊初始化向導:為了剛好的對手機模塊進行初始化,所以把最基本的向導寫下來.本向導適用于本公司的西門子TC35I和華為GT9000模塊。一、在初始化手機模塊前,請先確定DT
發表于 09-18 09:41
?17次下載
ds1302時鐘芯片初始化,自動決定DS1302是否需要初始化程序
ds1302芯片時鐘芯片大家都在問到底需要不需要初始化?這篇文章將會給大家一個程序,可以自動決定DS1302是否需要初始化。
發表于 10-19 19:19
?8626次閱讀
uboot和內核里phy的初始化_內核里的雙網絡配置及phy的初始化
uboot 和內核里 phy 的初始化,以及內核里的雙網絡配置及 phy 的初始化。 本文以盈鵬飛嵌入式的CoM-335x(基于AM335x)核心板及網絡芯片LAN8720 為例,說明修改步驟
8253初始化程序分享_8253應用案例
本文首先介紹了8253概念及8253各通道的工作方式,其次詳細介紹了8253初始化要求及編程,最后用一個例子介紹了8253的初始化程序。
發表于 05-23 15:52
?2.2w次閱讀
如何設置STM32單片機非初始化數據變量不被零初始化
一些產品,當系統復位后(非上電復位),可能要求保持住復位前RAM中的數據,用來快速恢復現場,或者不至于因瞬間復位而重啟現場設備。而keil mdk在默認情況下,任何形式的復位都會將RAM區的非
發表于 01-02 15:56
?8420次閱讀
在51平臺下初始化文件的引入導致全局變量無法初始化的問題如何解決
本文檔的主要內容詳細介紹的是在51平臺下初始化文件的引入導致全局變量無法初始化的問題如何解決。
發表于 08-20 17:31
?0次下載
想要對RAM初始化該怎么操作
RAM的初始化并沒有那么神秘,如果是采用Xilinx的IP Core,只需提供一個.coe文件,其內容就是RAM的初始值,只需要注意coe文件的格式就好,這里就不再贅述。
評論