[Libre-soc-bugs] [Bug 467] New: PartitionedSignal needs to work with Arrays
    bugzilla-daemon at libre-soc.org 
    bugzilla-daemon at libre-soc.org
       
    Tue Aug 18 15:03:11 BST 2020
    
    
  
https://bugs.libre-soc.org/show_bug.cgi?id=467
            Bug ID: 467
           Summary: PartitionedSignal needs to work with Arrays
           Product: Libre-SOC's first SoC
           Version: unspecified
          Hardware: Other
                OS: Linux
            Status: CONFIRMED
          Severity: enhancement
          Priority: ---
         Component: Source Code
          Assignee: lkcl at lkcl.net
          Reporter: lkcl at lkcl.net
                CC: libre-soc-bugs at lists.libre-soc.org
   NLnet milestone: ---
PartitionedSignal is a dynamic SIMD version of Signal.  it has a partition
"context" associated with it which is aldo a Signal.
32 bit partitioned signal:
ppts:     1    2    3 
sig : 0xNN 0xNN 0xNN 0xNN
this 32 bit PartitionedSignal may be 1x32, 2x16, 4x8, or any other permutation
including 24-8.
Array accesses of Signals work very simply by allocating a pmux.
a = Array([Signal(4), Signal(4)])
b = Signal(2)
a[b].eq(5)
however Array has no concept of PartitionedSignal and will completely fail to
produce the right action.
ppts = PartitionPoints(4)
a = Array([PartitionedSignal(16, ppts),
           PartitionedSignal(16, ppts)])
b = PartitionedSignal(8, ppts)
a[b].eq(5) # fails 
the reason this fails is because "b" is not a Signal of 8 bits, it is
*dynamically interpreted* depending on the current context at runtime of its
partition.
example:
* the partition may be set to "all closed", indicating that b is 4x 2-bit AND
* a Array items are 4x 4-bit 
Then if:
* first part of b may be 0b00
* second part of b may be 0b01
* third part of b may be 0b01
* first part of b may be 0b00
this indicates that ***FOUR*** separate and distinct pmux operations shall take
place, ***NOT*** one, as follows:
* a[0b00][0:3].eq(5) # from 1st b
* a[0b00][4:7].eq(5) # from 2nd b
* a[0b01][8:11].eq(5) # from 3rd b
* a[0b00][12:15].eq(5) # from 4th b
this because the partition is set to 4x 4 bit and therefore a's
PartitionedSignals are treated as 4 completely independent 4 bit Arrays.
if however the partitions are 8-8 and b is as follows
* b first part is 0b0000
* b second part is 0b0001
then:
* a[0b0000][0:7].eq(5) # from 1st b
* a[0b0001][8:15].eq(5) # from 2nd b
this because b is now subdivided into 2x 4 bit parts, therefore when used as an
array index it splits A elements into 2x 8 bit ***INDEPENDENTLY INDEXED***
parallel 8 bit SIMD arrays.
-- 
You are receiving this mail because:
You are on the CC list for the bug.
    
    
More information about the libre-soc-bugs
mailing list