All Projects → Cloud-V → DFFRAM

Cloud-V / DFFRAM

Licence: Apache-2.0 license
Standard Cell Library based Memory Compiler using FF/Latch cells

Programming Languages

Verilog
626 projects
python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to DFFRAM

nthu-route
VLSI EDA Global Router
Stars: ✭ 35 (-35.19%)
Mutual labels:  vlsi, vlsi-physical-design, vlsi-circuits
OpenLane
OpenLane is an automated RTL to GDSII flow based on several components including OpenROAD, Yosys, Magic, Netgen, Fault and custom methodology scripts for design exploration and optimization.
Stars: ✭ 548 (+914.81%)
Mutual labels:  verilog, vlsi
Atalanta
Atalanta is a modified ATPG (Automatic Test Pattern Generation) tool and fault simulator, orginally from VirginiaTech University.
Stars: ✭ 49 (-9.26%)
Mutual labels:  verilog, vlsi
verilog-sid-mos6581
MOS6581 SID chip emulator in SystemVerilog
Stars: ✭ 22 (-59.26%)
Mutual labels:  verilog
LVDS-7-to-1-Serializer
An Verilog implementation of 7-to-1 LVDS Serializer. Which can be used for comunicating FPGAs with LVDS TFT Screens.
Stars: ✭ 33 (-38.89%)
Mutual labels:  verilog
Verilog-Gadget
🔧 Verilog plugin for Sublime Text 2/3. It helps to generate a simple testbench, instantiate a module, insert a user-header, repeat codes with formatted incremental/decremental numbers, etc.
Stars: ✭ 25 (-53.7%)
Mutual labels:  verilog
FPGA RealTime and Static Sobel Edge Detection
Pipelined implementation of Sobel Edge Detection on OV7670 camera and on still images
Stars: ✭ 14 (-74.07%)
Mutual labels:  verilog
sphinxcontrib-hdl-diagrams
Sphinx Extension which generates various types of diagrams from Verilog code.
Stars: ✭ 37 (-31.48%)
Mutual labels:  verilog
vcdvcd
Python Verilog value change dump (VCD) parser library + the nifty vcdcat VCD command line pretty printer.
Stars: ✭ 34 (-37.04%)
Mutual labels:  verilog
pdp6
PDP-6 Emulator
Stars: ✭ 47 (-12.96%)
Mutual labels:  verilog
Hard-JPEG-LS
FPGA-based JPEG-LS image compressor.
Stars: ✭ 52 (-3.7%)
Mutual labels:  verilog
async fifo
A dual clock asynchronous FIFO written in verilog, tested with Icarus Verilog
Stars: ✭ 117 (+116.67%)
Mutual labels:  verilog
vericert
A formally verified high-level synthesis tool based on CompCert and written in Coq.
Stars: ✭ 63 (+16.67%)
Mutual labels:  verilog
srv32
Simple 3-stage pipeline RISC-V processor
Stars: ✭ 88 (+62.96%)
Mutual labels:  verilog
yarvi
Yet Another RISC-V Implementation
Stars: ✭ 59 (+9.26%)
Mutual labels:  verilog
FAST9-Accelerator
FAST-9 Accelerator for Corner Detection
Stars: ✭ 32 (-40.74%)
Mutual labels:  verilog
verifla
Fork of OpenVeriFla - FPGA debugging logic analyzer to use with your designs - examples (so far) for ice40/IceStorm
Stars: ✭ 21 (-61.11%)
Mutual labels:  verilog
vboard
Virtual development board for HDL design
Stars: ✭ 32 (-40.74%)
Mutual labels:  verilog
SpinalCrypto
SpinalHDL - Cryptography libraries
Stars: ✭ 36 (-33.33%)
Mutual labels:  verilog
ARM9-compatible-soft-CPU-core
This ARMv4-compatible CPU core is written in synthesiable verilog.It could launch uCLinux and Linux in MODELSIM. It has high Dhrystone benchmark value: 1.2 DMIPS/MHz. It could be utilized in your FPGA design as one submodule, if you master the interface of this .v file. This IP core is very compact. It is one .v file and has only less 1800 lines.
Stars: ✭ 42 (-22.22%)
Mutual labels:  verilog

DFFRAM Compiler

Open in Google Colab

License: Apache 2.0 CI Status Invite to the Skywater PDK Slack Code Style: Black

Standard Cell Library based Memory Compiler using DFF/Latch cells.

Quick Usage

You can try the Google Colaboratory, but also...

Get Docker, set it up nicely, then, in your terminal:

pip3 install --user --no-cache-dir --upgrade ./requirements.txt
./dffram.py -s 32x32

If all goes well, you've placed your first register file!

Overview

The objective of this project is to develop a DFF/Latch-based RAM, Register File and Cache custom compilation flow that utilizes standard cell libraries following a standard ASIC (Application Specific Integrated Circuit) implementation approach. Different views (HDL netlist, HDL functional models, LEF, GDS, Timing, …) are all generated for a given size configuration.

The layout targets highly compact designs (85%+) as the cells are placed on the floor plan using a custom placer. Moreover, the custom placer ensures that the routing will be relatively simple. Currently, the compiler uses OpenROAD routers to route the macros with great success.

The Compiler relies on basic building blocks to construct the layout of different RAM/RF/Cache configurations. Check the compiler documentation for more info. The following shows how a 32x32 memory (DFF based) is constructed.

The generated layouts by the DFFRAM compilers for RAM32 as well as its building blocks are as follows:

  • BYTE

         drawing

  • WORD (32-bit) A Word; placed and routed, metal only, no outline

  • RAM8 (32x8) 8 Words; placed and routed

  • RAM32 (32x32) 32 Words; placed and routed

Currently, the can compiler generate the layout of the following configurations:

  • RAM
    • 32 words with byte write enable (1RW and 1RW1R).
    • 128 words with byte write enable (1RW and 1RW1R).
    • 256 words with byte write enable (1RW and 1RW1R).
    • 512 words with byte write enable (1RW and 1RW1R).
    • 1024 words with byte write enable (1RW and 1RW1R).
    • 2048 words with byte write enable (1RW and 1RW1R).
  • Register File
    • 32 x 32-bit words (2R1W)

The layout of 2048x32 (8 Kbytes) RAM as generated by the compiler is shown below: 8kbytes

The OpenLane/ folder will contain good known OpenLane configurations to build DFFRAM different macros.

File Structure

  • .github contains files for GitHub actions.
  • docs/ contains documentation (😮)
  • rtl/ contains RTL RAM file generators for benchmarking and comparison purposes.
  • platforms/ contains PDK-specific files:
    • <pdk-name>/
      • <scl-name>/
        • _building_blocks/ contains a hierarchy of building blocks supported by the compiler.
  • placeram/ is the custom placer Python module.
  • scripts/ has assisting scripts used by the flow.
  • dffram.py is the compilation flow going from building blocks to LVS.

Comparisons

The following table compares the areas and bit densities of RAM macros generated using different means.

Size1 OpenRAM2 DFFRAM Compiler DFFRAM/OpenLane RTL/OpenLane
Dim WxH (μm) Bit Density (bits/mm2) Dim WxH (μm) Bit Density (bits/mm2) Dim WxH (μm) Bit Density (bits/mm2) Dim WxH (μm) Bit Density (bits/mm2)
512 bytes N/A N/A 395.6 x 388.96 26,619 TBD TBD 680.25 x 690.97 8,714
1 kbytes 386 x 456 46,541 788.44 x 394.4 26,344 TBD TBD 1,050 x 1,060 7,360
2 kbytes 659.98 x 398.18 62,372 793.5 x 783.36 26,358 TBD TBD 1,439.615 x 1,450.335 7,847
4 kbytes 670.86 x 651.14 75,014 1,584.24 x 788.8 26,196 TBD TBD 2,074 x 2,085 7,578
8 kbytes N/A N/A 1,589 x 1,572 26,229 TBD TBD 2,686.610 x 2,697.330 9,043

1 All support 32-bit word reads and 1, 2, and 4 bytes writes.
2 Values are based on the original layout produced by the compiler. OpenRAM macros are typically wrapped to be useful w/ automated PnR ASIC flows.

⚖️ Copyright and Licensing

Copyright ©2020-2021 The American University in Cairo and the Cloud V Project.

Licensed under the Apache License, Version 2.0 (the "Open Source License"); you may not use this file except in compliance with the Open Source License. You may obtain a copy of the Open Source License at the root of this repository (see the file 'License') or at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the Open Source License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the Open Source License for the specific language governing permissions and limitations under the Open Source License.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].