Skip to content

print_bsv_signal

Write Bluespec Signal class.

Classes:

PrintBSVSignal

PrintBSVSignal(bsvfile, test)

Bases: RDLListener

Write Bluespec Signal class.

Methods:

Source code in src/peakrdl_bsv/print_bsv_signal.py
18
19
20
21
22
23
24
def __init__(self, bsvfile, test):
    """Initialize."""
    self.indent = 0
    self.file = bsvfile
    self.gentest = test
    self.field_count = 0
    self.addressmap = []

enter_Addrmap

enter_Addrmap(node)

Address Map Handler.

Source code in src/peakrdl_bsv/print_bsv_signal.py
26
27
28
29
def enter_Addrmap(self, node):
    """Address Map Handler."""
    self.addressmap.append(node.get_path_segment())
    self.addrmap_name = node.get_path_segment()

enter_Field

enter_Field(node)

Field Handler.

Source code in src/peakrdl_bsv/print_bsv_signal.py
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
def enter_Field(self, node):
    """Field  Handler."""
    # print(f'onEnter {type(node.get_property('sw'))}')
    name = node.get_path_segment()
    attr = copy.deepcopy(node.inst.properties)
    attr["width"] = node.width
    attr["signal_name"] = name
    attr["reg_name"] = self.reg_name
    attr["hw_readable"] = node.is_hw_readable
    attr["hw_writable"] = node.is_hw_writable
    attr["sw_readable"] = node.is_sw_readable
    attr["sw_writable"] = node.is_sw_writable
    if "sw" in node.inst.properties:
        attr["sw"] = f"{node.inst.properties['sw']}"
    if "hw" in node.inst.properties:
        attr["hw"] = f"{node.inst.properties['hw']}"

    env = Environment(
        loader=PackageLoader("peakrdl_bsv"),
        autoescape=select_autoescape(),
    )
    template = env.get_template("config_signal.bsv")
    # print(f'preRender {type(node.get_property('sw'))}')
    print(
        template.render(attr=attr, node=node, gentest=self.gentest), file=self.file
    )

enter_Reg

enter_Reg(node)

Reg Handler.

Source code in src/peakrdl_bsv/print_bsv_signal.py
31
32
33
34
def enter_Reg(self, node):
    """Reg  Handler."""
    self.reg_name = node.get_path_segment()
    self.hier_path = [*self.addressmap, self.reg_name]

exit_Addrmap

exit_Addrmap(node)

Addrmap Handler.

Source code in src/peakrdl_bsv/print_bsv_signal.py
68
69
70
def exit_Addrmap(self, node):
    """Addrmap  Handler."""
    self.addressmap.pop()

exit_Reg

exit_Reg(node)

Reg Handler.

Source code in src/peakrdl_bsv/print_bsv_signal.py
64
65
66
def exit_Reg(self, node):
    """Reg  Handler."""
    self.indent -= 1