Skip to main content

Design Automation for Field-coupled Nanotechnologies

Project description

fiction – Design Automation for Field-coupled Nanotechnologies

Ubuntu CI macOS CI Windows CI CodeQL Docker Image Documentation Status codecov License Release arXiv

This code base provides a C++17 framework for field-coupled technology-independent open nanocomputing developed as part of the Munich Nanotech Toolkit (MNT) by the Chair for Design Automation at the Technical University of Munich. Within fiction, algorithms for logic synthesis, placement, routing, clocking, verification, and simulation for Field-coupled Nanocomputing (FCN) technologies are implemented.

To this end, most physical design tasks can be performed on generic data structures that abstract from particular technology or cell design. Using an extensible set of gate libraries, technologies, and cell types, these can easily be compiled down to any desired FCN technology for physical simulation.

For these use cases, fiction provides a header-only library that provides data types and algorithms for recurring tasks, e.g., logic network and layout types on different abstraction levels, clocking schemes, gate libraries, design automation algorithms, etc. Additionally, fiction comes with an ABC-like CLI tool that allows quick access to its core functionality.

Documentation

If you have any questions, feel free to contact us via fcn.cda@xcit.tum.de or by creating an issue on GitHub.

Quick Start

Clone the repository and its submodules:

git clone --recursive https://github.com/cda-tum/fiction.git

The CLI

Inside the newly cloned fiction folder, trigger the build process:

cmake . -B build
cd build
cmake --build . -j4

Run the CLI tool:

cli/fiction

Here is an example of running fiction to perform a full physical design flow on a QCA circuit layout that can afterward be simulated in QCADesigner:

CLI example

The Header-only Library

Add fiction as a sub-directory to your CMake project and link against libfiction (assuming your project is called fanfiction):

add_subdirectory(fiction/)
target_link_libraries(fanfiction libfiction)

Include the headers you need:

#include <fiction/layouts/cell_level_layout.hpp>
#include <fiction/layouts/clocking_scheme.hpp>
#include <fiction/technology/qca_one_library.hpp>
#include <fiction/io/write_qca_layout.hpp>
#include <fiction/...>

For a full getting started guide, please refer to the documentation.

Supported Technologies

Physical design in fiction can be performed technology-independent. Only if resulted layouts are to be physically, simulated, a specific technology implementation is required. To this end, fiction supports various potential FCN implementations together with gate libraries to compile gate-level layout abstractions down to the cell level. Additionally, output formats for external physical simulator engines are also supported.

Quantum-dot Cellular Automata (QCA)

QCA cells

Gate libraries:

File formats:

Many thanks to Frank Sill Torres for his support with the QCADesigner format, to Willem Lambooy for his support with the QCA-STACK format, and to Sophia Kuhn for implementing the SVG writer!

in-plane Nanomagnet Logic (iNML)

iNML cells

Gate libraries:

File formats:

Many thanks to Umberto Garlando, Fabrizio Riente, and Giuliana Beretta for their support!

Silicon Dangling Bonds (SiDBs)

SiDB cells

Gate libraries:

File formats:

Many thanks to Samuel Sze Hang Ng for his support!

Implemented Design Automation Algorithms

The fiction framework provides implementations of state-of-the-art design automation algorithms for FCN technologies. These algorithms can be used in evaluation scripts to perform logic synthesis, physical design, layout verification, and physical simulation.

Logic Synthesis

For logic synthesis, fiction relies on the mockturtle library that offers a multitude of logic network types and optimization algorithms. Logic synthesis can be performed in external tools and resulting Verilog/AIGER/BLIF/... files can be parsed by fiction. Alternatively, since mockturtle is included in fiction, synthesis can be applied in the same evaluation script.

Physical Design

For automatic FCN layout obtainment, fiction provides algorithms that receive mockturtle logic networks as input specification and output placed, routed, and clocked generic FCN circuits.

QCA Layout

Among these algorithms are

plus several path-finding algorithms that work on generic layouts:

Verification

Layout correctness can be validated using

Physical Simulation

When a layout is compiled to the cell level via the application of a technology-dependent gate library, it can be simulated using a physical model. Currently, the following simulation algorithms are implemented in fiction:

Clocking Schemes

Regular clocking schemes have been proposed in the FCN literature, which can be used as a floor plans for physical design. However, sometimes it can make sense to have more freedom and assign clock numbers on the fly. That is why fiction supports both regular and irregular clocking schemes with variable amounts of clock numbers as QCA for instance uses four clock phases but iNML needs only three.

Built-in schemes are

Columnar Row 2DDWave
Columnar Row 2DDWave
USE RES ESR
USE RES ESR
CFE BANCS
CFE BANCS

plus the mentioned irregular open clocking that works via a clock map instead of a regular extrapolated cutout.

Wire Crossings

Second layer crossing

With many FCN technologies considered planar, wire crossings should be minimized if possible. However, there are some options in QCA where, using a second layer, crossings over short distances and co-planar rotated cells become possible. As both are just technical implementations of the same concept, fiction supports crossings as wires in a second grid layer in its data structures for all FCN technologies. They will also be represented as such in corresponding SVG and QCADesigner output. However, note that it is to be interpreted as the concept of crossings and could also be realized co-planar.

Wires are only allowed to cross other wires! Wires crossing gates is considered to lead to unstable signals.

Gate Pins vs. Designated I/Os

Input pin and cell output

In the literature, both are seen: having input cells (pins) directly located in the gate structure or using designated I/O elements that are located outside of gates. This distinction only makes sense on the gate level and fiction supports both approaches and offers usage in the implemented physical design algorithms.

Multi Wires

Multi wires

Gate-level abstraction has its limits. Often, chip area is wasted when only using a single wire per tile. In fiction, cell-level layouts allow for precise control over cell placement and can, thus, also create multiple wire segments per clock zone. Physical simulation can give an indication of whether the built structures are implementing the intended functionality.

Synchronization Elements

Synchronization element

A technology extension proposes to utilize the external clock signal generator in an unconventional way: by creating further asymmetric clock signals with extended Hold phases that are assigned to specific wire tiles, synchronization elements can be created that stall signals over multiple clock cycles. These artificial latches are able to feed information to any other clock number, but their usage reduces the overall throughput of the layout. In return, long wire detours for signal synchronization can be prevented.

Cost Metrics

Designed layouts can be evaluated with regard to several cost functions. The following metrics are currently implemented:

Gate-level layouts:

  • Circuit dimension in tiles
  • Number of gate tiles
  • Number of wire tiles
  • Number of wire crossings
  • Number of synchronization elements
  • Critical path
  • Throughput
  • Bounding box
  • Energy dissipation based on a physical model (QCA only)

Cell-level layouts:

  • Circuit dimension in cells
  • Number of cells
  • Bounding box
  • Area usage in nm²

Reference

Since fiction is academic software, we would be thankful if you referred to it by citing the following publication:

@misc{fiction,
      author = {Walter, Marcel and Wille, Robert and Sill Torres, Frank and Gro{\ss}e, Daniel and Drechsler, Rolf},
      title = {{fiction: An Open Source Framework for the Design of Field-coupled Nanocomputing Circuits}},
      archivePrefix = {arXiv},
      eprint = {1905.02477},
      note = {arXiv:1905.02477},
      year = {2019},
      month = {May}
}

Additionally, many algorithms implemented in fiction have been published individually. For a full list of publications, please refer to the documentation.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mnt.pyfiction-0.5.0.tar.gz (4.2 MB view details)

Uploaded Source

Built Distributions

mnt.pyfiction-0.5.0-cp311-cp311-win_amd64.whl (8.9 MB view details)

Uploaded CPython 3.11 Windows x86-64

mnt.pyfiction-0.5.0-cp311-cp311-manylinux_2_28_x86_64.whl (14.0 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.28+ x86-64

mnt.pyfiction-0.5.0-cp311-cp311-macosx_11_0_arm64.whl (10.4 MB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

mnt.pyfiction-0.5.0-cp311-cp311-macosx_10_15_x86_64.whl (11.8 MB view details)

Uploaded CPython 3.11 macOS 10.15+ x86-64

mnt.pyfiction-0.5.0-cp310-cp310-win_amd64.whl (8.9 MB view details)

Uploaded CPython 3.10 Windows x86-64

mnt.pyfiction-0.5.0-cp310-cp310-manylinux_2_28_x86_64.whl (14.0 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.28+ x86-64

mnt.pyfiction-0.5.0-cp310-cp310-macosx_11_0_arm64.whl (10.4 MB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

mnt.pyfiction-0.5.0-cp310-cp310-macosx_10_15_x86_64.whl (11.8 MB view details)

Uploaded CPython 3.10 macOS 10.15+ x86-64

mnt.pyfiction-0.5.0-cp39-cp39-win_amd64.whl (8.9 MB view details)

Uploaded CPython 3.9 Windows x86-64

mnt.pyfiction-0.5.0-cp39-cp39-manylinux_2_28_x86_64.whl (14.0 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.28+ x86-64

mnt.pyfiction-0.5.0-cp39-cp39-macosx_11_0_arm64.whl (10.4 MB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

mnt.pyfiction-0.5.0-cp39-cp39-macosx_10_15_x86_64.whl (11.8 MB view details)

Uploaded CPython 3.9 macOS 10.15+ x86-64

mnt.pyfiction-0.5.0-cp38-cp38-win_amd64.whl (8.9 MB view details)

Uploaded CPython 3.8 Windows x86-64

mnt.pyfiction-0.5.0-cp38-cp38-manylinux_2_28_x86_64.whl (14.0 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.28+ x86-64

mnt.pyfiction-0.5.0-cp38-cp38-macosx_11_0_arm64.whl (10.4 MB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

mnt.pyfiction-0.5.0-cp38-cp38-macosx_10_15_x86_64.whl (11.8 MB view details)

Uploaded CPython 3.8 macOS 10.15+ x86-64

mnt.pyfiction-0.5.0-cp37-cp37m-win_amd64.whl (8.9 MB view details)

Uploaded CPython 3.7m Windows x86-64

mnt.pyfiction-0.5.0-cp37-cp37m-manylinux_2_28_x86_64.whl (14.1 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.28+ x86-64

mnt.pyfiction-0.5.0-cp37-cp37m-macosx_10_15_x86_64.whl (11.8 MB view details)

Uploaded CPython 3.7m macOS 10.15+ x86-64

File details

Details for the file mnt.pyfiction-0.5.0.tar.gz.

File metadata

  • Download URL: mnt.pyfiction-0.5.0.tar.gz
  • Upload date:
  • Size: 4.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for mnt.pyfiction-0.5.0.tar.gz
Algorithm Hash digest
SHA256 625c8494fe023c660b5d620e1257848a738fb66632ac97341706ed1c7b0c88f5
MD5 0a55d4c0447e475b0ca35108d8c6e2f1
BLAKE2b-256 0f3fd4940b99aad4b763a3ec9e245e596b31f1965f8f41d698a8ec24fb35b8aa

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.5.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.5.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 d16d75a036e2cd359e7bb1bf13765ec14d8af9a97238c67caa37841b4905ed8a
MD5 73231a1449fc5aa387379d78905bf19c
BLAKE2b-256 a9f9a1df8e68bfad3f20a527017e14492b13de9011b49f2301d59079cdf308bf

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.5.0-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.5.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 baee54bb8d48354b258007712998bc38fb9ea96e0646f8837f31ae989c5f8c2c
MD5 bb33b6157e4738eee38dc9ff484795bf
BLAKE2b-256 28f7a0c165ad9e142c920001b1d8c664e22f5969a84d919c5461a79e25dc0ad8

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.5.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.5.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b3f58be0be6d15a108799653c3e4bbbdca08e98a5045b0124e0a0ae1403252d9
MD5 1fd58d1cdf6305464990507bdc2c7915
BLAKE2b-256 7dbc7bc67f7b16cefefafd3b0992ca1c31f05ce9f3d1a879d10890c50bd288ab

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.5.0-cp311-cp311-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.5.0-cp311-cp311-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 9832d6c8178cf4c63a6e4e3348e14d485080f556f2dcb12269ad7e9bbfa205b7
MD5 94183a7ea00599d51a17b660e40e321f
BLAKE2b-256 1411038a70019c7674c55107551d6abded6ef2e2d8d94db975ebc0b8ce2908f6

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.5.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.5.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 4dd356a547d5ed0893dc5d373d8c65d81ff927039c13ee89ef2f5b345601c4be
MD5 ac9bdf486abb146242cde0c5de40db72
BLAKE2b-256 018418bf3e72f07e3d97b0dd5bb5323a4ca08778f2e4be57036ea680eb8725e4

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.5.0-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.5.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d8ce6ed92a93380c47535cf210c2b43db773df897ac024b4629846d10e042f7f
MD5 2071d19a8c90631c306d2461c7e55991
BLAKE2b-256 da5730d4190b1725194e5af60787272c5249df778fc050f3759c096427ec9b26

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.5.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.5.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 365b9d3dad0c75afe248ff1137a942647c04f6b78a71b2cd933456e68d62b577
MD5 92707594a0710d84525736b1973734fb
BLAKE2b-256 d9f4addd82425e2ae7a1fc1d2de2e793a12f79462a2311424be916ec8f79550f

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.5.0-cp310-cp310-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.5.0-cp310-cp310-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 131ad31389be8904dda7deb15b80279981a2c5f01c993f971fe4b0e557745ded
MD5 051e4979163fa1b7df87365c1f7dd32f
BLAKE2b-256 cdc94edb51cd6316cd2f40b246457cb215933c7e56242b7375c3e1acb9a2d184

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.5.0-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.5.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 8529a47a0570d9377f5d10c6a8e9e78b231c5fad3895a1f2888e97427180b93d
MD5 8d8838fef39a4ab84960ec57aa258b16
BLAKE2b-256 94e712bc1ea7a6dbc1d35dcc6d4281aa126b61272f728d765b42a12f6d364798

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.5.0-cp39-cp39-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.5.0-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a750ba540691edf480431c40bf6b1c55ab4f72348257ade54cb57a68e3de3654
MD5 0419146fd597b1574ddbd812cd1b736a
BLAKE2b-256 04e86c2ce20b0f8448878ee4993762966feba657bc639916657b4a8f24d14615

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.5.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.5.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6ab977abd2ee2467c2f7248c1cfb49d0e1e126c18ccc5f1abb4935d6e97e8496
MD5 e6fd9afb64f7f6fe05bcd777c207f88d
BLAKE2b-256 a2ae0e111c1a38553a0dd60947f30d228f7a884b4f3f29b8c6ebe8f8bd3cd9c5

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.5.0-cp39-cp39-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.5.0-cp39-cp39-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 2dcedc5142a786dd11dac620b932cd9a02f1f6d3c588add1de51befa0e244e16
MD5 1538ce999e7cda07b7bfc3b46f588fbc
BLAKE2b-256 556cfdb3e571cc9f591dcc3e0e5570294ed41c6fd8a135e6ef1f1fb2c87cd130

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.5.0-cp38-cp38-win_amd64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.5.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 ed00041f4a9518a3aa9224109f6c20f72a2c5a3280c405fac3f43935b37239df
MD5 9d2537eb6b67bb9422fc223ec5bc194f
BLAKE2b-256 cb07ec5fea8adc0122108fb4009b913d6b03922aa211ff6d8601d63fec401c0d

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.5.0-cp38-cp38-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.5.0-cp38-cp38-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c75865eea739bd74d15554d80ba7ddc51f863f6b68b26e2bf2315d74664ccd18
MD5 99f3cf9e10bcb57d2036004e67d5f396
BLAKE2b-256 18624f6baa43a89334c3f1268b18244b3107b4461ff202544cefe265f5b839b8

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.5.0-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.5.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bb1a5e45554ed951bb56c9d59678b7a4009cf2f38a8718930ccedd06c0477bd8
MD5 f2b1ce041a2e71f6f06b017857ff17cc
BLAKE2b-256 c01b93e3dc69a03fb2a8a50d480c6c9cdc6863ede2021e4625b2c146c41cf1de

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.5.0-cp38-cp38-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.5.0-cp38-cp38-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 fd733fee6dead0656cbc6b813b2b016938db372f594b069534eeab1263859841
MD5 931eb297661cef9bb66455575a008bfd
BLAKE2b-256 eb254091829f88e76f5cea6007dfd855602a052c0ec391575d9a9cedc03a7197

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.5.0-cp37-cp37m-win_amd64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.5.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 a1ac1fc137e21f9a8cde8dc5acd9622ee424308ea47733e1f6e45c02e13df500
MD5 d377067e11af108b2973e75018c2ced8
BLAKE2b-256 1a0277187d7bd373adb9a2149eaa2ba72fce7ae43d89a9adbdeacf4a2b648de6

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.5.0-cp37-cp37m-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.5.0-cp37-cp37m-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 271532172481c3c353f4a6023d6b93dcdb6f6a2796a071663361e4ce7dc20533
MD5 ca2b2ed65c0149228a3011d839241e79
BLAKE2b-256 3a66a853ad392a1567586b3601e2213e3231c44ea8166d543f1fb9a1b2f9421b

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.5.0-cp37-cp37m-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.5.0-cp37-cp37m-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 6a65daa433a3990bfdd0a0aba0477ca35f9199b1c8985e5b2293c9f52899d31b
MD5 417ee30e03e9931778b6d38f3933eb1d
BLAKE2b-256 8b78a7219ad9e5086004931126439e5a4e5b7f9fe1b341a0df40b5c2ae711ef5

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page