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    #[serde(default)]
24    pub defines: Vec<String>,
25    /// Base seed for per-instance component seeds. Unset draws a fresh random
26    /// seed each `veryl test` run; set a value (or pass --seed) to reproduce one.
27    #[serde(default)]
28    pub seed: Option<u64>,
29    #[serde(default)]
30    pub four_state: bool,
31    /// Pins the verification-component transport. Unset: build from source
32    /// when cargo is available, fall back to a committed prebuilt wasm
33    /// otherwise.
34    #[serde(default)]
35    pub component_backend: Option<ComponentBackendKind>,
36}
37
38#[derive(Clone, Copy, Debug, Serialize, Deserialize, PartialEq, Eq)]
39pub enum ComponentBackendKind {
40    #[serde(rename = "native")]
41    Native,
42    #[serde(rename = "wasm")]
43    Wasm,
44}
45
46#[derive(Clone, Copy, Debug, Default, Serialize, Deserialize, PartialEq, Eq)]
47pub enum SimType {
48    #[default]
49    #[serde(rename = "verilator")]
50    Verilator,
51    #[serde(rename = "vcs")]
52    Vcs,
53    #[serde(rename = "dsim")]
54    Dsim,
55    #[serde(rename = "vivado")]
56    Vivado,
57}
58
59#[derive(Clone, Debug, Default, Serialize, Deserialize)]
60#[serde(deny_unknown_fields)]
61pub struct DsimProperty {
62    #[serde(default)]
63    pub compile_args: Vec<String>,
64    #[serde(default)]
65    pub simulate_args: Vec<String>,
66}
67
68#[derive(Clone, Debug, Default, Serialize, Deserialize)]
69#[serde(deny_unknown_fields)]
70pub struct VcsProperty {
71    #[serde(default)]
72    pub compile_args: Vec<String>,
73    #[serde(default)]
74    pub simulate_args: Vec<String>,
75}
76
77#[derive(Clone, Debug, Default, Serialize, Deserialize)]
78#[serde(deny_unknown_fields)]
79pub struct VerilatorProperty {
80    #[serde(default)]
81    pub compile_args: Vec<String>,
82    #[serde(default)]
83    pub simulate_args: Vec<String>,
84}
85
86#[derive(Clone, Debug, Default, Serialize, Deserialize)]
87#[serde(deny_unknown_fields)]
88pub struct VivadoProperty {
89    #[serde(default)]
90    pub compile_args: Vec<String>,
91    #[serde(default)]
92    pub elaborate_args: Vec<String>,
93    #[serde(default)]
94    pub simulate_args: Vec<String>,
95}
96
97#[derive(Clone, Debug, Default, Serialize, Deserialize, PartialEq, Eq)]
98#[serde(tag = "type")]
99pub enum WaveFormTarget {
100    #[default]
101    #[serde(rename = "target")]
102    Target,
103    #[serde(rename = "directory")]
104    Directory { path: PathBuf },
105}
106
107#[derive(Clone, Copy, Debug, Default, Serialize, Deserialize, PartialEq, Eq)]
108pub enum WaveFormFormat {
109    #[default]
110    #[serde(rename = "vcd")]
111    Vcd,
112    #[serde(rename = "fst")]
113    Fst,
114}
115
116impl WaveFormFormat {
117    pub fn extension(self) -> &'static str {
118        match self {
119            WaveFormFormat::Vcd => "vcd",
120            WaveFormFormat::Fst => "fst",
121        }
122    }
123}