diff --git a/Cargo.lock b/Cargo.lock index d80ef9b55e384abfea10856cc1d43db32c507aa7..3b322cd2e2bd46a5f0724b8dc91930a2c8bb3c2e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -28,6 +28,12 @@ dependencies = [ "hashbrown", ] +[[package]] +name = "itoa" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" + [[package]] name = "petgraph" version = "0.5.1" @@ -38,9 +44,93 @@ dependencies = [ "indexmap", ] +[[package]] +name = "proc-macro2" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0d8caf72986c1a598726adc988bb5984792ef84f5ee5aa50209145ee8077038" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "quote" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" +dependencies = [ + "proc-macro2", +] + [[package]] name = "rsim" version = "0.1.0" dependencies = [ "petgraph", + "serde", + "serde_arrays", + "serde_json", ] + +[[package]] +name = "ryu" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" + +[[package]] +name = "serde" +version = "1.0.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec7505abeacaec74ae4778d9d9328fe5a5d04253220a85c4ee022239fc996d03" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_arrays" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38636132857f68ec3d5f3eb121166d2af33cb55174c4d5ff645db6165cbef0fd" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "963a7dbc9895aeac7ac90e74f34a5d5261828f79df35cbed41e10189d3804d43" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "syn" +version = "1.0.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f71489ff30030d2ae598524f61326b902466f72a0fb1a8564c001cc63425bcc7" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "unicode-xid" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" diff --git a/Cargo.toml b/Cargo.toml index c5e4fb6219b28d7bdc685b6cba2249832c99955e..268cfadf811c7d5f7f742686ddf2991078d14057 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,3 +8,8 @@ edition = "2018" [dependencies] petgraph = "0.5.1" +serde_arrays = "0.1.0" +serde_json = "1.0.64" +[dependencies.serde] +version = "1.0.126" +features = ["derive"] diff --git a/src/bitarr.rs b/src/bitarr.rs index 4a1b96243c38818ab3d9a6bdc2e39ecfc1bd803f..963c5283304d1354f8b7551038cb47169c40c13d 100644 --- a/src/bitarr.rs +++ b/src/bitarr.rs @@ -1,3 +1,4 @@ +use serde::{Deserialize, Serialize}; use std::cell::Cell; use std::convert::TryFrom; use std::convert::{From, Into}; @@ -111,8 +112,8 @@ impl<const N: usize> BitOr for &BitArr<N> { } } -#[test] mod test { + use crate::bitarr::*; #[test] fn extensions() { let a: BitArr<2> = 0b10u8.into(); diff --git a/src/main.rs b/src/main.rs index 7f4e78c28e3fe1618fe7c20c900cec78565205ec..839f8585b1067ffde782d5729b1e7aba462984e7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -68,6 +68,26 @@ use rsim::*; //use std::cell::Cell; // two input mux +use serde::{Deserialize, Serialize}; +use serde_json; +#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)] +struct MyArr<const N: usize> { + #[serde(with = "serde_arrays")] + arr: [bool; N], +} + +#[test] +fn test_serde() { + println!("test serde"); + let arr = MyArr { arr: [false; 8] }; + let json = serde_json::to_string(&arr).unwrap(); + println!("json {:?}", json); + let arr2 = serde_json::from_str(&json).unwrap(); + assert_eq!(arr, arr2); + println!("arr2 {:?}", arr2); +} + +#[derive(Debug, Clone, PartialEq)] struct Mux<'a, const N: usize> { ins: (Signal<'a, N>, Signal<'a, N>), sel: Signal<'a, 1>, @@ -91,15 +111,10 @@ struct ZeroExt<'a, const N: usize, const M: usize> { impl<'a, const N: usize, const M: usize> Eval for ZeroExt<'a, N, M> { fn eval(&self) -> () { - let mut res = BitArr([false; M]); - res[0..N].clone_from_slice(&*self.ins.r()); - - self.out.w(res); + self.out.w(self.ins.r().zero_ext()); } } - - #[test] fn test_zero_ext() { let mut ins: BitArr<2> = 0b10u8.into(); diff --git a/src/signal.rs b/src/signal.rs index cbac7f5c00f8d22b76f479cafd4e4b20785751b4..430cacdf1b33a4c93acbc82392e9e0cdc31d56da 100644 --- a/src/signal.rs +++ b/src/signal.rs @@ -1,3 +1,4 @@ +use serde::{Deserialize, Serialize}; use std::cell::Cell; use std::convert::TryFrom; use std::convert::{From, Into};