Lab 7 : Buses and Arrays
EE 421L Digital IC Design

By: David Nakasone – Email: nakasd3@unlv.nevada.edu
Assigned:
October 20, 2021
Due: November 3, 2021




Lab description >>>

    Arrays and busses are an extension of the basic elements we have covered. Starting from the basic MOSFETs, then the CMOS, and using them to design gate-level components; we are expanding our skills to more complex circuits. This lab will leverage the previous techniques to make: word inverters, multi-plexers, and high-speed adders.

There are two major tasks for this lab:

    A) Complete and document “tutorial 5”
    B)  Analyze the CMOS inverters
   
C)  creating 8-input gate arrays { NOT, AND, NAND, OR , NOR}
   
D)  applicaiton of MUX/DEMUX
       E)  an 8-bit full adder




Part A : tutorial  5 >>>

[ 1 ]  There are good and bad ways to use multiple instances. This is bad.
d

[ 2 ]  The brute-force schematic is still correct.
d

[ 3 ]  using multiple instances, schematics should use an array.

d

[ 4 ]  create a symbol of the proper schematic
s

[ 5 ]  apply the schematic symbol to a testing circuit
f

[ 6 ]  simulate to verify the schematic is correct
d

[ 7 ]  layout the 31-stage ring oscillator
f

[ 8 ]  ensure the layout is correct with DRC
d

[ 9 ]  extract and LVS the layout
d

[ 10 ]  simulate the extraction
f

[ * ]  route array as intended with label, but only pins are recognized
[ ** ]  apply vdd! in the simulation, bad to include 5 V dc as nesting occurs
[ *** ]  noise in circuit will eventually get oscillator going, but use an initial condition



Part B : analyze the CMOS inverters >>>

[ 1 ]  ensure the existing CMOS is modeling the inverter correctly
d

[ 2 ]  reference the inverter schematic as a symbol
d

[ 3 ]  apply the symbol of the inverter to a circuit for verification
d 

[ 4 ]  the CMOS inverter (not gate) is operating correctly, proceed to further use

f

[ 5 ]  build the 4x inverter by instance
f

[ 6 ]  create a symbol of the 4x inverter
f

[ 7 ]  apply the symbol to a testing circuit (note relationship of capacitive loads)
f

[ 8 ]  simulation confirms correct operation, increasing time constant with increasing capacitance
f


Part C : gate arrays >>>


[ NOT 1 ]  create an array of inverters
d

[ NOT 2 ]  create a symbol of the schematic
, inputs/outputs established
d

[ NOT 3 ]  build a test circuit

f

[ NOT 4 ]  simulate and verify results
(matches truth table above)
d

[ AND 1 ]  create an array of AND gates "~NAND"
f

[ AND 2 ]  create a symbol of the schematic
, inputs/outputs established
9

[ AND 3 ]  build a test circuit

9

[ AND 4 ]  simulate and verify results (matches truth table above)
d

[ NAND 1 ]  create an array of NAND gates

m

[ NAND 2 ]  create a symbol of the schematic
, inputs/outputs established
d

[ NAND 3 ]  build a test circuit

j

[ NAND 4 ]  simulate and verify results
(matches truth table above)
m

[ OR 1 ]  create an array of OR gates "~NOR"
f

[ OR 2 ]  create a symbol of the schematic
, inputs/outputs established
f

[ OR 3 ]  build a test circuit

f
[ OR 4 ]  simulate and verify results (matches truth table above)
f

[ NOR 1 ]  create an array of NOR gates

k

[ NOR 2 ]  create a symbol of the schematic
, inputs/outputs established
o

[ NOR 3 ]  build a test circuit

k

[ NOR 4 ]  simulate and verify results
(matches truth table above)
j




Part D: mux and demux >>>

[ mux 1 ]  theory behind provided MUX
The DEMUX is a decoder and reverses the MUX. The original input could be realized by the DEMUX.
Reverse the pins and DEMUXing is achieved.
f

[ mux 2 ]  create a test circuit to simulate the provided MUX
f

[ mux 3 ]  the simulation is valid: Z = A when S = 1 ;  Z = B when S = 0

o

[ mux_i 1 ]  apply an inverter to the original design

f

[ mux_i 2 ]  update the 2:1 MUX symbol
f

[ mux_i 3 ]  build a test circuit
f

[ mux_i 4 ]  verify the results, the circuit is valid: Z = A when S = 1 ;  Z = B when S = 0
f

[ mux bus 1]  establish the schematic
j

[ mux bus 2]  derive the symbol
d

[ mux bus 3]  prepare the testing circuit
j

[ mux bus 4]  confirm the simulation A = 0000_0000 , B = 1111_1111
if S = 1111_1111, Z = A
if S = 0000_0000, Z = B

j



Part E: the 8-bit full adder >>>

[ fa 1 ]  expand the full adder of lab 6, the schematic allows 8-bits in cascade
* this full adder has been previously validated and is in good working order
d

[ fa 2 ]   create a symbol of the schematic
d

[ fa 3 ]   make a testing circuit
d

[ fa 4 ]   ensure correct operation before proceeding to layout
f
d

[ fa 5 start ]   cin is the only non-array input pin
k

[ fa 5 transition ]   internal transitions place input an output pins, but carry Cout-->cin
j

[ fa 5 stop ]   the only carryout  pin is at the end of the adder. It can also be used to extend the adder
m

[ fa 5 ]   DRC the full adder to verify layout
j

[ fa 6 ]   extract the layout
j

[ fa 7 ]   check the layout with LVS
j

[ fa 8 ]   apply the extraction to the simulation to verify results
h
j








Files correctly named:
f

Design files availible on request

Return to >>> nakasd3 directory