| # Analog Spiking Neuron Circuit and 10-bit Digital to Analog Converter - Caravel Submission |
| |
| ## Analog Spiking Neuron Circuit |
| |
| This is the Google/EFabless/Skywater Caravel submission of an [Analog Spiking Neuron Circuit.](https://ieeexplore.ieee.org/document/9184447) The submission also includes a SONOS transistor array. |
| |
| ### Neuron circuit |
| The circuit in the original paper is in 130nm technology and has a vdd of 300mV. Skywater pdk is hybrid 180nm/130nm node where the minimum transistor length is 150nm. |
| As a result vdd needs to be higher in order to get the circuit to work properly. In simulation 700mV seems to work well. |
| |
| <p align=”center”> |
| <img src="/doc/neuron.png" width="75%"> |
| </p> |
| |
| #### Pinout |
| | node | pad | node | pad | |
| |--------|-------------|-----------|-------------| |
| | i_bias | mprj_io[13] | v_buff | mprj_io[22] | |
| | vad | mprj_io[14] | u_buff | mprj_io[23] | |
| | vr | mprj_io[15] | a_buff | mprj_io[24] | |
| | vk | mprj_io[16] | axon_buff | mprj_io[25] | |
| | vth | mprj_io[17] | sel | mprj_io[26] | |
| | vw | mprj_io[18] | v_syn | mprj_io[27] | |
| | vau | mprj_io[19] | u_syn | mprj_io[28] | |
| | vsyn0 | mprj_io[20] | a_syn | mprj_io[29] | |
| | vsyn1 | mprj_io[21] | axon_syn | mprj_io[30] | |
| | | | i_in | mprj_io[31] | |
| |
| #### Extracted Netlist Simulation |
| Spiking pattern at v_buff for i_in = 10pA DC |
| <p align=”center”> |
| <img src="/doc/sample_sim.png" width="75%"> |
| </p> |
| |
| ### SONOS array |
| A 2x2 array of nfet sonos cells with transistor sizing 420nmx150nm. |
| <p align=”center”> |
| <img src="/doc/sonos.png" width="75%"> |
| </p> |
| |
| #### Pinout |
| | node | pad | |
| |------|-------------| |
| | WL0 | mprj_io[7] | |
| | WL1 | mprj_io[8] | |
| | BL0 | mprj_io[9] | |
| | SL0 | mprj_io[10] | |
| | BL1 | mprj_io[11] | |
| | SL1 | mprj_io[12] | |
| |
| |
| |
| ## 10-bit Digital to Analog Converter |
| |
| The mega project area also contains a 10-bit Potentiometric Digital to Analog Converter built off of [Ashutosh Sharma's design.](https://github.com/xzlashutosh/avsddac_3v3) The design uses a 3.3V rail voltage, and 1.8V digital input voltage. The DAC's inputs are controlled by the Caravel harness' built in RISC-V core. [Ashutosh Sharma's design](https://github.com/xzlashutosh/avsddac_3v3) used the OSU180 process, for the caravel submission it was ported to the Sky130 process. |
| |
| The design uses a string of polysilicon resistors in series to create a string DAC. The resistors are connected to digital switches in order to achieve an exact voltage at the output. The device was built through hierarchical sub-circuits and sub-layouts starting off at 2-bit, then 3-bit and so forth, incrementally reaching 10-bit. With a full scale of 3.3 V and a 10 bit resolution. |
| |
| ## Pinout |
| |
| | Node | Pad | |
| | :------------ | ------------- | |
| | Analog_Out | analog_io[25] | |
| | Digital_In[0] | io_in[0] | |
| | Digital_In[1] | io_in[1] | |
| | Digital_In[2] | io_in[2] | |
| | Digital_In[3] | io_in[3] | |
| | Digital_In[4] | io_in[4] | |
| | Digital_In[5] | io_in[5] | |
| | Digital_In[6] | io_in[6] | |
| | Digital_In[7] | io_in[7] | |
| | Digital_In[8] | io_in[8] | |
| | Digital_In[9] | io_in[9] | |
| | VDD | vdda1 | |
| | Gnd | vssa1 | |
| |
| #### Simplified DAC Architecture |
| String of resistors and switches that make up potentiometric DAC. |
| <p align=”center”> |
| <img src="/doc/circuit_DAC.png" width="45%"> |
| </p> |
| |
| #### Abstracted DAC Block Diagram |
| Simple block representing all inputs and outputs of DAC. |
| <p align=”center”> |
| <img src="/doc/abstract_block_diagram.png" width="45%"> |
| </p> |
| |
| # Installation |
| |
| To setup and install the repo for development: |
| |
| 1. Install prerequisite tools: |
| 1. Install [Magic VLSI Layout Tool](http://opencircuitdesign.com/magic/) |
| - Note: As of 12/7/2020 you must install Magic from source code. The packaged version will not work with OpenPDKS. |
| 2. Install [KLayout](https://www.klayout.de/build.html) |
| 3. Install [SkywaterPDK](https://github.com/google/skywater-pdk) and [OpenPDK](https://github.com/RTimothyEdwards/open_pdks) using [OpenLane](https://github.com/efabless/openlane.git) |
| 1. Clone and Install OpenLane. This will also grab and install SkywaterPDK and OpenPDK for you: |
| |
| ```shell |
| export PDK_ROOT=(where pdks will be installed) |
| |
| cd $PDK_ROOT |
| |
| git clone https://github.com/efabless/openlane.git -b mpw-one-a |
| |
| cd openlane |
| export OPENLANE_ROOT=$(pwd) |
| make |
| ``` |
| |
| 2. Clone and uncompress the repo: |
| |
| ```shell |
| git clone https://github.com/Bryce-Readyhough/caravel_UNCC_MPW_1.git |
| make uncompress -j$nproc |
| ``` |