| // Copyright lowRISC contributors. |
| // Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| // SPDX-License-Identifier: Apache-2.0 |
| // |
| // xbar_cover.cfg generated by `tlgen.py` tool |
| <% |
| import math |
| # or all start & end addresses to get toggle_bits |
| def get_device_addr_toggle_bits(dev_name): |
| for device in xbar.devices: |
| if device.name == dev_name: |
| for i in range(len(device.addr_range)): |
| if i == 0: |
| toggle_bits = device.addr_range[i][0] |
| else: |
| toggle_bits ^= device.addr_range[i][0] |
| for addr in device.addr_range: |
| toggle_bits |= addr[1] - addr[0] |
| |
| return toggle_bits |
| log.error("Invalid dev_name: {}".format(dev_name)) |
| |
| num_hosts = len(xbar.hosts) |
| if num_hosts > 1: |
| host_unr_source_bits = math.ceil(math.log2(num_hosts)) |
| else: |
| host_unr_source_bits = 0 |
| %>\ |
| |
| +tree tb.dut |
| -module pins_if // DV construct. |
| -module clk_rst_if // DV construct. |
| |
| // due to VCS issue (fixed at VCS/2020.12), can't move this part into begin...end (tgl) or after. |
| -node tb.dut tl_*.a_param |
| -node tb.dut tl_*.d_param |
| -node tb.dut tl_*.d_user |
| -node tb.dut tl_*.a_user.* |
| -node tb.dut tl_*.d_opcode[2:1] |
| |
| // [UNR] these device address bits are always 0 |
| % for device in xbar.devices: |
| <% |
| # assume toggle_bits = 0011, generate below as bit 2 and 3 are never toggled |
| # -node address[3:2] |
| toggle_bits = get_device_addr_toggle_bits(device.name) |
| start_bit = 0 |
| saw_first_zero = 0 |
| |
| esc_name = device.name.replace('.', '__') |
| %>\ |
| % for i in range(32): |
| % if toggle_bits % 2 == 0: |
| % if saw_first_zero == 0: |
| <% |
| start_bit = i |
| saw_first_zero = 1 |
| %>\ |
| % endif |
| % elif saw_first_zero == 1: |
| -node tb.dut tl_${esc_name}_o.a_address[${i-1}:${start_bit}] |
| <% |
| saw_first_zero = 0 |
| %>\ |
| % endif |
| <% |
| toggle_bits = toggle_bits >> 1 |
| %>\ |
| % endfor |
| % if saw_first_zero == 1: |
| -node tb.dut tl_${esc_name}_o.a_address[31:${start_bit}] |
| % endif |
| % endfor |
| |
| % if host_unr_source_bits > 0: |
| -node tb.dut tl_*.a_source[7:${7 - host_unr_source_bits}] |
| -node tb.dut tl_*.d_source[7:${7 - host_unr_source_bits}] |
| % endif |
| begin tgl |
| -tree tb |
| +tree tb.dut 1 |
| -node tb.dut.scanmode_i |
| end |
| |