Add user parameters to regblock package. #112
This commit is contained in:
@@ -49,6 +49,23 @@ class Hwif:
|
||||
return self.exp.ds.top_node
|
||||
|
||||
|
||||
def get_extra_package_params(self) -> str:
|
||||
lines = []
|
||||
|
||||
for param in self.top_node.inst.parameters:
|
||||
value = param.get_value()
|
||||
if isinstance(value, int):
|
||||
lines.append(
|
||||
f"localparam {param.name} = {SVInt(value)};"
|
||||
)
|
||||
elif isinstance(value, str):
|
||||
lines.append(
|
||||
f"localparam {param.name} = {value};"
|
||||
)
|
||||
|
||||
return "\n".join(lines)
|
||||
|
||||
|
||||
def get_package_contents(self) -> str:
|
||||
"""
|
||||
If this hwif requires a package, generate the string
|
||||
|
||||
@@ -7,6 +7,8 @@ package {{ds.package_name}};
|
||||
localparam {{ds.module_name.upper()}}_MIN_ADDR_WIDTH = {{ds.addr_width}};
|
||||
localparam {{ds.module_name.upper()}}_SIZE = {{SVInt(ds.top_node.size)}};
|
||||
|
||||
{{hwif.get_extra_package_params()|indent}}
|
||||
|
||||
{{hwif.get_package_contents()|indent}}
|
||||
endpackage
|
||||
{# (eof newline anchor) #}
|
||||
|
||||
0
tests/test_pkg_params/__init__.py
Normal file
0
tests/test_pkg_params/__init__.py
Normal file
11
tests/test_pkg_params/regblock.rdl
Normal file
11
tests/test_pkg_params/regblock.rdl
Normal file
@@ -0,0 +1,11 @@
|
||||
addrmap top #(
|
||||
longint N_REGS = 1,
|
||||
longint REGWIDTH = 32,
|
||||
string NAME = "abcd"
|
||||
) {
|
||||
reg reg_t {
|
||||
regwidth = REGWIDTH;
|
||||
field {sw=rw; hw=na;} f[REGWIDTH] = 1;
|
||||
};
|
||||
reg_t regs[N_REGS];
|
||||
};
|
||||
8
tests/test_pkg_params/tb_template.sv
Normal file
8
tests/test_pkg_params/tb_template.sv
Normal file
@@ -0,0 +1,8 @@
|
||||
{% extends "lib/tb_base.sv" %}
|
||||
|
||||
{% block seq %}
|
||||
{% sv_line_anchor %}
|
||||
assert(regblock_pkg::N_REGS == {{testcase.n_regs}});
|
||||
assert(regblock_pkg::REGWIDTH == {{testcase.regwidth}});
|
||||
assert(regblock_pkg::NAME == "{{testcase.name}}");
|
||||
{% endblock %}
|
||||
27
tests/test_pkg_params/testcase.py
Normal file
27
tests/test_pkg_params/testcase.py
Normal file
@@ -0,0 +1,27 @@
|
||||
from parameterized import parameterized_class
|
||||
|
||||
from ..lib.sim_testcase import SimTestCase
|
||||
from ..lib.test_params import get_permutations
|
||||
|
||||
PARAMS = get_permutations({
|
||||
"n_regs" : [1, 2],
|
||||
"regwidth" : [8, 16],
|
||||
"name" : ["hello", "world"],
|
||||
})
|
||||
@parameterized_class(PARAMS)
|
||||
class TestRetimedFanin(SimTestCase):
|
||||
n_regs = 20
|
||||
regwidth = 32
|
||||
name = "xyz"
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
cls.rdl_elab_params = {
|
||||
"N_REGS": cls.n_regs,
|
||||
"REGWIDTH": cls.regwidth,
|
||||
"NAME": f'"{cls.name}"',
|
||||
}
|
||||
super().setUpClass()
|
||||
|
||||
def test_dut(self):
|
||||
self.run_test()
|
||||
Reference in New Issue
Block a user