1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// Copyright (c) 2020-2021 Thomas Kramer.
// SPDX-FileCopyrightText: 2022 Thomas Kramer <code@tkramer.ch>
//
// SPDX-License-Identifier: AGPL-3.0-or-later

//! ASIC place-and-route framework.
//!
//! This crate contains interface definitions for place-and-route related algorithms.
//!
//! The core idea of the framework is to enable independent development of place & route engines
//! which then can easily be plugged together.
//!
//! ## Overview
//! Incomplete overview:
//! * [`place`] - interfaces for placement engines and representations of placement problems
//! * [`rebuffer`] - interface for buffer insertion engines
//! * [`route`] - interfaces for routing engines
//! * [`timing_analysis`] - interfaces for static timing-analysis (STA) engines
//! * [`util`] - useful functions which don't yet have their own category
//!
//! # Implementations
//!
//! Implementations of place and route algorithms are not included in this crate.
//! Some can be found in the following list:
//!
//! ## Placement and legalizaton
//! * [electron-placer](https://codeberg.org/LibrEDA/electron-placer) (written in Rust)
//! * [Coloquinte](https://codeberg.org/tok/libreda-coloquinte-placer) (C bindings, statically linked)
//!
//! ## Routing
//! * [TritonRoute](https://codeberg.org/LibrEDA/libreda-triton-route) (subprocess called by passing LEF/DEF files)
//! * [mycelium](https://codeberg.org/LibrEDA/mycelium-router) (written in Rust)

#![deny(missing_docs)]

/// Re-exports.
pub use libreda_db;
pub use libreda_db::prelude as db;

pub mod design;

pub mod legalize;
pub mod metrics;
pub mod place;
pub mod rebuffer;
pub mod route;
mod test_data;
pub mod timing_analysis;
pub mod util;

/// Shortcut to most things defined in this crate.
pub mod prelude {
    pub use crate::design::*;
    pub use crate::legalize::*;
    pub use crate::metrics::*;
    pub use crate::place::*;
    pub use crate::rebuffer::*;
    pub use crate::route::prelude::*;
    pub use crate::timing_analysis::*;
    pub use crate::util::*;
}