在自动循环中使用 $readmemh 将不同文件加载到同一内存?
Loading different files with $readmemh to the same memory in a automated loop?
我正在从视频文件生成帧,然后从我的测试台读取该文件。
到目前为止,我所做的是每次调用任务时使用不同的内存映像文件加载相同的内存“mem”,效果非常好:
task play_frame(input [31:0] total_pixels, input [12:0] pic_num);
begin
@(posedge clk);
case (pic_num)
0: $readmemh("img_data/1920x1080/video_frame_1.mem", mem);
1: $readmemh("img_data/1920x1080/video_frame_2.mem", mem);
2: $readmemh("img_data/1920x1080/video_frame_3.mem", mem);
...
...
...
endcase
repeat (total_pixels) begin
.
.
.
end
end
endtask
现在的问题是我想调用这个任务1000次。这意味着我必须为每种情况记下要加载到内存中的文件的名称 mem_s.
有没有办法自动执行此操作?
可能是这样的:
task play_frame(input [31:0] total_pixels, input [12:0] pic_num);
begin
@(posedge clk);
$readmemh("img_data/1920x1080/video_frame_*$(pic_num)*.mem", mem);
repeat (total_pixels) begin
.
.
.
end
end
endtask
使用 $sformatf
$readmemh($sformatf("img_data/1920x1080/video_frame_%0d.mem",pic_num), mem);
我正在从视频文件生成帧,然后从我的测试台读取该文件。 到目前为止,我所做的是每次调用任务时使用不同的内存映像文件加载相同的内存“mem”,效果非常好:
task play_frame(input [31:0] total_pixels, input [12:0] pic_num);
begin
@(posedge clk);
case (pic_num)
0: $readmemh("img_data/1920x1080/video_frame_1.mem", mem);
1: $readmemh("img_data/1920x1080/video_frame_2.mem", mem);
2: $readmemh("img_data/1920x1080/video_frame_3.mem", mem);
...
...
...
endcase
repeat (total_pixels) begin
.
.
.
end
end
endtask
现在的问题是我想调用这个任务1000次。这意味着我必须为每种情况记下要加载到内存中的文件的名称 mem_s.
有没有办法自动执行此操作?
可能是这样的:
task play_frame(input [31:0] total_pixels, input [12:0] pic_num);
begin
@(posedge clk);
$readmemh("img_data/1920x1080/video_frame_*$(pic_num)*.mem", mem);
repeat (total_pixels) begin
.
.
.
end
end
endtask
使用 $sformatf
$readmemh($sformatf("img_data/1920x1080/video_frame_%0d.mem",pic_num), mem);