1use crate::subset;
2use std::rc::Rc;
3
4pub type Id = subset::ast::Id;
5pub type Expr = subset::ast::Expr;
6pub type ExprConcat = subset::ast::ExprConcat;
7pub type EventTy = subset::ast::EventTy;
8pub type Attribute = subset::ast::Attribute;
9pub type AttributeTy = subset::ast::AttributeTy;
10pub type AssignTy = subset::ast::AssignTy;
11pub type Instance = subset::ast::Instance;
12pub type Stmt = subset::ast::GenericStmt<Decl, Parallel>;
13pub type Port = subset::ast::GenericPort<Decl>;
14pub type Module = subset::ast::GenericModule<Decl, Parallel>;
15pub type CaseBranch = subset::ast::GenericCaseBranch<Sequential>;
16pub type CaseDefault = subset::ast::GenericCaseDefault<Sequential>;
17pub type Case = subset::ast::GenericCase<Sequential>;
18
19#[derive(Clone, Debug, PartialEq, Eq, Hash)]
20pub enum Ty {
21 Int,
22 Width(u64),
24}
25
26#[derive(Clone, Debug, PartialEq, Eq, Hash)]
27pub enum Decl {
28 Int(Id, Ty),
29 Wire(Id, Ty),
30 Reg(Id, Ty),
31 Array(Id, Ty, Ty),
32 Param(Id, Expr),
33 AttributeDecl(Attribute, Rc<Decl>),
34}
35
36#[derive(Clone, Debug, Default)]
37pub struct SequentialIfElse {
38 pub cond: Option<Expr>,
39 pub body: Vec<Sequential>,
40 pub elsebr: Option<Rc<Sequential>>,
41}
42
43#[derive(Clone, Debug)]
44pub enum Sequential {
45 Wildcard,
46 Event(EventTy, Expr),
47 Assign(Expr, Expr, AssignTy),
48 IfElse(SequentialIfElse),
49 SeqCase(Case),
50}
51
52#[derive(Clone, Debug)]
53pub enum ProcessTy {
54 Always,
55}
56
57#[derive(Clone, Debug)]
58pub struct ParallelProcess {
59 pub ty: ProcessTy,
60 pub event: Option<Sequential>,
61 pub body: Vec<Sequential>,
62}
63
64#[derive(Clone, Debug)]
65pub enum Parallel {
66 Inst(Instance),
67 Assign(Expr, Expr),
68 Process(ParallelProcess),
69}