GithubHelp home page GithubHelp logo

wifasoi / symbiflow-arch-defs Goto Github PK

View Code? Open in Web Editor NEW

This project forked from f4pga/f4pga-arch-defs

0.0 1.0 0.0 689 KB

FOSS architecture definitions of FPGA hardware useful for doing PnR device generation.

Home Page: https://symbiflow.github.io/

License: ISC License

Shell 2.73% Makefile 15.64% Python 73.47% Roff 0.08% Verilog 7.58% XSLT 0.49%

symbiflow-arch-defs's Introduction

WARNING!

This repo is currently a work in progress nothing is currently yet working!


SymbiFlow Architecture Definitions

This repo contains documentation of various FPGA architectures, it is currently concentrating on;

  • Lattice iCE40
  • Artix 7

The aim is to include useful documentation (both human and machine readable) on the primitives and routing infrastructure for these architectures. We hope this enables growth in the open source FPGA tools space.

The repo includes;

  • Black box part definitions
  • Verilog simulations
  • Verilog To Routing architecture definitions
  • Documentation for humans

The documentation can be generated using Sphinx.

Verilog To Routing Notes

We have to do some kind of weird things to make VPR work for real architectures, here are some tips;

  • VPR doesn't have channels right or above tiles on the right most / left most edge. To get these channels, pad the left most / right most edges with EMPTY tiles.

  • Generally we use the vpr/pad object for the actual .input and .output BLIF definitions. These are then connected to the tile which has internal IO logic.

Structure

Directories

  • XXX/arch/ - Full architecture definitions for Verilog To Routing

    • XXX/arch/YYYY-virt - Verilog to Routing architecture definitions generally are not able to able to generate the exact model of many FPGA routing interconnects, but this is a pretty close.
  • XXX/arch/primitives/ - The primitives that make up the iCE40. These are generally used inside the tiles.

  • XXX/tiles/ - The tiles found in the architecture.

  • XXX/tests/ - Tests for making sure the architecture specific features works with VPR.

  • vpr - Common defines used by multiple architectures.

Files

  • pb_type.xml - The Verilog to Routing Complex Block defintinition.

    • Inside primitives directory they should be intermediate or primitive <pb_type> and thus allow setting the num_pb attribute.

    • Inside tiles directory they should be top level <pb_type> and thus have,

      • capacity (if a pin type),
    • width & height (and maybe area)
  • model.xml - The Verilog to Routing Recognized BLIF Models defintinition.

  • sim.v - A Verilog definition of the object. It should;

    • Match the definition in model.xml (should be one module in sim.v for every model in model.xml)

    • Include a ifndef BLACKBOX section which actually defines how the Verilog works.

  • macro.v - A Verilog definition of the object which a user might instantiate in their own code when specifying a primitive. This should match the definition provided by a manufacturer. Examples would be the definitions in;

Names

  • BLK_MB-block_1_name-block_2_name - BLOCK which is a "mega block". A "mega block" is a top level block which is made up of other blocks.
  • BLK_XX-name - BLOCK which is the hierarchy. Maps to BLK_SI -> SITE and BLK_TI -> TILE in Xilinx terminology.
  • BLK_IG-name - BLOCK which is ignored. They don't appear in the output hierarchy and are normally used when something is needed in the description which doesn't match actual architecture.
  • BEL_RX-mux_name - BEL which is a routing mux. Routing muxes are statically configured at PnR time.
  • BEL_MX-mux_name - BEL which is a mux .
  • BEL_LT-lut_name - BEL which is a look up table.
  • BEL_MM-mem_name - BEL which is a memory.
  • BEL_FF-ff_name - BEL which is a flip flop (FF).
  • BEL_LL-latch_name - BEL which is a latch (LL).
  • BEL_BB-name - BEL which is a black box (BB).
  • PAD_IN-name - A signal input location.
  • PAD_OT-name - A signal output location.

Notes

  • Unless there is a good reason otherwise, all muxes should be generated via mux_gen.py

  • DRY (Don't repeat yourself) - Uses XML XIncludes to reuse stuff!

Getting Started

FIXME: Add things here.

apt-get install libxml2-utils

Tools

symbiflow-arch-defs's People

Contributors

arcanenibble avatar awygle avatar elms avatar gatecat avatar mithro avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.