URL
https://opencores.org/ocsvn/qaz_libs/qaz_libs/trunk
Subversion Repositories qaz_libs
[/] [qaz_libs/] [trunk/] [BFM/] [src/] [anf/] [s_anf_api.svh] - Rev 49
Compare with Previous | Blame | View Log
//////////////////////////////////////////////////////////////////////
//// ////
//// Copyright (C) 2019 Authors and OPENCORES.ORG ////
//// ////
//// This source file may be used and distributed without ////
//// restriction provided that this copyright statement is not ////
//// removed from the file and that any derivative work contains ////
//// the original copyright notice and the associated disclaimer. ////
//// ////
//// This source file is free software; you can redistribute it ////
//// and/or modify it under the terms of the GNU Lesser General ////
//// Public License as published by the Free Software Foundation; ////
//// either version 2.1 of the License, or (at your option) any ////
//// later version. ////
//// ////
//// This source is distributed in the hope that it will be ////
//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
//// PURPOSE. See the GNU Lesser General Public License for more ////
//// details. ////
//// ////
//// You should have received a copy of the GNU Lesser General ////
//// Public License along with this source; if not, download it ////
//// from http://www.opencores.org/lgpl.shtml ////
//// ////
//////////////////////////////////////////////////////////////////////
class s_anf_api #(type T = shortreal) extends s_avf_api;
`uvm_object_param_utils(s_anf_api #(T))
// --------------------------------------------------------------------
function numeric_frame#(T) new_frame;
numeric_frame #(T) f_h = new();
f_h.init( '{c_h.lines_per_frame, c_h.pixels_per_line}
, c_h.pixels_per_clk
);
return f_h;
endfunction
// --------------------------------------------------------------------
task put_array(numeric_frame #(T) f_h);
f_h.make_2d_frame();
frame_buffer.put(f_h);
endtask
// --------------------------------------------------------------------
task automatic put_test_pattern(string pattern, T value = 0.0);
numeric_frame #(T) f_h = new();
f_h.init( '{c_h.lines_per_frame, c_h.pixels_per_line}
, c_h.pixels_per_clk
);
case(pattern.tolower)
"constant": f_h.a_h.make_2d_constant(value);
// "counting": f_h.make_counting();
// "horizontal": f_h.make_horizontal();
// "vertical": f_h.make_vertical();
// "random": f_h.make_random();
default: `uvm_fatal(get_name(), "Pattern not supported!")
endcase
f_h.make_2d_frame();
frame_buffer.put(f_h);
uvm_report_info(get_name(), $sformatf("| put_test_pattern(%s)", pattern.tolower));
endtask
// --------------------------------------------------------------------
task load_from_file(string file_name);
byte mem[3:0];
integer fd;
integer code;
int x, y;
numeric_frame #(T) f_h = new();
fd = $fopen(file_name, "rb");
f_h.init( '{c_h.lines_per_frame, c_h.pixels_per_line}
, c_h.pixels_per_clk
);
f_h = new_frame();
for(int i = 0; $feof(fd) == 0; i++)
begin
code = $fread(mem, fd);
y = i / c_h.pixels_per_line;
x = i % c_h.pixels_per_line;
f_h.lines[y].pixel[x] = {>>{mem}};
end
frame_buffer.put(f_h);
$fclose(fd);
endtask
// --------------------------------------------------------------------
function new(string name = "s_anf_api");
super.new(name);
endfunction
// --------------------------------------------------------------------
endclass