Access Time Estimation Tool

Description

The time to access data in memory structures like Caches, TLBs and DRAMs etc affects directly the speed/performance of code execution because there hardly exists a program without memory accesses. And since Caches and TLBs are conceived with the express purpose of reducing memory access time and increasing program performance, it is imperative that processor designers be able to know their latencies in order to have an idea of their effects on the performance. The UNISIM’s Access Time Estimator tool provides a mean to have an idea of memory access times in simulation. This way the designers know of the memory latency before they reach the stage of fabrication and thus can make any trade offs or changes to their design when necessary.

Access Time Interface

Since the Access Time Estimator tool is supposed to calculate access times for memories, and different memories’ structures are different internally, it needs to have an idea of some parameters for the memory. And since these parameters are maintained by the simulated memories as internal variables and as the Access Time Estimator tool is not connected to these modules, it has no way of accessing these parameters. The user is therefore obliged to pass these parameters as the command line arguments. Taking the example of a Cache module, the Access Time Estimator needs to know the values of Cache’s size, its line size, its associativity etc. The cache_params structure contains a full list of parameters that can be passed to the Access Time Estimator tool.

Since all Time Access Estimators require the module parameters as input and all they do is to calculate the time to access the data and then display that time, it made sense to derive all these from a common interface. All these Estimators are derived from an Access Time class which defines the following interfaces :

virtual bool GetCacheParams ( cache_input_parameter_type *params ) = 0 ;
virtual void DisplayOutputStats () = 0 ;

As the functions’ names suggest, the implementing classes use these interfaces to get the module parameters and to display the output.

How To Use Access Time Estimator

The Access Time Estimator is a command line utility. The paramters are passed to this utility via command line. To use the utility you have to do build it. This can be done by running the make command on command line once you are in the Area Estimator’s directory. This will compile and build the files and generate an executable called AccessTimeEstimator. An example is in order.

You run the executable file with the different cache parameters passed via command line:

./AccessTimeEstimator 8192 32 2 1 0 0 0 1 0.07 8 0 0 0 0

The output of the AccessTimeEstimator is as follows:

 /**********************************/
        Access Time Estimator Output
 /**********************************/
 INPUT PARAMS:
 Cache Size = 8192
 Cache Line Size = 32
 Associativity   = 2
 Read/Write Ports= 1
 Excl. Read Ports= 0
 Excl. WritePorts= 0
 Single Ended Read Ports = 0
 No. of Banks    = 1
 Tech. Node      = 0.07
 Output Width    = 8
 Specific Tag    = 0
 Tag Width       = 0
 Access Mode     = 0
 Pure SRAM       = 0
 
 
  Access Time Estimator output:
 Cache Cycle Time (ns) = 0.382828
 Cache Access Time (ns) = 0.591473

Implementation

As its internal implementation, the Access Time Estimator tool makes use of the CACTI power model developed at HP Labs. CACTI tries to guess the internal structure of the CACHE based on the input parameters and then based on be number of composing components it has calculated i.e. decoders, bit lines, word lines it tries to estimate the access time of the Cache.