Lab Project - EE 421L 

Authored by Ricardo Rodriguez

UNLV E-mail: rodrir15@unlv.nevada.edu

November 24, 2021

Project:

The goal of the project was to make an 8 bit 32 word register file. The register file has words going from 31 to 0. My project has a total of22 different data related pins. There is an 8 bit bus for the input and a separate 8 bit bus for the Data values. Since we have 32 words, there are 5 bits for the addressing. There is a single pin for the Read/Write. In this design, R/W allows us to write to our word when it is low and to read when it is a logic high. 

The process of making the register file started with the single bit Static Random Access Memory cell. From there we can increase it an 8 bit word and then create an array of words. This would connect to our row decoder, which has an input of 5 bits and a total of 32 outputs, each corresponding to a different word line. For example, 01011 would give row 11 as a logic high and all other rows a logic 0. From there, we can implement the R/W function by the use of some NMOS devices and an inverter to allow us to switch between the read and write function.

         

Schematic Work:

Single SRAM Bit Cell Schematic:
 
     
Single SRAM Bit Cell Symbol
 
       
Layout:
       


Single SRAM Bit Cell Simulation Schematic:                                        Single SRAM Bit Cell Simulation:         

      

This simulation lets us write to our cell as our RS (row select) functions as our data for the word line. We see that whenever that RS is low, our stored data (bottom graph) does not change but as soon as RS is high, our stored bit mirrors the input until RS goes low again.
       

8-bit SRAM Cell Schematic:                                  

       

  8-bit SRAM Cell Symbol 

     

Layout: 

     

      
8-bit SRAM Cell Simulation Schematic:                                                    8-bit SRAM Cell Simulation:         

      

From the sim schematic, we can see that the input will be varying bit<0> or the least significant bit. All others will remain at logic 0. Only when our word line input rowSel is at a high, our data in our cell will be written to, otherwise the data will be stored. It is also important to note that no initial conditions were used in the simulation for our stored data resulting in a 2.5V initial voltage to our cell.  

     

32 Word Cell Schematic:                                    32 Word Cell Symbol
     

Layout:

    

       

Layout Closeup:

 

The layout of the array connects all 32 words together by their respective bit. For example input<7> is shorted between all 32 words. Each word has it's unique word line that will be connected to the output of the row decoder. In this manner, we can write to individual words, using the same data in.

          

Array Sim Schematic:

For easier simulation, I connected the functioning row decoder (not yet shown) to the array. This way, different words can be seen during simulation and see how the array functions under changes in the addressing.

     

Array Sim: 

In the simulation, we can see that our data on bit 1 is what is being written and read from. At all points in time of the simulation,

the array always has a word to write to. For the intial addressing, we write to 00000 (0) which later changes to 00100(4).

At around 2.3 seconds, we can see our address change occur and that our bit 1 in address 00100 (green graph) is finally written to and follows along the input while

our address 00000 (orange graph) remains constant until we change the address back.    


        

     

Row Decoder Schematic:                                                                               Row Decoder Symbol
        

   

     

Layout:

       
Row Decoder Simulation Schematic:                                  Row Decoder Simulation:         

      

Just to see the function of the row decoder, our selected output/row will be alternating between Row0 and Row1. 

When all bits of the input is 0, we will get Row0, and when the LSB is logic 1, we get Row1. 

To know which output will go high, we can look at the binary input of the address and convert it to decimal.

For example, 10010 will give a logic high to Row18 while all others remain at logic low.       

Final Register File:

The register file connected the decoder to the word lines of the array. Since D<7:0> is an inputOutput pin, we can choose to read or write to D. To implement the R/W function, we connect the signal and it's compliment to the gates of two different NMOS transistors. The drains of the devices will be shorted and connect to D of the array. However, one transistor will have it's source at an Output D and the other will have it's source to the input. Since we want R/W to write when low, we connect the compliment to the input transistor and R/W to the Output D transistor.   

Symbol:

 


Simulation Schematic:
   
     
Simulation:

For our simulation, we start by reading the values stored in 00000 or word 0. We can see that the RF output remains constant until R/W goes low, which tells us that we can write to the address. When we change our address, we can see that the R/W function doesn't change and allows us to read the data that was in word 1 (00001).

It is until R/W goes low again where we can start wiriting to word 1.

Zipped directory of the project can be found here.
         

Return to my labs

     

Return to student labs