blob: 3e056ad050bab58b0a1294c8a7ed191755b96b7d [file] [log] [blame]
Chris Frantz79b4e402021-07-19 10:56:25 -07001// Copyright lowRISC contributors.
2// Licensed under the Apache License, Version 2.0, see LICENSE for details.
3// SPDX-License-Identifier: Apache-2.0
4
5use anyhow::Result;
Jes B. Klinke3f055912022-02-11 10:49:35 -08006use crate::transport::verilator::{Options, Verilator};
7use crate::transport::Transport;
Chris Frantz79b4e402021-07-19 10:56:25 -07008use structopt::StructOpt;
9
10#[derive(Debug, StructOpt)]
11pub struct VerilatorOpts {
12 #[structopt(long, default_value)]
13 verilator_bin: String,
14
15 #[structopt(long, default_value)]
16 verilator_rom: String,
17 #[structopt(long, default_value)]
18 verilator_flash: String,
19 #[structopt(long, default_value)]
20 verilator_otp: String,
21
22 #[structopt(long, required = false)]
23 verilator_args: Vec<String>,
24}
25
26pub fn create(args: &VerilatorOpts) -> Result<Box<dyn Transport>> {
27 let options = Options {
28 executable: args.verilator_bin.clone(),
29 rom_image: args.verilator_rom.clone(),
30 flash_image: args.verilator_flash.clone(),
31 otp_image: args.verilator_otp.clone(),
32 extra_args: args.verilator_args.clone(),
33 };
34 Ok(Box::new(Verilator::from_options(options)?))
35}