From a03093ff3087e724970d7c2378d47dd87d4d64c0 Mon Sep 17 00:00:00 2001 From: Shupei Fan Date: Tue, 27 Aug 2024 14:57:31 +0000 Subject: [PATCH] [difftest] cosmic refactor (break verilator temporally) --- difftest/Cargo.lock | 65 ++++++------------ difftest/Cargo.toml | 5 +- difftest/dpi_common/Cargo.toml | 14 ++++ difftest/dpi_common/src/lib.rs | 13 ++++ difftest/{online_dpi => dpi_t1}/Cargo.toml | 7 +- difftest/{online_dpi => dpi_t1}/src/dpi.rs | 2 +- difftest/{online_dpi => dpi_t1}/src/drive.rs | 22 ++++-- difftest/dpi_t1/src/lib.rs | 52 ++++++++++++++ difftest/offline/src/difftest.rs | 9 ++- difftest/offline/src/json_events.rs | 3 +- difftest/offline/src/main.rs | 68 +++++++++++++++++-- difftest/online_dpi/src/lib.rs | 31 --------- difftest/online_vcs/default.nix | 48 ------------- difftest/spike_rs/build.rs | 10 ++- difftest/spike_rs/src/lib.rs | 1 + .../src/runner.rs} | 41 +++++++++-- difftest/test_common/src/lib.rs | 1 - difftest/vcs.nix | 47 +++++++++++++ nix/t1/default.nix | 2 +- nix/t1/vcs.nix | 2 +- 20 files changed, 282 insertions(+), 161 deletions(-) create mode 100644 difftest/dpi_common/Cargo.toml create mode 100644 difftest/dpi_common/src/lib.rs rename difftest/{online_dpi => dpi_t1}/Cargo.toml (78%) rename difftest/{online_dpi => dpi_t1}/src/dpi.rs (99%) rename difftest/{online_dpi => dpi_t1}/src/drive.rs (94%) create mode 100644 difftest/dpi_t1/src/lib.rs delete mode 100644 difftest/online_dpi/src/lib.rs delete mode 100644 difftest/online_vcs/default.nix rename difftest/{test_common/src/spike_runner.rs => spike_rs/src/runner.rs} (82%) diff --git a/difftest/Cargo.lock b/difftest/Cargo.lock index 014775917..7ca823e6d 100644 --- a/difftest/Cargo.lock +++ b/difftest/Cargo.lock @@ -72,12 +72,6 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" -[[package]] -name = "cc" -version = "1.0.101" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac367972e516d45567c7eafc73d24e1c193dcf200a8d94e9db7b3d38b349572d" - [[package]] name = "cfg-if" version = "1.0.0" @@ -124,15 +118,6 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70" -[[package]] -name = "cmake" -version = "0.1.50" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130" -dependencies = [ - "cc", -] - [[package]] name = "colorchoice" version = "1.0.1" @@ -150,6 +135,27 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "dpi_common" +version = "0.1.0" +dependencies = [ + "svdpi", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "dpi_t1" +version = "0.1.0" +dependencies = [ + "clap", + "dpi_common", + "hex", + "spike_rs", + "svdpi", + "tracing", +] + [[package]] name = "heck" version = "0.5.0" @@ -278,35 +284,6 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" -[[package]] -name = "online_dpi" -version = "0.1.0" -dependencies = [ - "clap", - "common", - "hex", - "spike_rs", - "svdpi", - "tracing", -] - -[[package]] -name = "online_drive" -version = "0.1.0" -dependencies = [ - "cmake", - "online_dpi", - "svdpi", -] - -[[package]] -name = "online_vcs" -version = "0.1.0" -dependencies = [ - "online_dpi", - "svdpi", -] - [[package]] name = "overload" version = "0.1.1" diff --git a/difftest/Cargo.toml b/difftest/Cargo.toml index 35ce5dbf7..1d5ec214d 100644 --- a/difftest/Cargo.toml +++ b/difftest/Cargo.toml @@ -4,9 +4,8 @@ members = [ "test_common", "spike_rs", "offline", - "online_dpi", - "online_drive", - "online_vcs", + "dpi_t1", + "dpi_common", ] exclude = [ "spike_interfaces" diff --git a/difftest/dpi_common/Cargo.toml b/difftest/dpi_common/Cargo.toml new file mode 100644 index 000000000..bc3d2081c --- /dev/null +++ b/difftest/dpi_common/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "dpi_common" +edition = "2021" +version.workspace = true + +[dependencies] +svdpi = { workspace = true } +tracing = { workspace = true } +tracing-subscriber = { workspace = true } + +[features] +vcs = ["svdpi/vpi"] +verilator = ["svdpi/sv2023"] +trace = [] diff --git a/difftest/dpi_common/src/lib.rs b/difftest/dpi_common/src/lib.rs new file mode 100644 index 000000000..d98bfe863 --- /dev/null +++ b/difftest/dpi_common/src/lib.rs @@ -0,0 +1,13 @@ +use tracing_subscriber::{EnvFilter, FmtSubscriber}; + +pub fn setup_logger() { + let global_logger = FmtSubscriber::builder() + .with_env_filter(EnvFilter::from_default_env()) // default level: error + .without_time() + .with_target(false) + .with_ansi(true) + .compact() + .finish(); + tracing::subscriber::set_global_default(global_logger) + .expect("internal error: fail to setup log subscriber"); +} diff --git a/difftest/online_dpi/Cargo.toml b/difftest/dpi_t1/Cargo.toml similarity index 78% rename from difftest/online_dpi/Cargo.toml rename to difftest/dpi_t1/Cargo.toml index 1d33a18b3..17df123f6 100644 --- a/difftest/online_dpi/Cargo.toml +++ b/difftest/dpi_t1/Cargo.toml @@ -1,12 +1,15 @@ [package] -name = "online_dpi" +name = "dpi_t1" edition = "2021" version.workspace = true # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +[lib] +crate-type = ["staticlib"] + [dependencies] -common = { path = "../test_common" } +dpi_common = { path = "../dpi_common" } spike_rs = { path = "../spike_rs" } clap = { workspace = true } tracing = { workspace = true } diff --git a/difftest/online_dpi/src/dpi.rs b/difftest/dpi_t1/src/dpi.rs similarity index 99% rename from difftest/online_dpi/src/dpi.rs rename to difftest/dpi_t1/src/dpi.rs index d431e8124..f3cbabd12 100644 --- a/difftest/online_dpi/src/dpi.rs +++ b/difftest/dpi_t1/src/dpi.rs @@ -218,7 +218,7 @@ unsafe extern "C" fn axi_write_indexedAccessPort( #[no_mangle] unsafe extern "C" fn t1_cosim_init() { let args = OfflineArgs::parse(); - args.common_args.setup_logger().unwrap(); + dpi_common::setup_logger(); let scope = SvScope::get_current().expect("failed to get scope in t1_cosim_init"); diff --git a/difftest/online_dpi/src/drive.rs b/difftest/dpi_t1/src/drive.rs similarity index 94% rename from difftest/online_dpi/src/drive.rs rename to difftest/dpi_t1/src/drive.rs index 145918114..316bd9010 100644 --- a/difftest/online_dpi/src/drive.rs +++ b/difftest/dpi_t1/src/drive.rs @@ -1,5 +1,5 @@ -use common::spike_runner::SpikeRunner; -use common::MEM_SIZE; +use spike_rs::runner::SpikeRunner; +use spike_rs::runner::{SpikeArgs, MEM_SIZE}; use spike_rs::spike_event::MemAccessRecord; use spike_rs::spike_event::SpikeEvent; use spike_rs::util::load_elf_to_buffer; @@ -161,7 +161,17 @@ impl Driver { let (dump_start, dump_end) = parse_range(&args.dump_range); let mut self_ = Self { - spike_runner: SpikeRunner::new(&args.common_args, false), + spike_runner: SpikeRunner::new( + &SpikeArgs { + elf_file: args.elf_file.clone(), + log_file: args.log_file.clone(), + log_level: args.log_level.clone(), + vlen: args.vlen, + dlen: args.dlen, + set: args.set.clone(), + }, + false, + ), #[cfg(feature = "trace")] scope, @@ -174,7 +184,7 @@ impl Driver { #[cfg(feature = "trace")] dump_started: false, - dlen: args.common_args.dlen, + dlen: args.dlen, timeout: args.timeout, last_commit_cycle: 0, @@ -182,9 +192,9 @@ impl Driver { vector_lsu_count: 0, shadow_mem: ShadowMem::new(), }; - self_.spike_runner.load_elf(&args.common_args.elf_file).unwrap(); + self_.spike_runner.load_elf(&args.elf_file).unwrap(); - load_elf_to_buffer(&mut self_.shadow_mem.mem, &args.common_args.elf_file).unwrap(); + load_elf_to_buffer(&mut self_.shadow_mem.mem, &args.elf_file).unwrap(); self_ } diff --git a/difftest/dpi_t1/src/lib.rs b/difftest/dpi_t1/src/lib.rs new file mode 100644 index 000000000..234f6e150 --- /dev/null +++ b/difftest/dpi_t1/src/lib.rs @@ -0,0 +1,52 @@ +use std::path::PathBuf; + +use clap::Parser; + +pub mod dpi; +pub mod drive; + +#[derive(Parser)] +pub(crate) struct OfflineArgs { + /// Path to the ELF file + #[arg(long)] + pub elf_file: PathBuf, + + /// Path to the log file + #[arg(long)] + pub log_file: Option, + + /// Log level: trace, debug, info, warn, error + #[arg(long, default_value = "info")] + pub log_level: String, + + /// vlen config + #[arg(long, default_value = env!("DESIGN_VLEN"))] + pub vlen: u32, + + /// dlen config + #[arg(long, default_value = env!("DESIGN_DLEN"))] + pub dlen: u32, + + /// ISA config + #[arg(long, default_value = env!("SPIKE_ISA_STRING"))] + pub set: String, + + #[cfg(feature = "trace")] + #[arg(long)] + pub wave_path: String, + + #[cfg(feature = "trace")] + #[arg(long, default_value = "")] + pub dump_range: String, + + #[arg(long, default_value_t = 1000000)] + pub timeout: u64, +} + +// keep in sync with TestBench.ClockGen +pub const CYCLE_PERIOD: u64 = 20; + +/// get cycle +pub fn get_t() -> u64 { + svdpi::get_time() / CYCLE_PERIOD +} diff --git a/difftest/offline/src/difftest.rs b/difftest/offline/src/difftest.rs index 66a0173d9..592fc0341 100644 --- a/difftest/offline/src/difftest.rs +++ b/difftest/offline/src/difftest.rs @@ -1,9 +1,8 @@ -use common::spike_runner::SpikeRunner; +use spike_rs::runner::{SpikeArgs, SpikeRunner}; use std::path::Path; use tracing::info; use common::rtl_config::RTLConfig; -use common::CommonArgs; use crate::dut::Dut; use crate::json_events::*; @@ -17,12 +16,12 @@ pub struct Difftest { } impl Difftest { - pub fn new(args: CommonArgs) -> Self { + pub fn new(args: &SpikeArgs) -> Self { let config = RTLConfig { vlen: args.vlen, dlen: args.dlen }; Self { - runner: SpikeRunner::new(&args, true), + runner: SpikeRunner::new(args, true), dut: Dut::new(Path::new( - &args.log_file.expect("difftest must be run with a log file"), + args.log_file.as_ref().expect("difftest must be run with a log file"), )), config, } diff --git a/difftest/offline/src/json_events.rs b/difftest/offline/src/json_events.rs index 24652f04d..617702742 100644 --- a/difftest/offline/src/json_events.rs +++ b/difftest/offline/src/json_events.rs @@ -1,7 +1,6 @@ -use common::spike_runner::SpikeRunner; use num_bigint::BigUint; use serde::{Deserialize, Deserializer}; -use spike_rs::spike_event::LSU_IDX_DEFAULT; +use spike_rs::{runner::SpikeRunner, spike_event::LSU_IDX_DEFAULT}; use tracing::{debug, info}; #[derive(Deserialize, Debug, PartialEq, Clone)] diff --git a/difftest/offline/src/main.rs b/difftest/offline/src/main.rs index 0328e2cf3..302e3df5d 100644 --- a/difftest/offline/src/main.rs +++ b/difftest/offline/src/main.rs @@ -2,15 +2,43 @@ mod difftest; mod dut; mod json_events; +use std::path::PathBuf; + use clap::Parser; +use spike_rs::runner::{SpikeArgs, SpikeRunner}; use tracing::info; -use common::spike_runner::SpikeRunner; -use common::CommonArgs; - use crate::difftest::Difftest; -fn run_spike(args: &CommonArgs) -> anyhow::Result<()> { +#[derive(Parser, Debug)] +#[command(author, version, about, long_about = None)] +pub struct Args { + /// Path to the ELF file + #[arg(long)] + pub elf_file: PathBuf, + + /// Path to the log file + #[arg(long)] + pub log_file: Option, + + /// Log level: trace, debug, info, warn, error + #[arg(long, default_value = "info")] + pub log_level: String, + + /// vlen config + #[arg(long, default_value = env!("DESIGN_VLEN"))] + pub vlen: u32, + + /// dlen config + #[arg(long, default_value = env!("DESIGN_DLEN"))] + pub dlen: u32, + + /// ISA config + #[arg(long, default_value = env!("SPIKE_ISA_STRING"))] + pub set: String, +} + +fn run_spike(args: &SpikeArgs) -> anyhow::Result<()> { let mut count: u64 = 0; let spike = SpikeRunner::new(args, true); @@ -32,9 +60,18 @@ fn run_spike(args: &CommonArgs) -> anyhow::Result<()> { fn main() -> anyhow::Result<()> { // parse args - let args = CommonArgs::parse(); + let args = Args::parse(); - args.setup_logger()?; + setup_logger(); + + let args = SpikeArgs { + elf_file: args.elf_file, + log_file: args.log_file, + log_level: args.log_level, + vlen: args.vlen, + dlen: args.dlen, + set: args.set, + }; // if there is no log file, just run spike and quit if args.log_file.is_none() { @@ -43,7 +80,7 @@ fn main() -> anyhow::Result<()> { } // if there is a log file, run difftest - let mut diff = Difftest::new(args); + let mut diff = Difftest::new(&args); loop { match diff.diff() { @@ -55,3 +92,20 @@ fn main() -> anyhow::Result<()> { } } } + +fn setup_logger() { + // setup log + // let log_level: Level = self.log_level.parse()?; + // let global_logger = FmtSubscriber::builder() + // .with_env_filter(EnvFilter::from_default_env()) + // .with_max_level(log_level) + // .without_time() + // .with_target(false) + // .with_ansi(true) + // .compact() + // .finish(); + // tracing::subscriber::set_global_default(global_logger) + // .expect("internal error: fail to setup log subscriber"); + // Ok(()) + todo!() +} diff --git a/difftest/online_dpi/src/lib.rs b/difftest/online_dpi/src/lib.rs deleted file mode 100644 index ff10cc8e8..000000000 --- a/difftest/online_dpi/src/lib.rs +++ /dev/null @@ -1,31 +0,0 @@ -use clap::Parser; -use common::CommonArgs; - -pub mod dpi; -pub mod drive; - -#[derive(Parser)] -pub(crate) struct OfflineArgs { - #[command(flatten)] - pub common_args: CommonArgs, - - #[cfg(feature = "trace")] - #[arg(long)] - pub wave_path: String, - - #[cfg(feature = "trace")] - #[arg(long, default_value = "")] - pub dump_range: String, - - #[arg(long, default_value_t = 1000000)] - pub timeout: u64, -} - -// keep in sync with TestBench.ClockGen -pub const CYCLE_PERIOD: u64 = 20; - -/// get cycle -pub fn get_t() -> u64 { - svdpi::get_time() / CYCLE_PERIOD -} - diff --git a/difftest/online_vcs/default.nix b/difftest/online_vcs/default.nix deleted file mode 100644 index 12b4823a1..000000000 --- a/difftest/online_vcs/default.nix +++ /dev/null @@ -1,48 +0,0 @@ -{ lib -, elaborateConfig -, rustPlatform -, libspike -, libspike_interfaces -, enable-trace ? false -, vcStaticHome -}: - -rustPlatform.buildRustPackage { - name = "vcs-dpi-lib"; - src = with lib.fileset; toSource { - root = ../.; - fileset = unions [ - ../spike_rs - ../offline - ../online_dpi - ../online_drive - ../online_vcs - ../test_common - ../Cargo.lock - ../Cargo.toml - ]; - }; - - buildFeatures = lib.optionals enable-trace [ "trace" ]; - buildAndTestSubdir = "./online_vcs"; - - env = { - VCS_LIB_DIR = "${vcStaticHome}/vcs-mx/linux64/lib"; - SPIKE_LIB_DIR = "${libspike}/lib"; - SPIKE_INTERFACES_LIB_DIR = "${libspike_interfaces}/lib"; - DESIGN_VLEN = elaborateConfig.parameter.vLen; - DESIGN_DLEN = elaborateConfig.parameter.dLen; - SPIKE_ISA_STRING = - "rv32gc_" + - (builtins.concatStringsSep "_" elaborateConfig.parameter.extensions) - + "_Zvl${toString elaborateConfig.parameter.vLen}b"; - }; - - cargoLock = { - lockFile = ../Cargo.lock; - }; - - passthru = { - inherit enable-trace; - }; -} diff --git a/difftest/spike_rs/build.rs b/difftest/spike_rs/build.rs index 9399fdaf0..a67a4ba1f 100644 --- a/difftest/spike_rs/build.rs +++ b/difftest/spike_rs/build.rs @@ -1,14 +1,20 @@ use std::env; fn main() { - println!("cargo::rustc-link-search=native={}", env::var("SPIKE_LIB_DIR").expect("SPIKE_LIB_DIR should be set")); + println!( + "cargo::rustc-link-search=native={}", + env::var("SPIKE_LIB_DIR").expect("SPIKE_LIB_DIR should be set") + ); println!("cargo::rustc-link-lib=static=riscv"); println!("cargo::rustc-link-lib=static=softfloat"); println!("cargo::rustc-link-lib=static=disasm"); println!("cargo::rustc-link-lib=static=fesvr"); println!("cargo::rustc-link-lib=static=fdt"); - println!("cargo::rustc-link-search=native={}", env::var("SPIKE_INTERFACES_LIB_DIR").expect("SPIKE_INTERFACES_LIB_DIR should be set")); + println!( + "cargo::rustc-link-search=native={}", + env::var("SPIKE_INTERFACES_LIB_DIR").expect("SPIKE_INTERFACES_LIB_DIR should be set") + ); println!("cargo::rustc-link-lib=static=spike_interfaces"); println!("cargo::rerun-if-env-changed=SPIKE_LIB_DIR"); diff --git a/difftest/spike_rs/src/lib.rs b/difftest/spike_rs/src/lib.rs index 5dd021b0b..f352c5c0b 100644 --- a/difftest/spike_rs/src/lib.rs +++ b/difftest/spike_rs/src/lib.rs @@ -1,3 +1,4 @@ +pub mod runner; pub mod spike_event; pub mod util; diff --git a/difftest/test_common/src/spike_runner.rs b/difftest/spike_rs/src/runner.rs similarity index 82% rename from difftest/test_common/src/spike_runner.rs rename to difftest/spike_rs/src/runner.rs index ded02898c..bbab47f12 100644 --- a/difftest/test_common/src/spike_runner.rs +++ b/difftest/spike_rs/src/runner.rs @@ -1,12 +1,10 @@ use std::collections::VecDeque; -use std::path::Path; +use std::path::{Path, PathBuf}; use tracing::debug; -use spike_rs::spike_event::SpikeEvent; -use spike_rs::util::load_elf; -use spike_rs::Spike; - -use crate::CommonArgs; +use crate::spike_event::SpikeEvent; +use crate::util::load_elf; +use crate::Spike; pub struct SpikeRunner { spike: Box, @@ -34,8 +32,37 @@ pub struct SpikeRunner { pub do_log_vrf: bool, } +pub struct SpikeArgs { + /// Path to the ELF file + pub elf_file: PathBuf, + + /// Path to the log file + pub log_file: Option, + + /// Log level: trace, debug, info, warn, error + pub log_level: String, + + /// vlen config + pub vlen: u32, + + /// dlen config + pub dlen: u32, + + /// ISA config + pub set: String, +} + +impl SpikeArgs { + fn to_spike_c_handler(&self) -> Box { + let lvl = "M"; + Spike::new(&self.set, lvl, (self.dlen / 32) as usize, MEM_SIZE) + } +} + +pub const MEM_SIZE: usize = 1usize << 32; + impl SpikeRunner { - pub fn new(args: &CommonArgs, do_log_vrf: bool) -> Self { + pub fn new(args: &SpikeArgs, do_log_vrf: bool) -> Self { // load the elf file // initialize spike let mut spike = args.to_spike_c_handler(); diff --git a/difftest/test_common/src/lib.rs b/difftest/test_common/src/lib.rs index e9690d3a2..fdf79c0fd 100644 --- a/difftest/test_common/src/lib.rs +++ b/difftest/test_common/src/lib.rs @@ -6,7 +6,6 @@ use tracing::Level; use tracing_subscriber::{EnvFilter, FmtSubscriber}; pub mod rtl_config; -pub mod spike_runner; #[derive(Parser, Debug)] #[command(author, version, about, long_about = None)] diff --git a/difftest/vcs.nix b/difftest/vcs.nix index e69de29bb..fb550ee0d 100644 --- a/difftest/vcs.nix +++ b/difftest/vcs.nix @@ -0,0 +1,47 @@ +{ lib +, elaborateConfig +, rustPlatform +, libspike +, libspike_interfaces +, enable-trace ? false +, vcStaticHome +}: + +rustPlatform.buildRustPackage { + name = "vcs-dpi-lib"; + src = with lib.fileset; toSource { + root = ./.; + fileset = unions [ + ./spike_rs + ./offline + ./dpi_common + ./dpi_t1 + ./test_common + ./Cargo.lock + ./Cargo.toml + ]; + }; + + buildFeatures = ["dpi_common/vcs"] ++ lib.optionals enable-trace [ "trace" ]; + buildAndTestSubdir = "./dpi_t1"; + + env = { + VCS_LIB_DIR = "${vcStaticHome}/vcs-mx/linux64/lib"; + SPIKE_LIB_DIR = "${libspike}/lib"; + SPIKE_INTERFACES_LIB_DIR = "${libspike_interfaces}/lib"; + DESIGN_VLEN = elaborateConfig.parameter.vLen; + DESIGN_DLEN = elaborateConfig.parameter.dLen; + SPIKE_ISA_STRING = + "rv32gc_" + + (builtins.concatStringsSep "_" elaborateConfig.parameter.extensions) + + "_Zvl${toString elaborateConfig.parameter.vLen}b"; + }; + + cargoLock = { + lockFile = ./Cargo.lock; + }; + + passthru = { + inherit enable-trace; + }; +} diff --git a/nix/t1/default.nix b/nix/t1/default.nix index b6bdead5c..6ffd5ff4f 100644 --- a/nix/t1/default.nix +++ b/nix/t1/default.nix @@ -126,7 +126,7 @@ lib.makeScope newScope "--strip-debug-info" ]; }; - vcs-dpi-lib = ipSelf.callPackage ../../difftest/online_vcs { }; + vcs-dpi-lib = ipSelf.callPackage ../../difftest/vcs.nix { }; vcs-dpi-lib-trace = ipSelf.vcs-dpi-lib.override { enable-trace = true; }; # FIXME: vcs-emu should have offline check instead of using verilator one vcs-emu = ipSelf.callPackage ./vcs.nix { }; diff --git a/nix/t1/vcs.nix b/nix/t1/vcs.nix index 11c18f29d..30fdeba01 100644 --- a/nix/t1/vcs.nix +++ b/nix/t1/vcs.nix @@ -34,7 +34,7 @@ let -debug_access+pp+dmptf+thread \ -kdb=common_elab,hgldd_all''} \ -file filelist.f \ - ${vcs-dpi-lib}/lib/libdpi.a \ + ${vcs-dpi-lib}/lib/libdpi_t1.a \ -o t1-vcs-simulator runHook postBuild