Skip to content

Commit

Permalink
update SV array support
Browse files Browse the repository at this point in the history
  • Loading branch information
LucasKl committed Apr 25, 2024
1 parent 606b62c commit 70e7720
Show file tree
Hide file tree
Showing 6 changed files with 59 additions and 7 deletions.
2 changes: 0 additions & 2 deletions pylintrc

This file was deleted.

15 changes: 15 additions & 0 deletions tests/test_trace_reader.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
'''Test wal trace readers'''
import unittest

from wal.core import Wal

class BasicParserTest(unittest.TestCase):
'''Test trace readers'''

def test_sv_arrays(self):
'''Test SystemVerilog arrays'''
for trace_format in ['vcd', 'fst']:
wal = Wal()
wal.load(f'tests/traces/array.{trace_format}')
self.assertEqual(wal.eval_str('TOP.tb.data<0>'), 2)
self.assertEqual(wal.eval_str('TOP.tb.data<1>'), 0)
Binary file added tests/traces/array.fst
Binary file not shown.
33 changes: 33 additions & 0 deletions tests/traces/array.vcd
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
$version Generated by VerilatedVcd $end
$timescale 1ps $end

$scope module TOP $end
$scope module tb $end
$var wire 8 # data[0] [7:0] $end
$var wire 8 $ data[1] [7:0] $end
$var wire 8 % data[2] [7:0] $end
$var wire 8 & data[3] [7:0] $end
$var wire 8 ' data[4] [7:0] $end
$var wire 8 ( data[5] [7:0] $end
$var wire 8 ) data[6] [7:0] $end
$var wire 8 * data[7] [7:0] $end
$var wire 8 + data[8] [7:0] $end
$var wire 8 , data[9] [7:0] $end
$upscope $end
$upscope $end
$enddefinitions $end


#0
b00000010 #
b00000000 $
b00000000 %
b00000000 &
b00000000 '
b00000000 (
b00000000 )
b00000000 *
b00000000 +
b00000000 ,
#10
b00000100 #
7 changes: 5 additions & 2 deletions wal/trace/fst.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,12 @@ def __init__(self, file, tid, container, from_string=False, keep_signals=None):
# get mapping from name to tid and remove trailing signal width, ' [31:0]' etc.
self.references_to_ids = {re.sub(r' *\[\d+:\d+\]', '', k): v for
k, v in self.references_to_ids.items()}
# rename grouped signals like reg(0), reg(1) to reg_0, reg_1
# rename grouped signals like reg(0), reg(1) to reg<0>, reg<1>
self.references_to_ids = {
re.sub(r'\(([0-9]+)\)', r'_\1', k): v for k, v in self.references_to_ids.items()}
re.sub(r'\(([0-9]+)\)', r'<\1>', k): v for k, v in self.references_to_ids.items()}
# rename grouped signals like reg[0], reg[1] to reg<0>, reg<1>
self.references_to_ids = {
re.sub(r'\[([0-9]+)\]', r'<\1>', k): v for k, v in self.references_to_ids.items()}

self.rawsignals = list(self.references_to_ids.keys())
self.signals = set(self.rawsignals)
Expand Down
9 changes: 6 additions & 3 deletions wal/trace/vcd.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,12 @@ def parse(self, vcddata):
id = tokens[i + 3]
name = tokens[i + 4]

# Remove bit width annotations from the name
if name.endswith(']'):
name= name.split('[')[0]
# Remove array indices width annotations from name([..])
for delim in [('[', ']'), ('(', ')')]:
if name.endswith(delim[1]):
split = name.split(delim[0])
addr = split[-1].replace(delim[1], '>')
name = ''.join(split[:-1]) + '<' + addr

# only append scope. if not in root scope
if scope:
Expand Down

0 comments on commit 70e7720

Please sign in to comment.