Merge branch 'main' of github.com:giraypultar/keyvalue_caravel
diff --git a/.github/scripts/build/run-set-id.sh b/.github/scripts/build/run-set-id.sh
index b6e9cfb..9cb87f8 100644
--- a/.github/scripts/build/run-set-id.sh
+++ b/.github/scripts/build/run-set-id.sh
@@ -24,7 +24,7 @@
cd $UPRJ_ROOT
# Install full version of caravel
-git clone https://github.com/efabless/caravel --branch develop --depth 1 $CARAVEL_ROOT
+git clone https://github.com/efabless/caravel --depth 1 $CARAVEL_ROOT
LOG_FILE=out.log
docker run -v $UPRJ_ROOT:$UPRJ_ROOT -v $PDK_ROOT:$PDK_ROOT -v $CARAVEL_ROOT:$CARAVEL_ROOT -e UPRJ_ROOT=$UPRJ_ROOT -e PDK_ROOT=$PDK_ROOT -e CARAVEL_ROOT=$CARAVEL_ROOT -u $(id -u $USER):$(id -g $USER) $IMAGE_NAME bash -c "cd $CARAVEL_ROOT; make uncompress; cd $UPRJ_ROOT; export USER_ID=$USER_ID; make set_user_id | tee $LOG_FILE;"
@@ -35,4 +35,4 @@
exit 2;
fi
-exit 0
\ No newline at end of file
+exit 0
diff --git a/.github/scripts/build/run-ship.sh b/.github/scripts/build/run-ship.sh
index 0217dbc..d084c00 100644
--- a/.github/scripts/build/run-ship.sh
+++ b/.github/scripts/build/run-ship.sh
@@ -23,9 +23,11 @@
cd $UPRJ_ROOT
# Install full version of caravel
-git clone https://github.com/efabless/caravel --branch develop --depth 1 $CARAVEL_ROOT
+git clone https://github.com/efabless/caravel --depth 1 $CARAVEL_ROOT
-docker run -v $UPRJ_ROOT:$UPRJ_ROOT -v $PDK_ROOT:$PDK_ROOT -v $CARAVEL_ROOT:$CARAVEL_ROOT -e UPRJ_ROOT=$UPRJ_ROOT -e PDK_ROOT=$PDK_ROOT -e CARAVEL_ROOT=$CARAVEL_ROOT -u $(id -u $USER):$(id -g $USER) $IMAGE_NAME bash -c "cd $CARAVEL_ROOT; make uncompress; cd $UPRJ_ROOT; make ship;"
+make install_mcw
+
+docker run -v $UPRJ_ROOT:$UPRJ_ROOT -v $PDK_ROOT:$PDK_ROOT -v $CARAVEL_ROOT:$CARAVEL_ROOT -e UPRJ_ROOT=$UPRJ_ROOT -e PDK_ROOT=$PDK_ROOT -e CARAVEL_ROOT=$CARAVEL_ROOT -u $(id -u $USER):$(id -g $USER) $IMAGE_NAME bash -c "cd $CARAVEL_ROOT; make uncompress; cd $UPRJ_ROOT; make -f $CARAVEL_ROOT/Makefile ship;"
SHIP_FILE=$UPRJ_ROOT/gds/caravel.gds
diff --git a/.github/workflows/auto_update_submodule.yml b/.github/workflows/auto_update_submodule.yml
deleted file mode 100644
index 7219ddf..0000000
--- a/.github/workflows/auto_update_submodule.yml
+++ /dev/null
@@ -1,41 +0,0 @@
-
-name: 'Auto-update Submodules'
-
-on:
- workflow_dispatch:
- schedule:
- - cron: "0 0 * * *"
-
-jobs:
- sync:
- name: 'Auto-update Submodules'
- runs-on: ubuntu-latest
-
- # Use the Bash shell regardless whether the GitHub Actions runner is ubuntu-latest, macos-latest, or windows-latest
- defaults:
- run:
- shell: bash
-
- steps:
- # Checkout the repository to the GitHub Actions runner
- - name: Checkout
- uses: actions/checkout@v2
- with:
- submodules: true
-
- # Git config
- - name: Git Configurations
- run: |
- git config --global user.name 'Git bot'
- git config --global user.email 'bot@noreply.github.com'
-
- # Update references
- - name: Git Sumbodule Update
- run: |
- git submodule update --init --recursive
- git submodule update --remote --recursive
-
- - name: Commit update
- run: |
- git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}
- git commit -am "Auto updated submodule references" && git push || echo "No changes to commit"
diff --git a/.github/workflows/caravel_build.yml b/.github/workflows/caravel_build.yml
index c615662..3978d7f 100644
--- a/.github/workflows/caravel_build.yml
+++ b/.github/workflows/caravel_build.yml
@@ -13,8 +13,6 @@
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- with:
- submodules: 'true'
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
@@ -25,19 +23,17 @@
- name: Install The PDK
run: bash ${GITHUB_WORKSPACE}/.github/scripts/dv/pdkBuild.sh
env:
- OPENLANE_TAG: 2021.09.16_03.28.21
+ OPENLANE_TAG: 2021.12.17_05.07.41
- name: Run make ship
run: bash ${GITHUB_WORKSPACE}/.github/scripts/build/run-ship.sh
env:
- OPENLANE_TAG: 2021.09.16_03.28.21
+ OPENLANE_TAG: 2021.12.17_05.07.41
set_user_id:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- with:
- submodules: 'true'
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
@@ -59,8 +55,6 @@
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- with:
- submodules: 'true'
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
diff --git a/.github/workflows/user_project_ci.yml b/.github/workflows/user_project_ci.yml
index 5b8ea91..9196114 100644
--- a/.github/workflows/user_project_ci.yml
+++ b/.github/workflows/user_project_ci.yml
@@ -14,8 +14,6 @@
timeout-minutes: 720
steps:
- uses: actions/checkout@v2
- with:
- submodules: 'true'
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
@@ -34,8 +32,6 @@
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- with:
- submodules: 'true'
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
@@ -53,8 +49,6 @@
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- with:
- submodules: 'true'
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
@@ -78,8 +72,6 @@
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- with:
- submodules: 'true'
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
@@ -97,4 +89,4 @@
- name: Run DV tests
# Run test number 0,1,2,3,4 in one job <test-ids> <sim-mode>
- run: bash ${GITHUB_WORKSPACE}/.github/scripts/dv/run-dv-wrapper.sh 0,1,2,3,4 GL
\ No newline at end of file
+ run: bash ${GITHUB_WORKSPACE}/.github/scripts/dv/run-dv-wrapper.sh 0,1,2,3,4 GL
diff --git a/.gitmodules b/.gitmodules
index c73b442..0ba8b09 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,3 @@
-[submodule "caravel-lite"]
- path = caravel
- url = https://github.com/efabless/caravel-lite
+[submodule "verilog/rtl/wrapped_keyvalue"]
+ path = verilog/rtl/wrapped_keyvalue
+ url = https://github.com/giraypultar/wrapped_keyvalue
diff --git a/Makefile b/Makefile
index 188e997..9fc63bd 100644
--- a/Makefile
+++ b/Makefile
@@ -24,15 +24,13 @@
ifeq ($(CARAVEL_LITE),1)
CARAVEL_NAME := caravel-lite
CARAVEL_REPO := https://github.com/efabless/caravel-lite
- CARAVEL_BRANCH := main
+ CARAVEL_TAG := 'rc-8'
else
CARAVEL_NAME := caravel
CARAVEL_REPO := https://github.com/efabless/caravel
- CARAVEL_BRANCH := master
+ CARAVEL_TAG := 'rc-8'
endif
-# Install caravel as submodule, (1): submodule, (0): clone
-SUBMODULE?=1
# Include Caravel Makefile Targets
.PHONY: % : check-caravel
@@ -72,19 +70,8 @@
# Install caravel
.PHONY: install
install:
-ifeq ($(SUBMODULE),1)
- @echo "Installing $(CARAVEL_NAME) as a submodule.."
-# Convert CARAVEL_ROOT to relative path because .gitmodules doesn't accept '/'
- $(eval CARAVEL_PATH := $(shell realpath --relative-to=$(shell pwd) $(CARAVEL_ROOT)))
- @if [ ! -d $(CARAVEL_ROOT) ]; then git submodule add --name $(CARAVEL_NAME) $(CARAVEL_REPO) $(CARAVEL_PATH); fi
- @git submodule update --init
- @cd $(CARAVEL_ROOT); git checkout $(CARAVEL_BRANCH)
- $(MAKE) simlink
-else
@echo "Installing $(CARAVEL_NAME).."
- @git clone $(CARAVEL_REPO) $(CARAVEL_ROOT)
- @cd $(CARAVEL_ROOT); git checkout $(CARAVEL_BRANCH)
-endif
+ @git clone -b $(CARAVEL_TAG) $(CARAVEL_REPO) $(CARAVEL_ROOT)
# Create symbolic links to caravel's main files
.PHONY: simlink
@@ -102,30 +89,12 @@
# Update Caravel
.PHONY: update_caravel
update_caravel: check-caravel
-ifeq ($(SUBMODULE),1)
- @git submodule update --init --recursive
- cd $(CARAVEL_ROOT) && \
- git checkout $(CARAVEL_BRANCH) && \
- git pull
-else
- cd $(CARAVEL_ROOT)/ && \
- git checkout $(CARAVEL_BRANCH) && \
- git pull
-endif
+ cd $(CARAVEL_ROOT)/ && git checkout $(CARAVEL_TAG) && git pull
# Uninstall Caravel
.PHONY: uninstall
uninstall:
-ifeq ($(SUBMODULE),1)
- git config -f .gitmodules --remove-section "submodule.$(CARAVEL_NAME)"
- git add .gitmodules
- git submodule deinit -f $(CARAVEL_ROOT)
- git rm --cached $(CARAVEL_ROOT)
- rm -rf .git/modules/$(CARAVEL_NAME)
rm -rf $(CARAVEL_ROOT)
-else
- rm -rf $(CARAVEL_ROOT)
-endif
# Install Openlane
.PHONY: openlane
diff --git a/README.md b/README.md
index 17a85df..b156934 100644
--- a/README.md
+++ b/README.md
@@ -1,13 +1,7 @@
-# Caravel User Project
+# Key value store
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![UPRJ_CI](https://github.com/efabless/caravel_project_example/actions/workflows/user_project_ci.yml/badge.svg)](https://github.com/efabless/caravel_project_example/actions/workflows/user_project_ci.yml) [![Caravel Build](https://github.com/efabless/caravel_project_example/actions/workflows/caravel_build.yml/badge.svg)](https://github.com/efabless/caravel_project_example/actions/workflows/caravel_build.yml)
-## Please fill in your project documentation in this README.md file
-
-
-Refer to [README](docs/source/index.rst) for this sample project documentation.
-
-
.. raw:: html
<!---
@@ -28,454 +22,25 @@
# SPDX-License-Identifier: Apache-2.0
-->
-Caravel User Project
+ASIC Key Value Store
====================
-|License| |User CI| |Caravel Build|
-
-Table of contents
-=================
-
-- `Overview <#overview>`__
-- `Install Caravel <#install-caravel>`__
-- `Caravel Integration <#caravel-integration>`__
-
- - `Repo Integration <#repo-integration>`__
- - `Verilog Integration <#verilog-integration>`__
- - `Layout Integration <#layout-integration>`__
-
-- `Running Full Chip Simulation <#running-full-chip-simulation>`__
-- `User Project Wrapper Requirements <#user-project-wrapper-requirements>`__
-- `Hardening the User Project using
- Openlane <#hardening-the-user-project-using-openlane>`__
-- `Checklist for Open-MPW
- Submission <#checklist-for-open-mpw-submission>`__
-
Overview
-========
-
-This repo contains a sample user project that utilizes the
+-----------------
+This repo contains a key value store that utilizes the
`caravel <https://github.com/efabless/caravel.git>`__ chip user space.
-The user project is a simple counter that showcases how to make use of
-`caravel's <https://github.com/efabless/caravel.git>`__ user space
-utilities like IO pads, logic analyzer probes, and wishbone port. The
-repo also demonstrates the recommended structure for the open-mpw
-shuttle projects.
-Prerequisites
-=============
+This repo has been cloned from:
-- Docker
+https://github.com/efabless/caravel_user_project
-Install Caravel
-===============
+for MPW-3
-To setup caravel, run the following:
+More info on how to build and use this is in the caravel_user_project repo.
-.. code:: bash
+Source
+--------
- # If unset, CARAVEL_ROOT will be set to $(pwd)/caravel
- # If you want to install caravel at a different location, run "export CARAVEL_ROOT=<caravel-path>"
- export CARAVEL_ROOT=$(pwd)/caravel
+The migen and RTL source can be found in:
- # Disable submodule installation if needed by, run "export SUBMODULE=0"
-
- git clone https://github.com/efabless/caravel_user_project.git
- cd caravel_user_project
- make install
-
-To update the installed caravel to the latest, run:
-
-.. code:: bash
-
- make update_caravel
-
-To remove caravel, run
-
-.. code:: bash
-
- make uninstall
-
-By default
-`caravel-lite <https://github.com/efabless/caravel-lite.git>`__ is
-installed. To install the full version of caravel, run this prior to
-calling make install.
-
-.. code:: bash
-
- export CARAVEL_LITE=0
-
-Caravel Integration
-===================
-
-Repo Integration
-----------------
-
-Caravel files are kept separate from the user project by having caravel
-as submodule. The submodule commit should point to the latest of
-caravel/caravel-lite master/main branch. The following files should have a symbolic
-link to `caravel's <https://github.com/efabless/caravel.git>`__
-corresponding files:
-
-- `Openlane Makefile <../../openlane/Makefile>`__: This provides an easier
- way for running openlane to harden your macros. Refer to `Hardening
- the User Project Macro using
- Openlane <#hardening-the-user-project-macro-using-openlane>`__. Also,
- the makefile retains the openlane summary reports under the signoff
- directory.
-
-- `Pin order <../../openlane/user_project_wrapper/pin_order.cfg>`__ file for
- the user wrapper: The hardened user project wrapper macro must have
- the same pin order specified in caravel's repo. Failing to adhere to
- the same order will fail the gds integration of the macro with
- caravel's back-end.
-
-The symbolic links are automatically set when you run ``make install``.
-
-Verilog Integration
--------------------
-
-You need to create a wrapper around your macro that adheres to the
-template at
-`user\_project\_wrapper <https://github.com/efabless/caravel/blob/master/verilog/rtl/__user_project_wrapper.v>`__.
-The wrapper top module must be named ``user_project_wrapper`` and must
-have the same input and output ports as the golden wrapper `template <https://github.com/efabless/caravel/blob/master/verilog/rtl/__user_project_wrapper.v>`__. The wrapper gives access to the
-user space utilities provided by caravel like IO ports, logic analyzer
-probes, and wishbone bus connection to the management SoC.
-
-For this sample project, the user macro makes use of:
-
-- The IO ports for displaying the count register values on the IO pads.
-
-- The LA probes for supplying an optional reset and clock signals and
- for setting an initial value for the count register.
-
-- The wishbone port for reading/writing the count value through the
- management SoC.
-
-Refer to `user\_project\_wrapper <../../verilog/rtl/user_project_wrapper.v>`__
-for more information.
-
-.. raw:: html
-
- <p align="center">
- <img src="./_static/counter_32.png" width="50%" height="50%">
- </p>
-
-.. raw:: html
-
- </p>
-
-
-Layout Integration
--------------------
-
-The caravel layout is pre-designed with an empty golden wrapper in the user space. You only need to provide us with a valid ``user_project_wrapper`` GDS file. And, as part of the tapeout process, your hardened ``user_project_wrapper`` will be inserted into a vanilla caravel layout to get the final layout shipped for fabrication.
-
-.. raw:: html
-
- <p align="center">
- <img src="./_static/layout.png" width="80%" height="80%">
- </p>
-
-To make sure that this integration process goes smoothly without having any DRC or LVS issues, your hardened ``user_project_wrapper`` must adhere to a number of requirements listed at `User Project Wrapper Requirements <#user-project-wrapper-requirements>`__ .
-
-
-Building the PDK
-================
-
-You have two options for building the pdk:
-
-- Build the pdk natively.
-
-Make sure you have `Magic VLSI Layout Tool <http://opencircuitdesign.com/magic/index.html>`__ installed on your machine before building the pdk.
-The pdk build is tested with magic version ``8.3.209``.
-
-.. code:: bash
-
- # set PDK_ROOT to the path you wish to use for the pdk
- export PDK_ROOT=<pdk-installation-path>
-
- # you can optionally specify skywater-pdk and open-pdks commit used
- # by setting and exporting SKYWATER_COMMIT and OPEN_PDKS_COMMIT
- # if you do not set them, they default to the last verfied commits tested for this project
-
- make pdk
-
-- Build the pdk using openlane's docker image which has magic installed.
-
-.. code:: bash
-
- # set PDK_ROOT to the path you wish to use for the pdk
- export PDK_ROOT=<pdk-installation-path>
-
- # you can optionally specify skywater-pdk and open-pdks commit used
- # by setting and exporting SKYWATER_COMMIT and OPEN_PDKS_COMMIT
- # if you do not set them, they default to the last verfied commits tested for this project
-
- make pdk-nonnative
-
-Running Full Chip Simulation
-============================
-
-First, you will need to install the simulation environment, by
-
-.. code:: bash
-
- make simenv
-
-This will pull a docker image with the needed tools installed.
-
-Then, run the RTL simulation by
-
-.. code:: bash
-
- export PDK_ROOT=<pdk-installation-path>
- export CARAVEL_ROOT=$(pwd)/caravel
- # specify simulation mode: RTL/GL
- export SIM=RTL
- # Run RTL simulation on IO ports testbench, make verify-io_ports
- make verify-<testbench-name>
-
-Once you have the physical implementation done and you have the gate-level netlists ready, it is crucial to run full gate-level simulations to make sure that your design works as intended after running the physical implementation.
-
-Run the gate-level simulation by:
-
-.. code:: bash
-
- export PDK_ROOT=<pdk-installation-path>
- export CARAVEL_ROOT=$(pwd)/caravel
- # specify simulation mode: RTL/GL
- export SIM=GL
- # Run RTL simulation on IO ports testbench, make verify-io_ports
- make verify-<testbench-name>
-
-
-This sample project comes with four example testbenches to test the IO port connection, wishbone interface, and logic analyzer. The test-benches are under the
-`verilog/dv <https://github.com/efabless/caravel_user_project/tree/main/verilog/dv>`__ directory. For more information on setting up the
-simulation environment and the available testbenches for this sample
-project, refer to `README <https://github.com/efabless/caravel_user_project/blob/main/verilog/dv/README.md>`__.
-
-
-User Project Wrapper Requirements
-=================================
-
-Your hardened ``user_project_wrapper`` must match the `golden user_project_wrapper <https://github.com/efabless/caravel/blob/master/gds/user_project_wrapper_empty.gds.gz>`__ in the following:
-
-- Area ``(2.920um x 3.520um)``
-- Top module name ``"user_project_wrapper"``
-- Pin Placement
-- Pin Sizes
-- Core Rings Width and Offset
-- PDN Vertical and Horizontal Straps Width
-
-
-.. raw:: html
-
- <p align="center">
- <img src="./_static/empty.png" width="40%" height="40%">
- </p>
-
-
-These fixed configurations are specified `here <https://github.com/efabless/caravel/blob/master/openlane/user_project_wrapper_empty/fixed_wrapper_cfgs.tcl>`__ .
-
-However, you are allowed to change the following if you need to:
-
-- PDN Vertical and Horizontal Pitch & Offset
-
-.. raw:: html
-
- <p align="center">
- <img src="./_static/pitch.png" width="30%" height="30%">
- </p>
-
-To make sure that you adhere to these requirements, we run an exclusive-or (XOR) check between your hardened ``user_project_wrapper`` GDS and the golden wrapper GDS after processing both layouts to include only the boundary (pins and core rings). This check is done as part of the `mpw-precheck <https://github.com/efabless/mpw_precheck>`__ tool.
-
-
-Hardening the User Project using OpenLane
-==========================================
-
-OpenLane Installation
----------------------
-
-You will need to install openlane by running the following
-
-.. code:: bash
-
- export OPENLANE_ROOT=<openlane-installation-path>
-
- # you can optionally specify the openlane tag to use
- # by running: export OPENLANE_TAG=<openlane-tag>
- # if you do not set the tag, it defaults to the last verfied tag tested for this project
-
- make openlane
-
-For detailed instructions on the openlane and the pdk installation refer
-to
-`README <https://github.com/The-OpenROAD-Project/OpenLane#setting-up-openlane>`__.
-
-Hardening Options
------------------
-
-There are three options for hardening the user project macro using
-openlane:
-
-+--------------------------------------------------------------+--------------------------------------------+--------------------------------------------+
-| Option 1 | Option 2 | Option 3 |
-+--------------------------------------------------------------+--------------------------------------------+--------------------------------------------+
-| Hardening the user macro(s) first, then inserting it in the | Flattening the user macro(s) with the | Placing multiple macros in the wrapper |
-| user project wrapper with no standard cells on the top level | user_project_wrapper | along with standard cells on the top level |
-+==============================================================+============================================+============================================+
-| |pic1| | |pic2| | |pic3| |
-| | | |
-+--------------------------------------------------------------+--------------------------------------------+--------------------------------------------+
-| ex: |link1| | | ex: |link2| |
-+--------------------------------------------------------------+--------------------------------------------+--------------------------------------------+
-
-.. |link1| replace:: `caravel_user_project <https://github.com/efabless/caravel_user_project>`__
-
-.. |link2| replace:: `caravel_ibex <https://github.com/efabless/caravel_ibex>`__
-
-
-.. |pic1| image:: ./_static/option1.png
- :width: 48%
-
-.. |pic2| image:: ./_static/option2.png
- :width: 140%
-
-.. |pic3| image:: ./_static/option3.png
- :width: 72%
-
-For more details on hardening macros using openlane, refer to `README <https://github.com/The-OpenROAD-Project/OpenLane/blob/master/docs/source/hardening_macros.md>`__.
-
-
-Running OpenLane
------------------
-
-For this sample project, we went for the first option where the user
-macro is hardened first, then it is inserted in the user project
-wrapper without having any standard cells on the top level.
-
-.. raw:: html
-
- <p align="center">
- <img src="./_static/wrapper.png" width="30%" height="30%">
- </p>
-
-.. raw:: html
-
- </p>
-
-To reproduce hardening this project, run the following:
-
-.. code:: bash
-
- # Run openlane to harden user_proj_example
- make user_proj_example
- # Run openlane to harden user_project_wrapper
- make user_project_wrapper
-
-
-For more information on the openlane flow, check `README <https://github.com/The-OpenROAD-Project/OpenLane#readme>`__.
-
-Running MPW Precheck Locally
-=================================
-
-You can install the `mpw-precheck <https://github.com/efabless/mpw_precheck>`__ by running
-
-.. code:: bash
-
- # By default, this install the precheck in your home directory
- # To change the installtion path, run "export PRECHECK_ROOT=<precheck installation path>"
- make precheck
-
-This will clone the precheck repo and pull the latest precheck docker image.
-
-
-Then, you can run the precheck by running
-Specify CARAVEL_ROOT before running any of the following,
-
-.. code:: bash
-
- # export CARAVEL_ROOT=$(pwd)/caravel
- export CARAVEL_ROOT=<path-to-caravel>
- make run-precheck
-
-This will run all the precheck checks on your project and will produce the logs under the ``checks`` directory.
-
-
-Other Miscellaneous Targets
-============================
-
-The makefile provides a number of useful that targets that can run LVS, DRC, and XOR checks on your hardened design outside of openlane's flow.
-
-Run ``make help`` to display available targets.
-
-Specify CARAVEL_ROOT before running any of the following,
-
-.. code:: bash
-
- # export CARAVEL_ROOT=$(pwd)/caravel
- export CARAVEL_ROOT=<path-to-caravel>
-
-Run lvs on the mag view,
-
-.. code:: bash
-
- make lvs-<macro_name>
-
-Run lvs on the gds,
-
-.. code:: bash
-
- make lvs-gds-<macro_name>
-
-Run lvs on the maglef,
-
-.. code:: bash
-
- make lvs-maglef-<macro_name>
-
-Run drc using magic,
-
-.. code:: bash
-
- make drc-<macro_name>
-
-Run antenna check using magic,
-
-.. code:: bash
-
- make antenna-<macro_name>
-
-Run XOR check,
-
-.. code:: bash
-
- make xor-wrapper
-
-
-Checklist for Open-MPW Submission
-=================================
-
-- ✔️ The project repo adheres to the same directory structure in this
- repo.
-- ✔️ The project repo contain info.yaml at the project root.
-- ✔️ Top level macro is named ``user_project_wrapper``.
-- ✔️ Full Chip Simulation passes for RTL and GL (gate-level)
-- ✔️ The hardened Macros are LVS and DRC clean
-- ✔️ The project contains a gate-level netlist for ``user_project_wrapper`` at verilog/gl/user_project_wrapper.v
-- ✔️ The hardened ``user_project_wrapper`` adheres to the same pin
- order specified at
- `pin\_order <https://github.com/efabless/caravel/blob/master/openlane/user_project_wrapper_empty/pin_order.cfg>`__
-- ✔️ The hardened ``user_project_wrapper`` adheres to the fixed wrapper configuration specified at `fixed_wrapper_cfgs <https://github.com/efabless/caravel/blob/master/openlane/user_project_wrapper_empty/fixed_wrapper_cfgs.tcl>`__
-- ✔️ XOR check passes with zero total difference.
-- ✔️ Openlane summary reports are retained under ./signoff/
-- ✔️ The design passes the `mpw-precheck <https://github.com/efabless/mpw_precheck>`__
-
-.. |License| image:: https://img.shields.io/badge/License-Apache%202.0-blue.svg
- :target: https://opensource.org/licenses/Apache-2.0
-.. |User CI| image:: https://github.com/efabless/caravel_project_example/actions/workflows/user_project_ci.yml/badge.svg
- :target: https://github.com/efabless/caravel_project_example/actions/workflows/user_project_ci.yml
-.. |Caravel Build| image:: https://github.com/efabless/caravel_project_example/actions/workflows/caravel_build.yml/badge.svg
- :target: https://github.com/efabless/caravel_project_example/actions/workflows/caravel_build.yml
+https://github.com/giraypultar/wrapped_keyvalue/
diff --git a/docs/source/_static/empty.png b/docs/source/_static/empty.png
deleted file mode 100644
index 4b7ae67..0000000
--- a/docs/source/_static/empty.png
+++ /dev/null
Binary files differ
diff --git a/docs/source/_static/layout.png b/docs/source/_static/layout.png
deleted file mode 100644
index 71ffad0..0000000
--- a/docs/source/_static/layout.png
+++ /dev/null
Binary files differ
diff --git a/docs/source/_static/option1.png b/docs/source/_static/option1.png
deleted file mode 100644
index a88350b..0000000
--- a/docs/source/_static/option1.png
+++ /dev/null
Binary files differ
diff --git a/docs/source/_static/option2.png b/docs/source/_static/option2.png
deleted file mode 100644
index 5c604d6..0000000
--- a/docs/source/_static/option2.png
+++ /dev/null
Binary files differ
diff --git a/docs/source/_static/option3.png b/docs/source/_static/option3.png
deleted file mode 100644
index 7e346b3..0000000
--- a/docs/source/_static/option3.png
+++ /dev/null
Binary files differ
diff --git a/docs/source/_static/pitch.png b/docs/source/_static/pitch.png
deleted file mode 100644
index 2efc7a9..0000000
--- a/docs/source/_static/pitch.png
+++ /dev/null
Binary files differ
diff --git a/docs/source/index.rst b/docs/source/index.rst
index 15a0a03..fa3f806 100644
--- a/docs/source/index.rst
+++ b/docs/source/index.rst
@@ -32,12 +32,10 @@
- `Repo Integration <#repo-integration>`__
- `Verilog Integration <#verilog-integration>`__
- - `Layout Integration <#layout-integration>`__
- `Running Full Chip Simulation <#running-full-chip-simulation>`__
-- `User Project Wrapper Requirements <#user-project-wrapper-requirements>`__
-- `Hardening the User Project using
- Openlane <#hardening-the-user-project-using-openlane>`__
+- `Hardening the User Project Macro using
+ Openlane <#hardening-the-user-project-macro-using-openlane>`__
- `Checklist for Open-MPW
Submission <#checklist-for-open-mpw-submission>`__
@@ -103,7 +101,7 @@
Caravel files are kept separate from the user project by having caravel
as submodule. The submodule commit should point to the latest of
-caravel/caravel-lite master/main branch. The following files should have a symbolic
+caravel/caravel-lite master. The following files should have a symbolic
link to `caravel's <https://github.com/efabless/caravel.git>`__
corresponding files:
@@ -156,21 +154,6 @@
</p>
-
-Layout Integration
--------------------
-
-The caravel layout is pre-designed with an empty golden wrapper in the user space. You only need to provide us with a valid ``user_project_wrapper`` GDS file. And, as part of the tapeout process, your hardened ``user_project_wrapper`` will be inserted into a vanilla caravel layout to get the final layout shipped for fabrication.
-
-.. raw:: html
-
- <p align="center">
- <img src="./_static/layout.png" width="80%" height="80%">
- </p>
-
-To make sure that this integration process goes smoothly without having any DRC or LVS issues, your hardened ``user_project_wrapper`` must adhere to a number of requirements listed at `User Project Wrapper Requirements <#user-project-wrapper-requirements>`__ .
-
-
Building the PDK
================
@@ -179,7 +162,7 @@
- Build the pdk natively.
Make sure you have `Magic VLSI Layout Tool <http://opencircuitdesign.com/magic/index.html>`__ installed on your machine before building the pdk.
-The pdk build is tested with magic version ``8.3.209``.
+The pdk build is tested with magic version `8.3.209`.
.. code:: bash
@@ -216,7 +199,7 @@
This will pull a docker image with the needed tools installed.
-Then, run the RTL simulation by
+Then, run the RTL and GL simulation by
.. code:: bash
@@ -224,69 +207,16 @@
export CARAVEL_ROOT=$(pwd)/caravel
# specify simulation mode: RTL/GL
export SIM=RTL
- # Run RTL simulation on IO ports testbench, make verify-io_ports
- make verify-<testbench-name>
+ # Run IO ports testbench, make verify-io_ports
+ make verify-<dv-pattern>
-Once you have the physical implementation done and you have the gate-level netlists ready, it is crucial to run full gate-level simulations to make sure that your design works as intended after running the physical implementation.
-
-Run the gate-level simulation by:
-
-.. code:: bash
-
- export PDK_ROOT=<pdk-installation-path>
- export CARAVEL_ROOT=$(pwd)/caravel
- # specify simulation mode: RTL/GL
- export SIM=GL
- # Run RTL simulation on IO ports testbench, make verify-io_ports
- make verify-<testbench-name>
-
-
-This sample project comes with four example testbenches to test the IO port connection, wishbone interface, and logic analyzer. The test-benches are under the
-`verilog/dv <https://github.com/efabless/caravel_user_project/tree/main/verilog/dv>`__ directory. For more information on setting up the
+The verilog test-benches are under this directory
+`verilog/dv <https://github.com/efabless/caravel_user_project/tree/main/verilog/dv>`__. For more information on setting up the
simulation environment and the available testbenches for this sample
project, refer to `README <https://github.com/efabless/caravel_user_project/blob/main/verilog/dv/README.md>`__.
-
-User Project Wrapper Requirements
-=================================
-
-Your hardened ``user_project_wrapper`` must match the `golden user_project_wrapper <https://github.com/efabless/caravel/blob/master/gds/user_project_wrapper_empty.gds.gz>`__ in the following:
-
-- Area ``(2.920um x 3.520um)``
-- Top module name ``"user_project_wrapper"``
-- Pin Placement
-- Pin Sizes
-- Core Rings Width and Offset
-- PDN Vertical and Horizontal Straps Width
-
-
-.. raw:: html
-
- <p align="center">
- <img src="./_static/empty.png" width="40%" height="40%">
- </p>
-
-
-These fixed configurations are specified `here <https://github.com/efabless/caravel/blob/master/openlane/user_project_wrapper_empty/fixed_wrapper_cfgs.tcl>`__ .
-
-However, you are allowed to change the following if you need to:
-
-- PDN Vertical and Horizontal Pitch & Offset
-
-.. raw:: html
-
- <p align="center">
- <img src="./_static/pitch.png" width="30%" height="30%">
- </p>
-
-To make sure that you adhere to these requirements, we run an exclusive-or (XOR) check between your hardened ``user_project_wrapper`` GDS and the golden wrapper GDS after processing both layouts to include only the boundary (pins and core rings). This check is done as part of the `mpw-precheck <https://github.com/efabless/mpw_precheck>`__ tool.
-
-
-Hardening the User Project using OpenLane
-==========================================
-
-OpenLane Installation
----------------------
+Hardening the User Project Macro using Openlane
+===============================================
You will need to install openlane by running the following
@@ -302,45 +232,16 @@
For detailed instructions on the openlane and the pdk installation refer
to
-`README <https://github.com/The-OpenROAD-Project/OpenLane#setting-up-openlane>`__.
-
-Hardening Options
------------------
+`README <https://github.com/efabless/openlane/blob/master/README.md>`__.
There are three options for hardening the user project macro using
openlane:
-+--------------------------------------------------------------+--------------------------------------------+--------------------------------------------+
-| Option 1 | Option 2 | Option 3 |
-+--------------------------------------------------------------+--------------------------------------------+--------------------------------------------+
-| Hardening the user macro(s) first, then inserting it in the | Flattening the user macro(s) with the | Placing multiple macros in the wrapper |
-| user project wrapper with no standard cells on the top level | user_project_wrapper | along with standard cells on the top level |
-+==============================================================+============================================+============================================+
-| |pic1| | |pic2| | |pic3| |
-| | | |
-+--------------------------------------------------------------+--------------------------------------------+--------------------------------------------+
-| ex: |link1| | | ex: |link2| |
-+--------------------------------------------------------------+--------------------------------------------+--------------------------------------------+
+1. Hardening the user macro, then embedding it in the wrapper
+2. Flattening the user macro with the wrapper.
+3. Placing multiple macros in the wrapper along with standard cells on the top level.
-.. |link1| replace:: `caravel_user_project <https://github.com/efabless/caravel_user_project>`__
-
-.. |link2| replace:: `caravel_ibex <https://github.com/efabless/caravel_ibex>`__
-
-
-.. |pic1| image:: ./_static/option1.png
- :width: 48%
-
-.. |pic2| image:: ./_static/option2.png
- :width: 140%
-
-.. |pic3| image:: ./_static/option3.png
- :width: 72%
-
-For more details on hardening macros using openlane, refer to `README <https://github.com/The-OpenROAD-Project/OpenLane/blob/master/docs/source/hardening_macros.md>`__.
-
-
-Running OpenLane
------------------
+For more details on hardening the user project macro using openlane, refer to `README <https://github.com/efabless/caravel/blob/master/openlane/README.rst>`__.
For this sample project, we went for the first option where the user
macro is hardened first, then it is inserted in the user project
@@ -349,13 +250,13 @@
.. raw:: html
<p align="center">
- <img src="./_static/wrapper.png" width="30%" height="30%">
+ <img src="./_static/wrapper.png" width="50%" height="50%">
</p>
.. raw:: html
</p>
-
+
To reproduce hardening this project, run the following:
.. code:: bash
@@ -366,12 +267,10 @@
make user_project_wrapper
-For more information on the openlane flow, check `README <https://github.com/The-OpenROAD-Project/OpenLane#readme>`__.
-
Running MPW Precheck Locally
=================================
-You can install the `mpw-precheck <https://github.com/efabless/mpw_precheck>`__ by running
+You can install the precheck by running
.. code:: bash
@@ -454,7 +353,6 @@
- ✔️ Top level macro is named ``user_project_wrapper``.
- ✔️ Full Chip Simulation passes for RTL and GL (gate-level)
- ✔️ The hardened Macros are LVS and DRC clean
-- ✔️ The project contains a gate-level netlist for ``user_project_wrapper`` at verilog/gl/user_project_wrapper.v
- ✔️ The hardened ``user_project_wrapper`` adheres to the same pin
order specified at
`pin\_order <https://github.com/efabless/caravel/blob/master/openlane/user_project_wrapper_empty/pin_order.cfg>`__
diff --git a/gds/both.gds b/gds/both.gds
new file mode 100644
index 0000000..4f6869d
--- /dev/null
+++ b/gds/both.gds
Binary files differ
diff --git a/info.yaml b/info.yaml
new file mode 100644
index 0000000..7c24223
--- /dev/null
+++ b/info.yaml
@@ -0,0 +1,19 @@
+---
+project:
+ description: "A key value store for Google sponsored Open MPW shuttles for SKY130."
+ foundry: "SkyWater"
+ git_url: "https://github.com/giraypultar/keyvalue_caravel.git"
+ organization: "Efabless"
+ organization_url: "http://efabless.com"
+ owner: "Giray Pultar"
+ process: "SKY130"
+ project_name: "keyvalue"
+ project_id: "00000509"
+ tags:
+ - "Open MPW"
+ - "Test Harness"
+ category: "Test Harness"
+ top_level_netlist: "caravel/verilog/gl/caravel.v"
+ user_level_netlist: "verilog/gl/user_project_wrapper.v"
+ version: "1.00"
+ cover_image: "docs/source/_static/caravel_harness.png"
diff --git a/openlane/user_proj_example/config.json b/openlane/user_proj_example/config.json
deleted file mode 100644
index c3de8af..0000000
--- a/openlane/user_proj_example/config.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "PDK" : "sky130A",
- "STD_CELL_LIBRARY" : "sky130_fd_sc_hd",
- "CARAVEL_ROOT" : "../../caravel",
- "CLOCK_NET" : "counter.clk",
- "CLOCK_PERIOD" : "10",
- "CLOCK_PORT" : "wb_clk_i",
- "DESIGN_IS_CORE" : "0",
- "DESIGN_NAME" : "user_proj_example",
- "DIE_AREA" : "0 0 900 600",
- "DIODE_INSERTION_STRATEGY" : "4",
- "FP_PIN_ORDER_CFG" : "pin_order.cfg",
- "FP_SIZING" : "absolute",
- "GLB_RT_MAXLAYER" : "5",
- "GND_NETS" : "vssd1",
- "PL_BASIC_PLACEMENT" : "1",
- "PL_TARGET_DENSITY" : "0.05",
- "RUN_CVC" : "1",
- "VDD_NETS" : "vccd1",
- "VERILOG_FILES" : ["../../caravel/verilog/rtl/defines.v", "../../verilog/rtl/user_proj_example.v"]
-}
diff --git a/openlane/user_proj_example/config.tcl b/openlane/user_proj_example/config.tcl
index 94af8ba..2aa188c 100755
--- a/openlane/user_proj_example/config.tcl
+++ b/openlane/user_proj_example/config.tcl
@@ -13,9 +13,6 @@
# limitations under the License.
# SPDX-License-Identifier: Apache-2.0
-set ::env(PDK) "sky130A"
-set ::env(STD_CELL_LIBRARY) "sky130_fd_sc_hd"
-
set script_dir [file dirname [file normalize [info script]]]
set ::env(DESIGN_NAME) user_proj_example
diff --git a/openlane/user_project_wrapper/config.json b/openlane/user_project_wrapper/config.json
deleted file mode 100644
index d83d5bb..0000000
--- a/openlane/user_project_wrapper/config.json
+++ /dev/null
@@ -1,58 +0,0 @@
-{
- "PDK" : "sky130A",
- "STD_CELL_LIBRARY" : "sky130_fd_sc_hd",
- "CARAVEL_ROOT" : "../../caravel",
- "CLOCK_NET" : "mprj.clk",
- "CLOCK_PERIOD" : "10",
- "CLOCK_PORT" : "user_clock2",
- "CLOCK_TREE_SYNTH" : "0",
- "DESIGN_NAME" : "user_project_wrapper",
- "DIE_AREA" : "0 0 2920 3520",
- "DIODE_INSERTION_STRATEGY" : "0",
- "EXTRA_GDS_FILES" : "../../gds/user_proj_example.gds",
- "EXTRA_LEFS" : "../../lef/user_proj_example.lef",
- "FILL_INSERTION" : "0",
- "FP_IO_HEXTEND" : "4.8",
- "FP_IO_HLENGTH" : "2.4",
- "FP_IO_HTHICKNESS_MULT" : "4",
- "FP_IO_VEXTEND" : "4.8",
- "FP_IO_VLENGTH" : "2.4",
- "FP_IO_VTHICKNESS_MULT" : "4",
- "FP_PDN_CHECK_NODES" : "0",
- "FP_PDN_CORE_RING" : "1",
- "FP_PDN_CORE_RING_HOFFSET" : "14",
- "FP_PDN_CORE_RING_HSPACING" : "1.7",
- "FP_PDN_CORE_RING_HWIDTH" : "3.1",
- "FP_PDN_CORE_RING_VOFFSET" : "14",
- "FP_PDN_CORE_RING_VSPACING" : "1.7",
- "FP_PDN_CORE_RING_VWIDTH" : "3.1",
- "FP_PDN_ENABLE_RAILS" : "0",
- "FP_PDN_HOFFSET" : "5",
- "FP_PDN_HPITCH" : "180",
- "FP_PDN_HSPACING" : "15.5",
- "FP_PDN_HWIDTH" : "3.1",
- "FP_PDN_MACRO_HOOKS" : "mprj vccd1 vssd1",
- "FP_PDN_VOFFSET" : "5",
- "FP_PDN_VPITCH" : "180",
- "FP_PDN_VSPACING" : "15.5",
- "FP_PDN_VWIDTH" : "3.1",
- "FP_PIN_ORDER_CFG" : "../../caravel/openlane/user_project_wrapper_empty/pin_order.cfg",
- "FP_SIZING" : "absolute",
- "GLB_RT_MAXLAYER" : "5",
- "GND_NETS" : "vssd1 vssd2 vssa1 vssa2",
- "MACRO_PLACEMENT_CFG" : "macro.cfg",
- "MAGIC_ZEROIZE_ORIGIN" : "0",
- "PL_RANDOM_GLB_PLACEMENT" : "1",
- "PL_RESIZER_BUFFER_INPUT_PORTS" : "0",
- "PL_RESIZER_BUFFER_OUTPUT_PORTS" : "0",
- "PL_RESIZER_DESIGN_OPTIMIZATIONS" : "0",
- "PL_RESIZER_TIMING_OPTIMIZATIONS" : "0",
- "RUN_CVC" : "0",
- "SYNTH_TOP_LEVEL" : "1",
- "SYNTH_USE_PG_PINS_DEFINES" : "USE_POWER_PINS",
- "TAP_DECAP_INSERTION" : "0",
- "VDD_NETS" : "vccd1 vccd2 vdda1 vdda2",
- "VERILOG_FILES" : ["../../caravel/verilog/rtl/defines.v","../../verilog/rtl/user_project_wrapper.v"],
- "VERILOG_FILES_BLACKBOX" : ["../../caravel/verilog/rtl/defines.v","../../verilog/rtl/user_proj_example.v"]
-}
-
diff --git a/openlane/user_project_wrapper/config.tcl b/openlane/user_project_wrapper/config.tcl
index 2d0583e..3b762ee 100755
--- a/openlane/user_project_wrapper/config.tcl
+++ b/openlane/user_project_wrapper/config.tcl
@@ -16,9 +16,6 @@
# Base Configurations. Don't Touch
# section begin
-set ::env(PDK) "sky130A"
-set ::env(STD_CELL_LIBRARY) "sky130_fd_sc_hd"
-
# YOU ARE NOT ALLOWED TO CHANGE ANY VARIABLES DEFINED IN THE FIXED WRAPPER CFGS
source $::env(CARAVEL_ROOT)/openlane/user_project_wrapper_empty/fixed_wrapper_cfgs.tcl
@@ -27,7 +24,7 @@
set script_dir [file dirname [file normalize [info script]]]
-set ::env(DESIGN_NAME) user_project_wrapper
+set ::env(DESIGN_NAME) both
#section end
# User Configurations
@@ -35,7 +32,9 @@
## Source Verilog Files
set ::env(VERILOG_FILES) "\
$::env(CARAVEL_ROOT)/verilog/rtl/defines.v \
- $script_dir/../../verilog/rtl/user_project_wrapper.v"
+ $script_dir/../../verilog/rtl/src/both.v \
+ $script_dir/../../verilog/rtl/src/keyvalue_3.v \
+ $script_dir/../../verilog/rtl/src/keyvalue_4.v"
## Clock configurations
set ::env(CLOCK_PORT) "user_clock2"
diff --git a/openlane/user_project_wrapper/config.tcl.orig b/openlane/user_project_wrapper/config.tcl.orig
new file mode 100755
index 0000000..c94b7a0
--- /dev/null
+++ b/openlane/user_project_wrapper/config.tcl.orig
@@ -0,0 +1,82 @@
+# SPDX-FileCopyrightText: 2020 Efabless Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# SPDX-License-Identifier: Apache-2.0
+
+# Base Configurations. Don't Touch
+# section begin
+
+# YOU ARE NOT ALLOWED TO CHANGE ANY VARIABLES DEFINED IN THE FIXED WRAPPER CFGS
+source $::env(CARAVEL_ROOT)/openlane/user_project_wrapper_empty/fixed_wrapper_cfgs.tcl
+
+# YOU CAN CHANGE ANY VARIABLES DEFINED IN THE DEFAULT WRAPPER CFGS BY OVERRIDING THEM IN THIS CONFIG.TCL
+source $::env(CARAVEL_ROOT)/openlane/user_project_wrapper_empty/default_wrapper_cfgs.tcl
+
+set script_dir [file dirname [file normalize [info script]]]
+
+set ::env(DESIGN_NAME) user_project_wrapper
+#section end
+
+# User Configurations
+
+## Source Verilog Files
+set ::env(VERILOG_FILES) "\
+ $::env(CARAVEL_ROOT)/verilog/rtl/defines.v \
+ $script_dir/../../verilog/rtl/user_project_wrapper.v"
+
+## Clock configurations
+set ::env(CLOCK_PORT) "user_clock2"
+set ::env(CLOCK_NET) "mprj.clk"
+
+set ::env(CLOCK_PERIOD) "10"
+
+## Internal Macros
+### Macro PDN Connections
+set ::env(FP_PDN_MACRO_HOOKS) "\
+ mprj vccd1 vssd1"
+
+### Macro Placement
+set ::env(MACRO_PLACEMENT_CFG) $script_dir/macro.cfg
+
+### Black-box verilog and views
+set ::env(VERILOG_FILES_BLACKBOX) "\
+ $::env(CARAVEL_ROOT)/verilog/rtl/defines.v \
+ $script_dir/../../verilog/rtl/user_proj_example.v"
+
+set ::env(EXTRA_LEFS) "\
+ $script_dir/../../lef/user_proj_example.lef"
+
+set ::env(EXTRA_GDS_FILES) "\
+ $script_dir/../../gds/user_proj_example.gds"
+
+set ::env(GLB_RT_MAXLAYER) 5
+
+# disable pdn check nodes becuase it hangs with multiple power domains.
+# any issue with pdn connections will be flagged with LVS so it is not a critical check.
+set ::env(FP_PDN_CHECK_NODES) 0
+
+# The following is because there are no std cells in the example wrapper project.
+set ::env(SYNTH_TOP_LEVEL) 1
+set ::env(PL_RANDOM_GLB_PLACEMENT) 1
+
+set ::env(PL_RESIZER_DESIGN_OPTIMIZATIONS) 0
+set ::env(PL_RESIZER_TIMING_OPTIMIZATIONS) 0
+set ::env(PL_RESIZER_BUFFER_INPUT_PORTS) 0
+set ::env(PL_RESIZER_BUFFER_OUTPUT_PORTS) 0
+
+set ::env(FP_PDN_ENABLE_RAILS) 0
+
+set ::env(DIODE_INSERTION_STRATEGY) 0
+set ::env(FILL_INSERTION) 0
+set ::env(TAP_DECAP_INSERTION) 0
+set ::env(CLOCK_TREE_SYNTH) 0
diff --git a/openlane/user_project_wrapper/pin_order.cfg b/openlane/user_project_wrapper/pin_order.cfg
deleted file mode 120000
index 7293cef..0000000
--- a/openlane/user_project_wrapper/pin_order.cfg
+++ /dev/null
@@ -1 +0,0 @@
-pin_order.cfg
\ No newline at end of file
diff --git a/verilog/dv/mprj_stimulus/Makefile b/verilog/dv/mprj_stimulus/Makefile
index 3a73b99..b0e4051 100644
--- a/verilog/dv/mprj_stimulus/Makefile
+++ b/verilog/dv/mprj_stimulus/Makefile
@@ -25,6 +25,11 @@
CARAVEL_RTL_PATH = $(CARAVEL_VERILOG_PATH)/rtl
CARAVEL_BEHAVIOURAL_MODELS = $(CARAVEL_VERILOG_PATH)/dv/caravel
+## Management SoC Pointers
+MGMT_SOC_PATH ?= ../../../../caravel_pico
+MGMT_SOC_VERILOG_PATH = $(MGMT_SOC_PATH)/verilog
+MGMT_SOC_RTL_PATH = $(MGMT_SOC_PATH)/verilog/rtl
+
## User Project Pointers
UPRJ_VERILOG_PATH ?= ../../../verilog
UPRJ_RTL_PATH = $(UPRJ_VERILOG_PATH)/rtl
@@ -50,12 +55,12 @@
ifeq ($(SIM),RTL)
iverilog $(SIM_DEFINES) -I $(PDK_PATH) \
-I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) \
- -I $(UPRJ_BEHAVIOURAL_MODELS) -I $(UPRJ_RTL_PATH) \
+ -I $(UPRJ_BEHAVIOURAL_MODELS) -I $(UPRJ_RTL_PATH) -I $(MGMT_SOC_RTL_PATH) \
$< -o $@
else
iverilog $(SIM_DEFINES) -DGL -I $(PDK_PATH) \
-I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) -I $(CARAVEL_VERILOG_PATH) \
- -I $(UPRJ_BEHAVIOURAL_MODELS) -I$(UPRJ_RTL_PATH) -I $(UPRJ_VERILOG_PATH) \
+ -I $(UPRJ_BEHAVIOURAL_MODELS) -I$(UPRJ_RTL_PATH) -I $(UPRJ_VERILOG_PATH) -I $(MGMT_SOC_VERILOG_PATH) \
$< -o $@
endif
diff --git a/verilog/dv/mprj_stimulus/mprj_stimulus.c b/verilog/dv/mprj_stimulus/mprj_stimulus.c
index e4d0a2d..7d2c29a 100644
--- a/verilog/dv/mprj_stimulus/mprj_stimulus.c
+++ b/verilog/dv/mprj_stimulus/mprj_stimulus.c
@@ -31,19 +31,21 @@
// designed to read the project count through the
// logic analyzer probes.
// I/O 6 is configured for the UART Tx line
+
uint32_t testval;
- reg_spimaster_config = 0xa002; // Enable, prescaler = 2
+ reg_hkspi_disable = 1; // Shut off the housekeeping SPI,
+ // so we can use the pins.
reg_mprj_datal = 0x00000000;
reg_mprj_datah = 0x00000000;
- reg_mprj_io_37 = GPIO_MODE_MGMT_STD_OUTPUT;;
- reg_mprj_io_36 = GPIO_MODE_MGMT_STD_OUTPUT;;
- reg_mprj_io_35 = GPIO_MODE_MGMT_STD_BIDIRECTIONAL;
- reg_mprj_io_34 = GPIO_MODE_MGMT_STD_BIDIRECTIONAL;
- reg_mprj_io_33 = GPIO_MODE_MGMT_STD_BIDIRECTIONAL;
- reg_mprj_io_32 = GPIO_MODE_MGMT_STD_BIDIRECTIONAL;
+ reg_mprj_io_37 = GPIO_MODE_MGMT_STD_OUTPUT;
+ reg_mprj_io_36 = GPIO_MODE_MGMT_STD_OUTPUT;
+ reg_mprj_io_35 = GPIO_MODE_MGMT_STD_OUTPUT;
+ reg_mprj_io_34 = GPIO_MODE_MGMT_STD_OUTPUT;
+ reg_mprj_io_33 = GPIO_MODE_MGMT_STD_OUTPUT;
+ reg_mprj_io_32 = GPIO_MODE_MGMT_STD_OUTPUT;
reg_mprj_io_31 = GPIO_MODE_MGMT_STD_OUTPUT;
reg_mprj_io_30 = GPIO_MODE_MGMT_STD_OUTPUT;
@@ -71,18 +73,13 @@
reg_mprj_io_9 = GPIO_MODE_USER_STD_OUT_MONITORED;
reg_mprj_io_8 = GPIO_MODE_USER_STD_OUT_MONITORED;
reg_mprj_io_7 = GPIO_MODE_USER_STD_OUT_MONITORED;
- reg_mprj_io_5 = GPIO_MODE_USER_STD_OUTPUT;
- reg_mprj_io_4 = GPIO_MODE_USER_STD_OUTPUT;
- reg_mprj_io_3 = GPIO_MODE_USER_STD_OUTPUT;
- reg_mprj_io_2 = GPIO_MODE_USER_STD_OUTPUT;
- reg_mprj_io_1 = GPIO_MODE_USER_STD_OUTPUT;
- reg_mprj_io_0 = GPIO_MODE_USER_STD_OUTPUT;
-
- reg_mprj_io_6 = GPIO_MODE_MGMT_STD_OUTPUT;
-
- // Set UART clock to 64 kbaud (enable before I/O configuration)
- reg_uart_clkdiv = 625;
- reg_uart_enable = 1;
+ reg_mprj_io_6 = GPIO_MODE_USER_STD_OUT_MONITORED;
+ reg_mprj_io_5 = GPIO_MODE_USER_STD_OUT_MONITORED;
+ reg_mprj_io_4 = GPIO_MODE_USER_STD_OUT_MONITORED;
+ reg_mprj_io_3 = GPIO_MODE_USER_STD_OUT_MONITORED;
+ reg_mprj_io_2 = GPIO_MODE_USER_STD_OUT_MONITORED;
+ reg_mprj_io_1 = GPIO_MODE_USER_STD_OUT_MONITORED;
+ reg_mprj_io_0 = GPIO_MODE_USER_STD_OUT_MONITORED;
/* Apply configuration */
reg_mprj_xfer = 1;
@@ -116,17 +113,24 @@
// Test ability to force data on channel 37
// NOTE: Only the low 6 bits of reg_mprj_datah are meaningful
- reg_mprj_datah = 0xffffffca;
+
+ reg_mprj_datah = 0x0f0f0fc0;
+ reg_mprj_datah = 0x00000000;
+ reg_mprj_datah = 0x0f0f0fca;
+ reg_mprj_datah = 0x0000000a;
+ reg_mprj_datah = 0x0f0f0fc0;
reg_mprj_datah = 0x00000000;
reg_mprj_datah = 0x0f0f0fc5;
- reg_mprj_datah = 0x00000000;
+ reg_mprj_datah = 0x00000005;
// Test ability to read back data generated by the user project
// on the "monitored" outputs. Read from the lower 16 bits and
// copy the value to the upper 16 bits.
testval = reg_mprj_datal;
- reg_mprj_datal = ((testval & 0xff8) << 9) & 0xffff0000;
+ reg_mprj_datal = (testval << 16);
+ testval = reg_mprj_datal;
+ reg_mprj_datal = (testval << 16);
// Flag end of the test
reg_mprj_datal = 0xAB510000;
diff --git a/verilog/dv/mprj_stimulus/mprj_stimulus_tb.v b/verilog/dv/mprj_stimulus/mprj_stimulus_tb.v
index 1409015..0ac0b42 100644
--- a/verilog/dv/mprj_stimulus/mprj_stimulus_tb.v
+++ b/verilog/dv/mprj_stimulus/mprj_stimulus_tb.v
@@ -28,17 +28,8 @@
reg RSTB;
reg CSB;
reg power1, power2;
- reg power3, power4;
-
- wire HIGH;
- wire LOW;
- wire TRI;
- assign HIGH = 1'b1;
- assign LOW = 1'b0;
- assign TRI = 1'bz;
wire gpio;
- wire uart_tx;
wire [37:0] mprj_io;
wire [15:0] checkbits;
wire [3:0] status;
@@ -46,8 +37,10 @@
// Signals Assignment
assign checkbits = mprj_io[31:16];
assign status = mprj_io[35:32];
- assign uart_tx = mprj_io[6];
- assign mprj_io[3] = (CSB == 1'b1) ? 1'b1 : 1'bz;
+
+ // Force CSB high until simulation is underway
+ // Note: The CSB GPIO pin default needs to be set to a pull-up. . .
+ assign mprj_io[3] = CSB;
always #12.5 clock <= (clock === 1'b0);
@@ -74,23 +67,29 @@
$display("Monitor: mprj_stimulus test started");
wait(status == 4'ha);
wait(status == 4'h5);
- // Value 0009 reflects copying user-controlled outputs to memory and back
- // to management-controlled outputs.
- wait(checkbits == 16'h0009);
+
+ // Values reflect copying user-controlled outputs to memory and back
+ // to management-controlled outputs. Note that there is a slight
+ // discrepancy in timing when using gate level simulation; either
+ // of the specified values is okay.
+
+ wait(checkbits == 16'h0840 || checkbits == 16'h0841);
+ wait(checkbits == 16'h0a00 || checkbits == 16'h0a01);
+
wait(checkbits == 16'hAB51);
$display("Monitor: mprj_stimulus test Passed");
#10000;
$finish;
end
- // Reset Operation
+ // Reset Operation
initial begin
RSTB <= 1'b0;
- CSB <= 1'b1; // Force CSB high
+ CSB <= 1'b1;
#2000;
- RSTB <= 1'b1; // Release reset
- #170000;
- CSB = 1'b0; // CSB can be released
+ RSTB <= 1'b1; // Release reset
+ #200000;
+ CSB <= 1'bz; // Stop driving CSB
end
initial begin // Power-up sequence
@@ -148,10 +147,5 @@
.io3() // not used
);
- // Testbench UART
- tbuart tbuart (
- .ser_rx(uart_tx)
- );
-
endmodule
`default_nettype wire
diff --git a/verilog/rtl/src b/verilog/rtl/src
new file mode 120000
index 0000000..a1cbd1f
--- /dev/null
+++ b/verilog/rtl/src
@@ -0,0 +1 @@
+wrapped_keyvalue/src
\ No newline at end of file
diff --git a/verilog/rtl/uprj_netlists.v b/verilog/rtl/uprj_netlists.v
index af0bcd6..319c613 100644
--- a/verilog/rtl/uprj_netlists.v
+++ b/verilog/rtl/uprj_netlists.v
@@ -21,10 +21,8 @@
// Assume default net type to be wire because GL netlists don't have the wire definitions
`default_nettype wire
`include "gl/user_project_wrapper.v"
- `include "gl/keyvalue_1.v"
- `include "gl/keyvalue_2.v"
+ `include "gl/both.lvs.powered.v"
`else
`include "user_project_wrapper.v"
- `include "wrapped_keyvalue/src/keyvalue_1.v"
- `include "wrapped_keyvalue/src/keyvalue_2.v"
+ `include "wrapped_keyvalue/src/both.v"
`endif