@@ -4,8 +4,11 @@ use std::{
4
4
} ;
5
5
6
6
use clap:: Parser ;
7
- use lut_synth:: verilog:: { SVModule , sv_parse_wrapper} ;
8
- use lut_synth:: { driver:: Canonical , lut:: LutLang } ;
7
+ use lut_synth:: { asic:: CellLang , driver:: Canonical , lut:: LutLang , verilog:: VerilogParsing } ;
8
+ use lut_synth:: {
9
+ driver:: CircuitLang ,
10
+ verilog:: { SVModule , sv_parse_wrapper} ,
11
+ } ;
9
12
/// Parse structural verilog into a LutLang Expression
10
13
#[ derive( Parser , Debug ) ]
11
14
#[ command( version, about, long_about = None ) ]
@@ -16,8 +19,11 @@ struct Args {
16
19
#[ arg( short = 'r' , long, default_value_t = false ) ]
17
20
round_trip : bool ,
18
21
/// Dump ast
19
- #[ arg( short = 'a ' , long, default_value_t = false ) ]
22
+ #[ arg( short = 'd ' , long, default_value_t = false ) ]
20
23
dump_ast : bool ,
24
+ /// Parse Verilog as CellLang
25
+ #[ arg( short = 'a' , long, default_value_t = false ) ]
26
+ asic : bool ,
21
27
/// Get a separate expression for each output
22
28
#[ arg( short = 'm' , long, default_value_t = false ) ]
23
29
multiple_expr : bool ,
@@ -26,6 +32,18 @@ struct Args {
26
32
verbose : bool ,
27
33
}
28
34
35
+ fn emit_exprs < L : CircuitLang + VerilogParsing > ( f : & SVModule ) -> std:: io:: Result < ( ) > {
36
+ let exprs = f
37
+ . get_exprs ( )
38
+ . map_err ( |s| std:: io:: Error :: new ( std:: io:: ErrorKind :: Other , s) ) ?;
39
+ for ( y, expr) in exprs {
40
+ L :: verify_expr ( & expr) . map_err ( |s| std:: io:: Error :: new ( std:: io:: ErrorKind :: Other , s) ) ?;
41
+ eprintln ! ( "{}: {}" , y, expr) ;
42
+ println ! ( "{}" , expr) ;
43
+ }
44
+ Ok ( ( ) )
45
+ }
46
+
29
47
fn main ( ) -> std:: io:: Result < ( ) > {
30
48
let args = Args :: parse ( ) ;
31
49
let mut buf = String :: new ( ) ;
@@ -59,15 +77,17 @@ fn main() -> std::io::Result<()> {
59
77
60
78
if !args. round_trip {
61
79
if args. multiple_expr {
62
- let exprs = f
63
- . get_exprs ( )
64
- . map_err ( |s| std:: io:: Error :: new ( std:: io:: ErrorKind :: Other , s) ) ?;
65
- for ( y, expr) in exprs {
66
- LutLang :: verify_expr ( & expr)
67
- . map_err ( |s| std:: io:: Error :: new ( std:: io:: ErrorKind :: Other , s) ) ?;
68
- eprintln ! ( "{}: {}" , y, expr) ;
69
- println ! ( "{}" , expr) ;
80
+ if args. asic {
81
+ emit_exprs :: < CellLang > ( & f) ?;
82
+ } else {
83
+ emit_exprs :: < LutLang > ( & f) ?;
70
84
}
85
+ } else if args. asic {
86
+ let expr = f
87
+ . to_single_cell_expr ( )
88
+ . map_err ( |s| std:: io:: Error :: new ( std:: io:: ErrorKind :: Other , s) ) ?;
89
+ eprintln ! ( "{:?}" , f. get_outputs( ) ) ;
90
+ println ! ( "{}" , expr) ;
71
91
} else {
72
92
let expr = f
73
93
. to_single_lut_expr ( )
0 commit comments