SystemRDL / PeakRDL-regblock

Generate SystemVerilog RTL that implements a register block from compiled SystemRDL input.
http://peakrdl-regblock.readthedocs.io
GNU General Public License v3.0
52 stars 42 forks source link

Fine-grained access rights #106

Closed Blebowski closed 6 months ago

Blebowski commented 6 months ago

Hi,

I think it would be good to include some way of defining acess priviledges (beyond acess type from SW side).

A pattern that always occurs in register map design, is the need to make "some registers accessible only in certain situations".

This typically occurs in:

A possible reactions when an access to "forbidden" register is executed could be:

Implementation-wise, I can imagine that there could be a pre-defined user defined property, e.g. something like "p_access_right", and value of this property would be name of the signal that would be used to gate the access for this block. Then it would be simple to lock acess to all registers by a single signal, or have multiple separate locks. This is usefull when there are more device states than just locked / unlocked.

amykyta3 commented 6 months ago

SystemRDL already provides a mechanism for this using the swwe and swwel properties. See: https://peakrdl-regblock.readthedocs.io/en/latest/props/field.html#swwe-swwel

If assigned a boolean, a per-field input is inferred. Alternatively a reference to a common RDL signal or field component can be assigned to control multiple.

Bulk assignments of this property can be easily done using the RDL default assignment keyword.

Blebowski commented 6 months ago

Again, thanks, I did not know about this feature. Combined with the "signal" reference, this is awesome.