Skip to main content

veryl_metadata/
test.rs

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}