ROM是只讀型存儲(chǔ)器,寫入數(shù)據(jù)之后就不能在對(duì)數(shù)據(jù)進(jìn)行更改。下面提供3種創(chuàng)建ROM的方法:
一、自己動(dòng)手通過(guò)readmemh或readmemb函數(shù)來(lái)將自己寫的文件與ROM進(jìn)行關(guān)聯(lián);有幾點(diǎn)需要注意的地方:寄存器rom的大?。ㄎ粚捄蜕疃龋┤缦旅娴拇a中位寬為8,深度為1024
// An highlighted block module myrom( clk, addr, q ); input clk; input [9:0] addr; output reg[9:0] q; reg [7:0] rom [1023:0]; initial begin $readmemh("./xxx.txt",rom,0,1023); //讀16進(jìn)制的數(shù)據(jù) //格式$readmemh("file_name",memory_name[,start_addr[,finish_addr]]); //file_name:文件名;memory_name:ROM名;start_addr:開始地址;finish_addr:結(jié)束地址 //[]的內(nèi)容為可選內(nèi)容, //readmemb 讀2進(jìn)制的數(shù)據(jù) end always(posedge clk) q<=rom[addr]; endmodule
二、第二中方法是通過(guò)ip核創(chuàng)建rom。選擇菜單欄中的Tools下的ip核配置工具,搜索rom,選著Verilog語(yǔ)言,并命名文件。點(diǎn)擊下一步
可以看到,在配置工具中依然需要設(shè)置位寬和深度。
在mem init中的文件名,這里需要注意的是文件必須是.mif和.hex文件。
三、第三中方法是直接生成代碼,在代碼段上進(jìn)行修改。
生成的代碼段如下:這里需要修改的是兩個(gè)參數(shù)DATA_WIDTH、ADDR_WIDTH。然后將對(duì)應(yīng)的文件名修改了就可以了。
// Quartus II Verilog Template // Single Port ROM module single_port_rom #(parameter DATA_WIDTH=8, parameter ADDR_WIDTH=8) ( input [(ADDR_WIDTH-1):0] addr, input clk, output reg [(DATA_WIDTH-1):0] q ); // Declare the ROM variable reg [DATA_WIDTH-1:0] rom[2**ADDR_WIDTH-1:0]; // Initialize the ROM with $readmemb. Put the memory contents // in the file single_port_rom_init.txt. Without this file, // this design will not compile. // See Verilog LRM 1364-2001 Section 17.2.8 for details on the // format of this file, or see the "Using $readmemb and $readmemh" // template later in this section. initial begin $readmemb("single_port_rom_init.txt", rom); end always @ (posedge clk) begin q <= rom[addr]; end endmodule
編輯:hfy
-
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7493瀏覽量
163877 -
ROM
+關(guān)注
關(guān)注
4文章
572瀏覽量
85790
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論