Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change Verilog API for getting/setting values #12

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 40 additions & 40 deletions src/verilog/sknobs.sv
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,6 @@ package sknobs;
iterator_get_string = sknobs_iterator_get_string(iterator);
endfunction: iterator_get_string

function string get_string(string name, string default_value="unspecified");
get_string = sknobs_get_string(name, default_value);
// TBD figure out how to use the UVM reporter here, chicken and egg problem
$display("%0d:I:sknobs: +%s=%s", $time, name, get_string);
endfunction: get_string

function string find_file(string filename);
find_file = sknobs_find_file(filename);
$display("%0d:I:sknobs: find_file: %s=%s", $time, filename, find_file);
Expand All @@ -58,24 +52,33 @@ package sknobs;
function string get_filename(string filename, string default_value="unspecified");
get_filename = sknobs_get_filename(filename, default_value);
endfunction: get_filename
function longint get_value(string name, longint default_value=0);
get_value = sknobs_get_value(name, default_value);
// TBD figure out how to use the UVM reporter here, chicken and egg problem
$display("%0d:I:sknobs: +%s=%0d", $time, name, get_value);
endfunction: get_value

function longint get_dynamic_value(string name, longint default_value=0);
get_dynamic_value = sknobs_get_dynamic_value(name, default_value);
endfunction: get_dynamic_value

class value #(type T=longint);

static function T get(string name, T default_value=0);
case (type(default_value))
type(string): begin
// TBD figure out how to use the UVM reporter here, chicken and egg problem
$display("%0d:I:sknobs: +%s=%s", $time, name, get);
return T'(sknobs_get_string(name, default_value));
end

function void set_value(string name, longint value);
void'(sknobs_set_value(name, value));
endfunction: set_value
default: return T'(sknobs_get_value(name, longint'(default_value)));
endcase
endfunction: get

function void set_string(string name, string value);
void'(sknobs_set_string(name, value));
endfunction: set_string
static function void set(string name, T value);
case (type(value))
type(string): void'(sknobs_set_string(name, value));
default: void'(sknobs_set_value(name, longint'(value)));
endcase
endfunction: set

static function T get_dynamic(string name, T default_value=0);
get_dynamic = T'(sknobs_get_dynamic_value(name, longint'(default_value)));
endfunction: get_dynamic

endclass: value

function longint eval(string expr);
eval = sknobs_eval(expr);
Expand Down Expand Up @@ -104,35 +107,32 @@ package sknobs;
return "";
endfunction: iterator_get_string

function string get_string(string name, string default_value="unspecified");
return default_value;
endfunction: get_string

function string find_file(string filename);
return "";
endfunction: find_file

function string get_filename(string filename, string default_value="unspecified");
return "";
endfunction: get_filename

function longint get_value(string name, longint default_value=0);
return default_value;
endfunction: get_value

function longint get_dynamic_value(string name, longint default_value=0);
return default_value;
endfunction: get_dynamic_value

function void set_value(string name, longint value);
endfunction: set_value

function void set_string(string name, string value);
endfunction: set_string

function longint eval(string expr);
return 0;
endfunction: eval

class value #(type T=longint);

static function T get(string name, T default_value=0);
return default_value;
endfunction: get

static function void set(string name, T value);
endfunction: set_value

static function T get_dynamic(string name, T default_value=0);
return default_value;
endfunction: get_dynamic

endclass: value
`endif // !`ifndef __SKNOBS_NOP__

endpackage: sknobs
10 changes: 5 additions & 5 deletions src/verilog/testsknobs_dpi.sv
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ import sknobs::*;
module test;
chandle iterator;
initial begin
sknobs::set_value("*ab*", 2);
sknobs::set_string("xyz", "hi");
$display("%m.abc=%0d", sknobs::get_value("%m.abc", 10));
$display("%m.abc=%0d", sknobs::get_value("%m.abc", 10));
$display("xyz=%0s", sknobs::get_string("xyz", "mydefaultstring"));
sknobs::value#(int)::set("*ab*", 2);
sknobs::value#(string)::set("xyz", "hi");
$display("%m.abc=%0d", sknobs::value#(int)::get("%m.abc", 10));
$display("%m.abc=%0d", sknobs::value#(int)::get("%m.abc", 10));
$display("xyz=%0s", sknobs::value#(string)::get("xyz", "mydefaultstring"));
iterator = sknobs::iterate("list");
while(sknobs::iterator_next(iterator))
$display("next: %0s", sknobs::iterator_get_string(iterator));
Expand Down