FCN Cell Technologies

Supported technological implementations of the FCN concept. Each has its own set of cell types and properties.

Quantum-dot Cellular Automata (QCA)

Header: fiction/technology/cell_technologies.hpp

struct qca_technology

Quantum-dot Cellular Automata (QCA) technology implementation of the FCN concept.

Public Types

enum class cell_type : uint8_t

Possible types of QCA cells.

Values:

enumerator EMPTY

Symbol used for empty QCA cells.

enumerator NORMAL

Symbol used for normal QCA cells.

enumerator INPUT

Symbol used for input QCA cells.

enumerator OUTPUT

Symbol used for output QCA cells.

enumerator CONST_0

Symbol used for constant 0 input QCA cells.

enumerator CONST_1

Symbol used for constant 1 input QCA cells.

enum class cell_mode : uint8_t

Possible cell modes for QCA cells.

Values:

enumerator NORMAL
enumerator ROTATED
enumerator VERTICAL
enumerator CROSSOVER
enum class cell_mark : uint8_t

Possible marks to be applied to a cell to change its type.

Values:

enumerator EMPTY
enumerator INPUT
enumerator OUTPUT

Public Static Functions

static inline constexpr bool is_empty_cell(const cell_type &c) noexcept

Checks whether the given cell type is empty.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::EMPTY.

static inline constexpr bool is_normal_cell(const cell_type &c) noexcept

Checks whether the given cell type is a normal cell.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::NORMAL.

static inline constexpr bool is_input_cell(const cell_type &c) noexcept

Checks whether the given cell type is an input cell.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::INPUT.

static inline constexpr bool is_output_cell(const cell_type &c) noexcept

Checks whether the given cell type is an output cell.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::OUTPUT.

static inline constexpr bool is_const_0_cell(const cell_type &c) noexcept

Checks whether the given cell type is a constant-0 input cell.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::CONST_0.

static inline constexpr bool is_const_1_cell(const cell_type &c) noexcept

Checks whether the given cell type is a constant-1 input cell.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::CONST_1.

static inline constexpr bool is_constant_cell(const cell_type &c) noexcept

Checks whether the given cell type is a constant input cell, i.e., either CONST_0 or CONST_1.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::CONST_0 or cell_type::CONST_1.

static inline constexpr bool is_normal_cell_mode(const cell_mode &m) noexcept

Checks whether the given cell mode is the normal mode.

Parameters:

m – Cell mode to check.

Returns:

true iff m is cell_mode::NORMAL.

static inline constexpr bool is_rotated_cell_mode(const cell_mode &m) noexcept

Checks whether the given cell mode is the rotated mode.

Parameters:

m – Cell mode to check.

Returns:

true iff m is cell_mode::ROTATED.

static inline constexpr bool is_vertical_cell_mode(const cell_mode &m) noexcept

Checks whether the given cell mode is the vertical mode.

Parameters:

m – Cell mode to check.

Returns:

true iff m is cell_mode::VERTICAL.

static inline constexpr bool is_crossover_cell_mode(const cell_mode &m) noexcept

Checks whether the given cell mode is the crossover mode.

Parameters:

m – Cell mode to check.

Returns:

true iff m is cell_mode::CROSSOVER.

Public Static Attributes

static constexpr uint64_t CELL_WIDTH = 18ul

Default width of a QCA cell in QCADesigner (https://waluslab.ece.ubc.ca/qcadesigner/).

static constexpr uint64_t CELL_HEIGHT = 18ul

Default height of a QCA cell in QCADesigner.

static constexpr uint64_t CELL_HSPACE = 2ul

Default horizontal spacing between two QCA cells in QCADesigner.

static constexpr uint64_t CELL_VSPACE = 2ul

Default vertical spacing between two QCA cells in QCADesigner.

in-plane Nanomagnet Logic (iNML)

Header: fiction/technology/cell_technologies.hpp

struct inml_technology

in-plane Nanomagnet Logic (iNML) technology implementation of the FCN concept.

Public Types

enum class cell_type : uint8_t

Possible types of iNML cells.

Values:

enumerator EMPTY

Symbol used for empty iNML cells.

enumerator NORMAL

Symbol used for normal iNML cells.

enumerator INPUT

Symbol used for input iNML cells.

enumerator OUTPUT

Symbol used for output iNML cells.

enumerator SLANTED_EDGE_UP_MAGNET

Symbol used for upper slanted edge magnets.

enumerator SLANTED_EDGE_DOWN_MAGNET

Symbol used for lower slanted edge magnets.

enumerator INVERTER_MAGNET

Symbol used for inverter magnets.

enumerator CROSSWIRE_MAGNET

Symbol used for cross-wire magnets.

enumerator FANOUT_COUPLER_MAGNET

Symbol used for coupler (fan-out) magnets.

enum class cell_mark : uint8_t

Possible marks to be applied to a cell to change its type.

Values:

enumerator EMPTY
enumerator INPUT
enumerator OUTPUT

Public Static Functions

static inline constexpr bool is_empty_cell(const cell_type &c) noexcept

Checks whether the given cell type is empty.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::EMPTY.

static inline constexpr bool is_normal_cell(const cell_type &c) noexcept

Checks whether the given cell type is a normal cell.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::NORMAL.

static inline constexpr bool is_input_cell(const cell_type &c) noexcept

Checks whether the given cell type is an input cell.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::INPUT.

static inline constexpr bool is_output_cell(const cell_type &c) noexcept

Checks whether the given cell type is an output cell.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::OUTPUT.

static inline constexpr bool is_slanted_edge_up_magnet(const cell_type &c) noexcept

Checks whether the given cell type is an up-slanted edge magnet.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::SLANTED_EDGE_UP_MAGNET.

static inline constexpr bool is_slanted_edge_down_magnet(const cell_type &c) noexcept

Checks whether the given cell type is a down-slanted edge magnet.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::SLANTED_EDGE_DOWN_MAGNET.

static inline constexpr bool is_slanted_edge_magnet(const cell_type &c) noexcept

Checks whether the given cell type is a slanted edge magnet, i.e., either up- or down-slanted.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::SLANTED_EDGE_UP_MAGNET or cell_type::SLANTED_EDGE_DOWN_MAGNET.

static inline constexpr bool is_inverter_magnet(const cell_type &c) noexcept

Checks whether the given cell type is an inverter magnet.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::INVERTER_MAGNET.

static inline constexpr bool is_crosswire_magnet(const cell_type &c) noexcept

Checks whether the given cell type is a crosswire magnet.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::CROSSWIRE_MAGNET.

static inline constexpr bool is_fanout_coupler_magnet(const cell_type &c) noexcept

Checks whether the given cell type is a fanout coupler magnet.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::FANOUT_COUPLER_MAGNET.

static inline constexpr bool is_normal_cell_mode(const cell_mode &m) noexcept

Checks whether the given cell mode is the normal mode. iNML cells do not have modes, so this always holds.

Returns:

true.

Public Static Attributes

static constexpr uint64_t CELL_WIDTH = 50ul

Default width of a iNML cell in NMLSim.

static constexpr uint64_t CELL_HEIGHT = 100ul

Default height of a iNML cell in NMLSim.

static constexpr uint64_t CELL_HSPACE = 10ul

Default horizontal spacing between two iNML cells in NMLSim.

static constexpr uint64_t CELL_VSPACE = 25ul

Default vertical spacing between two iNML cells in NMLSim.

struct cell_mode

iNML cells do not have modes.

Silicon Dangling Bonds (SiDB)

Header: fiction/technology/cell_technologies.hpp

struct sidb_technology

Silicon Dangling Bond (SiDB) technology implementation of the FCN concept.

Public Types

enum class cell_type : uint8_t

Possible types of SiDB cells.

Values:

enumerator EMPTY

Symbol used for empty SiDB cells.

enumerator NORMAL

Symbol used for normal SiDB cells.

enumerator INPUT

Symbol used for input SiDB cells.

enumerator OUTPUT

Symbol used for output SiDB cells.

enumerator LOGIC

Symbol used for logic SiDB cells (e.g. canvas SiDBs).

enum class cell_mark : uint8_t

Possible marks to be applied to a cell to change its type.

Values:

enumerator EMPTY
enumerator INPUT
enumerator OUTPUT
enumerator LOGIC

Public Static Functions

static inline constexpr bool is_empty_cell(const cell_type &c) noexcept

Checks whether the given cell type is empty.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::EMPTY.

static inline constexpr bool is_normal_cell(const cell_type &c) noexcept

Checks whether the given cell type is a normal cell.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::NORMAL.

static inline constexpr bool is_input_cell(const cell_type &c) noexcept

Checks whether the given cell type is an input cell.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::INPUT.

static inline constexpr bool is_output_cell(const cell_type &c) noexcept

Checks whether the given cell type is an output cell.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::OUTPUT.

static inline constexpr bool is_logic_cell(const cell_type &c) noexcept

Checks whether the given cell type is a logic cell (e.g., a canvas SiDB).

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::LOGIC.

static inline constexpr bool is_normal_cell_mode(const cell_mode &m) noexcept

Checks whether the given cell mode is the normal mode. SiDB cells do not have modes, so this always holds.

Returns:

true.

Public Static Attributes

static constexpr double CELL_WIDTH = 0.0

Default width of a SiDB in SiQAD (https://github.com/siqad/siqad). Dots are considered to be 0-dimensional entities for simulation purposes.

static constexpr double CELL_HEIGHT = 0.0

Default height of a SiDB in SiQAD. Dots are considered to be 0-dimensional entities for simulation purposes.

static constexpr double CELL_HSPACE = 0.384

Default horizontal spacing between two SiDBs in SiQAD.

static constexpr double CELL_VSPACE = 0.384

Default average vertical spacing between two SiDBs in SiQAD. Depending on whether they are on the same or different dimer rows, SiDBs can be closer together or further apart.

struct cell_mode

SiDB cells do not have modes.

Molecular Quantum-dot Cellular Automata (MolQCA)

Header: fiction/technology/cell_technologies.hpp

struct mol_qca_technology

Molecular Quantum-dot Cellular Automata (molQCA) technology implementation of the FCN concept.

MolQCA normal cell symbols encode their SCERPA clock phase directly. The helper predicates below keep phase handling centralized for writers and gate libraries that need to translate cell symbols into simulator-specific metadata.

Public Types

enum class cell_type : uint8_t

Possible types of molQCA cells.

Values:

enumerator EMPTY

Symbol used for empty molQCA cells.

enumerator NORMAL1

Symbol used for normal molQCA cells with clocking 0.

enumerator NORMAL2

Symbol used for normal molQCA cells with clocking 1.

enumerator NORMAL3

Symbol used for normal molQCA cells with clocking 2.

enumerator NORMAL4

Symbol used for normal molQCA cells with clocking 3.

enumerator INPUT

Symbol used for input molQCA cells.

enumerator OUTPUT

Symbol used for output molQCA cells.

enumerator CONST_0

Symbol used for constant 0 input molQCA cells.

enumerator CONST_1

Symbol used for constant 1 input molQCA cells.

enum class cell_mode : uint8_t

Possible cell modes for molQCA cells.

Values:

enumerator NORMAL
enumerator ROTATED
enumerator VERTICAL
enumerator CROSSOVER
enum class cell_mark : uint8_t

Possible marks to be applied to a cell to change its type.

Values:

enumerator EMPTY
enumerator INPUT
enumerator OUTPUT

Public Static Functions

static inline constexpr bool is_empty_cell(const cell_type &c) noexcept

Checks whether the given cell type is empty.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::EMPTY.

static inline constexpr bool is_normal_cell(const cell_type &c) noexcept

Checks whether the given cell type is a normal cell, i.e., any of the four clocking phases.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::NORMAL1, cell_type::NORMAL2, cell_type::NORMAL3, or cell_type::NORMAL4.

static inline constexpr bool is_normal_cell1(const cell_type &c) noexcept

Checks whether the given cell type is a normal cell with clocking 0.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::NORMAL1.

static inline constexpr bool is_normal_cell2(const cell_type &c) noexcept

Checks whether the given cell type is a normal cell with clocking 1.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::NORMAL2.

static inline constexpr bool is_normal_cell3(const cell_type &c) noexcept

Checks whether the given cell type is a normal cell with clocking 2.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::NORMAL3.

static inline constexpr bool is_normal_cell4(const cell_type &c) noexcept

Checks whether the given cell type is a normal cell with clocking 3.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::NORMAL4.

static inline constexpr uint64_t cell_clock_number(const cell_type &c) noexcept

Returns the SCERPA clock number encoded by a molQCA normal cell type.

Non-normal cell types do not encode a clock phase and are mapped to phase 0 for callers that need a deterministic fallback.

Parameters:

c – Cell type to inspect.

Returns:

Clock number in the range 0 to 3.

static inline constexpr bool is_input_cell(const cell_type &c) noexcept

Checks whether the given cell type is an input cell.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::INPUT.

static inline constexpr bool is_output_cell(const cell_type &c) noexcept

Checks whether the given cell type is an output cell.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::OUTPUT.

static inline constexpr bool is_const_0_cell(const cell_type &c) noexcept

Checks whether the given cell type is a constant-0 input cell.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::CONST_0.

static inline constexpr bool is_const_1_cell(const cell_type &c) noexcept

Checks whether the given cell type is a constant-1 input cell.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::CONST_1.

static inline constexpr bool is_constant_cell(const cell_type &c) noexcept

Checks whether the given cell type is a constant input cell, i.e., either CONST_0 or CONST_1.

Parameters:

c – Cell type to check.

Returns:

true iff c is cell_type::CONST_0 or cell_type::CONST_1.

static inline constexpr bool is_normal_cell_mode(const cell_mode &m) noexcept

Checks whether the given cell mode is the normal mode.

Parameters:

m – Cell mode to check.

Returns:

true iff m is cell_mode::NORMAL.

static inline constexpr bool is_rotated_cell_mode(const cell_mode &m) noexcept

Checks whether the given cell mode is the rotated mode.

Parameters:

m – Cell mode to check.

Returns:

true iff m is cell_mode::ROTATED.

static inline constexpr bool is_vertical_cell_mode(const cell_mode &m) noexcept

Checks whether the given cell mode is the vertical mode.

Parameters:

m – Cell mode to check.

Returns:

true iff m is cell_mode::VERTICAL.

static inline constexpr bool is_crossover_cell_mode(const cell_mode &m) noexcept

Checks whether the given cell mode is the crossover mode.

Parameters:

m – Cell mode to check.

Returns:

true iff m is cell_mode::CROSSOVER.

Public Static Attributes

static constexpr uint64_t CELL_WIDTH = 2ul

Default width of a molQCA cell.

static constexpr uint64_t CELL_HEIGHT = 2ul

Default height of a molQCA cell.

static constexpr uint64_t CELL_HSPACE = 0ul

Default horizontal spacing between two molQCA cells.

static constexpr uint64_t CELL_VSPACE = 0ul

Default vertical spacing between two molQCA cells.