• Stars
    star
    586
  • Rank 76,279 (Top 2 %)
  • Language
    Python
  • License
    GNU General Publi...
  • Created over 6 years ago
  • Updated 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A C-like hardware description language (HDL) adding high level synthesis(HLS)-like automatic pipelining as a language construct/compiler feature.

pipelinec_color

██████╗ ██╗██████╗ ███████╗██╗     ██╗███╗   ██╗███████╗ ██████╗
██╔══██╗██║██╔══██╗██╔════╝██║     ██║████╗  ██║██╔════╝██╔════╝
██████╔╝██║██████╔╝█████╗  ██║     ██║██╔██╗ ██║█████╗  ██║     
██╔═══╝ ██║██╔═══╝ ██╔══╝  ██║     ██║██║╚██╗██║██╔══╝  ██║     
██║     ██║██║     ███████╗███████╗██║██║ ╚████║███████╗╚██████╗
╚═╝     ╚═╝╚═╝     ╚══════╝╚══════╝╚═╝╚═╝  ╚═══╝╚══════╝ ╚═════╝

Please feel free to message - very happy to make PipelineC work for you! Always looking for help as well. -Julian

Getting Started

Get started by reading the wiki.

What is PipelineC?

A C-like(1) hardware description language (HDL)(2) adding high level synthesis(HLS)-like automatic pipelining(3) as a language construct/compiler feature.

  1. Not actually regular C. But can be partly compiled by gcc/llvm for doing basic functional verification/'simulation'. Reach out if interested in developing more complex language syntax!
  2. Can reasonably replace Verilog/VHDL. Compiler produces synthesizable and human readable+debuggable VHDL. Hooks exist for inserting raw VHDL / existing IP / black boxes.
  3. If a computation can be written as a pure function without side effects (i.e. no global/static variables) then it will be autopipelined. Conceptually similar to technologies like Intel's variable latency Hyper-Pipelining and Xilinx's retiming options. Sharing some of the compiler driven pipelining design goals of Google's XLS Project, the DFiantHDL language, and certain CIRCT dialects as well.

What is PipelineC not?

  • High level synthesis of arbitrary C code with a global memory model / threads / etc:
    • Cannot do 'nested loops to a memory architecture' for you.
  • Compiled C based hardware simulator:
    • Only parts of PipelineC code can be compiled by C compilers and run (is encouraged).
    • But entire multi-module, multi-clock-domain, etc whole designs cannot simply be compiled and run like regular C programs.
  • Meta-programming hardware-generator (ex. uses C type system and preprocessor).
  • Stitching tool automating the build flow from code/modules to bitstream:
    • Tool does partially automate synthesis runs but automation to final bitstream is left to the user.

Core Features/Benefits

An easy to understand hardware description language with a powerful autopipelining compiler and growing set of real life hardware design inspired features.

  • Familiar C syntax that eliminates many HDL quirks that beginners (and experts) can fall victim to (ex. blocking/nonblocking assignments, reasoning about the sequential ordering of combinatorial logic).
  • Compatible with all HDL simulators. Ex. Can start Modelsim in seconds and imports human readable+debuggable VHDL w/ working printf's. Can also craft custom ultra-fast compiled C based 'simulations'. Conversion to Verilog is also included as needed, i.e. for Verilator.
  • Helpful timing feedback derived from synthesis tool reports to help identify critical path logic that cannot be automatically pipelined - especially helpful for those new to digital logic design.
  • Integrates with software side C easily; helpful built in code generation. (ex. for un/packing structs from de/serialized byte arrays when moving data from host<->FPGA).
  • A full hardware description language replacement. Can start by cloning existing VHDL/Verilog designs or including raw VHDL - not forced to use entire language at all times.
  • Globally visible point-to-point wires, multi-rate/width clock domain crossings, and complex derived FSMs, are just some of the growing list of composability features inspired by real life hardware design requirements/tasks.
  • Automatic pipelining as a feature of the compiler. Basic use of the tool can be to generate single pipelines to drop into existing designs elsewhere. Eliminate the practice of pipelining logic by hand = not portable (relies on operating frequency and part).

Fundamental design elements are state machines/stateful elements(registers, rams, etc), auto-pipelined stateless pure functions, and interconnects (wires,cdc,async fifos,etc). Designs can be structured to look like 'communicating sequential processes/threads' as needed.

By isolating complex logic into autopipelineable functions, and only writing literal clock by clock hardware description when absolutely necessary, PipelineC designs do not need to be rewritten for each new target device / operating frequency. The hope is to build shared, high performance, device agnostic, hardware designs described in a familiar and powerfully composable C language look.

For software folks writing PipelineC should feel like solving a programming puzzle in C - the rules of the puzzle hide/imply hardware concepts. For hardware folks PipelineC is a better hardware description language trying to find middle ground between traditional RTL and HLS. It is my language of choice as an FPGA engineer :).

More Repositories

1

PipelineC-Graphics

Graphics demos
Verilog
95
star
2

Drexel-ECEC575

SystemVerilog
18
star
3

Drexel-ECEC622-CUDA3

CUDA GPU Cholesky Decomposition
C++
8
star
4

Drexel-ECEC353

Systems Programming (Essentially intro to C)
C
4
star
5

Drexel-ECEC672-JASSTA

Julian+Andrew Statistical Static Timing Analysis
C++
4
star
6

Drexel-ECEC355

Single and multi cycle MIPs CPUs in VHDL
VHDL
2
star
7

Drexel-CS265

Advanced Programming Techniques (little bits of just about everything)
HTML
2
star
8

Drexel-ECEC622-Final2

CUDA GPU Trapezoidal Integral Approximation
C++
2
star
9

Drexel-ECEC622-Midterm1

PThread Cholesky Decomposition
C
2
star
10

Drexel-SeniorDesign

Motion tracking for audio/visual effects
C
1
star
11

Drexel-CS370

Operating Systems - Linux Kernel Development
1
star
12

Drexel-ECEC356

More advanced second encounter with microcontrollers.
Assembly
1
star
13

Drexel-CS260

Data Structures
Python
1
star
14

Drexel-ECEC302

First exposure to VHDL and FPGAs!
VHDL
1
star
15

Drexel-ECEC622-Assignment1

PThread and OpenMP Parallel 'grep'
C
1
star
16

Drexel-ECEC414

C
1
star
17

Drexel-ECEC671-ALAFASS

A Long Acronym for a Satisfiability Solver
C++
1
star
18

Drexel-CS536

Python
1
star
19

Drexel-ECEC472

DM
1
star
20

Drexel-ECEC471

Python
1
star
21

Drexel-ECEC623-Project

Snippets of code for running power-related experiments.
Python
1
star
22

Drexel-ENGR361

Probability (MATLAB)
MATLAB
1
star
23

Personal-Pyrics

A python based lyrics getting / updating script.
Python
1
star
24

Drexel-CS171-Labs

Not very impressive but worth showing my first encounters with C++ :-)
C++
1
star
25

Drexel-ECEC622-CUDA1

CUDA GPU Matrix-Vector Multiplication
C++
1
star
26

Drexel-ECEC304-Labs

My first encounter with microcontrollers. All labs.
Assembly
1
star
27

openfpga-cflexhdl

openFPGA Analogue Pocket Projects Using CflexHDL + PipelineC
1
star
28

Drexel-ECEC622-CUDA2

CUDA GPU Vector Dot Product
C++
1
star
29

Drexel-ECEC671-Project1

Unate Recursive Tautology 'Finder'
C++
1
star
30

Drexel-ECEC661

Advanced FPGA design course.
VHDL
1
star