Revision fae1790f
Added by Arnaud Dieumegard over 5 years ago
src/tools/importer/vhdl_deriving_yojson.ml | ||
---|---|---|
78 | 78 |
(************************************************************************************) |
79 | 79 |
(* Expressions / Statements *) |
80 | 80 |
(************************************************************************************) |
81 |
type suffix_selection_t = Idx of int | Range of int * int |
|
82 |
[@@deriving yojson {strict = false}];; |
|
81 | 83 |
|
82 | 84 |
(* TODO: call to functions? procedures? *) |
83 | 85 |
type vhdl_expr_t = |
84 | 86 |
| Var of string (* a signal or a variable *) |
85 |
| Op of { id: string; args: vhdl_expr_t list } |
|
87 |
| Op of { id: string; args: vhdl_expr_t list } [@name "Expression"] |
|
88 |
| IsNull |
|
89 |
| Time of { value: int; phy_unit: string } |
|
90 |
| Sig of { name: string; att: vhdl_signal_attributes_t option } |
|
91 |
| SuffixMod of { expr : vhdl_expr_t; selection : suffix_selection_t } |
|
86 | 92 |
[@@deriving yojson {strict = false}];; |
87 | 93 |
|
88 | 94 |
let arith_funs = ["+";"-";"*";"/";"mod"; "rem";"abs";"**"] |
89 | 95 |
let bool_funs = ["and"; "or"; "nand"; "nor"; "xor"; "not"] |
90 | 96 |
let rel_funs = ["<";">";"<=";">=";"/=";"="] |
91 | 97 |
|
92 |
type vhdl_sequential_stmt_t = |
|
98 |
type vhdl_if_case_t = |
|
99 |
{ |
|
100 |
if_cond: vhdl_expr_t; |
|
101 |
if_block: vhdl_sequential_stmt_t list; |
|
102 |
} |
|
103 |
and vhdl_sequential_stmt_t = |
|
93 | 104 |
| VarAssign of { lhs: string; rhs: vhdl_expr_t } |
94 |
(* | Case of { guard: vhdl_expr_t; branches: { case: } |
|
95 |
| Case of { guard: vhdl_expr_t; branches |
|
96 |
*) |
|
105 |
| SigSeqAssign of { label: string option; lhs: string; rhs: vhdl_expr_t list} [@name "SIGNAL_ASSIGNMENT_STATEMENT"] |
|
106 |
| If of { label: string option [@default Some ""]; if_cases: vhdl_if_case_t list; |
|
107 |
default: (vhdl_sequential_stmt_t list) option; } [@name "IF_STATEMENT"] |
|
108 |
| Case of { guard: vhdl_expr_t; branches: vhdl_case_item_t list } |
|
109 |
| Exit of { label: string option [@default Some ""]; loop_label: string option [@default Some ""]; condition: vhdl_expr_t option [@default Some IsNull]} [@name "EXIT_STATEMENT"] |
|
110 |
| Null of { label: string option [@default Some ""]} [@name "NULL_STATEMENT"] |
|
111 |
and vhdl_case_item_t = |
|
112 |
{ |
|
113 |
when_cond: vhdl_expr_t; |
|
114 |
when_stmt: vhdl_sequential_stmt_t; |
|
115 |
} |
|
97 | 116 |
[@@deriving yojson {strict = false}];; |
98 | 117 |
|
99 | 118 |
type signal_condition_t = |
... | ... | |
114 | 133 |
|
115 | 134 |
type conditional_signal_t = |
116 | 135 |
{ |
117 |
lhs: string [@default ""]; (* assigned signal *)
|
|
118 |
rhs: vhdl_expr_t; (* expression *)
|
|
119 |
cond: signal_condition_t option (* conditional signal statement *)
|
|
136 |
lhs: string [@default ""]; (* assigned signal = target*)
|
|
137 |
rhs: vhdl_expr_t; (* expression *) |
|
138 |
cond: signal_condition_t option; (* conditional signal statement = waveform*)
|
|
120 | 139 |
} |
121 | 140 |
[@@deriving yojson {strict = false}];; |
122 | 141 |
|
123 | 142 |
type process_t = |
124 | 143 |
{ |
125 | 144 |
id: string option [@default None]; |
145 |
declarations: vhdl_declaration_t list option [@key "PROCESS_DECLARATIVE_PART"] [@default Some []]; |
|
126 | 146 |
active_sigs: string list [@default []]; |
127 |
body: vhdl_sequential_stmt_t list [@default []] |
|
147 |
body: vhdl_sequential_stmt_t list [@key "PROCESS_STATEMENT_PART"] [@default []]
|
|
128 | 148 |
} |
129 | 149 |
[@@deriving yojson {strict = false}];; |
130 | 150 |
|
... | ... | |
136 | 156 |
[@@deriving yojson {strict = false}];; |
137 | 157 |
|
138 | 158 |
type vhdl_concurrent_stmt_t = |
139 |
| SigAssign of conditional_signal_t |
|
140 |
| Process of process_t |
|
159 |
| SigAssign of conditional_signal_t [@key "SIGNAL_ASSIGNMENT"]
|
|
160 |
| Process of process_t [@key "PROCESS_STATEMENT"]
|
|
141 | 161 |
| SelectedSig of selected_signal_t |
142 | 162 |
[@@deriving yojson {strict = false}];; |
143 | 163 |
(* |
Also available in: Unified diff
Added support for Process statements, signal assignment, If, Exit and Null sequential statements