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.
- flex and bison
- boost (program_options serialization system filesystem)
- pthreads
- log4cxx
- LLVM (3.5)
- GCC (>4.9)
- doxygen
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.
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.
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.
Source code reference documentation generated by Doxygen is available in doc/doxygen/ and automatically built by waf.
Syntax highlighting is available for Vim from cell.vim.