wavedrom/bitfield

Support memory maps

xobs opened this issue · 11 comments

xobs commented

Issue moved from https://github.com/wavedrom/wavedrom/issues/257

Memory maps are conceptually similar to bitfields, except they're rotated on their sides. Memory maps may also be non-uniform in size, though that may be a future enhancement.

It may be possible to reuse the compact view (#23) to create memory maps, by setting the number of lanes to the number of memory sections (e.g. 16), and the width to 1.

drom commented

Do you have some visually pleasing example of memory map diagram that you like?

xobs commented

Here's a memory map from the EFM32HG by SiLabs, which is a bit on the advanced side but nicely shows how you'd expand on memory register regions. This is my favourite of the bunch, because of how it visually explains where the "expanded" regions are:
image

Various 8051 chips also have handy memory maps, and because they're so small they actually specify bitfields within the memory maps:
image

Here's one of the Nintendo 64, which mostly illustrates how you'd have variable-height regions:
image

Here's one describing the NES, which is nice because it has two side-by-side memory maps that are independent:
image

drom commented

Example with some paper tear effect.

memmap001

xobs commented

map

xobs commented

I spent a lot of time with the i.MX233 which has a bank of otp fuses. Here's the memory map from the reference manual: Screenshot_20191216_135253

Here's the full memory map, which just has the peripherals listed as "Peripheral Space":
Screenshot_20191216_135057_com google android apps docs

Necessary modification I see:

  • left-sided index must be a settable property of lane
    • may be autofilled via global option for default compact behaviour
    • additional begin & end index needs to be introduced for large adress spaces
    • attributes may be used for this, since they are not compatible with the compact mode
  • cage rendering must support multiple options
    • merged option
      • only left/right, starting lane bottom and ending lane top border is drawn. Multiple lanes would be merged to a single thing. Label is only drawn once.
    • no tick option
      • draw no ticks inside the cage
    • crossed out option
      • connecting left,bottom corner with right,upper one
        • for showing non linear behaviour
  • some attribute holding a whole new bitfield object
    • will be on the right side of prior bitfield
    • centered to the lane holding the attribute
    • have these "extending" lines from the right corners of cage to the left corners of new bitfield
drom commented

@nopeslide good ideas. I would need some sketches of the ideas you have.

@drom I sketched just the index and sub-bitfield idea

Sa_1 _Feb_13:04:07_CET_2020

drom commented

Dm2iry-V4AAnBvV

xobs commented

From the nRF52833 document:

image

Where, apropos of nothing, I found this SPI timing diagram:

image

xobs commented

image

Discovered in the reference manual of an RZ/T1 -- this has four separate memory spaces, and so there are four columns.