1use serde::{Deserialize, Serialize};
2use std::path::PathBuf;
3
4#[derive(Clone, Debug, Default, Serialize, Deserialize)]
5#[serde(deny_unknown_fields)]
6pub struct Test {
7 #[serde(default)]
8 pub simulator: SimType,
9 #[serde(default)]
10 pub dsim: DsimProperty,
11 #[serde(default)]
12 pub vcs: VcsProperty,
13 #[serde(default)]
14 pub verilator: VerilatorProperty,
15 #[serde(default)]
16 pub vivado: VivadoProperty,
17 #[serde(default)]
18 pub waveform_target: WaveFormTarget,
19 #[serde(default)]
20 pub waveform_format: WaveFormFormat,
21 #[serde(default)]
22 pub include_files: Vec<PathBuf>,
23}
24
25#[derive(Clone, Copy, Debug, Default, Serialize, Deserialize, PartialEq, Eq)]
26pub enum SimType {
27 #[default]
28 #[serde(rename = "verilator")]
29 Verilator,
30 #[serde(rename = "vcs")]
31 Vcs,
32 #[serde(rename = "dsim")]
33 Dsim,
34 #[serde(rename = "vivado")]
35 Vivado,
36}
37
38#[derive(Clone, Debug, Default, Serialize, Deserialize)]
39#[serde(deny_unknown_fields)]
40pub struct DsimProperty {
41 #[serde(default)]
42 pub compile_args: Vec<String>,
43 #[serde(default)]
44 pub simulate_args: Vec<String>,
45}
46
47#[derive(Clone, Debug, Default, Serialize, Deserialize)]
48#[serde(deny_unknown_fields)]
49pub struct VcsProperty {
50 #[serde(default)]
51 pub compile_args: Vec<String>,
52 #[serde(default)]
53 pub simulate_args: Vec<String>,
54}
55
56#[derive(Clone, Debug, Default, Serialize, Deserialize)]
57#[serde(deny_unknown_fields)]
58pub struct VerilatorProperty {
59 #[serde(default)]
60 pub compile_args: Vec<String>,
61 #[serde(default)]
62 pub simulate_args: Vec<String>,
63}
64
65#[derive(Clone, Debug, Default, Serialize, Deserialize)]
66#[serde(deny_unknown_fields)]
67pub struct VivadoProperty {
68 #[serde(default)]
69 pub compile_args: Vec<String>,
70 #[serde(default)]
71 pub elaborate_args: Vec<String>,
72 #[serde(default)]
73 pub simulate_args: Vec<String>,
74}
75
76#[derive(Clone, Debug, Default, Serialize, Deserialize, PartialEq, Eq)]
77#[serde(tag = "type")]
78pub enum WaveFormTarget {
79 #[default]
80 #[serde(rename = "target")]
81 Target,
82 #[serde(rename = "directory")]
83 Directory { path: PathBuf },
84}
85
86#[derive(Clone, Copy, Debug, Default, Serialize, Deserialize, PartialEq, Eq)]
87pub enum WaveFormFormat {
88 #[default]
89 #[serde(rename = "vcd")]
90 Vcd,
91 #[serde(rename = "fst")]
92 Fst,
93}
94
95impl WaveFormFormat {
96 pub fn extension(self) -> &'static str {
97 match self {
98 WaveFormFormat::Vcd => "vcd",
99 WaveFormFormat::Fst => "fst",
100 }
101 }
102}