取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
maolinj
Xilinx Employee
Xilinx Employee
175 次查看
注册日期: ‎05-09-2018

【分享】verilog ROM参数化赋初值

当数据量较大时,通常使用Block RAM作为ROM,Block RAM可使用initial赋初值,读入一个文件数据作为初始值。
当工程中需要用到很多ROM模块时,可将文件名作为参数,传入ROM模块,达到复用此模块的目的。

示例如下:

//********************************************************
module test_sprom
#(
parameter C_FILE = "cos.txt",
parameter C_AWIDTH = 8,
parameter C_DWIDTH = 32
)
(
input I_clk,
input [C_AWIDTH-1 : 0] I_addr,
output reg [C_DWIDTH-1 : 0] O_data
);

(* RAM_STYLE="BLOCK" *)
reg [C_DWIDTH-1 : 0] S_test_rom [2**C_AWIDTH-1 : 0];

initial
begin
$readmemb(C_FILE,S_test_rom);
end

always @(posedge I_clk)
begin
    O_data <= S_test_rom[I_addr];
end

endmodule
//*******************************************************

 

0 回复数