From 85424cf44d01b92e064248c2944d01680700e99b Mon Sep 17 00:00:00 2001 From: Luke Kenneth Casson Leighton Date: Thu, 17 Jun 2021 19:43:00 +0100 Subject: [PATCH] add SVP64REMAP Record https://libre-soc.org/openpower/sv/remap/ --- src/openpower/sv/svp64.py | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/src/openpower/sv/svp64.py b/src/openpower/sv/svp64.py index 634687e2..8c7a1963 100644 --- a/src/openpower/sv/svp64.py +++ b/src/openpower/sv/svp64.py @@ -8,7 +8,9 @@ For full spec see https://libre-soc.org/openpower/sv/ from nmigen import Record + # in nMigen, Record begins at the LSB and fills upwards +# however in OpenPOWER, numbering is MSB0. sigh. class SVP64Rec(Record): """SVP64 RM (Remap) Record. @@ -35,5 +37,36 @@ class SVP64Rec(Record): def ports(self): return [self.mmode, self.mask, self.elwidth, self.ewsrc, - self.extra, self.mode] + self.subvl, self.extra, self.mode] + + +# in nMigen, Record begins at the LSB and fills upwards +# however in OpenPOWER, numbering is MSB0. sigh. +class SVP64REMAP(Record): + """SVP64 SHAPE (REMAP) Record. + + https://libre-soc.org/openpower/sv/remap/ + + | Field Name | Field bits | Description | + |-------------|------------|----------------------------------------| + | XDIMSZ | `0:5` | X Dimension size | + | YDIMSZ | `6:11` | Y Dimension size | + | ZDIMSZ | `12:17` | Z Dimension size | + | PERMUTE | `18:20` | Permutation order (XYZ, XZY, YXZ...) | + | INVXYZ | `21:23` | Invert order of X or Y or Z | + | OFFSET | `24:29` | Adds to index before modulo | + | APPLYDIM | `30:31` | how many dimensions in use | + """ + def __init__(self, name=None): + Record.__init__(self, layout=[("applydim" , 2), + ("offset" , 6), + ("invxyz" , 3), + ("permute" , 3), + ("zdimsz" , 6), + ("ydimsz" , 6), + ("xdimsz" , 6)], name=name) + + def ports(self): + return [self.applydim, self.offset, self.invxyz, self.permute, + self.zdimsz, self.ydimsz, self.xdimsz] -- 2.30.2