+1 855-VERIFYY
+

Newsletter:Register Aliasing

Register Aliasing

Register design and implementation is one of the most important parts of today’s hardware and IC designs. Registers contain the configuration, control setting and status of the hardware and are the basis of the hardware and software interface.

In hardware design, register aliasing describes a situation in which a register location in the hardware design can be accessed through additional symbolic names and addresses. The fields in aliased registers have different access based on the address used. For example, a field in a register may be readable and writable when accessed using one address, but read-only when accessed from another. The hardware access of the alias register is not accessible (NA).

IDesignSpec handles register aliasing in two situations. One is when register locations are in same block address map, as shown in figure 1(a). Other situation is when addresses are in different block address maps, as shown in figure 1(b).

ra1
ra2

 

 

 

 

 

 

 

 

 

Register aliasing in IDesignSpec:

  1.  Register aliasing in same address map:

This is done using the “alias” property which is attached to the register or field that is the alias. The value of this property refers to the Register or the filed that is being aliased.

 

ra3

The above implemented alias property will make the following RTL code:

ra4

  1. Register aliasing in different address map:

When alias is made across block boundary a new property “aliased = true” is added on the register which is being aliased. The alias property is also used to indicate where the alias register is.

ra5

ra6
ra7

The above implemented alias property will make the following RTL code:

ra8

UVM Code:

Alias_cb Alias_Block1_Reg1_Fld;
Alias_cb Alias_aliasBlock_aliasReg1_Fld;
Alias_cb Alias_Block1_Reg2_Fld2;
Alias_cb Alias_aliasBlock_aliasReg2_Fld2;

Alias_Block1_Reg1_Fld = new(“Alias_Block1_Reg1_Fld”, Block1.Reg1.Fld);
uvm_reg_field_cb::add(aliasBlock.aliasReg1.Fld, Alias_Block1_Reg1_Fld);

Alias_aliasBlock_aliasReg1_Fld = new(“Alias_aliasBlock_aliasReg1_Fld”, aliasBlock.aliasReg1.Fld);
uvm_reg_field_cb::add(Block1.Reg1.Fld, Alias_aliasBlock_aliasReg1_Fld);

Alias_Block1_Reg2_Fld2 = new(“Alias_Block1_Reg2_Fld2″, Block1.Reg2.Fld2);
uvm_reg_field_cb::add(aliasBlock.aliasReg2.Fld2, Alias_Block1_Reg2_Fld2);

Alias_aliasBlock_aliasReg2_Fld2 = new(“Alias_aliasBlock_aliasReg2_Fld2″, aliasBlock.aliasReg2.Fld2);
uvm_reg_field_cb::add(Block1.Reg2.Fld2, Alias_aliasBlock_aliasReg2_Fld2);

Usage:

As an example, Alias Register is used in MPU(memory Protection unit).The reason to use this is to allow multiple MPU regions to be accessed and programmed in one instruction, such as store-multiple (STM), to save time and speed up the execution of the programs.

Conclusion:

Alias register is very important in terms of writing specs for industry use and making the process faster resulting in timely execution of the specs. Alias can be made between registers within one block and between registers located in two separate blocks as well, making it even more versatile.

By: Mukesh