Lab Project - EE 421L 

Authored by Charlene Drake

Email: drakec2@unlv.nevada.edu

November 24, 2021 

  

Lab Description

 For this project we will be designing a Register File that 32 8-bit words. In order to access these words, we will use 5-bit address. Other inputs of the RF include the 8-IO lines for reading and writing, a control signal, RW which indicates a read or write to the RF, and VDD/gnd. 


Project Components


SRAM Cell

The first component needed for the design of our RF was the SRAM which stores data as well as determines where data is read and written from. The SRAM is composed of a two NMOS devices and two 1.5u/1.5u inverters. The inverters have a very small width in order for easy flipping of the cell. For the inputs we have D, Di, and RL. When RL is high, data is written and when RL is low data is no longer written.


Schematic:
SRAM_schematic.jpg

Symbol:
SRAM_symbol.jpg

Layout:
SRAM_layout.jpg

DRC:
SRAM_DRC.jpg

Extracted:
SRAM_extracted.jpg

LVS:
SRAM_LVS.jpg

Simulation:
sim_SRAM_schematic.jpg
sim_SRAM.jpg

As you can see, whenever the RL is high, the value for D is stored and output, and when the RL is low, that previous value for D is kept continues to be output.

8-bit SRAM
 Next we needed to design an 8-bit SRAM which consisted of 8 of the SRAMs that we had previously designed. We were able to accomplish this design with arrays. By going into the SRAM's properties we are able to declare an array which duplicated the instance 8 times. We then needed to run 8 lines of data into D and Di which is also done with arrays and busses.

Schematic:
8-bit_SRAM_schematic.jpg

Symbol:
8-bit_SRAM_symbol.jpg

Layout:
8-bit_SRAM_layout.jpg
The layout for the 8-bit SRAM is pretty much the same as the SRAM, we just needed to instantiate the design 8 times total and then connect all of the RL's.

DRC:
8-bit_SRAM_DRC.jpg

Extracted:
8-bit_SRAM_extracted.jpg

LVS:
8-bit_SRAM_LVS.jpg

Simulation:
sim_8-bit_SRAM_schematic.jpg

sim_8-bit_SRAM.jpg
 As you can see, the simulation for the 8-bit SRAM is the same as the 1-bit SRAM. When RL is high I0<0> follows D<0> and I0<1> follows D<1> but as RL goes low the last value from D<0> and D<1> is kept and output for I0<0> and I0<1>.

32-bit Array
  Next, we create the 32-bit array which stores the memory for the 32, 8 bit words. We do so by instantiating the 8-bit SRAM we had previously designed, 32 times. Once again, this is done with an array. Since there are 32 8-bit SRAM we also need 32 RL's which we create with a bus.

Schematic:
32-bit_array_schematic.jpg

Symbol:
32-bit_array_symbol.jpg

Layout:
32-bit_array_layout.jpg   32-bit_array_layout2.jpg

DRC:
32-bit_array_DRC.jpg

Extracted:
32-bit_array_extracted.jpg

LVS:
32-bit_array_LVS.jpg


5 input AND Gate
  Now we can design the 5 input AND gate that will be used with the row decoder to assign addresses to each of the 32 8-bit words. We do so with 6 NMOS devices and 6 PMOS devices.

Schematic:
AND_schematic.jpg

Symbol:
AND_symbol.jpg

Layout:
AND_layout.jpg

DRC:
AND_DRC.jpg

Extracted:
AND_extracted.jpg

LVS:
AND_LVS.jpg

Simulation:

sim_AND_schematic.jpg

sim_AND.jpg
As you can see, the AND gate is functioning properly and only outputs a 1 when all inputs are 1.

Row Decoder
  Next we design the row decoder which assigns a 5-bit address to each 32 8-bit word. As you can see, labeling the busses was quite intense as we needed to ensure 00000-11111 was passed through the AND gate as those are the addresses that the 32 8-bit words were assigned to.

Schematic:
rowDecoder_schematic.jpg

Symbol:

rowDecoder_symbol.jpg

Layout:
rowDecoder_layout.jpg  rowDecoder_layout2.jpg

DRC:
rowDecoder_DRC.jpg

Extracted:
rowDecoder_extracted.jpg

LVS:
rowDecoder_LVS.jpg

Simulation:

sim_row_decoder_schematic.jpg

sim_row_decoder.jpg
 As you can see, the row decoder is functioning properly. At address "00000" RL<31> is on, whereas at address "00001" RL<30> is on, and at address "00010" RL<29> is on.

Register File
  Now that all of our componenents have been designed, we are able to design our Register File. To do so we take our row decode, and connect the RL to the RL of our 32-bit Array. We also have our 5 inputs for the address feeding into the row decoder and then the buses for D and Di feeding data into the 32-bit array.

Schematic:
register_file_schematic.jpg

Symbol:
rowDecoder_symbol.jpg

Layout:
register_file_layout.jpg register_file_layout2.jpg
  For the layout of the RF we instantiate the layouts of the row decoder and the 32-bit array, and connect them at their RL's.

DRC:
register_file_DRC.jpg

Extracted:
register_file_extracted.jpg

LVS:
register_file_LVS.jpg

Simulation:
sim_register_file_schematic.jpg

sim_register_file.jpg
 As you can see the register file is functioning properly. When Ain is high we are calling the address "00001" which writes to RL<30>. This makes I0<30> follow D<0>. When Ain is low, the address "00000" is being called to and we are writing to RL<31> so now I0<31> follows D<0>.

Design Files

Return to Lab Directory