如何给Verilog中的数组初始化赋值

下面是我声明的391680深,8位宽的数组,用来存储一张BMP图像
reg [7:0]Image_BMP[391680:0];
求教各位大侠,这里如何将我的初始化值赋值(图片16进制数据)进去呢?
跪求大侠相助!!!!!!!
在线等待大侠相助!!!!!!我现在就在等。。。。

【1】Image_BMP应该是一个memory,数组是C元语言的叫法
【2】如果你只是仿真的话,可以用verilog的for循环语句把图片的数据一一存入
【3】如果用于综合,如果是Quartus的软件,建议你用
(* ram_init_file = "my_init_file.mif" *) reg [7:0]Image_BMP[391680:0];
这样的综合属性语句,my_init_file.mif存放你的BMP数据,请参考http://quartushelp.altera.com/11.1/mergedProjects/hdl/vlog/vlog_file_dir_ram_init.htm了解详情
【4】欢迎采纳,欢迎提问,祝你好运追问

请问大侠
【1】(* ram_init_file = "my_init_file.mif" *) reg [7:0]Image_BMP[391680:0]; //这个语句放在程序的什么位置?

【2】这个图片数据(0xFF)是以什么样的格式或结构存放于my_init_file.mif中的呢?
可以举个例子吗?

追答

【1】综合属性,放在memory变量声明的位置
【2】你是想问怎么得到mif文件吧,你用BmpToMif.exe这个软件就好了
【3】欢迎采纳!欢迎提问

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-02
Image_BMP应该是个memory吧. 如果不是testbench那就用一些时钟周期写进去啊.

reg [8*391691:0] Image_Vector = "你的数据字符串";
integer i;
reg init;
always@(posedge clk, negedge rst) begin
if(rst) begin
i = 0;
init = 1'b1;
end else begin
if(i < 391681) begin
i = i + 1;
end else begin
init = 1'b0;
end
end
end

always@(posedge clk) begin
if(init) begin
Image_BMP[i] = Image_Vector[8*(i+1):8*i];
end
end

否则可以用for写入
reg [8*391691:0] Image_Vector = "你的数据字符串";
integer i;
initial begin
for(i = 0; i < 391691; i = i +1) begin
Image_BMP[i] = Image_vector[8*(i+1):8*i];
end
end本回答被网友采纳
第2个回答  2013-08-08
用一个for循环;
例如
for(i=0;i++;i<=391680)
begin
reg[i] = 8'h你的数据;
end
第3个回答  2013-08-08
用个for循环追问

请问这些数据放程序的什么位置

相似回答