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.
-
enumerator EMPTY
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:
trueiffciscell_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:
trueiffciscell_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:
trueiffciscell_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:
trueiffciscell_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:
trueiffciscell_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:
trueiffciscell_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_0orCONST_1.- Parameters:
c – Cell type to check.
- Returns:
trueiffciscell_type::CONST_0orcell_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:
trueiffmiscell_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:
trueiffmiscell_mode::ROTATED.
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.
-
enum class cell_type : uint8_t
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.
-
enumerator EMPTY
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:
trueiffciscell_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:
trueiffciscell_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:
trueiffciscell_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:
trueiffciscell_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:
trueiffciscell_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:
trueiffciscell_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:
trueiffciscell_type::SLANTED_EDGE_UP_MAGNETorcell_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:
trueiffciscell_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:
trueiffciscell_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:
trueiffciscell_type::FANOUT_COUPLER_MAGNET.
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.
-
enum class cell_type : uint8_t
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).
-
enumerator EMPTY
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:
trueiffciscell_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:
trueiffciscell_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:
trueiffciscell_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:
trueiffciscell_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:
trueiffciscell_type::LOGIC.
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.
-
enum class cell_type : uint8_t
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.
-
enumerator EMPTY
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:
trueiffciscell_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:
trueiffciscell_type::NORMAL1,cell_type::NORMAL2,cell_type::NORMAL3, orcell_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:
trueiffciscell_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:
trueiffciscell_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:
trueiffciscell_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:
trueiffciscell_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:
trueiffciscell_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:
trueiffciscell_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:
trueiffciscell_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:
trueiffciscell_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_0orCONST_1.- Parameters:
c – Cell type to check.
- Returns:
trueiffciscell_type::CONST_0orcell_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:
trueiffmiscell_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:
trueiffmiscell_mode::ROTATED.
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.
-
enum class cell_type : uint8_t