blif_parser/
primitives.rs

1use indexmap::IndexMap;
2use serde::{Deserialize, Serialize};
3use std::fmt::Debug;
4use strum_macros::EnumCount as EnumCountMacro;
5
6#[derive(Debug, Clone, Default, PartialEq, Serialize, EnumCountMacro)]
7#[repr(u32)]
8pub enum ParsedPrimitive {
9    #[default]
10    NOP = 0,
11    Input  { name: String },
12    Output { name: String },
13    Lut    { inputs: Vec<String>, output: String, table: Vec<Vec<u8>> },
14    Gate   { c: String, d: String, q: String, r: Option<String>, e: Option<String> },
15    Latch  { input: String, output: String, control: String, init: LatchInit },
16    Subckt { name: String, conns: IndexMap<String, String> },
17    Module { name: String, inputs: Vec<String>, outputs: Vec<String>, elems: Vec<ParsedPrimitive> },
18}
19
20#[repr(u8)]
21#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
22pub enum LatchInit {
23    /// Defined in Yosys spec
24    ZER0 = 0,
25    ONE = 1,
26    DONTCARE = 2,
27    UNKNOWN = 3,
28}
29
30impl LatchInit {
31    pub fn to_enum(i: &str) -> LatchInit {
32        match i {
33            "0" => LatchInit::ZER0,
34            "1" => LatchInit::ONE,
35            "2" => LatchInit::DONTCARE,
36            _ => LatchInit::UNKNOWN,
37        }
38    }
39}