Skip to content

five-elephants/cell

Repository files navigation

Build Status

Continuous and Event-based Logic Language (CELL)

CELL is a computer language to describe and model parallel systems. It combines event-based and time-continuous simulation semantics. The original intention was to create a modern hardware description language for design. Therefore, the event-based part follows the concepts of VHDL and Verilog for discrete event simulation. To account for analog mixed-signal hardware designs time-continuous simulation and interaction with the event-based part is supported.

In contrast to VHDL and (System)Verilog, CELL tries to capture the bare-minimum of language features to allow continuous and event-based simulation into the language itself. Domain specific aspects, e.g. primitives for flip-flops or queues are realized as libraries. Also, the language is focused on modeling, or, in case of hardware, designing the system. Other aspects, for example verification, are left to other languages, for which APIs are provided.

The implementation provided here is a just-in-time (JIT) compiler for CELL using LLVM to generate code. CELL models can either be simulated using the cellsim binary or by constructing a C++ testbench and using the cellwrap tool to extract type definitions.

The goal of CELL is to provide a useful and modern language that can be used for hardware description. We feel, that the established hardware description languages are outdated and not moving into the right direction. This is an effort to establish a community-driven language with an open source implementation that learns from modern "software" languages and boldly goes new ways.

Take the tour to get a feeling for the language. Simple demos of the language are available in lib/test/demo_*.cell. There demo_lif.cell demonstrates continuous-time simulation of a Leaky-integrate and fire neuron.

Prerequisites

  • flex and bison
  • boost (program_options serialization system filesystem)
  • pthreads
  • log4cxx
  • LLVM (3.5)
  • GCC (>4.9)
  • doxygen

Compiling & Installation

CELL uses waf as build tool. You can select a compiler using the CC and CXX environment variables. For example to use clang:

$ export CC=clang
$ export CXX=clang++
$ ./waf configure

Compile using

$ ./waf build

If you want you can install using

$ ./waf install

Specifiy a --prefix option to ./waf configure to select where the installation should go.

Tests

CELL uses the Google Test framework. The main executable is called test-main. After ./waf build you can execute it

$ cd build
$ ./test-main

There is also an experimental mock-up of the planned verification methodology using C++: tb_driver. The binary is available in build/ and reports pass/fail via its return code.

All tests are automatically run after building by waf.

Usage

Two executables are built:

  • cellsim
  • cellwrap

cellsim is used for direct simulation and supports output of VCD files. To get usage information run

$ cellsim -h

cellwrap generates a C++ header with type definitions for inclusion in a C++ testbench. Use

$ cellwrap -h

for usage information. An example testbench is available in src/test/tb_driver.cpp.

Documentation

Source code reference documentation generated by Doxygen is available in doc/doxygen/ and automatically built by waf.

Syntax highlighting

Syntax highlighting is available for Vim from cell.vim.

About

The Continuous and Event-based Logic Language (CELL)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published