// SPDX-License-Identifier: LGPL-3.0-or-later
// See Notices.txt for copyright information
//!
//! # Organization
//!
//! All Fayalite-based designs are organized as one or more [modules][`module::Module`]
//! -- modules are created by writing a Rust function with the
//! [`#[hdl_module]` attribute][hdl_module]. You can then invoke the function to create a module.
//! You use the implicitly-added [`m: ModuleBuilder`][`module::ModuleBuilder`] variable in that
//! function to add inputs/outputs and other components to that module.
//!
//! ```
//! # use fayalite::prelude::*;
//! #
//! #[hdl_module]
//! pub fn example_module() {
//! #[hdl]
//! let an_input: UInt<10> = m.input(); // create an input that is a 10-bit unsigned integer
//! #[hdl]
//! let some_output: UInt<10> = m.output();
//! connect(some_output, an_input); // assigns the value of `an_input` to `some_output`
//! }
//! ```
use crate::;