我正在从视频文件生成帧,然后从测试台中读取该帧。 到目前为止我所做的是每次调用任务时使用不同的内存图像文件加载相同的内存“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);
sformatf 是可合成代码吗?我可以使用 sformatf 读取要合成的代码库中的多个文件吗