addrmap aliases { /////////////////////////// // Example SystemRDL LRM // /////////////////////////// reg some_intr_r { desc = "This register shows the alias example from Section 10.5.2 of the SystemRDL2.0 spec (with some slight adaptations to make it compilable)."; field { level intr; hw=w; sw=rw; woclr; } some_event; }; some_intr_r event1; // Create an alias for the DV team to use and modify its properties // so that DV can force interrupt events and allow more rigorous structural // testing of the interrupt. alias event1 some_intr_r event1_for_dv; event1_for_dv.some_event->woset = true; ////////////////////////// // Example field-subset // ////////////////////////// field field_templ { sw = rw; hw = rw; wel; }; reg four_field_reg { desc = "This is a register with 4 fields."; field_templ f1 [7:0]; field_templ f2 [15:8]; field_templ f3 [23:16]; field_templ f4 [31:24]; f3->swmod = true; // swmod does work for aliased registers f4->rclr = true; // Show rclr feature }; reg two_field_alias { desc = "It is not mandatory that aliases have all fields of the original register. A subset of the fields can be made accessible and they can have different names."; field_templ field_1 [7:0]; // Removed f2 // Removed f3 field_templ field_4 [31:24]; field_4->woclr = true; // Different option compared to four_field_reg.f1 }; four_field_reg four_field_reg; // Actual register alias four_field_reg two_field_alias two_field_alias; // Alias with different properties ////////////////////// // External aliases // ////////////////////// regfile { desc = "Instantiate regfile to show that they also work in regfiles."; reg ext_main_reg { desc = "If aliases registers are declared to be external, the external hardware will get a seperate interface for those registers."; field_templ f1 [15:0]; field_templ f2 [31:16]; }; reg ext_alias_reg { field_templ field_1 [15:0]; }; external ext_main_reg ext_main_reg; // Actual register alias ext_main_reg ext_alias_reg ext_alias_reg; // Alias with different properties } example_rf[4]; };