// SPDX-License-Identifier: LGPL-3.0-or-later
// See Notices.txt for copyright information
//! # Fayalite Modules
//!
//! The [`#[hdl_module]`][`crate::hdl_module`] attribute is applied to a Rust
//! function so that that function creates a [`Module`][`crate::module::Module`] when called.
//! In the function body it will implicitly create a
//! variable [`m: ModuleBuilder`][`crate::module::ModuleBuilder`].
//! # Module Kinds
//!
//! There are two different kinds of modules:
//!
//! * [Normal modules][`normal_module`]. These are used for general Fayalite-based code.
//! * [Extern modules][`extern_module`]. These are for when you want to use modules written in
//! some other language, such as Verilog.
//!
//! See also: [Module Bodies][`module_bodies`]