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

时间:2015-08-13 13:54:16

标签: verilog system-verilog

我从视频文件生成帧,然后从我的测试平台读取。 我到目前为止所做的是加载相同的内存" 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

1 个答案:

答案 0 :(得分:3)

使用$ sformatf

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