PeakRDL-regblock icon indicating copy to clipboard operation
PeakRDL-regblock copied to clipboard

Add support for write broadcasting

Open amykyta3 opened this issue 1 year ago • 0 comments

A common design pattern is to implement an address region that broadcasts write operations to multiple registers. This saves on software cycles since a single SW write can be used to broadcast a configuration to multiple registers simultaneously.

Since this is not supported by SystemRDL's built-in properties, add this as a UDP extension.

For example:

my_reg_t rega;
my_reg_t regb;
my_reg_t regc[4];

my_reg_t reg_all;

reg_all -> broadcast_write = '{
    rega, regb, regc
};

Writing to reg_all is equivalent to individually writing to rega, regb, and all of regc

Semantics:

  • The broadcast_write property is valid on reg or regfile components
  • If a component is assigned broadcast_write, its hw implementation is omitted. Instead, all the broadcast targets the property references inherit an additional SW write-enable strobe.
  • broadcast_write accepts an array of one or more references.
  • Each reference shall be the exact same component type and datatype as the assignee
  • A reference to a regfile applies recursively to all its child registers
  • A reference to an entire array applies to all elements in the array
  • A reference to a specific array element is not supported
  • A broadcaster and its targets shall be internal to each other. (one cannot be external compared to the other)
  • A software read operation on the broadcaster is illegal and the implementation may optionally return a cpuif error.

amykyta3 avatar Apr 12 '23 05:04 amykyta3