Skip to content

Commit a5a35b3

Browse files
authored
Add CellLang to parse-verilog tool (#149)
1 parent 9fbe500 commit a5a35b3

File tree

1 file changed

+31
-11
lines changed

1 file changed

+31
-11
lines changed

src/bin/parse-verilog.rs

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@ use std::{
44
};
55

66
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+
};
912
/// Parse structural verilog into a LutLang Expression
1013
#[derive(Parser, Debug)]
1114
#[command(version, about, long_about = None)]
@@ -16,8 +19,11 @@ struct Args {
1619
#[arg(short = 'r', long, default_value_t = false)]
1720
round_trip: bool,
1821
/// Dump ast
19-
#[arg(short = 'a', long, default_value_t = false)]
22+
#[arg(short = 'd', long, default_value_t = false)]
2023
dump_ast: bool,
24+
/// Parse Verilog as CellLang
25+
#[arg(short = 'a', long, default_value_t = false)]
26+
asic: bool,
2127
/// Get a separate expression for each output
2228
#[arg(short = 'm', long, default_value_t = false)]
2329
multiple_expr: bool,
@@ -26,6 +32,18 @@ struct Args {
2632
verbose: bool,
2733
}
2834

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+
2947
fn main() -> std::io::Result<()> {
3048
let args = Args::parse();
3149
let mut buf = String::new();
@@ -59,15 +77,17 @@ fn main() -> std::io::Result<()> {
5977

6078
if !args.round_trip {
6179
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)?;
7084
}
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);
7191
} else {
7292
let expr = f
7393
.to_single_lut_expr()

0 commit comments

Comments
 (0)