blif_parser/
primitives.rs1use 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 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}