PeakRDL-regblock
PeakRDL-regblock copied to clipboard
Add support for write broadcasting
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 onreg
orregfile
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.