Model Me, Model World

Model Me, Model World

Blayground

Prospect for universal SoC generation

Hook up a SoC as easy as playing LEGO®


The purpose of this project is to produce a generic and open source tool to generate a SoC design from a configuration interface. Various processor cores with different instruction architecutre are available for configuration rather than one which serveral current systems have already achived.

New Ecosystem

A comprehensive project with four major features:

  • Various processor architecture supported.
  • Seamless switching between several bus specifications.
  • Generic peripheral libraries.
  • Extensive documentation

Conceptual diagram (first stage): Wishbone is just for demonstration. Other bus protocols should be supported. All about LESYC

Detailed implementation

Interface standardization

Four kinds of signal types are defined.

Port

Each interface comprises two bundles of data and one address line. For these two bundles, one is for read, and another is for write. Each bundle contains three lines from the master side of view. They are request/valid/data.

Bus

Bus Interface Unit(BIU) convert port signal into bus signals.

Link

No restrictions.

Pin

Three state signals can only be instantiated in these signal bundles. Also, they are the ones coming out of the highest level module.

Processor

Standardized Interface

Single Port connects to the BIU and the internal memory arbiter. Maybe Different Port for instruction and data can be considered. 32-bit external interrupt input connects to internal interrupt manger. If less than 32 input lines, just leave extra wires unconnected.

Cores

Port these cores first:

  • LM32: highest priority, compiler support is unified.
  • MIPS32-xum
  • RISCV
  • OpenRISC: mor1kx or or1200
  • Yeji Core

Later, some synthesizable cores available at OpenCores can be added to the library. Only need to add BIU to adapt them to this project:

  • OpenSPARC (already with wishbone BIU)

  • ARM (armv2)

  • AVR (8-bit)

  • x86 (we'll see)

  • m68k

  • Eventually MIPS32 M4K

Bus

Wishbone first. AHB/AXI Avalon

Note that Wishbone to AHB/AXI Avalon bridge available at OpenCores.

Peripheral

SRAM DDR3 SPI Flash UART 16550 SD Ethernet

OS

RTEMS (No MMU?) lcore (MMU)

Compilers

If GCC, then GCC. Else, custom LLVM backend. Perhaps only Yeji Core need a LLVM backend.

GUI

Later on, hook up with intuitive GUI.


Appendix: Survey on Current Available Approaches

High-level Hardware Description Language (HL-HDL)

HL-HDL is a term coined by me. But there is a trend of this, like a transition from assembly to high-level programming language.

Bluespec

Pretty mature ecosystem. Though Bluespec needs license. There is a open source implementation of BSV. Search for Bluespec toy compiler.

Chisel

Known.

MyHDL

A synthesizable subset can be used to generate Verilog/VHDL.

Cx

Not mature.

Orangepath H2

Seemed to be excellent, but no usable distribution currently.

Open Source SoC

GRLIB IP library including LEON4

Configurable SPARC V8 processor. A plethora of peripherals as well as boards are supported. Design were written in VHDL with heavy use of directives, which makes it difficult for reuse. Dual license applied.

FuseSoC

Succeeding project of ORPSoC. It adopted configuration file to generate RTL code for SoC. Python scripts are used to complete the automation process. Lacking of documents hinders the community to contribute to the project or utilize it.

FHDL / Migen

Written in Python, with a HL-HDL callded FHDL.

Commercial Product for SoC Generation

SOPC Builder

Widely acknowledge feature of Altera. NIOS II processor.

LatticeMico System

LM32 with various Wishbone devices

XPS and Vivado

Xilinx MicroBlaze

System Designer

Bundled with Synplify Pro?

Blog maintained by Tao J

No longer hosted on GitHub Pages — Theme by mattgraham