Pseudo-Secure Memory: SRAM based pseudo-secure memory.

Clone this repo:


  1. d392ca8 final gds oasis by Jeff DiCorpo · 1 year, 10 months ago main
  2. dc8f55c adding layout image by Sukru Uzun · 2 years ago
  3. 78b720d update makefile by Sukru Uzun · 2 years ago
  4. cda14dc update user_project utility files by Sukru Uzun · 2 years ago
  5. d7d43bb Merge branch 'mpw5-sub' by Emre Goncu · 2 years ago

Secure Memory


Table of contents


Keeping your data secure. This project aims to secure data from adversaries. It has inherent SRAM to keep the data safe and they are kept as not plaintext but ciphered. We got 5 macros inherently in order to accomplish our goal. Below section will be described those macros briefly.

Basic Macros

  • TRNG - True random number generator. Ring oscillator macro which is one of the inner macros of caravel core, is used. In this macro, delay buffers are used instead of not gates. It can be also used as key generator for AES.
  • SPI - SPI pins are connected to GPIO pins which is spared for user project. User can read/write data from/to SRAM via SPI.
  • UART - UART pins are connected to GPIO pins which is spared for user project. User can read/write data from/to SRAM via UART.
  • AES - Cipher plaintext to keep data safe in SRAM.
  • SRAM - Our precious. Its 1KB.

All these macros are in located in the verilog/rtl/ directory.


  • Docker (ensure docker daemon is running) -- tested with version 19.03.12, but any recent version should suffice.

Step-1: Docker in ubuntu 20.04 version

   sudo apt update
   sudo apt-get install apt-transport-https curl rtificates -agent software-properties-common
   curl -fsSL | sudo apt-key add -
   sudo add-apt-repository "deb [arch=amd64] focal stable"
   sudo apt update
   apt-cache policy docker-ce
   sudo apt install docker-ce

   #Add User Name to docker
   sudo usermod -aG docker <your user name>
   # Reboot the system to enable the docker setup

Step-2: Clone caravel user project

   git clone -b mpw-5c

Step-3: Setup your local environment

    export CARAVEL_ROOT=<Caravel Installed Path>
    export PDK_ROOT=<PDK Installed PATH>
    export UPRJ_ROOT=<Caravel User Project Installed Path>
    export OPENLANE_ROOT=<OpenLane Installed Path>
    export OPENLANE_IMAGE_NAME=efabless/openlane:2022.02.23_02.50.41

Step-4: To install required repos

   source ~/.bashrc
   cd $UPRJ_ROOT
   make install # install pdk. pdk with sram, openlane. caravel and mgmt core

Step-5: Harden design

A subdirectory for each macro in your project under openlane/ directory, each subdirectory should include openlane configuration files for the macro

   make <module_name>
   make user_project_wrapper

Step-6 Simulation


    # you can then run RTL simulations using
    make verify-<testbench-name>-rtl

    # or GL simulation using
    make verify-<testbench-name>-gl

    # for example
    make verify-wb_port-rtl

Step-7 Precheck

    make precheck
    make run-precheck

Openlane Flow

Mbist Controller flow uses Openlane tool sets.

  1. Synthesis
    1. yosys - Performs RTL synthesis
    2. abc - Performs technology mapping
    3. OpenSTA - Pefroms static timing analysis on the resulting netlist to generate timing reports
  2. Floorplan and PDN
    1. init_fp - Defines the core area for the macro as well as the rows (used for placement) and the tracks (used for routing)
    2. ioplacer - Places the macro input and output ports
    3. pdn - Generates the power distribution network
    4. tapcell - Inserts welltap and decap cells in the floorplan
  3. Placement
    1. RePLace - Performs global placement
    2. Resizer - Performs optional optimizations on the design
    3. OpenPhySyn - Performs timing optimizations on the design
    4. OpenDP - Perfroms detailed placement to legalize the globally placed components
  4. CTS
    1. TritonCTS - Synthesizes the clock distribution network (the clock tree)
  5. Routing
    1. FastRoute - Performs global routing to generate a guide file for the detailed router
    2. CU-GR - Another option for performing global routing.
    3. TritonRoute - Performs detailed routing
    4. SPEF-Extractor - Performs SPEF extraction
  6. GDSII Generation
    1. Magic - Streams out the final GDSII layout file from the routed def
    2. Klayout - Streams out the final GDSII layout file from the routed def as a back-up
  7. Checks
    1. Magic - Performs DRC Checks & Antenna Checks
    2. Klayout - Performs DRC Checks
    3. Netgen - Performs LVS Checks
    4. CVC - Performs Circuit Validity Checks