在自动循环中使用 $readmemh 将不同文件加载到同一内存?

问题描述 投票:0回答:2

我正在从视频文件生成帧,然后从测试台中读取该帧。 到目前为止我所做的是每次调用任务时使用不同的内存图像文件加载相同的内存“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
verilog system-verilog
2个回答
3
投票

使用$sformatf

 $readmemh($sformatf("img_data/1920x1080/video_frame_%0d.mem",pic_num), mem);

0
投票

sformatf 是可合成代码吗?我可以使用 sformatf 读取要合成的代码库中的多个文件吗

© www.soinside.com 2019 - 2024. All rights reserved.