Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
Unreleased
Added
- Documentation:
Added
AGENTS.mdto guide AI agents in the repository
- Build system:
Added CMakePresets.json to offer default CMake configurations
Added support for CMake version 4+
- Tooling:
- Added the following pre-commit hooks:
check-vcs-permalinks
check-symlinks
check-json
cmake-format-precommit
uv-pre-commit
Enabled auto-merging stable non-major dependency releases via Renovate
Changed
- Build system:
Restructured the CLI command implementation to improve code organization, modularity, and compilation speed
Refactored the entire CMake build system to use
FetchContentfor dependency management instead of git submodulesMoved vendored libraries from
libs/tovendors/Improved build configuration and option handling for better modularity
Addressed several CMake and compiler warnings (including CMP0148 and Pybind11 compatibility) as well as CMake code smells
Streamlined package installation and discovery process
Fixed
- Code quality:
Addressed several
clang-tidywarnings throughout the code base
v0.6.12 - 2025-10-29
Added
- Algorithms:
Random fanout substitution strategy
Maximum-effort mode in
goldutilizing random fanout substitution strategies and random topological orderings to design high-quality layoutsFlag in
goldto enforce NOT gates to be routed non-bending onlyParameter in
goldto skip tiles when placing PIs, leading to higher success probabilities in discovering layoutsFlag in
goldto randomize the number of skipped tiles when placing PIsImproved performance of
hexagonalizationImproved performance of SiDB simulation algorithms through changes in the underlying data structures
Reimplementation of Graphviz’s “Mincross” algorithm
Breadth-first topological view
PRUNING_BASEDoption for SiDB gate design to speed up the design process by pruning non-operational layouts
- Experiments:
Figures-of-Merit (FoM) SiDB layout analysis experiment script
QuickCell experiment script
Minimal SiDB gate design experiment script
- Continuous integration:
Python 3.14 support
- Documentation:
References to newly published papers
Changed
- CLI:
areanow outputs the layout width and height in addition to the area
- Continuous integration:
Switched to the Ninja generator for Windows CI builds
- Documentation:
Modernized README and Getting Started section of the documentation
- Dependencies:
Updated all dependencies to their latest versions
Removed
- Continuous integration:
macOS 13 has been removed, along with support for the x86_64 (Intel) architecture
Fixed
- Data structures:
Fixed I/O cell handling in
cell_level_layout’sassign_cell_typemember functionFixed system energy calculation in
charge_distribution_surfacein corner casesAdded missing
clonemember functions to pyfiction’s SiDB lattices
- Algorithms:
Fixed a corner case in
hexagonalizationwhen extending POs to the bottom borderFixed a bug in
post_layout_optimizationandwiring_reductionthat lead to POs not being placed at the borders and possibly dyingFixed
band_bending_resiliencecalculation of SiDB layouts for unspecified transition types
- Experiments:
Experiment scripts requiring
ALGLIBnow prompt an error message instead of failing to compile when the library is not found
- Continuous integration:
clang-tidyCI workflow no longer fails when run from forks
- Code quality:
Addressed several
clang-tidywarnings throughout the code base
Removed
- Continuous integration:
Dropped Windows 2019 and v142 support
Dropped Python 3.9 support due to its end-of-life status
v0.6.11 - 2025-04-23
Added
- Algorithms:
Parameters to move inputs to top border or outputs to the bottom border after
hexagonalization
- Experiments:
Added experiment for a comprehensive analysis of the critical temperature domain
Added total simulation runtime to physical simulation experiment
- Python bindings:
Pythonic dictionary-like interface for
operational_domainandcritical_temperature_domain
Changed
- Documentation:
Modernized the documentation builds by migrating the RTD build from
piptouv
- Algorithms:
Refactored
QuickSimto remove magic number for upper limit calculationRefactored random layout design functions
Fixed
Fixed a bug in the z-dimension when determining the aspect ratio for cell-level layouts
Fixed an issue in the TTS calculation caused by the automatic base detection being activated
Fixed links in the README due to the migration of the
mqt-corerepository to a new namespaceExclude
ClusterCompletefrom simulation engine selection when ALGBLIB is disabledFixed inconsistencies and various bugs in SiDB simulation/analysis
Fixed LT, LE, GT, and LE gate handling in the gate-level-layout and the corresponding read and write functions
Fixed a bug in the crossing count calculation of gate-level layouts
Increased floating point precision to avoid undetected degeneracy in the physical simulation of SiDB layouts
v0.6.10 - 2025-02-21
Added
- Algorithms:
Added parameters to extend the PIs to the first layout row or POs to the last layout row after
hexagonalization
Fixed
Fixed the Python bindings for the critical temperature domain simulation
v0.6.9 - 2025-02-12
Added
- Algorithms:
Added
ClusterComplete, a novel exact physical simulator for SiDB layouts with substantially improved runtimes, allowing the simulation of multi-gate SiDB layoutsAdded temperature-aware operational domain simulation and restructured the function to simplify the integration of additional figures of merit in the future
Changed
- Build and documentation:
Added optional usage of jemalloc to speed up certain parallelized applications
Fixed
- Algorithms:
Fixed a bug in
apply_gate_librarythat resulted in incorrect cell-level layout sizing
- Build and documentation:
Added a CMake file for detecting pre-installed jemalloc
- Experiments:
Fixed a non-critical bug that occurred when ALGLIB was disabled
v0.6.8 - 2025-01-25
Added
- Data structures:
virtual_pi_networkthat allows for the duplication of input signalsmutable_rank_viewthat allows for the reordering of nodesstatic_depth_viewthat disables depth recomputation
- Algorithms:
- Logic synthesis:
Equivalence checking for networks with virtual PIs
- Clocking schemes:
SRS
- Continuous integration:
Added Linux on ARM runners
Fixed
- Continuous deployment:
Fixed a critical issue with wheel building and deployment to PyPI that caused some operating systems to not be served
- Experiments:
Fixed outdated paths in the
QuickCellexperiment script
v0.6.7 - 2025-01-20
Added
- Algorithms:
- Simulation:
Implemented new algorithms utilizing grid search, random sampling, and contour tracing to determine defect clearance distances of SiDB layouts
Restructured defect influence simulation for enhanced usability
Integrated
QuickCell'spruning strategies to efficiently identify non-operational layouts
- Experiments:
Added rectangular SiDB gate skeletons (16.896 nm x 16.896 nm) and a script for designing a corresponding library
Enhanced results tables in the
QuickCellexperiment script with information about how many layouts remain and are pruned at each pruning step
- Continuous integration:
- CLI:
Added an optional callback to ABC in fiction’s CLI
Changed
- Continuous integration:
Updated the workflow to reduce runtime when building the wheels by excluding redundant combinations of OSs and Python versions
Fixed
Fixed a bug in the
showcommand of the CLI
Removed
- Continuous integration:
Dropped Python 3.8 support due to its end-of-life status
Dropped Dependabot
v0.6.6 - 2024-11-26
Added
- Algorithms:
- Simulation:
Added option to determine if kinks induce layout to become non-operational
Kink control option for critical temperature simulation of SiDB layouts
- Python bindings:
Support for Python 3.13 (including GIL-free multi-threading)
- I/O:
SVG drawer for SiDB layouts
- Experiments:
Ship the SiQAD and Bestagon gate libraries as SQD files
- Documentation:
Added wiring reduction paper to publication list
Added Willem Lambooy to the authors list
- Continuous integration:
Several improvements to the Docker workflow including publishing images to DockerHub
Changed
- Continuous integration:
Exclude long-running tests from the Debug CI workflows
Fixed
Fixed a bug in SiDB gate design when using skeletons with I/O wires facing east
Adapted
post-layout optimizationandwiring reductionto handle layouts with PIs not placed at the bordersFix neutral defect handling in CDS and correct gate design termination condition
Enforce runtime evaluation of dynamic formatting strings to fix consteval contexts
Microsoft logo in CI badge by replacing the logo slug with a base64 encoding of the SVG image
Remove explicit XCode version setup for macOS 13 CIs
Adjusted PyPI deployment target for macOS
Several bugs resulting from the new cell_type::LOGIC in the SiDB technology
Several compiler and linter warnings
Documentation for BDL wire detection
v0.6.5 - 2024-10-22
Added
- Experiments:
Script to simulate the critical temperature of SiQAD and Bestagon gates
- Algorithms:
- Physical Design:
QuickCell algorithm for automatic standard cell design in silicon dangling bond logic
Added an option to GOLD to specify discretionary cost objectives
Added a flag to GOLD to enable multi-threading
Added a timeout option to post-layout optimization
- Simulation:
Added support for different ways of implementing input information in SiDB technology to the BDL input iterator
Extended BDL input iterator to support different SiDB input representations
- Documentation:
Added a
CITATION.cfffileAdded documentation on our latest papers from IEEE-NANO
Fixed
Addressed some
clang-tidywarnings
v0.6.4 - 2024-08-30
Added
- Algorithms:
- Path-finding:
Squared Euclidean distance function
Chebyshev distance function
- Data structures:
gate_level_layoutnow tracks its number of crossings
- CLI:
ps -gandstore -gnow display the currentgate_level_layout’s number of crossings
Fixed
Fixed disappearing clocking schemes when applying a gate library to a gate-level layout
Fixed a few oversights in the RTD documentation of SiDB simulation functionality
Fixed several typos and docstrings in the codebase
Addressed some
clang-tidywarnings
v0.6.3 - 2024-08-22
Added
- Algorithms:
- Physical Design:
Graph-Oriented Layout Design (GOLD) for 2DDWave-clocked Cartesian gate-level layouts to trade-off runtime vs. result quality (based on this paper)
Flag for planar post-layout optimization
Flag for optimizing POs only in post-layout optimization
- Simulation:
Defect-aware on-the-fly SiDB circuit design on defective H-Si surfaces (based on this paper)
Displacement robustness domain simulation for SiDB layouts
Finding valid physical parameters for a given SiDB layout charge distribution
Multi-dimensional operational domain computation for SiDB layouts
Changed
Switched from execution policy-based multithreading to manual thread management in operational domain computation for platform-independence and better performance in the Python bindings
Extended time-to-solution (TTS) calculation functions
Add a warning when leak sanitizers are used with AppleClang since they are not supported
Switched to new compiler and OS versions in the GitHub Actions workflows
Updated all libraries to the latest versions
Fixed
Utilizing tolerance to mitigate floating-point inaccuracies in operational domain computation
Some bugs in post-layout optimization
Corner case in
orthoregarding multi-output nodesEnable relocation of all 2-input gates during post-layout optimization
v0.6.2 - 2024-05-22
Added
- Experiments:
Script for runtime evaluation of ExGS, QuickExact, and QuickSim on the Bestagon gate set
Fixed
- Python bindings:
detect_bdl_pairsno longer require the_100or_111suffixMinor inconsistencies
v0.6.1 - 2024-05-16
Added
- Utils:
Truth table helpers for the creation of 3-input functions (NPN class representatives)
- Documentation:
Information on hexagonalization and post-layout optimization in README and ReadTheDocs
Changed
- Continuous integration:
Limit the number of CI runs for PyPI deployment
Fixed
- Continuous deployment:
Fixed the PyPI deployment workflow to publish all wheels properly
v0.6.0 - 2024-05-05
When it comes to the past, everyone writes fiction. — Stephen King
Added
- Technology:
- H-Si lattice orientation support
H-Si(100)-2x1
H-Si(111)-1x1
- Algorithms:
Post-layout optimization and wiring reduction for 2DDWave-clocked Cartesian gate-level layouts (based on this paper)
SAT-based clock number assignment
Added an upper bound option for the total layout area to
exactAutomatic and exhaustive SiDB gate designer (based on this paper)
Operational domain computation for SiDB layouts (based on this paper)
Novel SiDB simulator
quickexactfor exhaustive but fast SiDB layout simulation including atomic defects (based on this paper)Random SiDB layout generator
2DDWave distance function
Hexagonalization algorithm for transforming Cartesian 2DDWave-clocked layouts into ROW-clocked hexagonal layouts (based on this paper)
Temperature-aware SiDB simulation (based on this paper)
Atomic defect-aware physical design for SiDB layouts. Many thanks to Jeremiah Croshaw and Samuel Sze Hang Ng for the collaboration on the paper!
- Data types:
Distance maps for faster path-finding via caching or pre-computation
Enable
coord_iteratorforsiqad::coord_t
- I/O:
Unified
print_layoutfunction for all layout typesSupport
charge_distribution_surfaceinprint_layoutSupport atomic defects in
print_layoutSupport atomic defects in reading and writing SQD files
Proprietary file format writer for SiDB layouts together with simulation results
SiDB simulation file writer for SiQAD
- Clocking schemes:
Ripple
- CLI:
Commands
miginvoptandmiginvpropfor MIG network optimization and inverter propagation frommockturtle
- Utils:
Function to round a number to
ndecimal places
- Libraries:
Updated all libraries to the latest versions
- Continuous integration:
Added a workflow to build and test the Python bindings
Added a workflow to publish the Python bindings to PyPI
Added a workflow to extract the docstrings from C++ to make them available in Python
Added a CodeCov configuration file
Setup pre-commit checks for code formatting and linting
- Build and documentation:
Added documentation on the Python bindings
Overhauled the README
Flags to partially compile select features of the CLI
Added latest paper references to the documentation
Added the new Munich Nanotech Toolkit logo
Added missing thanks to Giuliana Beretta
Added contribution and support info
- Benchmarks:
Combinational networks from the IWLS93 suite
Code benchmarking via Catch2
Changed
- Usability:
Added return types to the
area,critical_path_length_and_throughput, andequivalence_checkingfunctions instead of relying on the passed statistics objectsRefactored the technology mapping interface
Enabled
offset::ucoord_tandcube::coord_tas coordinate types for SiDB simulationsEnhanced path-finding versatility by enabling them on all layout abstractions
random_coordinatefunction for all layout typesAdded the EPFL and ISCAS85 benchmarks to the benchmark selector in the experiments
Changed the unit of the
lambda_tfphysical parameter from meter to nanometer
- Continuous integration:
Increased parallelism for building and testing in the Ubuntu and Windows workflows
Use
moldinstead ofldfor faster link timesSwitched to the newest OS versions in the GitHub Actions workflows
- Build and documentation:
Overhauled and modernized the CMake build system
Updated the Doxygen documentation system
- Linting:
Make ClangFormat aware of different line ending types and enforce
LF
- Miscellaneous:
Updated the linguist attributes
fictionmoved to thecda-tumGitHub organization
Fixed
Minor oversights in using
static constexprandnoexceptFixed conversion of cube coordinate with negative y-value to SiQAD coordinate
Fixed an inconsistency in SiDB layout printing
Fixed hop energy calculation from neutral to positive SiDB
read_sqd_layoutnow updates the aspect ratio properly for SiQAD-coordinate based layoutsAtomic defects can now be updated and new ones can be assigned to specific coordinates
Case style of experiments folders corrected in
fiction_experiments.hppFixed CodeQL warnings
Fixed a bug that caused pre-mature termination of
sidb_surface_analysisFixed design-rule violation testing and equivalence checking on empty gate-level layouts
Fixed compiler warnings
Fixed a documentation bug in the physical constants section
Fixed the bug that some physical parameters were not correctly passed to the simulators
Fixed
equivalence_checkingonobstruction_layoutobjectsFixed fragments from the move to
cda-tumand adjusted the tracking of publicationsMissing physical validity check in
quicksimfor special casesBug fixes and improvements related to the coordinate system
Fixed wrong SiDB locations in a Bestagon tile’s input wire
Fixed an issue with
charge_distribution_surfacenot being recognized as acell_level_layoutFixed port routing determination for unconnected gates in the Bestagon library
v0.5.0 - 2023-03-30
Fiction is a way to challenge the status quo and to push the boundaries of conventional thinking. — unknown
Added
- Technology:
Support for the SiDB Bestagon gate library, a standard-tile library for the SiDB technology based on hexagonal grids. Many thanks to Samuel Sze Hang Ng for the collaboration on the paper!
Support for charge states of SiDBs
- Algorithms:
- Electrostatic ground state simulation for SiDB cell-level layouts
Exhaustive simulation
Heuristic simulation
Energy calculations
- Four established path-finding algorithms on arbitrary layouts with arbitrary clocking schemes
Recursive enumeration of all possible paths
A* for the shortest path
Jump Point Search (JPS) for the shortest path (proof-of-concept)
k shortest paths via Yen’s algorithm
- Distance functions and functors for layouts
Manhattan distance
Euclidean distance
A* distance
- Cost functions and functors for layouts
Unit cost
Random cost
Graph coloring with a selection of SAT solvers or heuristic algorithms
Efficient multi-path signal routing on gate-level layouts (based on this paper)
Specify a black list of tiles and gates to avoid in exact physical design
Generic function optimizer based on simulated annealing
- Data types:
Obstruction layout to represent obstacles in a layout
Edge intersection graphs from enumerated routing paths
Charge distribution surface for SiDB layouts
Coordinate type
siqad::coord_trepresenting signed SiDB coordinates as represented in SiQAD
- I/O:
Molecular FCN support in the QLL writer for MagCAD and SCERPA (many thanks to Giuliana Beretta!)
SQD reader for the SiDB technology
- Clocking Schemes:
CFE
- Traits:
has_*_technologytraits to check for specific cell technologies of layouts and libraries
- Utils:
Routing utils
STL extensions
Truth table utils
- Continuous integration:
clang-tidy workflow for static code analysis
ClangFormat workflow for automatic code formatting
Release Drafter workflow to keep an up-to-date changelog for the next release
Docker image workflow to build Docker images for the latest release
- Build and documentation:
Automatic linking with TBB for parallel algorithms
Dependabot to automatically keep the dependencies up-to-date
CodeQL to automatically scan the code for security vulnerabilities
GitHub templates for issues and pull requests
Changed
- CLI:
Split
exact’s andonepass’ parameterupper_boundintoupper_xandupper_y
- Clocking schemes:
Renamed ESP to ESR
- Libraries:
Updated all libraries to the latest versions
Moved to the upstream version of Catch2 v3
- Continuous integration:
Updated CI runners to the latest versions
Setup Z3 via a designated action. Many thanks to Lukas Burgholzer for his support!
Enabled Ccache for faster compilation in CIs
Activated experiments in CI builds to ensure that they are building correctly
Run CI only when relevant files have changed
Switched to single-threaded builds in CI to avoid out-of-memory issues
- Build and documentation:
Refactored the CMake buildsystem
Improved the README and the documentation
Fixed
Compilation issues when a certain header was included multiple times
Exclusion of experiment compilation if Z3 is not found
Wrong DOT drawer in
write_dot_layoutMSVC compilation issues
Performance issues with
foreach_*functions on layout typesPerformance issues with
std::stringwherestd::string_viewwas sufficientRegex in the FQCA reader
Issue with
clear_tilethat would lose track of PI and PO countDuplicate crossing cells in the iNML ToPoliNano library
Several I/O issues in the CLI
Excess template parameter in the
restore_namesutility functionErrors with the CMake build system if IPO was enabled through multiple sources
Linker errors and CMake name collisions
Warnings detected by CodeQL
Removed
LGTM badge as the service is no longer available
v0.4.0 - 2022-01-27
Fiction is about stuff that’s screwed up. — Nancy Kress
Added
- Data types:
New coordinate type
cube::coord_trepresenting signed cube coordinatesNew layout type
hexagonal_layoutrepresenting a grid of hexagonal tilesNew layout type
shifted_cartesian_layoutreplacing theoffsetparameter of legacyfcn_layoutNew layout type
synchronization_element_layoutreplacing theclock_latchmember of legacyfcn_layoutNew layout types
cartesian_layout,tile_based_layout,gate_level_layout, andcell_level_layoutreplacing various aspects of legacyfcn_layout,fcn_gate_layout, andfcn_cell_layouttypesAll layout types can be layered to expand their functionality, e.g., a clocked Cartesian layout type with offset coordinates results from
clocked_layout<cartesian_layout<offset::ucoord_t>>Support for arbitrary
mockturtlelogic networks as layout specificationsNew logic network type
technology_networkreplacing legacylogic_networktypeNew view types that can be layered on top of networks
reverse_topo_viewandout_of_place_edge_color_viewrefactoring aspects from theorthoalgorithm out into their own data structures
- Traits:
Added a trait system that can identify the appropriateness of a data type for the usage as parameter to an algorithm at compile time
Many traits are provided out-of-the-box like checks for the existence of certain functions or members, e.g.,
is_clocked_layoutorhas_foreach_tileSome pre-defined types used within the CLI can be found in the
types.hppfile
- Algorithms:
convert_networkas an extension ofmockturtle::cleanup_danglingto convert between extended logic network typesapply_gate_libraryto provide an interface that generates any cell-level layout type from any gate-level layout type via the application of any gate library type
- Clocking schemes:
Columnar
Row-based
ESP
- Visualization:
Custom
write_dot_layoutfunction that creates Graphviz DOT files from gate-level layouts together with custom DOT drawers for various layout typesCustom
technology_dot_draweras an extension tomockturtle::gate_dot_drawerthat supports more gate types
- CLI:
Command
mapfor technology mapping of logic networks using a given set of gate functions. Many thanks to Alessandro Tempia Calvino for his support!Command
sqdto write SiDB layouts to SiQAD filesCommand
qllto write iNML layouts to ToPoliNano & MagCAD files (complements the existingqcccommand)Command
fqcato write QCA layouts to QCA-STACK filesCommand
blifto write logic networks to BLIF filesAdded option
--hextoexactandorthoinstructing the algorithms to create a hexagonal layout instead of a Cartesian one. The option expects a hexagonal orientation that has to be one of the followingodd_row,even_row,odd_column, oreven_column
- Utility:
Added utility functions for networks, layouts, placement, names, arrays, ranges, and hashing to the
utilsfolder
- Build and documentation:
Option to disable the CLI to be built
Option to enable tests to be built
Option to enable experiments to be built
Code coverage CI via Codecov
Online documentation via Readthedocs
Code quality analysis via LGTM. Many thanks to Stefan Hillmich for his support!
Changed
- Architecture:
- Reworked fiction into a platform that offers
a header-only template library for use in external projects,
a CLI built upon said library that provides the established functionality (plus the new additions),
a framework for experiments that allows to quickly prototype ideas and compile them as stand-alone binaries built with fiction
Reworked the CMake build system to be simpler to use, yet more capable
Templatized all algorithms and data structures and switched to a trait-based API system. This allows for far more flexible system and the support of any type that implements certain functionality via duck typing
- CLI:
Command
readcan now also parse BLIF and FQCA filesCommand
readcan now create various types of logic networks from parsing input files. A flag determines which one to create, e.g.,--aig,--mig, or--xagCommand
gatessupports more gate types now including the 3-input gates presented in Marakkalage et al.exact --clock_latches/-lhas been renamed toexact --sync_elems/-eA technology flag
--topolinanohas been added toexactinstructing it to respect ToPoliNano’s requirements for iNML layoutsThe
ToPoliNanoclocking scheme has been renamed toColumnar
- Continuous Integration:
Moved from Travis CI to GitHub Actions with CI builds and testing under ubuntu, macOS, and Windows
- Build & Documentation:
Z3 is now an optional dependency that can be found automatically by fiction when
-DFICTION_Z3=ONis passed tocmake. If it is not found, some algorithms are simply excluded from compilationTrimmed README in favor of Readthedocs
Fixed
Compilation issues under Windows
SEGFAULT when using
orthounder rare circumstances
Removed
- Third-party dependencies:
Boost
Z3 (now optional)
cppitertools
- Data types:
fcn_gate_layout(replaced with theis_gate_level_layouttrait)fcn_cell_layout(replaced with theis_cell_level_layouttrait)logic_network(replaced with themockturtle::is_network_typetrait)
- CLI:
ortho -bflag because routing border I/Os is the default behavior now
v0.3.2 - 2021-01-06
Sometimes fiction is more easily understood than true events. — Young-ha Kim
Added
Command
onepassfor a combined SAT-based logic synthesis and physical design using Mugen. Thanks to Winston Haaswijk for cooperating with us on this project!SVG output for irregular (cell-based) clocked
fcn_cell_layouts (thanks to Sophia Kuhn!)csv_writerfor conveniently formatting experiments’ resultstt_readerfor reading truth tables from a file format used by Alan Mishchenko
Changed
exact --asynchronous/-ahas been renamed toexact --async/-aandexact --asynchronous_max/-Ahas been renamed toexact --async_maxoutsourced Verilog and AIGER file handling into a distinct
network_readerclass so that it can be used in custom experiments
Fixed
Dockerbuild that broke down due to updates tomockturtleandbill
v0.3.1 - 2020-06-04
There is no doubt fiction makes a better job of the truth. — Doris Lessing
Added
Command
equivfor logical and delay equivalence checking offcn_gate_layouts against a specificationCommand
energyto print and log energy dissipation of currentfcn_gate_layoutbased on a physical model for the QCA-ONE libraryCommand
areato print and log area usage in nm²Parameter
-aand flag-Ato enable asynchronous parallelism forexactFlag
--minimize_wires/-wforexactto compute the minimum amount of wire segments neededFlag
-sforshow -nfor less detailed visualization oflogic_networkobjectsDockerfileand instructions for how to create an image using Docker (thanks to Mario Kneidinger!)CMake option to toggle animated progress bars on command line
Changed
exacthas been completely reworked to utilize true incremental SMT solving without push/pop mechanics (thanks to Alan Mishchenko for the inspiration!)exact --artificial_latches/-ahas been renamed toexact --clock_latches/-lexact -mhas been renamed toexact -cStandard resolves for clocking scheme names to their commonly used variants, e.g.,
2DDWavebecomes2DDWave4Energy dissipation will no longer be logged using command
ps -g; use new commandenergyinsteadCommand
cellcan be found in command classTechnologynowIncreased font size of clock numbers in SVG files by 2pt for better readability
Changed constructor parameter types for core data structures (network and layouts)
Changed
std::size_tto fixed-size data types in lots of placesUse library caching for Travis builds to speed up build time
Moved to the latest releases of all libraries
Fixed
Python detection in CMake under different versions
Runtime logging in
exactPerformance issues in
orthoSEGFAULTS caused by
orthoon large networks when compiling with gccortho -blosing bent wire connectionsfcn_layout::random_face‘s index to coordinate mapping again, but for real now (thanks to Till Schlechtweg!)logic_networks are deep-copied for each physical design call now to secure them from external changesGates and wires without directions assigned are mapped to standard rotations using QCA-ONE library now
Rotation issues with border gate-pin I/Os using QCA-ONE library
3-output fan-outs are correctly printed as fan-outs when using
print -gnowTesting
ofstream‘s foris_openin writers now (thanks to DeepCode!)Several compiler issues under MacOS and Windows (thanks to Umberto Garlando and Fabrizio Riente for pointing them out!)
Z3 build script error under Unix with CMake version <= 3.12.0
Z3 linking on MacOS (thanks to Daniel Staack!)
bibTeX citation information correctly handles last names and arXiv prefixes now
Removed
exact --limit_crossings/-candexact --limit_wires/-was they have been replaced by respective optimization flagsLegends in
print -g/-c
v0.3.0 - 2019-11-22
Sometimes, fiction was so powerful that it even had reverberations in the real world. — Delphine de Vigan
Added
Support for iNML technology using ToPoliNano‘s gate library and clocking scheme. Thanks to Umberto Garlando for cooperating with us on this project!
Support for vertically shifted
fcn_layouts to emulate column-based clocking schemesEnhanced
logic_networkby incorporating mockturtle for logic representationTruth table store (mnemonic
-t) and commandtt. Thanks to Mathias Soeken for granting permission to use code from CirKit!Command
simulateto computetruth_tables forlogic_networkandfcn_gate_layoutobjects. Thanks to Mathias Soeken for granting permission to use code from CirKit!Command
akersto perform Akers’ Majority synthesis to generate alogic_networkfrom atruth_tableCommand
randomto generate randomlogic_networkobjectsCommand
checkto verify structural integrity of designedfcn_gate_layoutobjectsCommand
gatesto list gate counts for each vertex type in the currentlogic_networkCommand
fanoutsto substitute high-degree inputs into fan-out vertices inlogic_networks using a given strategyCommand
balanceto subdividelogic_networkedges to equalize path lengths by inserting auxiliary wire verticesCommand
qccto writeiNMLcell_layouts to component files readable by ToPoliNano and MagCADCapability to enforce straight inverter gates in
exactwith flag-nCapability to minimize the number of used crossing tiles in
exactwith flag-mCapability to parse AIGER (
*.aig) files usingreadParameter
-bfororthoProgress bars for
exactandorthoshow -nto displaylogic_networkobjectsSeveral convenience functions in the core data structures for easier access
An overview paper and a poster about the features of fiction. Please find citation information in the publication list
Changed
Moved to C++17
Moved to version 1.0 of cppitertools
Included latest updates for alice
Switched
logic_network‘s CLI mnemonic to-nas it is no longer reserved byaliceRenamed
pi/po_counttonum_pis/posreaddoes no longer substitute fan-outs automatically,exactandorthodo it instead if the user did not callfanoutsexact --path_discrepancy/-phas been renamed toexact --desynchronize/-dto express its use case betterexact --timeout/-texpects its parameter in seconds instead of milliseconds nowexact --fixed_size/-fexpects its own parameter instead of using--upper_bound‘s oneRenamed
version.htoversion_info.hRenamed Placement & Routing to Physical Design where appropriate to match the documentation
Fixed
Segfault when using
ortho -iwith certain compilers in release modeMissing input ports for 3-output fan-out gates in QCA-ONE library
Wire vertices not handled properly by QCA-ONE library
Wrong clocking look-up for
BANCSclocking infcn_cell_layoutTile directions when assigning and dissociating multiple edges
fcn_layout::random_face‘s index to coordinate mapping (thanks to Till Schlechtweg!)Format issues with benchmark files
Constant outputs of some benchmark files
Additionally, there are several performance improvements in core data structures and algorithms
Removed
Submodule
lorinaas it is included inmockturtleverilog_parser.hasmockturtlecomes with its own oneprint -nas it is replaced byshow -noperation::BUF; useoperation::Winsteadoperation::CONST0,operation::CONST1, andoperation::XORoperator[x][y][z]forfcn_layouts as it was slow and therefore not used; useface/tile/cell{x,y,z}instead
v0.2.1 - 2019-05-02
Fiction is art and art is the triumph over chaos. — John Cheever
Added
Support for BANCS clocking and integration in
exactName strings for
fcn_clocking_schemeobjects and corresponding name-based look-upVersion and build information accessible within the code by including
util/version.hParameter
-ifor commandorthoshortcuts.fswith predefined flowsbenchmarks/MAJ/folder with some TOY benchmarks using MAJ gates
Changed
Calls to
exact -snow need to name the desired clocking, e.g.exact -s use(case insensitive)incoming/outgoing_information_flow_tileshave been renamed toincoming/outgoing_data_flowand handle multi wires nowRenamed diagonal clocking schemes to 2DDWAVE and gave proper credit
More verbose error messages
Fixed
TP calculation for layouts without designated I/O pins (thanks to Mario Kneidinger!)
I/O port orientation of PI/PO gates using QCA-ONE library
Usage of non-PI/PO MAJ gates in QCA-ONE library
Visualization of clock latches in
show -c(thanks to Sophia Kuhn!)Multi direction assignment to wires and gates in
exactleading to physically impossible layoutsshrink_to_fitinfcn_gate_layoutincorporates the BGL bug now. Minimum size in each dimension is 2. For more information, see https://svn.boost.org/trac10/ticket/11735Parameters for
exactno longer get stuck once set
Removed
Parameter
-nforexact
v0.2.0 - 2019-03-21
Fiction reveals the truth that reality obscures. — Jessamyn West
Added
Export
fcn_cell_layoutobjects as SVG usingshow -c. See README for more informationps -gdisplays and logs critical path and throughput offcn_gate_layoutobjectsSupport for RES clocking and integration in
exactNew TOY benchmarks in respective folder
New command
clearto remove all elements from stores (as a shorthand forstore --clear ...)Information about how to build fiction for WSL
Functions to distinguish different
logic_networktypes like AIGs/MIGs/…Parameter
-nfor commandortho
Changed
Revised folder structure due to the increasing amount of source files
read_verilogis now calledreadand can process directoriesgate_to_cellis now calledcellwrite_qcais now calledqcaand handles file names automatically if necessary-uis not a required parameter forexactanymoreRicher output for
print -wIncluded latest bugfixes for alice
Included latest update for lorina
Fixed
Starting layout size for calls to
exact -iwas too low and has been correctedSeveral code and comment inconsistencies
Removed
ITC99 benchmark files
v0.1.1 - 2018-12-29
Literature is a luxury; fiction is a necessity. — G. K. Chesterton
Added
Technology-specific energy model for
fcn_gate_layout; supports QCA thus farSupport for
print -cto write a textual representation offcn_cell_layoutobjectsInformation on nested fiction scripts and documentation generation in README
linguist flags in
.gitattributesto prevent benchmark files from being viewed as source code
Changed
Fixed
Copy and move constructors of
logic_networkwork properly nowCalculation of
bounding_boxsize onfcn_gate_layoutnow handles empty layouts correctlySeveral minor and rare bugs, code inconsistencies, and performance issues
Removed
Nothing
v0.1.0 - 2018-10-29
Let there be a fiction
This is the initial release. Please find a feature overview in the README.