Project

General

Profile

« Previous | Next » 

Revision fae1790f

Added by Arnaud Dieumegard over 5 years ago

Added support for Process statements, signal assignment, If, Exit and Null sequential statements

View differences:

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