Summary
- csi2 (0/2)
- ecp5stubs (1/1)
- ethernet (0/1)
- fixed (1/1)
- mcp3002 (1/1)
- playground_blinky (1/1)
- playground_floppy_fish (0/1)
- playground_tinytapeout (1/1)
- playground_vga (1/1)
- protocols (1/2)
- quickscope (0/1)
- ready_valid (1/1)
- spade-v (0/2)
- spade-v-hwtest-uart (0/3)
- templates-alchitry-cu (2/2)
- templates-ecpix5 (2/2)
- templates-go-board (2/2)
- templates-icestick (2/2)
- templates-icesugar-nano (2/2)
- templates-pico-ice40up5k (2/2)
- templates-tangnano20k (2/2)
- templates-tangnano4k (2/2)
- templates-tangnano9k (2/2)
- templates-tinyfpga-bx (2/2)
- templates-ulx3s_85k (2/2)
- vga_spade (1/1)
- ws2812 (3/3)
- ws2812-lithekod (3/3)
csi2 (0/2)
build (fail)
[INFO] Failed to fetch pre-built Spade compiler, building locally.
========
Reason: Did not find a pre-built Spade compiler for git hash "be892f685e0ec1ed4f120b8d3f9b82d51f7a62a9"
========
[INFO] Building Spade Compiler
Blocking waiting for file lock on build directory
Finished `release` profile [optimized] target(s) in 3m 50s
[INFO] Failed to fetch pre-built surfer plugin, building locally.
========
Reason: Did not find a pre-built surfer plugin for git hash "be892f685e0ec1ed4f120b8d3f9b82d51f7a62a9"
========
[INFO] Building spade-surfer-plugin
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on build directory
Compiling serde_core v1.0.228
Compiling num-traits v0.2.19
error[E0463]: can't find crate for `std`
|
= note: the `wasm32-unknown-unknown` target may not be installed
= help: consider downloading the target with `rustup target add wasm32-unknown-unknown`
For more information about this error, try `rustc --explain E0463`.
error: could not compile `serde_core` (lib) due to 1 previous error
warning: build failed, waiting for other jobs to finish...
error[E0463]: can't find crate for `core`
|
= note: the `wasm32-unknown-unknown` target may not be installed
= help: consider downloading the target with `rustup target add wasm32-unknown-unknown`
error: could not compile `num-traits` (lib) due to 1 previous error
[WARN] Failed to build surfer plugin. Continuing anyway but Surfer integration will not work
[INFO] Cloning "protocols"
[INFO] Cloning "ready_valid"
[INFO] Cloning "nstd"
[INFO] Building spade code
[ERROR] Failed to build spade code
Cloning into '/builds/spade-lang/trawler/work/csi2/build/libs/protocols'...
warning: redirecting to https://gitlab.com/spade-lang/lib/protocols.git/
HEAD is now at 3170518 Fix tests
Cloning into '/builds/spade-lang/trawler/work/csi2/build/libs/ready_valid'...
HEAD is now at d029c73 Bump Spade again
Cloning into '/builds/spade-lang/trawler/work/csi2/build/libs/nstd'...
HEAD is now at 92b6b79 Add pub markers
warning: The & modifier on types no longer has any effect
┌─ src/camera_config.spade:22:15
│
22 │ sclk: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/camera_config.spade:23:24
│
23 │ sda_drive_low: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/camera_config.spade:26:24
│
26 │ command_ready: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/header_decoding.spade:136:28
│
136 │ ecc_corrected: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/header_decoding.spade:137:24
│
137 │ ecc_error: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/main.spade:35:14
│
35 │ dbg: inv &Csi2Debug
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/option_ext.spade:18:25
│
18 │ write_full: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ build/libs/ready_valid/src/main.spade:7:12
│
7 │ pub struct port Rv<T> {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
7 │ pub struct port Rv<T> {
│ ----
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:8:11
│
8 │ data: &Option<T>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:9:16
│
9 │ ready: inv &bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ build/libs/ready_valid/src/main.spade:148:8
│
148 │ struct port FifoOut<T> {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
148 │ struct port FifoOut<T> {
│ ----
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:149:11
│
149 │ full: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:150:12
│
150 │ empty: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
error: Unexpected `:`, expected `Identifier`
┌─ build/libs/ready_valid/src/main.spade:155:33
│
155 │ pub fn read_empty(self, wire: inv &bool) -> FifoOut<T> {
│ ^ expected `Identifier`
error: Unexpected `:`, expected `Identifier`
┌─ build/libs/ready_valid/src/main.spade:161:32
│
161 │ pub fn read_full(self, wire: inv &bool) -> FifoOut<T> {
│ ^ expected `Identifier`
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:14:16
│
14 │ ready: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:16:15
│
16 │ sclk: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:17:15
│
17 │ mosi: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:18:11
│
18 │ miso: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/uart.spade:117:17
│
117 │ tx: inv &bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:87:16
│
87 │ ready: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:89:15
│
89 │ sclk: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:91:24
│
91 │ sda_drive_low: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:221:15
│
221 │ sclk: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:223:24
│
223 │ sda_drive_low: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:227:16
│
227 │ ready: inv &bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/nstd/src/mem.spade:9:15
│
9 │ where W: {uint_bits_to_fit(C)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
9 │ where W: {uint::bits_for(C)}
│ ~~~~~~~~~~~~~~
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/option_ext.spade:9:11
│
9 │ where O: {uint_bits_to_fit(V) - 1},
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
9 │ where O: {uint::bits_for(V) - 1},
│ ~~~~~~~~~~~~~~
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/option_ext.spade:10:11
│
10 │ O: {uint_bits_to_fit(V - 1)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
10 │ O: {uint::bits_for(V - 1)}
│ ~~~~~~~~~~~~~~
warning: The dereference operator no longer has any effect.
┌─ src/camera_config.spade:138:20
│
138 │ if *i2c_ready {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/camera_config.spade:158:47
│
158 │ set command_ready = &(next_config == N && *i2c_ready);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/camera_config.spade:158:25
│
158 │ set command_ready = &(next_config == N && *i2c_ready);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/header_decoding.spade:180:29
│
180 │ set ecc_corrected = &ecc_corr;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/header_decoding.spade:181:25
│
181 │ set ecc_error = &ecc_err;
│ ^ Useless operator
warning: Deprecated tuple syntax indexing
┌─ src/main.spade:61:27
│
61 │ align0: match aligned#0 { Some(_) => true, None => false, },
│ ^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/main.spade:62:27
│
62 │ align1: match aligned#1 { Some(_) => true, None => false, },
│ ^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: The reference operator no longer has any effect.
┌─ src/main.spade:60:19
│
60 │ set dbg = &Csi2Debug$(
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/nstd/src/mem.spade:25:77
│
25 │ (WritePort$(addr: w_addr, write: w_write), ReadPort$(addr: r_addr, out: &read_result))
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/nstd/src/array.spade:70:19
│
70 │ where NSize: {uint_bits_to_fit(N-1)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
70 │ where NSize: {uint::bits_for(N-1)}
│ ~~~~~~~~~~~~~~
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/nstd/src/array.spade:70:19
│
70 │ where NSize: {uint_bits_to_fit(N-1)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
70 │ where NSize: {uint::bits_for(N-1)}
│ ~~~~~~~~~~~~~~
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/option_ext.spade:25:42
│
25 │ let (write, read) = inst fifo::<{uint_bits_to_fit(Depth - 1)}, T, Depth>$(
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
25 │ let (write, read) = inst fifo::<{uint::bits_for(Depth - 1)}, T, Depth>$(
│ ~~~~~~~~~~~~~~
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/option_ext.spade:32:27
│
32 │ set write.write = &self;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:22:57
│
22 │ reg(clk) value reset(rst: None) = match (value, *self.data) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:32:26
│
32 │ set self.ready = &value.is_none();
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:35:19
│
35 │ data: &value,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:42:51
│
42 │ reg(clk) buffer reset(rst: None) = match (*ds, buffer, *self.data) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:42:64
│
42 │ reg(clk) buffer reset(rst: None) = match (*ds, buffer, *self.data) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:54:34
│
54 │ set self.ready = &match (*ds, buffer) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:54:26
│
54 │ set self.ready = &match (*ds, buffer) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:61:12
│
61 │ Rv(&buffer, ds_inv)
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:65:26
│
65 │ set self.ready = &false;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:69:26
│
69 │ set self.ready = &true;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:75:21
│
75 │ data: &(*self.data).map(f),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:75:19
│
75 │ data: &(*self.data).map(f),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:83:21
│
83 │ data: &(*self.data).and_then(f),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:83:19
│
83 │ data: &(*self.data).and_then(f),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:89:27
│
89 │ let self_takes = (*self.data).is_some();
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:94:44
│
94 │ set other.ready = &(!self_takes && *ds_ready);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:94:27
│
94 │ set other.ready = &(!self_takes && *ds_ready);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:114:48
│
114 │ set ready = if gate {ds_ready.0} else {&false};
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:116:34
│
116 │ if gate {data} else {&None},
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:132:29
│
132 │ match (timeout, *data, *ds_ready.0) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:132:36
│
132 │ match (timeout, *data, *ds_ready.0) {
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/main.spade:131:33
│
131 │ reg(clk) timeout: uint<{uint_bits_to_fit(N)}> reset(rst: 0) =
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
131 │ reg(clk) timeout: uint<{uint::bits_for(N)}> reset(rst: 0) =
│ ~~~~~~~~~~~~~~
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:139:23
│
139 │ set ready = &(*ds_ready.0 && timeout == 0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:139:21
│
139 │ set ready = &(*ds_ready.0 && timeout == 0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:140:41
│
140 │ Rv(if timeout == 0 {data} else {&None}, ds_ready.1)
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:178:28
│
178 │ set self.ready = &!*write_full.0;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:178:26
│
178 │ set self.ready = &!*write_full.0;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:179:32
│
179 │ let Rv(data, ready) = (*self.data)
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:187:22
│
187 │ empty: &(*data).is_none(),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:187:20
│
187 │ empty: &(*data).is_none(),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:208:51
│
208 │ match (state, inst read_mut_wire(ds), *self.data) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:218:26
│
218 │ set self.ready = &match state {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:223:34
│
223 │ let data = match (state, *self.data) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:231:19
│
231 │ data: &data,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:242:17
│
242 │ match (*data, num_left, *ds_ready.0) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:242:34
│
242 │ match (*data, num_left, *ds_ready.0) {
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/main.spade:241:50
│
241 │ reg(clk) (array, num_left): ([T; N], uint<{uint_bits_to_fit(N)}>) reset(rst: (std::undef::undef(), 0)) =
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
241 │ reg(clk) (array, num_left): ([T; N], uint<{uint::bits_for(N)}>) reset(rst: (std::undef::undef(), 0)) =
│ ~~~~~~~~~~~~~~
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:250:55
│
250 │ set ready = &(num_left == 0 || num_left == 1 && *ds_ready.0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:250:19
│
250 │ set ready = &(num_left == 0 || num_left == 1 && *ds_ready.0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:253:10
│
253 │ &match num_left {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:273:24
│
273 │ let rv = Rv$(data: &value, ready: inst new_mut_wire());
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:276:21
│
276 │ set out.ready = &ready;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:277:5
│
277 │ *out.data
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:286:24
│
286 │ let rv = Rv$(data: &value, ready: inst new_mut_wire());
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:289:21
│
289 │ set out.ready = &ready;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:290:5
│
290 │ *out.data
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:32:48
│
32 │ let (out, next_state) = match (state, (*self.data), *ds_ready) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:32:61
│
32 │ let (out, next_state) = match (state, (*self.data), *ds_ready) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:54:41
│
54 │ set self.ready = &match (state, *ds_ready) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:54:26
│
54 │ set self.ready = &match (state, *ds_ready) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:60:13
│
60 │ &out,
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:44:17
│
44 │ set ready = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:49:16
│
49 │ set sclk = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:56:16
│
56 │ set mosi = &match state {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:67:18
│
67 │ [*miso].concat(captured[0..7])
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/test.spade:10:44
│
10 │ let tx_out = inst uart_tx(clk, rst, Rv(&to_transmit, port.1), config);
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/protocols/src/uart.spade:34:23
│
34 │ match *transmit.data {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/uart.spade:97:26
│
97 │ set transmit.ready = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/uart.spade:119:18
│
119 │ set tx = &inst uart_tx(clk, rst, self, config);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:143:17
│
143 │ set ready = &match (state, inst read_mut_wire(emitter_ready)) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:168:25
│
168 │ set sda_drive_low = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:179:16
│
179 │ set sclk = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:271:16
│
271 │ set sclk = &sclk_driver_out.sclk;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:273:25
│
273 │ set sda_drive_low = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:283:17
│
283 │ set ready = &match state {
│ ^ Useless operator
error: Trait bound not satisfied. inv csi2::Csi2Debug does not implement core::Data
┌─ src/main.spade:35:5
│
35 │ dbg: inv &Csi2Debug
│ ^^^
│ │
│ inv csi2::Csi2Debug does not implement core::Data
│ The type of this argument is not Data which means it cannot be stored in a register.
36 │ ) -> FrontendOut {
│ ╭────────────────────'
│ │ ╭──────────────────'
37 │ │ │ reg * 2; // Domain crossing into the sysclk domain
38 │ │ │ let aligned = inst lane_aligner$(
39 │ │ │ sys_clk,
· │ │
67 │ │ │ FrontendOut(short_packets, raw_pixels)
68 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An value not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the argument a wire
│
35 │ wire dbg: inv &Csi2Debug
│ +++++
Error: aborting due to previous error
Location:
spade-compiler/src/main.rs:174:23
Error:
0: Failed to build spade code
Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.
Run with RUST_BACKTRACE=full to include source snippets.
test (fail)
[INFO] Failed to fetch pre-built surfer plugin, building locally.
========
Reason: Did not find a pre-built surfer plugin for git hash "be892f685e0ec1ed4f120b8d3f9b82d51f7a62a9"
========
[INFO] Building spade-surfer-plugin
Blocking waiting for file lock on package cache
Compiling serde_core v1.0.228
Compiling num-traits v0.2.19
error[E0463]: can't find crate for `std`
|
= note: the `wasm32-unknown-unknown` target may not be installed
= help: consider downloading the target with `rustup target add wasm32-unknown-unknown`
For more information about this error, try `rustc --explain E0463`.
error: could not compile `serde_core` (lib) due to 1 previous error
warning: build failed, waiting for other jobs to finish...
error[E0463]: can't find crate for `core`
|
= note: the `wasm32-unknown-unknown` target may not be installed
= help: consider downloading the target with `rustup target add wasm32-unknown-unknown`
error: could not compile `num-traits` (lib) due to 1 previous error
[WARN] Failed to build surfer plugin. Continuing anyway but Surfer integration will not work
[INFO] Building spade code
[ERROR] Failed to build spade code
HEAD is now at 3170518 Fix tests
HEAD is now at d029c73 Bump Spade again
HEAD is now at 92b6b79 Add pub markers
warning: The & modifier on types no longer has any effect
┌─ src/camera_config.spade:22:15
│
22 │ sclk: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/camera_config.spade:23:24
│
23 │ sda_drive_low: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/camera_config.spade:26:24
│
26 │ command_ready: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/header_decoding.spade:136:28
│
136 │ ecc_corrected: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/header_decoding.spade:137:24
│
137 │ ecc_error: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/main.spade:35:14
│
35 │ dbg: inv &Csi2Debug
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:14:16
│
14 │ ready: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:16:15
│
16 │ sclk: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:17:15
│
17 │ mosi: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:18:11
│
18 │ miso: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/uart.spade:117:17
│
117 │ tx: inv &bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:87:16
│
87 │ ready: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:89:15
│
89 │ sclk: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:91:24
│
91 │ sda_drive_low: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:221:15
│
221 │ sclk: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:223:24
│
223 │ sda_drive_low: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:227:16
│
227 │ ready: inv &bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/option_ext.spade:18:25
│
18 │ write_full: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ build/libs/ready_valid/src/main.spade:7:12
│
7 │ pub struct port Rv<T> {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
7 │ pub struct port Rv<T> {
│ ----
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:8:11
│
8 │ data: &Option<T>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:9:16
│
9 │ ready: inv &bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ build/libs/ready_valid/src/main.spade:148:8
│
148 │ struct port FifoOut<T> {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
148 │ struct port FifoOut<T> {
│ ----
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:149:11
│
149 │ full: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:150:12
│
150 │ empty: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
error: Unexpected `:`, expected `Identifier`
┌─ build/libs/ready_valid/src/main.spade:155:33
│
155 │ pub fn read_empty(self, wire: inv &bool) -> FifoOut<T> {
│ ^ expected `Identifier`
error: Unexpected `:`, expected `Identifier`
┌─ build/libs/ready_valid/src/main.spade:161:32
│
161 │ pub fn read_full(self, wire: inv &bool) -> FifoOut<T> {
│ ^ expected `Identifier`
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/option_ext.spade:9:11
│
9 │ where O: {uint_bits_to_fit(V) - 1},
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
9 │ where O: {uint::bits_for(V) - 1},
│ ~~~~~~~~~~~~~~
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/option_ext.spade:10:11
│
10 │ O: {uint_bits_to_fit(V - 1)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
10 │ O: {uint::bits_for(V - 1)}
│ ~~~~~~~~~~~~~~
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/nstd/src/mem.spade:9:15
│
9 │ where W: {uint_bits_to_fit(C)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
9 │ where W: {uint::bits_for(C)}
│ ~~~~~~~~~~~~~~
warning: The dereference operator no longer has any effect.
┌─ src/camera_config.spade:138:20
│
138 │ if *i2c_ready {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/camera_config.spade:158:47
│
158 │ set command_ready = &(next_config == N && *i2c_ready);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/camera_config.spade:158:25
│
158 │ set command_ready = &(next_config == N && *i2c_ready);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/header_decoding.spade:180:29
│
180 │ set ecc_corrected = &ecc_corr;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/header_decoding.spade:181:25
│
181 │ set ecc_error = &ecc_err;
│ ^ Useless operator
warning: Deprecated tuple syntax indexing
┌─ src/main.spade:61:27
│
61 │ align0: match aligned#0 { Some(_) => true, None => false, },
│ ^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/main.spade:62:27
│
62 │ align1: match aligned#1 { Some(_) => true, None => false, },
│ ^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: The reference operator no longer has any effect.
┌─ src/main.spade:60:19
│
60 │ set dbg = &Csi2Debug$(
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:44:17
│
44 │ set ready = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:49:16
│
49 │ set sclk = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:56:16
│
56 │ set mosi = &match state {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:67:18
│
67 │ [*miso].concat(captured[0..7])
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/test.spade:10:44
│
10 │ let tx_out = inst uart_tx(clk, rst, Rv(&to_transmit, port.1), config);
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/protocols/src/uart.spade:34:23
│
34 │ match *transmit.data {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/uart.spade:97:26
│
97 │ set transmit.ready = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/uart.spade:119:18
│
119 │ set tx = &inst uart_tx(clk, rst, self, config);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:143:17
│
143 │ set ready = &match (state, inst read_mut_wire(emitter_ready)) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:168:25
│
168 │ set sda_drive_low = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:179:16
│
179 │ set sclk = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:271:16
│
271 │ set sclk = &sclk_driver_out.sclk;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:273:25
│
273 │ set sda_drive_low = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:283:17
│
283 │ set ready = &match state {
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/option_ext.spade:25:42
│
25 │ let (write, read) = inst fifo::<{uint_bits_to_fit(Depth - 1)}, T, Depth>$(
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
25 │ let (write, read) = inst fifo::<{uint::bits_for(Depth - 1)}, T, Depth>$(
│ ~~~~~~~~~~~~~~
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/option_ext.spade:32:27
│
32 │ set write.write = &self;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:22:57
│
22 │ reg(clk) value reset(rst: None) = match (value, *self.data) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:32:26
│
32 │ set self.ready = &value.is_none();
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:35:19
│
35 │ data: &value,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:42:51
│
42 │ reg(clk) buffer reset(rst: None) = match (*ds, buffer, *self.data) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:42:64
│
42 │ reg(clk) buffer reset(rst: None) = match (*ds, buffer, *self.data) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:54:34
│
54 │ set self.ready = &match (*ds, buffer) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:54:26
│
54 │ set self.ready = &match (*ds, buffer) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:61:12
│
61 │ Rv(&buffer, ds_inv)
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:65:26
│
65 │ set self.ready = &false;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:69:26
│
69 │ set self.ready = &true;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:75:21
│
75 │ data: &(*self.data).map(f),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:75:19
│
75 │ data: &(*self.data).map(f),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:83:21
│
83 │ data: &(*self.data).and_then(f),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:83:19
│
83 │ data: &(*self.data).and_then(f),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:89:27
│
89 │ let self_takes = (*self.data).is_some();
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:94:44
│
94 │ set other.ready = &(!self_takes && *ds_ready);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:94:27
│
94 │ set other.ready = &(!self_takes && *ds_ready);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:114:48
│
114 │ set ready = if gate {ds_ready.0} else {&false};
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:116:34
│
116 │ if gate {data} else {&None},
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:132:29
│
132 │ match (timeout, *data, *ds_ready.0) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:132:36
│
132 │ match (timeout, *data, *ds_ready.0) {
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/main.spade:131:33
│
131 │ reg(clk) timeout: uint<{uint_bits_to_fit(N)}> reset(rst: 0) =
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
131 │ reg(clk) timeout: uint<{uint::bits_for(N)}> reset(rst: 0) =
│ ~~~~~~~~~~~~~~
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:139:23
│
139 │ set ready = &(*ds_ready.0 && timeout == 0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:139:21
│
139 │ set ready = &(*ds_ready.0 && timeout == 0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:140:41
│
140 │ Rv(if timeout == 0 {data} else {&None}, ds_ready.1)
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:178:28
│
178 │ set self.ready = &!*write_full.0;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:178:26
│
178 │ set self.ready = &!*write_full.0;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:179:32
│
179 │ let Rv(data, ready) = (*self.data)
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:187:22
│
187 │ empty: &(*data).is_none(),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:187:20
│
187 │ empty: &(*data).is_none(),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:208:51
│
208 │ match (state, inst read_mut_wire(ds), *self.data) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:218:26
│
218 │ set self.ready = &match state {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:223:34
│
223 │ let data = match (state, *self.data) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:231:19
│
231 │ data: &data,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:242:17
│
242 │ match (*data, num_left, *ds_ready.0) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:242:34
│
242 │ match (*data, num_left, *ds_ready.0) {
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/main.spade:241:50
│
241 │ reg(clk) (array, num_left): ([T; N], uint<{uint_bits_to_fit(N)}>) reset(rst: (std::undef::undef(), 0)) =
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
241 │ reg(clk) (array, num_left): ([T; N], uint<{uint::bits_for(N)}>) reset(rst: (std::undef::undef(), 0)) =
│ ~~~~~~~~~~~~~~
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:250:55
│
250 │ set ready = &(num_left == 0 || num_left == 1 && *ds_ready.0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:250:19
│
250 │ set ready = &(num_left == 0 || num_left == 1 && *ds_ready.0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:253:10
│
253 │ &match num_left {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:273:24
│
273 │ let rv = Rv$(data: &value, ready: inst new_mut_wire());
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:276:21
│
276 │ set out.ready = &ready;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:277:5
│
277 │ *out.data
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:286:24
│
286 │ let rv = Rv$(data: &value, ready: inst new_mut_wire());
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:289:21
│
289 │ set out.ready = &ready;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:290:5
│
290 │ *out.data
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:32:48
│
32 │ let (out, next_state) = match (state, (*self.data), *ds_ready) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:32:61
│
32 │ let (out, next_state) = match (state, (*self.data), *ds_ready) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:54:41
│
54 │ set self.ready = &match (state, *ds_ready) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:54:26
│
54 │ set self.ready = &match (state, *ds_ready) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:60:13
│
60 │ &out,
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/nstd/src/mem.spade:25:77
│
25 │ (WritePort$(addr: w_addr, write: w_write), ReadPort$(addr: r_addr, out: &read_result))
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/nstd/src/array.spade:70:19
│
70 │ where NSize: {uint_bits_to_fit(N-1)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
70 │ where NSize: {uint::bits_for(N-1)}
│ ~~~~~~~~~~~~~~
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/nstd/src/array.spade:70:19
│
70 │ where NSize: {uint_bits_to_fit(N-1)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
70 │ where NSize: {uint::bits_for(N-1)}
│ ~~~~~~~~~~~~~~
error: Trait bound not satisfied. inv csi2::Csi2Debug does not implement core::Data
┌─ src/main.spade:35:5
│
35 │ dbg: inv &Csi2Debug
│ ^^^
│ │
│ inv csi2::Csi2Debug does not implement core::Data
│ The type of this argument is not Data which means it cannot be stored in a register.
36 │ ) -> FrontendOut {
│ ╭────────────────────'
│ │ ╭──────────────────'
37 │ │ │ reg * 2; // Domain crossing into the sysclk domain
38 │ │ │ let aligned = inst lane_aligner$(
39 │ │ │ sys_clk,
· │ │
67 │ │ │ FrontendOut(short_packets, raw_pixels)
68 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An value not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the argument a wire
│
35 │ wire dbg: inv &Csi2Debug
│ +++++
Error: aborting due to previous error
Location:
spade-compiler/src/main.rs:174:23
Error:
0: Failed to build spade code
Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.
Run with RUST_BACKTRACE=full to include source snippets.
ecp5stubs (1/1)
build (success)
ethernet (0/1)
build (fail)
[INFO] Failed to fetch pre-built Spade compiler, building locally.
========
Reason: Did not find a pre-built Spade compiler for git hash "be892f685e0ec1ed4f120b8d3f9b82d51f7a62a9"
========
[INFO] Building Spade Compiler
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on shared package cache
Blocking waiting for file lock on build directory
Finished `release` profile [optimized] target(s) in 4m 19s
[INFO] Failed to fetch pre-built surfer plugin, building locally.
========
Reason: Did not find a pre-built surfer plugin for git hash "be892f685e0ec1ed4f120b8d3f9b82d51f7a62a9"
========
[INFO] Building spade-surfer-plugin
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on build directory
Blocking waiting for file lock on build directory
Compiling serde_core v1.0.228
Compiling num-traits v0.2.19
error[E0463]: can't find crate for `std`
|
= note: the `wasm32-unknown-unknown` target may not be installed
= help: consider downloading the target with `rustup target add wasm32-unknown-unknown`
For more information about this error, try `rustc --explain E0463`.
error: could not compile `serde_core` (lib) due to 1 previous error
warning: build failed, waiting for other jobs to finish...
error[E0463]: can't find crate for `core`
|
= note: the `wasm32-unknown-unknown` target may not be installed
= help: consider downloading the target with `rustup target add wasm32-unknown-unknown`
error: could not compile `num-traits` (lib) due to 1 previous error
[WARN] Failed to build surfer plugin. Continuing anyway but Surfer integration will not work
[INFO] Cloning "ready_valid"
[INFO] Cloning "ecp5stubs"
[INFO] Cloning "nstd"
[INFO] Building spade code
[ERROR] Failed to build spade code
Cloning into '/builds/spade-lang/trawler/work/ethernet/build/libs/ready_valid'...
HEAD is now at 30e51db Make escape_bytes public
Cloning into '/builds/spade-lang/trawler/work/ethernet/build/libs/ecp5stubs'...
warning: redirecting to https://gitlab.com/spade-lang/lib/ecp5stubs.git/
HEAD is now at fe9f207 Make pll pub
Cloning into '/builds/spade-lang/trawler/work/ethernet/build/libs/nstd'...
HEAD is now at 3c294a8 Add chunks method to array
warning: The port keyword no longer has any effect on structs.
┌─ src/ip_tx.spade:52:12
│
52 │ pub struct port IpStream<Checksum> {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
52 │ pub struct port IpStream<Checksum> {
│ ----
warning: The port keyword no longer has any effect on structs.
┌─ src/ethernet_tx.spade:11:12
│
11 │ pub struct port EthernetStream {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
11 │ pub struct port EthernetStream {
│ ----
warning: The port keyword no longer has any effect on structs.
┌─ src/icmp_tx.spade:37:12
│
37 │ pub struct port IcmpTx {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
37 │ pub struct port IcmpTx {
│ ----
warning: The port keyword no longer has any effect on structs.
┌─ src/fifo_read_ext.spade:1:12
│
1 │ pub struct port SlimFifoRead<D> {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
1 │ pub struct port SlimFifoRead<D> {
│ ----
warning: The & modifier on types no longer has any effect
┌─ src/fifo_read_ext.spade:2:11
│
2 │ read: &Option<D>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/fifo_read_ext.spade:3:14
│
3 │ ack: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ src/udp.spade:57:12
│
57 │ pub struct port UdpStream {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
57 │ pub struct port UdpStream {
│ ----
warning: The & modifier on types no longer has any effect
┌─ src/rgmii_rx.spade:17:16
│
17 │ debug: inv &Debug,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ src/header_payload_tx_stream.spade:39:12
│
39 │ pub struct port HeaderPayloadTxStream<Header> {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
39 │ pub struct port HeaderPayloadTxStream<Header> {
│ ----
warning: The & modifier on types no longer has any effect
┌─ src/mdio.spade:17:14
│
17 │ mdc: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/mdio.spade:19:20
│
19 │ drive_low: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/option_ext.spade:18:25
│
18 │ write_full: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ build/libs/ready_valid/src/main.spade:7:12
│
7 │ pub struct port Rv<T> {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
7 │ pub struct port Rv<T> {
│ ----
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:8:11
│
8 │ data: &Option<T>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:9:16
│
9 │ ready: inv &bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ build/libs/ready_valid/src/main.spade:148:8
│
148 │ struct port FifoOut<T> {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
148 │ struct port FifoOut<T> {
│ ----
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:149:11
│
149 │ full: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:150:12
│
150 │ empty: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
error: Unexpected `:`, expected `Identifier`
┌─ build/libs/ready_valid/src/main.spade:155:33
│
155 │ pub fn read_empty(self, wire: inv &bool) -> FifoOut<T> {
│ ^ expected `Identifier`
error: Unexpected `:`, expected `Identifier`
┌─ build/libs/ready_valid/src/main.spade:161:32
│
161 │ pub fn read_full(self, wire: inv &bool) -> FifoOut<T> {
│ ^ expected `Identifier`
warning: The & modifier on types no longer has any effect
┌─ build/libs/ecp5stubs/src/main.spade:11:26
│
11 │ #[no_mangle] Q0: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ecp5stubs/src/main.spade:12:26
│
12 │ #[no_mangle] Q1: inv &bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ecp5stubs/src/main.spade:31:25
│
31 │ #[no_mangle] Q: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ecp5stubs/src/main.spade:58:25
│
58 │ #[no_mangle] O: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ecp5stubs/src/pll.spade:63:14
│
63 │ LOCK: inv& bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ecp5stubs/src/pll.spade:64:17
│
64 │ INTLOCK: inv& bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ecp5stubs/src/pll.spade:65:16
│
65 │ REFCLK: inv& bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ecp5stubs/src/pll.spade:66:18
│
66 │ CLKINTFB: inv& bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ build/libs/ecp5stubs/src/pll.spade:70:12
│
70 │ pub struct port SimplePllOut {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
70 │ pub struct port SimplePllOut {
│ ----
warning: The & modifier on types no longer has any effect
┌─ build/libs/ecp5stubs/src/pll.spade:76:11
│
76 │ lock: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/option_ext.spade:9:11
│
9 │ where O: {uint_bits_to_fit(V) - 1},
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
9 │ where O: {uint::bits_for(V) - 1},
│ ~~~~~~~~~~~~~~
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/option_ext.spade:10:11
│
10 │ O: {uint_bits_to_fit(V - 1)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
10 │ O: {uint::bits_for(V - 1)}
│ ~~~~~~~~~~~~~~
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/nstd/src/mem.spade:9:15
│
9 │ where W: {uint_bits_to_fit(C)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
9 │ where W: {uint::bits_for(C)}
│ ~~~~~~~~~~~~~~
warning: The dereference operator no longer has any effect.
┌─ src/rgmii_tx.spade:78:23
│
78 │ let payload = *payload_rv.data;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/rgmii_tx.spade:82:23
│
82 │ match *header.data {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/rgmii_tx.spade:134:32
│
134 │ set payload_rv.ready = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/rgmii_tx.spade:139:28
│
139 │ set header.ready = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/rgmii_tx.spade:224:19
│
224 │ data: &header,
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/rgmii_tx.spade:228:19
│
228 │ data: &data,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/ip_tx.spade:76:37
│
76 │ let new_header_data = match *self.inner.headers.data {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/ip_tx.spade:83:20
│
83 │ Rv(&new_header_data, self.inner.headers.ready),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/ip_tx.spade:90:37
│
90 │ let new_header_data = match *self.inner.headers.data {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/ip_tx.spade:97:20
│
97 │ Rv(&new_header_data, self.inner.headers.ready),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/icmp.spade:102:50
│
102 │ let responding = new_header.is_some() && *ds_ready;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/udp.spade:145:20
│
145 │ Rv(&udp_headers, headers_ready),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/udp.spade:146:20
│
146 │ Rv(&udp_payload, payload_ready),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/udp.spade:154:32
│
154 │ set ip_payload.ready = &ip_payload_ready;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/udp.spade:155:32
│
155 │ set ip_headers.ready = &ip_headers_ready;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/udp.spade:158:25
│
158 │ ip_headers: *ip_headers.data,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/udp.spade:159:25
│
159 │ ip_payload: *ip_payload.data,
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/rgmii_rx.spade:29:17
│
29 │ set debug = &Debug$(data_valid, data_err);
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ src/header_payload_rx_stream.spade:76:44
│
76 │ : IntoFixedSizeHeaderState<N, {uint_bits_to_fit(N)}>
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
76 │ : IntoFixedSizeHeaderState<N, {uint::bits_for(N)}>
│ ~~~~~~~~~~~~~~
warning: The dereference operator no longer has any effect.
┌─ src/header_payload_tx_stream.spade:77:23
│
77 │ match *headers.data {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/header_payload_tx_stream.spade:104:29
│
104 │ set headers.ready = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/header_payload_tx_stream.spade:108:27
│
108 │ set bytes.ready = &match state {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/header_payload_tx_stream.spade:131:42
│
131 │ LoweringState::Payload(_) => *bytes.data
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/header_payload_tx_stream.spade:135:16
│
135 │ Rv(&outer_header, outer_headers_ready),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/header_payload_tx_stream.spade:136:16
│
136 │ Rv(&outer_payload, outer_payload_ready)
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/header_payload_tx_stream.spade:180:36
│
180 │ let self_wants_transmit = (*self_headers.data).is_some();
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/header_payload_tx_stream.spade:182:41
│
182 │ match (self_wants_transmit, *ds_header_ready.0) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/header_payload_tx_stream.spade:196:76
│
196 │ set self_bytes.ready = if self_holds_ds {ds_payload_ready.0} else {&false};
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/header_payload_tx_stream.spade:198:85
│
198 │ set other_headers.ready = if !self_wants_transmit {ds_header_ready.0} else {&false};
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/header_payload_tx_stream.spade:199:78
│
199 │ set other_bytes.ready = if !self_holds_ds {ds_payload_ready.0} else {&false};
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/test.spade:52:40
│
52 │ UdpStream(HeaderPayloadTxStream(Rv(&to_transmit, ds), Rv(&Some(0), port.1)))
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/test.spade:52:62
│
52 │ UdpStream(HeaderPayloadTxStream(Rv(&to_transmit, ds), Rv(&Some(0), port.1)))
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/mdio.spade:63:15
│
63 │ set mdc = &mdc_out;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/mdio.spade:64:21
│
64 │ set drive_low = &drive_low_out;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/arp.spade:140:61
│
140 │ HeaderPayloadTxStream$(headers: self, bytes: Rv(&None, port.1))
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/ip.spade:190:16
│
190 │ Rv(&ip_headers, headers_ready),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/ip.spade:191:16
│
191 │ Rv(&payload, bytes_ready),
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/option_ext.spade:25:42
│
25 │ let (write, read) = inst fifo::<{uint_bits_to_fit(Depth - 1)}, T, Depth>$(
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
25 │ let (write, read) = inst fifo::<{uint::bits_for(Depth - 1)}, T, Depth>$(
│ ~~~~~~~~~~~~~~
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/option_ext.spade:32:27
│
32 │ set write.write = &self;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:22:57
│
22 │ reg(clk) value reset(rst: None) = match (value, *self.data) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:32:26
│
32 │ set self.ready = &value.is_none();
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:35:19
│
35 │ data: &value,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:42:51
│
42 │ reg(clk) buffer reset(rst: None) = match (*ds, buffer, *self.data) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:42:64
│
42 │ reg(clk) buffer reset(rst: None) = match (*ds, buffer, *self.data) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:54:34
│
54 │ set self.ready = &match (*ds, buffer) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:54:26
│
54 │ set self.ready = &match (*ds, buffer) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:61:12
│
61 │ Rv(&buffer, ds_inv)
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:65:26
│
65 │ set self.ready = &false;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:69:26
│
69 │ set self.ready = &true;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:75:21
│
75 │ data: &(*self.data).map(f),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:75:19
│
75 │ data: &(*self.data).map(f),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:83:21
│
83 │ data: &(*self.data).and_then(f),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:83:19
│
83 │ data: &(*self.data).and_then(f),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:89:27
│
89 │ let self_takes = (*self.data).is_some();
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:94:44
│
94 │ set other.ready = &(!self_takes && *ds_ready);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:94:27
│
94 │ set other.ready = &(!self_takes && *ds_ready);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:114:48
│
114 │ set ready = if gate {ds_ready.0} else {&false};
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:116:34
│
116 │ if gate {data} else {&None},
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:132:29
│
132 │ match (timeout, *data, *ds_ready.0) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:132:36
│
132 │ match (timeout, *data, *ds_ready.0) {
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/main.spade:131:33
│
131 │ reg(clk) timeout: uint<{uint_bits_to_fit(N)}> reset(rst: 0) =
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
131 │ reg(clk) timeout: uint<{uint::bits_for(N)}> reset(rst: 0) =
│ ~~~~~~~~~~~~~~
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:139:23
│
139 │ set ready = &(*ds_ready.0 && timeout == 0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:139:21
│
139 │ set ready = &(*ds_ready.0 && timeout == 0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:140:41
│
140 │ Rv(if timeout == 0 {data} else {&None}, ds_ready.1)
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:178:28
│
178 │ set self.ready = &!*write_full.0;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:178:26
│
178 │ set self.ready = &!*write_full.0;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:179:32
│
179 │ let Rv(data, ready) = (*self.data)
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:187:22
│
187 │ empty: &(*data).is_none(),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:187:20
│
187 │ empty: &(*data).is_none(),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:208:51
│
208 │ match (state, inst read_mut_wire(ds), *self.data) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:218:26
│
218 │ set self.ready = &match state {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:223:34
│
223 │ let data = match (state, *self.data) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:231:19
│
231 │ data: &data,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:242:17
│
242 │ match (*data, num_left, *ds_ready.0) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:242:34
│
242 │ match (*data, num_left, *ds_ready.0) {
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/main.spade:241:50
│
241 │ reg(clk) (array, num_left): ([T; N], uint<{uint_bits_to_fit(N)}>) reset(rst: (std::undef::undef(), 0)) =
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
241 │ reg(clk) (array, num_left): ([T; N], uint<{uint::bits_for(N)}>) reset(rst: (std::undef::undef(), 0)) =
│ ~~~~~~~~~~~~~~
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:250:55
│
250 │ set ready = &(num_left == 0 || num_left == 1 && *ds_ready.0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:250:19
│
250 │ set ready = &(num_left == 0 || num_left == 1 && *ds_ready.0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:253:10
│
253 │ &match num_left {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:273:24
│
273 │ let rv = Rv$(data: &value, ready: inst new_mut_wire());
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:276:21
│
276 │ set out.ready = &ready;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:277:5
│
277 │ *out.data
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:286:24
│
286 │ let rv = Rv$(data: &value, ready: inst new_mut_wire());
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:289:21
│
289 │ set out.ready = &ready;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:290:5
│
290 │ *out.data
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:32:48
│
32 │ let (out, next_state) = match (state, (*self.data), *ds_ready) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:32:61
│
32 │ let (out, next_state) = match (state, (*self.data), *ds_ready) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:54:41
│
54 │ set self.ready = &match (state, *ds_ready) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:54:26
│
54 │ set self.ready = &match (state, *ds_ready) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:60:13
│
60 │ &out,
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/nstd/src/mem.spade:25:77
│
25 │ (WritePort$(addr: w_addr, write: w_write), ReadPort$(addr: r_addr, out: &read_result))
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/nstd/src/array.spade:70:19
│
70 │ where NSize: {uint_bits_to_fit(N-1)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
70 │ where NSize: {uint::bits_for(N-1)}
│ ~~~~~~~~~~~~~~
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/nstd/src/array.spade:70:19
│
70 │ where NSize: {uint_bits_to_fit(N-1)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
70 │ where NSize: {uint::bits_for(N-1)}
│ ~~~~~~~~~~~~~~
error: Trait bound not satisfied. ethernet::ethernet_tx::EthernetStream does not implement core::Data
┌─ src/rgmii_tx.spade:76:61
│
76 │ pipeline(3) into_ethernet_bytes_impl(clk: clock, rst: bool, s: EthernetStream) -> Option<EthernetByte> {
│ ^
│ │
│ ethernet::ethernet_tx::EthernetStream does not implement core::Data
│ The type of this argument is not Data which means it cannot be stored in a register.
│ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────'
│ │ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────'
77 │ │ │ let EthernetStream(HeaderPayloadTxStream$(headers: header, bytes: payload_rv)) = s;
78 │ │ │ let payload = *payload_rv.data;
79 │ │ │
· │ │
183 │ │ │ }
184 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An value not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the argument a wire
│
76 │ pipeline(3) into_ethernet_bytes_impl(clk: clock, rst: bool, wire s: EthernetStream) -> Option<EthernetByte> {
│ +++++
error: Trait bound not satisfied. inv ethernet::rgmii_rx::Debug does not implement core::Data
┌─ src/rgmii_rx.spade:17:5
│
17 │ debug: inv &Debug,
│ ^^^^^
│ │
│ inv ethernet::rgmii_rx::Debug does not implement core::Data
│ The type of this argument is not Data which means it cannot be stored in a register.
18 │ ) -> RgmiiRx {
│ ╭────────────────'
│ │ ╭──────────────'
19 │ │ │ let [data_valid, rxdv_xor_rxer] = inst iddrx1f(rx_clk, rst, rx_ctl).to_bits();
20 │ │ │ let data_err = rxdv_xor_rxer ^^ data_valid;
21 │ │ │
· │ │
46 │ │ │ }
47 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An value not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the argument a wire
│
17 │ wire debug: inv &Debug,
│ +++++
Error: aborting due to previous error
Location:
spade-compiler/src/main.rs:174:23
Error:
0: Failed to build spade code
Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.
Run with RUST_BACKTRACE=full to include source snippets.
fixed (1/1)
build (success)
mcp3002 (1/1)
build (success)
playground_blinky (1/1)
build (success)
playground_floppy_fish (0/1)
build (fail)
[INFO] Failed to fetch pre-built Spade compiler, building locally.
========
Reason: Did not find a pre-built Spade compiler for git hash "be892f685e0ec1ed4f120b8d3f9b82d51f7a62a9"
========
[INFO] Building Spade Compiler
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on build directory
Finished `release` profile [optimized] target(s) in 4m 26s
[INFO] Failed to fetch pre-built surfer plugin, building locally.
========
Reason: Did not find a pre-built surfer plugin for git hash "be892f685e0ec1ed4f120b8d3f9b82d51f7a62a9"
========
[INFO] Building spade-surfer-plugin
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on build directory
Blocking waiting for file lock on build directory
Compiling serde_core v1.0.228
Compiling num-traits v0.2.19
error[E0463]: can't find crate for `std`
|
= note: the `wasm32-unknown-unknown` target may not be installed
= help: consider downloading the target with `rustup target add wasm32-unknown-unknown`
For more information about this error, try `rustc --explain E0463`.
error: could not compile `serde_core` (lib) due to 1 previous error
warning: build failed, waiting for other jobs to finish...
error[E0463]: can't find crate for `core`
|
= note: the `wasm32-unknown-unknown` target may not be installed
= help: consider downloading the target with `rustup target add wasm32-unknown-unknown`
error: could not compile `num-traits` (lib) due to 1 previous error
[WARN] Failed to build surfer plugin. Continuing anyway but Surfer integration will not work
[INFO] Cloning "fixed"
[INFO] Cloning "vga"
[INFO] Building spade code
[ERROR] Failed to build spade code
Cloning into '/builds/spade-lang/trawler/work/playground_floppy_fish/swim_floppy_fish/build/libs/fixed'...
warning: redirecting to https://gitlab.com/spade-lang/lib/fixed.git/
HEAD is now at 8adaa72 Bump Spade
Cloning into '/builds/spade-lang/trawler/work/playground_floppy_fish/swim_floppy_fish/build/libs/vga'...
warning: redirecting to https://gitlab.com/spade-lang/lib/vga_spade.git/
HEAD is now at d3cd108 Bump Spade
warning: The & modifier on types no longer has any effect
┌─ src/main.spade:48:75
│
48 │ entity game(clk: clock, rst: bool, new_frame: bool, btn: bool, game_over: &bool) -> GameState {
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/main.spade:98:18
│
98 │ game_over: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/main.spade:181:27
│
181 │ #[no_mangle] hsync: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/main.spade:182:27
│
182 │ #[no_mangle] vsync: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/main.spade:183:23
│
183 │ #[no_mangle] r: inv &uint<8>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/main.spade:184:23
│
184 │ #[no_mangle] g: inv &uint<8>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/main.spade:185:23
│
185 │ #[no_mangle] b: inv &uint<8>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The dereference operator no longer has any effect.
┌─ src/main.spade:83:12
│
83 │ if *game_over {GameState::Start} else {state}
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/main.spade:125:21
│
125 │ set game_over = &(is_pipe && is_player);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/main.spade:213:11
│
213 │ set r = &color.r;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/main.spade:214:11
│
214 │ set g = &color.g;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/main.spade:215:11
│
215 │ set b = &color.b;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/main.spade:216:15
│
216 │ set hsync = &vga_out.hsync;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/main.spade:217:15
│
217 │ set vsync = &vga_out.vsync;
│ ^ Useless operator
error: Trait bound not satisfied. inv bool does not implement core::Data
┌─ src/main.spade:98:3
│
98 │ game_over: inv &bool,
│ ^^^^^^^^^
│ │
│ inv bool does not implement core::Data
│ The type of this argument is not Data which means it cannot be stored in a register.
99 │ ) -> Color {
│ ╭──────────────'
│ │ ╭────────────'
100 │ │ │ let player_size = 32;
101 │ │ │ let pipe_gap = 90;
102 │ │ │ let player_in_y = y > sext(player_pos.to_int()) && y < sext(player_pos.to_int() + player_size);
· │ │
126 │ │ │ color
127 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An value not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the argument a wire
│
98 │ wire game_over: inv &bool,
│ +++++
error: Type of expression is not fully known
┌─ build/libs/fixed/src/main.spade:75:46
│
75 │ if guard_bits == 0 || guard_bits == ~0 {
│ ^ The type of this expression is not fully known
│
= note: Found incomplete type: Number<_> + core::ops::BitNot
Error: aborting due to previous error
Location:
spade-compiler/src/main.rs:174:23
Error:
0: Failed to build spade code
Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.
Run with RUST_BACKTRACE=full to include source snippets.
playground_tinytapeout (1/1)
build (success)
playground_vga (1/1)
build (success)
protocols (1/2)
build (success)
test (fail)
[INFO] Failed to fetch pre-built surfer plugin, building locally.
========
Reason: Did not find a pre-built surfer plugin for git hash "be892f685e0ec1ed4f120b8d3f9b82d51f7a62a9"
========
[INFO] Building spade-surfer-plugin
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on build directory
Blocking waiting for file lock on build directory
Compiling serde_core v1.0.228
Compiling num-traits v0.2.19
error[E0463]: can't find crate for `std`
|
= note: the `wasm32-unknown-unknown` target may not be installed
= help: consider downloading the target with `rustup target add wasm32-unknown-unknown`
For more information about this error, try `rustc --explain E0463`.
error: could not compile `serde_core` (lib) due to 1 previous error
warning: build failed, waiting for other jobs to finish...
error[E0463]: can't find crate for `core`
|
= note: the `wasm32-unknown-unknown` target may not be installed
= help: consider downloading the target with `rustup target add wasm32-unknown-unknown`
error: could not compile `num-traits` (lib) due to 1 previous error
[WARN] Failed to build surfer plugin. Continuing anyway but Surfer integration will not work
[INFO] /builds/spade-lang/trawler/work/protocols/build/spade.sv is up to date
[INFO] Creating venv
[INFO] Setting up python venv
[INFO] `uv` not found, falling back on system python3
[INFO] Installing pip dependencies
Collecting maturin>=1.8.2 (from maturin[zig]>=1.8.2)
Using cached maturin-1.12.6-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.musllinux_1_1_x86_64.whl.metadata (16 kB)
Collecting pytest
Downloading pytest-9.0.2-py3-none-any.whl.metadata (7.6 kB)
Collecting iniconfig>=1.0.1 (from pytest)
Downloading iniconfig-2.3.0-py3-none-any.whl.metadata (2.5 kB)
Collecting packaging>=22 (from pytest)
Downloading packaging-26.0-py3-none-any.whl.metadata (3.3 kB)
Collecting pluggy<2,>=1.5 (from pytest)
Downloading pluggy-1.6.0-py3-none-any.whl.metadata (4.8 kB)
Collecting pygments>=2.7.2 (from pytest)
Downloading pygments-2.19.2-py3-none-any.whl.metadata (2.5 kB)
Collecting ziglang>=0.10.0 (from maturin[zig]>=1.8.2)
Using cached ziglang-0.15.2-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.musllinux_1_1_x86_64.whl.metadata (3.2 kB)
Using cached maturin-1.12.6-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.musllinux_1_1_x86_64.whl (10.2 MB)
Downloading pytest-9.0.2-py3-none-any.whl (374 kB)
Downloading pluggy-1.6.0-py3-none-any.whl (20 kB)
Downloading iniconfig-2.3.0-py3-none-any.whl (7.5 kB)
Downloading packaging-26.0-py3-none-any.whl (74 kB)
Downloading pygments-2.19.2-py3-none-any.whl (1.2 MB)
━━━━━━━━━━━━━━━━━━━━���━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 22.9 MB/s eta 0:00:00
Downloading ziglang-0.15.2-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.musllinux_1_1_x86_64.whl (93.5 MB)
━━━━━━━━━━━━━━━━━━━━���━━━━━━━━━━━━━━━━━━━ 93.5/93.5 MB 37.7 MB/s eta 0:00:00
Installing collected packages: ziglang, pygments, pluggy, packaging, maturin, iniconfig, pytest
Successfully installed iniconfig-2.3.0 maturin-1.12.6 packaging-26.0 pluggy-1.6.0 pygments-2.19.2 pytest-9.0.2 ziglang-0.15.2
[INFO] Failed to fetch pre-built python test wrapper, building locally.
========
Reason: Did not find a pre-built python test wrapper for git hash "be892f685e0ec1ed4f120b8d3f9b82d51f7a62a9"
========
[INFO] Checking if spade-python needs rebuilding. (This may print an error, it is expected)
Blocking waiting for file lock on package cache
⚠️ Warning: `project.version` field is required in pyproject.toml unless it is present in the `project.dynamic` list
🍹 Building a mixed python/rust project
🔗 Found pyo3 bindings with abi3 support
🐍 Found CPython 3.13 at /builds/spade-lang/trawler/work/protocols/build/.env/bin/python
🛠️ Using zig for cross-compiling to x86_64-unknown-linux-gnu
Compiling proc-macro2 v1.0.105
Compiling unicode-ident v1.0.22
Compiling quote v1.0.43
Compiling serde_core v1.0.228
Compiling syn v2.0.114
Compiling autocfg v1.5.0
Compiling serde v1.0.228
Compiling memchr v2.7.6
Compiling num-traits v0.2.19
Compiling once_cell v1.21.3
Compiling scopeguard v1.2.0
Compiling lock_api v0.4.14
Compiling semver v1.0.27
Compiling rustc_version v0.4.1
Compiling num-integer v0.1.46
Compiling serde_derive v1.0.228
Compiling aho-corasick v1.1.4
Compiling thiserror v2.0.17
Compiling regex-syntax v0.8.8
Compiling thiserror-impl v2.0.17
Compiling regex-automata v0.4.13
Compiling heapless v0.7.17
Compiling shlex v1.3.0
Compiling byteorder v1.5.0
Compiling find-msvc-tools v0.1.7
Compiling cfg-if v1.0.4
Compiling libc v0.2.180
Compiling beef v0.5.2
Compiling fnv v1.0.7
Compiling cc v1.2.52
Compiling hash32 v0.2.1
Compiling num-bigint v0.4.6
Compiling logos-codegen v0.16.0
Compiling spin v0.9.8
Compiling tracing-core v0.1.36
Compiling unicode-width v0.2.2
Compiling either v1.15.0
Compiling stable_deref_trait v1.2.1
Compiling termcolor v1.4.1
Compiling spade-codespan-reporting v0.12.0
Compiling logos-derive v0.16.0
Compiling num-rational v0.4.2
Compiling cobs v0.3.0
Compiling num-complex v0.4.6
Compiling num-iter v0.1.45
Compiling tracing-attributes v0.1.31
Compiling target-lexicon v0.12.16
Compiling pin-project-lite v0.2.16
Compiling num v0.4.3
Compiling postcard v1.1.3
Compiling logos v0.16.0
Compiling spade-codespan v0.12.0
Compiling tracing v0.1.44
Compiling itertools v0.14.0
Compiling rustc-hash v2.1.1
Compiling bumpalo v3.19.1
Compiling pyo3-build-config v0.21.2
Compiling smallvec v1.15.1
Compiling object v0.32.2
Compiling spade-common v0.17.0 (/builds/spade-lang/trawler/work/spade/spade-common)
Compiling crossbeam-utils v0.8.21
Compiling ar_archive_writer v0.2.0
Compiling spade-diagnostics v0.17.0 (/builds/spade-lang/trawler/work/spade/spade-diagnostics)
Compiling log v0.4.29
Compiling lazy_static v1.5.0
Compiling sharded-slab v0.1.7
Compiling tracing-log v0.2.0
Compiling matchers v0.2.0
Compiling psm v0.1.28
Compiling thread_local v1.1.9
Compiling nu-ansi-term v0.50.3
Compiling colored v3.0.0
Compiling nesty v0.2.0
Compiling tracing-subscriber v0.3.22
Compiling crossbeam-epoch v0.9.18
Compiling spade-types v0.17.0 (/builds/spade-lang/trawler/work/spade/spade-types)
Compiling stacker v0.1.22
Compiling spade-macros v0.17.0 (/builds/spade-lang/trawler/work/spade/spade-macros)
Compiling tap v1.0.1
Compiling rand_core v0.9.5
Compiling rayon-core v1.13.0
Compiling bitmaps v3.2.1
Compiling object v0.37.3
Compiling eyre v0.6.12
Compiling owo-colors v4.2.3
Compiling utf8parse v0.2.2
Compiling anstyle-parse v0.2.7
Compiling imbl-sized-chunks v0.1.3
Compiling rand_xoshiro v0.7.0
Compiling spade-hir v0.17.0 (/builds/spade-lang/trawler/work/spade/spade-hir)
Compiling crossbeam-deque v0.8.6
Compiling tikv-jemalloc-sys v0.6.1+5.3.0-1-ge13ca993e8ccb9ba9847cc330696e02839f328f7
Compiling local-impl v0.1.2
Compiling colorchoice v1.0.4
Compiling indenter v0.3.4
Compiling anstyle v1.0.13
Compiling gimli v0.32.3
Compiling adler2 v2.0.1
Compiling is_terminal_polyfill v1.70.2
Compiling archery v1.2.2
Compiling typeid v1.0.3
Compiling zmij v1.0.14
Compiling anstyle-query v1.1.5
Compiling color-spantrace v0.3.0
Compiling indoc v2.0.7
Compiling anstream v0.6.21
Compiling imbl v6.1.0
Compiling miniz_oxide v0.8.9
Compiling addr2line v0.25.1
Compiling tracing-error v0.2.1
Compiling pyo3-ffi v0.21.2
Compiling spade-ast v0.17.0 (/builds/spade-lang/trawler/work/spade/spade-ast)
Compiling recursive-proc-macro-impl v0.1.1
Compiling derive-where v1.6.0
Compiling strsim v0.11.1
Compiling clap_lex v0.7.7
Compiling fastrand v2.3.0
Compiling parking_lot_core v0.9.12
Compiling rustc-demangle v0.1.27
Compiling serde_json v1.0.149
Compiling heck v0.5.0
Compiling clap_derive v4.5.49
Compiling backtrace v0.3.76
Compiling spade-typeinference v0.17.0 (/builds/spade-lang/trawler/work/spade/spade-typeinference)
Compiling clap_builder v4.5.54
Compiling spade-mir v0.17.0 (/builds/spade-lang/trawler/work/spade/spade-mir)
Compiling recursive v0.1.1
Compiling rayon v1.11.0
Compiling memoffset v0.9.1
Compiling bitflags v2.10.0
Compiling itoa v1.0.17
Compiling heck v0.4.1
Compiling portable-atomic v1.13.0
Compiling pyo3-macros-backend v0.21.2
Compiling ron v0.12.0
Compiling spade-hir-lowering v0.17.0 (/builds/spade-lang/trawler/work/spade/spade-hir-lowering)
Compiling color-eyre v0.6.5
Compiling spade-ast-lowering v0.17.0 (/builds/spade-lang/trawler/work/spade/spade-ast-lowering)
Compiling clap v4.5.54
Compiling spade-parser v0.17.0 (/builds/spade-lang/trawler/work/spade/spade-parser)
Compiling tikv-jemallocator v0.6.1
Compiling tracing-tree v0.4.1
Compiling pyo3 v0.21.2
Compiling spade-lang v0.17.0 (/builds/spade-lang/trawler/work/spade/spade-compiler)
Compiling parking_lot v0.12.5
Compiling pyo3-macros v0.21.2
Compiling vcd v0.6.1
Compiling unindent v0.2.4
Compiling vcd-translate v0.1.0 (/builds/spade-lang/trawler/work/spade/vcd-translate)
Compiling spade-python v0.17.0 (/builds/spade-lang/trawler/work/spade/spade-python)
error: failed to run custom build command for `spade-python v0.17.0 (/builds/spade-lang/trawler/work/spade/spade-python)`
Caused by:
process didn't exit successfully: `/builds/spade-lang/trawler/work/protocols/build/maturin_target/release/build/spade-python-bbc89b17ea9d6e1e/build-script-build` (exit status: 101)
--- stderr
thread 'main' panicked at spade-python/build.rs:3:9:
Python rebuild probe was run
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
warning: build failed, waiting for other jobs to finish...
💥 maturin failed
Caused by: Failed to build a native library through cargo
Caused by: Cargo build finished with "exit status: 101": `env -u CARGO AR_x86_64_unknown_linux_gnu="/root/.cache/cargo-zigbuild/0.22.1/ar" CARGO_TARGET_APPLIES_TO_HOST="false" CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER="/root/.cache/cargo-zigbuild/0.22.1/zigcc-x86_64-unknown-linux-gnu.2.17-b9e2.sh" CARGO_UNSTABLE_TARGET_APPLIES_TO_HOST="true" CARGO_ZIGBUILD_RUSTC_VERSION="1.90.0" CC_x86_64_unknown_linux_gnu="/root/.cache/cargo-zigbuild/0.22.1/zigcc-x86_64-unknown-linux-gnu.2.17-b9e2.sh" CMAKE_TOOLCHAIN_FILE_x86_64_unknown_linux_gnu="/root/.cache/cargo-zigbuild/0.22.1/cmake/x86_64-unknown-linux-gnu-toolchain.cmake" CXX_x86_64_unknown_linux_gnu="/root/.cache/cargo-zigbuild/0.22.1/zigcxx-x86_64-unknown-linux-gnu.2.17-b9e2.sh" PYO3_BUILD_EXTENSION_MODULE="1" PYO3_ENVIRONMENT_SIGNATURE="cpython-3.13-64bit" PYO3_PYTHON="/builds/spade-lang/trawler/work/protocols/build/.env/bin/python" PYTHON_SYS_EXECUTABLE="/builds/spade-lang/trawler/work/protocols/build/.env/bin/python" RANLIB_x86_64_unknown_linux_gnu="/root/.cache/cargo-zigbuild/0.22.1/zigranlib.sh" ZIG_COMMAND="/builds/spade-lang/trawler/work/protocols/build/.env/bin/python3 -m ziglang" __CARGO_TEST_CHANNEL_OVERRIDE_DO_NOT_USE_THIS="nightly" "/usr/local/rustup/toolchains/1.90.0-x86_64-unknown-linux-gnu/bin/cargo" "rustc" "--profile" "release" "--target" "x86_64-unknown-linux-gnu" "--message-format" "json-render-diagnostics" "--manifest-path" "/builds/spade-lang/trawler/work/spade/spade-python/Cargo.toml" "--lib"`
[INFO] Building spade-python
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
⚠️ Warning: `project.version` field is required in pyproject.toml unless it is present in the `project.dynamic` list
🍹 Building a mixed python/rust project
🔗 Found pyo3 bindings with abi3 support
🐍 Found CPython 3.13 at /builds/spade-lang/trawler/work/protocols/build/.env/bin/python
🛠️ Using zig for cross-compiling to x86_64-unknown-linux-gnu
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Compiling spade-simulation-ext v0.17.0 (/builds/spade-lang/trawler/work/spade/spade-simulation-ext)
Compiling spade-python v0.17.0 (/builds/spade-lang/trawler/work/spade/spade-python)
Finished `release` profile [optimized] target(s) in 48.36s
📦 Built wheel for abi3 Python ≥ 3.8 to /builds/spade-lang/trawler/work/protocols/build/dist/spade-0.17.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
[INFO] Installing spade into venv
Processing ./build/spade-1.2.3-cp38-abi3-manylinux_2_34_x86_64.whl
Collecting cocotb~=1.9.2 (from spade==1.2.3)
Downloading cocotb-1.9.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.9 kB)
Collecting ansicolors>=1.1.8 (from spade==1.2.3)
Downloading ansicolors-1.1.8-py2.py3-none-any.whl.metadata (9.0 kB)
Collecting find-libpython (from cocotb~=1.9.2->spade==1.2.3)
Using cached find_libpython-0.5.1-py3-none-any.whl.metadata (2.8 kB)
Downloading cocotb-1.9.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.2 MB)
━━━━━━━━━━━━━━━━━━━━���━━━━━━━━━━━━━━━━━━━ 4.2/4.2 MB 48.3 MB/s eta 0:00:00
Using cached ansicolors-1.1.8-py2.py3-none-any.whl (13 kB)
Downloading find_libpython-0.5.1-py3-none-any.whl (9.2 kB)
Installing collected packages: ansicolors, find-libpython, cocotb, spade
Successfully installed ansicolors-1.1.8 cocotb-1.9.2 find-libpython-0.5.1 spade-0.17.0
[INFO] Running test/uart_tx.py [simple_tx_test]
[INFO] Running test/uart_tx.py [simple_tx_test_with_2_stop_bits]
[INFO] Running test/uart_tx.py [even_parity_bit_works]
[INFO] Running test/uart_tx.py [odd_parity_bit_works]
================================================================================
FAILED: test/uart_tx.py [simple_tx_test]
================================================================================
-.--ns INFO gpi ..mbed/gpi_embed.cpp:108 in set_program_name_in_venv Using Python virtual environment interpreter at /builds/spade-lang/trawler/work/protocols/build/.env/bin/python
-.--ns INFO gpi ../gpi/GpiCommon.cpp:101 in gpi_print_registered_impl VPI registered
0.00ns INFO cocotb Running on Icarus Verilog version 12.0 (stable)
0.00ns INFO cocotb Running tests with cocotb v1.9.2 from /builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb
0.00ns INFO cocotb Seeding Python random module with 1774020617
0.00ns INFO cocotb.regression Found test uart_tx.simple_tx_test
0.00ns INFO cocotb.regression running simple_tx_test (1/1)
warning: The reference operator no longer has any effect.
┌─ py:1:1
│
1 │ &None()
│ ^ Useless operator
--- Logging error ---
note: A Spade expression failed to compile
*******************************************************************Traceback (most recent call last):
File "/usr/lib/python3.13/l*******************
** TEST STATUS SIMogging/__init__.py", line 1154, in emit
stream.write(msg + self.terminator)
~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
UnicodeE TIME (ns) REAL TIME (s) RATIO (ns/s) **
**************************************************************************************
** uart_tx.simple_tx_test FAIL 0.00 ncodeError: 'ascii' codec can't encode characters in position 18 0.13 0.01 **
**************************************************************************************
** TESTS=1 PASS=0 FAIL=1 SKIP=0 0.00 0.32 0.00 **
**************************************************************************************
78-1879: ordinal not in range(128)
Call stack:
File "/builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb/scheduler.py", line 350, in _test_completed
self._handle_result(test)
File "/builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb/regression.py", line 339, in _handle_result
self._record_result(
File "/builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb/regression.py", line 515, in _record_result
test_pass, sim_failed = self._score_test(test, outcome)
File "/builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb/regression.py", line 446, in _score_test
self._log_test_failed(test, result, None)
File "/builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb/regression.py", line 480, in _log_test_failed
self.log.info(
Message: 'simple_tx_test failed'
Arguments: ()
FST info: dumpfile /builds/spade-lang/trawler/work/protocols/build/uart_tx_simple_tx_test/uart_tx.fst opened for output.
[INFO] test/uart_tx.py [simple_tx_test]: FAILED
================================================================================
FAILED: test/uart_tx.py [simple_tx_test_with_2_stop_bits]
================================================================================
-.--ns INFO gpi ..mbed/gpi_embed.cpp:108 in set_program_name_in_venv Using Python virtual environment interpreter at /builds/spade-lang/trawler/work/protocols/build/.env/bin/python
-.--ns INFO gpi ../gpi/GpiCommon.cpp:101 in gpi_print_registered_impl VPI registered
0.00ns INFO cocotb Running on Icarus Verilog version 12.0 (stable)
0.00ns INFO cocotb Running tests with cocotb v1.9.2 from /builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb
0.00ns INFO cocotb Seeding Python random module with 1774020617
0.00ns INFO cocotb.regression Found test uart_tx.simple_tx_test_with_2_stop_bits
0.00ns INFO cocotb.regression running simple_tx_test_with_2_stop_bits (1/1)
warning: The reference operator no longer has any effect.
┌─ py:1:1
│
1 │ &None()
│ ^ Useless operator
--- Logging error ---
note: A Spade expression failed to compile
*******************************************************************Traceback (most recent call last):
File "/usr/lib/python3.13/l******************************
** TEST STATUS SIM TIME (ns) REAL TIME (s) RATIO (ns/s) **
***************************************************************ogging/__init__.py", line 1154, in emit
stream.write(msg + s**********************************
** uart_tx.simple_tx_test_witelf.terminator)
~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
UnicodeEh_2_stop_bits FAIL 0.00 0.13 0.01ncodeError: 'ascii' codec can't encode characters in position 19 **
*************************************************************************************************
** TESTS=1 PASS=0 FAIL=1 SKIP=0 0.00 0.30 0.00 **
*******************************************************46-1947: ordinal not in range(128)
Call stack:
File "/builds/s******************************************
pade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb/scheduler.py", line 350, in _test_completed
self._handle_result(test)
File "/builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb/regression.py", line 339, in _handle_result
self._record_result(
File "/builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb/regression.py", line 515, in _record_result
test_pass, sim_failed = self._score_test(test, outcome)
File "/builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb/regression.py", line 446, in _score_test
self._log_test_failed(test, result, None)
File "/builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb/regression.py", line 480, in _log_test_failed
self.log.info(
Message: 'simple_tx_test_with_2_stop_bits failed'
Arguments: ()
FST info: dumpfile /builds/spade-lang/trawler/work/protocols/build/uart_tx_simple_tx_test_with_2_stop_bits/uart_tx.fst opened for output.
[INFO] test/uart_tx.py [simple_tx_test_with_2_stop_bits]: FAILED
[INFO] Running test/uart_tx.py [even_parity_bit_with_multiple_stop_bit_works]
================================================================================
FAILED: test/uart_tx.py [even_parity_bit_works]
================================================================================
-.--ns INFO gpi ..mbed/gpi_embed.cpp:108 in set_program_name_in_venv Using Python virtual environment interpreter at /builds/spade-lang/trawler/work/protocols/build/.env/bin/python
-.--ns INFO gpi ../gpi/GpiCommon.cpp:101 in gpi_print_registered_impl VPI registered
0.00ns INFO cocotb Running on Icarus Verilog version 12.0 (stable)
0.00ns INFO cocotb Running tests with cocotb v1.9.2 from /builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb
0.00ns INFO cocotb Seeding Python random module with 1774020627
0.00ns INFO cocotb.regression Found test uart_tx.even_parity_bit_works
0.00ns INFO cocotb.regression running even_parity_bit_works (1/1)
warning: The reference operator no longer has any effect.
┌─ py:1:1
│
1 │ &None()
│ ^ Useless operator
--- Logging error ---
Traceback (most recent call last):
File "/usr/lib/python3.13/logging/__init__.py", line 1154, in emit
stream.write(msg + self.terminator)
~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1904-1905: ordinal not in range(128)
Call stack:
File "/builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb/scheduler.py", line 350, in _test_completed
self._handle_result(test)
File "/builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb/regression.py", line 339, in _handle_result
self._record_result(
File "/builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb/regression.py", line 515, in _record_result
test_pass, sim_failed = self._score_test(test, outcome)
File "/builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb/regression.py", line 446, in _score_test
self._log_test_failed(test, result, None)
File "/builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb/regression.py", line 480, in _log_test_failed
self.log.info(
Message: 'even_parity_bit_works failed'
Arguments: ()
note: A Spade expression failed to compile
***************************************************************************************
** TEST STATUS SIM TIME (ns) REAL TIME (s) RATIO (ns/s) **
***************************************************************************************
** uart_tx.even_parity_bit_works FAIL 0.00 0.08 0.01 **
***************************************************************************************
** TESTS=1 PASS=0 FAIL=1 SKIP=0 0.00 0.18 0.01 **
***************************************************************************************
FST info: dumpfile /builds/spade-lang/trawler/work/protocols/build/uart_tx_even_parity_bit_works/uart_tx.fst opened for output.
[INFO] test/uart_tx.py [even_parity_bit_works]: FAILED
[INFO] Running test/uart_rx.py [test]
================================================================================
FAILED: test/uart_tx.py [odd_parity_bit_works]
================================================================================
-.--ns INFO gpi ..mbed/gpi_embed.cpp:108 in set_program_name_in_venv Using Python virtual environment interpreter at /builds/spade-lang/trawler/work/protocols/build/.env/bin/python
-.--ns INFO gpi ../gpi/GpiCommon.cpp:101 in gpi_print_registered_impl VPI registered
0.00ns INFO cocotb Running on Icarus Verilog version 12.0 (stable)
0.00ns INFO cocotb Running tests with cocotb v1.9.2 from /builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb
0.00ns INFO cocotb Seeding Python random module with 1774020628
0.00ns INFO cocotb.regression Found test uart_tx.odd_parity_bit_works
0.00ns INFO cocotb.regression running odd_parity_bit_works (1/1)
warning: The reference operator no longer has any effect.
┌─ py:1:1
│
1 │ &None()
│ ^ Useless operator
--- Logging error ---
Traceback (most recent call last):
File "/usr/lib/python3.13/logging/__init__.py", line 1154, in emit
stream.write(msg + self.terminator)
~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1901-1902: ordinal not in range(128)
Call stack:
File "/builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb/scheduler.py", line 350, in _test_completed
self._handle_result(test)
File "/builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb/regression.py", line 339, in _handle_result
self._record_result(
File "/builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb/regression.py", line 515, in _record_result
test_pass, sim_failed = self._score_test(test, outcome)
File "/builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb/regression.py", line 446, in _score_test
self._log_test_failed(test, result, None)
File "/builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb/regression.py", line 480, in _log_test_failed
self.log.info(
Message: 'odd_parity_bit_works failed'
Arguments: ()
note: A Spade expression failed to compile
**************************************************************************************
** TEST STATUS SIM TIME (ns) REAL TIME (s) RATIO (ns/s) **
**************************************************************************************
** uart_tx.odd_parity_bit_works FAIL 0.00 0.09 0.01 **
**************************************************************************************
** TESTS=1 PASS=0 FAIL=1 SKIP=0 0.00 0.20 0.01 **
**************************************************************************************
FST info: dumpfile /builds/spade-lang/trawler/work/protocols/build/uart_tx_odd_parity_bit_works/uart_tx.fst opened for output.
[INFO] test/uart_tx.py [odd_parity_bit_works]: FAILED
[INFO] Running test/uart_rx.py [quick_succession_works]
================================================================================
FAILED: test/uart_tx.py [even_parity_bit_with_multiple_stop_bit_works]
================================================================================
-.--ns INFO gpi ..mbed/gpi_embed.cpp:108 in set_program_name_in_venv Using Python virtual environment interpreter at /builds/spade-lang/trawler/work/protocols/build/.env/bin/python
-.--ns INFO gpi ../gpi/GpiCommon.cpp:101 in gpi_print_registered_impl VPI registered
0.00ns INFO cocotb Running on Icarus Verilog version 12.0 (stable)
0.00ns INFO cocotb Running tests with cocotb v1.9.2 from /builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb
0.00ns INFO cocotb Seeding Python random module with 1774020634
0.00ns INFO cocotb.regression Found test uart_tx.even_parity_bit_with_multiple_stop_bit_works
0.00ns INFO cocotb.regression running even_parity_bit_with_multiple_stop_bit_works (1/1)
warning: The reference operator no longer has any effect.
┌─ py:1:1
│
1 │ &None()
│ ^ Useless operator
--- Logging error ---
Traceback (most recent call last):
File "/usr/lib/python3.13/logging/__init__.py", line 1154, in emit
stream.write(msg + self.terminator)
~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1997-1998: ordinal not in range(128)
Call stack:
File "/builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb/scheduler.py", line 350, in _test_completed
self._handle_result(test)
File "/builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb/regression.py", line 339, in _handle_result
self._record_result(
File "/builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb/regression.py", line 515, in _record_result
test_pass, sim_failed = self._score_test(test, outcome)
File "/builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb/regression.py", line 446, in _score_test
self._log_test_failed(test, result, None)
File "/builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb/regression.py", line 480, in _log_test_failed
self.log.info(
Message: 'even_parity_bit_with_multiple_stop_bit_works failed'
Arguments: ()
note: A Spade expression failed to compile
**************************************************************************************************************
** TEST STATUS SIM TIME (ns) REAL TIME (s) RATIO (ns/s) **
**************************************************************************************************************
** uart_tx.even_parity_bit_with_multiple_stop_bit_works FAIL 0.00 0.05 0.02 **
**************************************************************************************************************
** TESTS=1 PASS=0 FAIL=1 SKIP=0 0.00 0.10 0.01 **
**************************************************************************************************************
FST info: dumpfile /builds/spade-lang/trawler/work/protocols/build/uart_tx_even_parity_bit_with_multiple_stop_bit_works/uart_tx.fst opened for output.
[INFO] test/uart_tx.py [even_parity_bit_with_multiple_stop_bit_works]: FAILED
[INFO] Running test/uart_rx.py [multiple_stop_bits_work]
[INFO] test/uart_rx.py [test]: PASSED
[INFO] Running test/uart_rx.py [incorrect_parity]
[INFO] test/uart_rx.py [quick_succession_works]: PASSED
[INFO] Running test/uart_rx.py [correct_parity]
[INFO] test/uart_rx.py [multiple_stop_bits_work]: PASSED
[INFO] Running test/uart_loopback.py [parity_two_stop]
[INFO] test/uart_rx.py [incorrect_parity]: PASSED
[INFO] Running test/uart_loopback.py [parity_one_stop]
[INFO] test/uart_rx.py [correct_parity]: PASSED
[INFO] Running test/uart_loopback.py [no_parity_two_stop]
[INFO] test/uart_loopback.py [parity_one_stop]: PASSED
[INFO] Running test/uart_loopback.py [no_parity_one_stop]
[INFO] test/uart_loopback.py [parity_two_stop]: PASSED
[INFO] Running test/spi.py [smoke_test]
[INFO] test/uart_loopback.py [no_parity_one_stop]: PASSED
[INFO] Running test/i2c/controller.py [test]
[INFO] test/uart_loopback.py [no_parity_two_stop]: PASSED
[INFO] Running test/i2c/byte_emitter.py [test]
================================================================================
FAILED: test/spi.py [smoke_test]
================================================================================
-.--ns INFO gpi ..mbed/gpi_embed.cpp:108 in set_program_name_in_venv Using Python virtual environment interpreter at /builds/spade-lang/trawler/work/protocols/build/.env/bin/python
-.--ns INFO gpi ../gpi/GpiCommon.cpp:101 in gpi_print_registered_impl VPI registered
0.00ns INFO cocotb Running on Icarus Verilog version 12.0 (stable)
0.00ns INFO cocotb Running tests with cocotb v1.9.2 from /builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb
0.00ns INFO cocotb Seeding Python random module with 1774020687
0.00ns INFO cocotb.regression Found test spi.smoke_test
0.00ns INFO cocotb.regression running smoke_test (1/1)
warning: The reference operator no longer has any effect.
┌─ py:1:1
│
1 │ &true
│ ^ Useless operator
--- Logging error ---
Traceback (most recent call last):
File "/usr/lib/python3.13/logging/__init__.py", line 1154, in emit
stream.write(msg + self.terminator)
~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1481-1482: ordinal not in range(128)
Call stack:
File "/builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb/scheduler.py", line 350, in _test_completed
self._handle_result(test)
File "/builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb/regression.py", line 339, in _handle_result
self._record_result(
File "/builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb/regression.py", line 515, in _record_result
test_pass, sim_failed = self._score_test(test, outcome)
File "/builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb/regression.py", line 446, in _score_test
self._log_test_failed(test, result, None)
File "/builds/spade-lang/trawler/work/protocols/build/.env/lib/python3.13/site-packages/cocotb/regression.py", line 480, in _log_test_failed
self.log.info(
Message: 'smoke_test failed'
Arguments: ()
note: A Spade expression failed to compile
**************************************************************************************
** TEST STATUS SIM TIME (ns) REAL TIME (s) RATIO (ns/s) **
**************************************************************************************
** spi.smoke_test FAIL 15.00 0.05 323.92 **
**************************************************************************************
** TESTS=1 PASS=0 FAIL=1 SKIP=0 15.00 0.10 150.45 **
**************************************************************************************
FST info: dumpfile /builds/spade-lang/trawler/work/protocols/build/spi_smoke_test/spi.fst opened for output.
[INFO] test/spi.py [smoke_test]: FAILED
[INFO] test/i2c/controller.py [test]: PASSED
[INFO] test/i2c/byte_emitter.py [test]: PASSED
ok test/byte_emitter.py 0/1 failed
🭼 test ok [build/i2c/byte_emitter_test/byte_emitter.fst]
ok test/controller.py 0/1 failed
🭼 test ok [build/i2c/controller_test/controller.fst]
FAIL test/spi.py 1/1 failed
🭼 smoke_test FAILED [build/spi_smoke_test/spi.fst]
ok test/uart_loopback.py 0/4 failed
🭼 no_parity_one_stop ok [build/uart_loopback_no_parity_one_stop/uart_loopback.fst]
🭼 no_parity_two_stop ok [build/uart_loopback_no_parity_two_stop/uart_loopback.fst]
🭼 parity_one_stop ok [build/uart_loopback_parity_one_stop/uart_loopback.fst]
🭼 parity_two_stop ok [build/uart_loopback_parity_two_stop/uart_loopback.fst]
ok test/uart_rx.py 0/5 failed
🭼 correct_parity ok [build/uart_rx_correct_parity/uart_rx.fst]
🭼 incorrect_parity ok [build/uart_rx_incorrect_parity/uart_rx.fst]
🭼 multiple_stop_bits_work ok [build/uart_rx_multiple_stop_bits_work/uart_rx.fst]
🭼 quick_succession_works ok [build/uart_rx_quick_succession_works/uart_rx.fst]
🭼 test ok [build/uart_rx_test/uart_rx.fst]
FAIL test/uart_tx.py 5/5 failed
🭼 even_parity_bit_with_multiple_stop_bit_works FAILED [build/uart_tx_even_parity_bit_with_multiple_stop_bit_works/uart_tx.fst]
🭼 even_parity_bit_works FAILED [build/uart_tx_even_parity_bit_works/uart_tx.fst]
🭼 odd_parity_bit_works FAILED [build/uart_tx_odd_parity_bit_works/uart_tx.fst]
🭼 simple_tx_test FAILED [build/uart_tx_simple_tx_test/uart_tx.fst]
🭼 simple_tx_test_with_2_stop_bits FAILED [build/uart_tx_simple_tx_test_with_2_stop_bits/uart_tx.fst]
HEAD is now at 8e12dae Bump to post port Spade
HEAD is now at 607d06f Bump to post port Spade
Error:
0: 6 test cases failed
Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.
Run with RUST_BACKTRACE=full to include source snippets.
quickscope (0/1)
build (fail)
[INFO] Failed to fetch pre-built Spade compiler, building locally.
========
Reason: Did not find a pre-built Spade compiler for git hash "be892f685e0ec1ed4f120b8d3f9b82d51f7a62a9"
========
[INFO] Building Spade Compiler
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on build directory
Finished `release` profile [optimized] target(s) in 4m 26s
[INFO] Failed to fetch pre-built surfer plugin, building locally.
========
Reason: Did not find a pre-built surfer plugin for git hash "be892f685e0ec1ed4f120b8d3f9b82d51f7a62a9"
========
[INFO] Building spade-surfer-plugin
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on build directory
Blocking waiting for file lock on build directory
Compiling serde_core v1.0.228
Compiling num-traits v0.2.19
error[E0463]: can't find crate for `std`
|
= note: the `wasm32-unknown-unknown` target may not be installed
= help: consider downloading the target with `rustup target add wasm32-unknown-unknown`
For more information about this error, try `rustc --explain E0463`.
error: could not compile `serde_core` (lib) due to 1 previous error
warning: build failed, waiting for other jobs to finish...
error[E0463]: can't find crate for `core`
|
= note: the `wasm32-unknown-unknown` target may not be installed
= help: consider downloading the target with `rustup target add wasm32-unknown-unknown`
error: could not compile `num-traits` (lib) due to 1 previous error
[WARN] Failed to build surfer plugin. Continuing anyway but Surfer integration will not work
[INFO] Cloning "ready_valid"
[INFO] Cloning "protocols"
[INFO] Cloning "nstd"
[INFO] Building spade code
[ERROR] Failed to build spade code
Cloning into '/builds/spade-lang/trawler/work/quickscope/build/libs/ready_valid'...
HEAD is now at 30e51db Make escape_bytes public
Cloning into '/builds/spade-lang/trawler/work/quickscope/build/libs/protocols'...
HEAD is now at 3170518 Fix tests
Cloning into '/builds/spade-lang/trawler/work/quickscope/build/libs/nstd'...
HEAD is now at 92b6b79 Add pub markers
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:14:16
│
14 │ ready: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:16:15
│
16 │ sclk: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:17:15
│
17 │ mosi: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:18:11
│
18 │ miso: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/uart.spade:117:17
│
117 │ tx: inv &bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:87:16
│
87 │ ready: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:89:15
│
89 │ sclk: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:91:24
│
91 │ sda_drive_low: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:221:15
│
221 │ sclk: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:223:24
│
223 │ sda_drive_low: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:227:16
│
227 │ ready: inv &bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/option_ext.spade:18:25
│
18 │ write_full: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ build/libs/ready_valid/src/main.spade:7:12
│
7 │ pub struct port Rv<T> {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
7 │ pub struct port Rv<T> {
│ ----
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:8:11
│
8 │ data: &Option<T>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:9:16
│
9 │ ready: inv &bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ build/libs/ready_valid/src/main.spade:148:8
│
148 │ struct port FifoOut<T> {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
148 │ struct port FifoOut<T> {
│ ----
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:149:11
│
149 │ full: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:150:12
│
150 │ empty: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
error: Unexpected `:`, expected `Identifier`
┌─ build/libs/ready_valid/src/main.spade:155:33
│
155 │ pub fn read_empty(self, wire: inv &bool) -> FifoOut<T> {
│ ^ expected `Identifier`
error: Unexpected `:`, expected `Identifier`
┌─ build/libs/ready_valid/src/main.spade:161:32
│
161 │ pub fn read_full(self, wire: inv &bool) -> FifoOut<T> {
│ ^ expected `Identifier`
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/nstd/src/mem.spade:9:15
│
9 │ where W: {uint_bits_to_fit(C)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
9 │ where W: {uint::bits_for(C)}
│ ~~~~~~~~~~~~~~
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/option_ext.spade:9:11
│
9 │ where O: {uint_bits_to_fit(V) - 1},
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
9 │ where O: {uint::bits_for(V) - 1},
│ ~~~~~~~~~~~~~~
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/option_ext.spade:10:11
│
10 │ O: {uint_bits_to_fit(V - 1)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
10 │ O: {uint::bits_for(V - 1)}
│ ~~~~~~~~~~~~~~
warning: The dereference operator no longer has any effect.
┌─ src/main.spade:7:56
│
7 │ reg(clk) to_emit reset(rst: None) = match (to_emit, *ds_ready.0, value) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/main.spade:15:7
│
15 │ Rv(&to_emit, ds_ready.1)
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/main.spade:35:25
│
35 │ match (triggered, *empty.0, *ready.0) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/main.spade:35:35
│
35 │ match (triggered, *empty.0, *ready.0) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/main.spade:52:7
│
52 │ Rv(&data_in, ready.1)
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:44:17
│
44 │ set ready = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:49:16
│
49 │ set sclk = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:56:16
│
56 │ set mosi = &match state {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:67:18
│
67 │ [*miso].concat(captured[0..7])
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/test.spade:10:44
│
10 │ let tx_out = inst uart_tx(clk, rst, Rv(&to_transmit, port.1), config);
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/protocols/src/uart.spade:34:23
│
34 │ match *transmit.data {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/uart.spade:97:26
│
97 │ set transmit.ready = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/uart.spade:119:18
│
119 │ set tx = &inst uart_tx(clk, rst, self, config);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:143:17
│
143 │ set ready = &match (state, inst read_mut_wire(emitter_ready)) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:168:25
│
168 │ set sda_drive_low = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:179:16
│
179 │ set sclk = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:271:16
│
271 │ set sclk = &sclk_driver_out.sclk;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:273:25
│
273 │ set sda_drive_low = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:283:17
│
283 │ set ready = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/nstd/src/mem.spade:25:77
│
25 │ (WritePort$(addr: w_addr, write: w_write), ReadPort$(addr: r_addr, out: &read_result))
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/nstd/src/array.spade:70:19
│
70 │ where NSize: {uint_bits_to_fit(N-1)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
70 │ where NSize: {uint::bits_for(N-1)}
│ ~~~~~~~~~~~~~~
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/nstd/src/array.spade:70:19
│
70 │ where NSize: {uint_bits_to_fit(N-1)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
70 │ where NSize: {uint::bits_for(N-1)}
│ ~~~~~~~~~~~~~~
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/option_ext.spade:25:42
│
25 │ let (write, read) = inst fifo::<{uint_bits_to_fit(Depth - 1)}, T, Depth>$(
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
25 │ let (write, read) = inst fifo::<{uint::bits_for(Depth - 1)}, T, Depth>$(
│ ~~~~~~~~~~~~~~
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/option_ext.spade:32:27
│
32 │ set write.write = &self;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:22:57
│
22 │ reg(clk) value reset(rst: None) = match (value, *self.data) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:32:26
│
32 │ set self.ready = &value.is_none();
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:35:19
│
35 │ data: &value,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:42:51
│
42 │ reg(clk) buffer reset(rst: None) = match (*ds, buffer, *self.data) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:42:64
│
42 │ reg(clk) buffer reset(rst: None) = match (*ds, buffer, *self.data) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:54:34
│
54 │ set self.ready = &match (*ds, buffer) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:54:26
│
54 │ set self.ready = &match (*ds, buffer) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:61:12
│
61 │ Rv(&buffer, ds_inv)
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:65:26
│
65 │ set self.ready = &false;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:69:26
│
69 │ set self.ready = &true;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:75:21
│
75 │ data: &(*self.data).map(f),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:75:19
│
75 │ data: &(*self.data).map(f),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:83:21
│
83 │ data: &(*self.data).and_then(f),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:83:19
│
83 │ data: &(*self.data).and_then(f),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:89:27
│
89 │ let self_takes = (*self.data).is_some();
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:94:44
│
94 │ set other.ready = &(!self_takes && *ds_ready);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:94:27
│
94 │ set other.ready = &(!self_takes && *ds_ready);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:114:48
│
114 │ set ready = if gate {ds_ready.0} else {&false};
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:116:34
│
116 │ if gate {data} else {&None},
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:132:29
│
132 │ match (timeout, *data, *ds_ready.0) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:132:36
│
132 │ match (timeout, *data, *ds_ready.0) {
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/main.spade:131:33
│
131 │ reg(clk) timeout: uint<{uint_bits_to_fit(N)}> reset(rst: 0) =
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
131 │ reg(clk) timeout: uint<{uint::bits_for(N)}> reset(rst: 0) =
│ ~~~~~~~~~~~~~~
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:139:23
│
139 │ set ready = &(*ds_ready.0 && timeout == 0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:139:21
│
139 │ set ready = &(*ds_ready.0 && timeout == 0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:140:41
│
140 │ Rv(if timeout == 0 {data} else {&None}, ds_ready.1)
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:178:28
│
178 │ set self.ready = &!*write_full.0;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:178:26
│
178 │ set self.ready = &!*write_full.0;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:179:32
│
179 │ let Rv(data, ready) = (*self.data)
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:187:22
│
187 │ empty: &(*data).is_none(),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:187:20
│
187 │ empty: &(*data).is_none(),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:208:51
│
208 │ match (state, inst read_mut_wire(ds), *self.data) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:218:26
│
218 │ set self.ready = &match state {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:223:34
│
223 │ let data = match (state, *self.data) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:231:19
│
231 │ data: &data,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:242:17
│
242 │ match (*data, num_left, *ds_ready.0) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:242:34
│
242 │ match (*data, num_left, *ds_ready.0) {
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/main.spade:241:50
│
241 │ reg(clk) (array, num_left): ([T; N], uint<{uint_bits_to_fit(N)}>) reset(rst: (std::undef::undef(), 0)) =
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
241 │ reg(clk) (array, num_left): ([T; N], uint<{uint::bits_for(N)}>) reset(rst: (std::undef::undef(), 0)) =
│ ~~~~~~~~~~~~~~
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:250:55
│
250 │ set ready = &(num_left == 0 || num_left == 1 && *ds_ready.0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:250:19
│
250 │ set ready = &(num_left == 0 || num_left == 1 && *ds_ready.0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:253:10
│
253 │ &match num_left {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:273:24
│
273 │ let rv = Rv$(data: &value, ready: inst new_mut_wire());
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:276:21
│
276 │ set out.ready = &ready;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:277:5
│
277 │ *out.data
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:286:24
│
286 │ let rv = Rv$(data: &value, ready: inst new_mut_wire());
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:289:21
│
289 │ set out.ready = &ready;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:290:5
│
290 │ *out.data
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:32:48
│
32 │ let (out, next_state) = match (state, (*self.data), *ds_ready) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:32:61
│
32 │ let (out, next_state) = match (state, (*self.data), *ds_ready) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:54:41
│
54 │ set self.ready = &match (state, *ds_ready) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:54:26
│
54 │ set self.ready = &match (state, *ds_ready) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:60:13
│
60 │ &out,
│ ^ Useless operator
error: _ has no method `into_element_stream`
┌─ src/main.spade:52:4
│
52 │ ╭ Rv(&data_in, ready.1)
53 │ │ .inst fifo_buffer::<SampleBuffer>(clk, rst)
54 │ │ .read_empty(empty.1)
55 │ │ .data
· │
58 │ │ })
59 │ │ .inst into_element_stream(clk, rst)
│ ╰─────────────────────────────────────────^
error: `ready_valid::FifoOut<core::Data>` has no method `read_empty`
┌─ src/main.spade:54:8
│
52 │ ╭ Rv(&data_in, ready.1)
53 │ │ .inst fifo_buffer::<SampleBuffer>(clk, rst)
54 │ │ .read_empty(empty.1)
│ │ ^^^^^^^^^^ No such method
│ ╰──────────────────────────' This has type `ready_valid::FifoOut<core::Data>`
error: Field access on {unknown} which is not a struct
┌─ src/main.spade:52:4
│
52 │ ╭ Rv(&data_in, ready.1)
53 │ │ .inst fifo_buffer::<SampleBuffer>(clk, rst)
54 │ │ .read_empty(empty.1)
│ ╰──────────────────────────^ Expected a struct, found {unknown}
│
= help: Field access is only allowed on structs
Error: aborting due to previous error
Location:
spade-compiler/src/main.rs:174:23
Error:
0: Failed to build spade code
Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.
Run with RUST_BACKTRACE=full to include source snippets.
ready_valid (1/1)
build (success)
spade-v (0/2)
build (fail)
[INFO] Failed to fetch pre-built Spade compiler, building locally.
========
Reason: Did not find a pre-built Spade compiler for git hash "be892f685e0ec1ed4f120b8d3f9b82d51f7a62a9"
========
[INFO] Building Spade Compiler
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on build directory
Finished `release` profile [optimized] target(s) in 4m 22s
[INFO] Failed to fetch pre-built surfer plugin, building locally.
========
Reason: Did not find a pre-built surfer plugin for git hash "be892f685e0ec1ed4f120b8d3f9b82d51f7a62a9"
========
[INFO] Building spade-surfer-plugin
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on build directory
Blocking waiting for file lock on build directory
Compiling serde_core v1.0.228
Compiling num-traits v0.2.19
error[E0463]: can't find crate for `std`
|
= note: the `wasm32-unknown-unknown` target may not be installed
= help: consider downloading the target with `rustup target add wasm32-unknown-unknown`
For more information about this error, try `rustc --explain E0463`.
error: could not compile `serde_core` (lib) due to 1 previous error
warning: build failed, waiting for other jobs to finish...
error[E0463]: can't find crate for `core`
|
= note: the `wasm32-unknown-unknown` target may not be installed
= help: consider downloading the target with `rustup target add wasm32-unknown-unknown`
error: could not compile `num-traits` (lib) due to 1 previous error
[WARN] Failed to build surfer plugin. Continuing anyway but Surfer integration will not work
[INFO] Cloning "protocols"
[INFO] Cloning "ready_valid"
[INFO] Cloning "nstd"
[INFO] Building spade code
[ERROR] Failed to build spade code
Cloning into '/builds/spade-lang/trawler/work/spade-v/build/libs/protocols'...
HEAD is now at 3170518 Fix tests
Cloning into '/builds/spade-lang/trawler/work/spade-v/build/libs/ready_valid'...
HEAD is now at d029c73 Bump Spade again
Cloning into '/builds/spade-lang/trawler/work/spade-v/build/libs/nstd'...
HEAD is now at 92b6b79 Add pub markers
warning: The & modifier on types no longer has any effect
┌─ src/csr.spade:5:40
│
5 │ entity mut_wire_with_read<T>() -> (inv &T, &T) {
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/csr.spade:5:44
│
5 │ entity mut_wire_with_read<T>() -> (inv &T, &T) {
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ src/csr.spade:10:12
│
10 │ pub struct port CsrInterface {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
10 │ pub struct port CsrInterface {
│ ----
warning: The & modifier on types no longer has any effect
┌─ src/csr.spade:11:14
│
11 │ rs1: inv &uint<32>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/csr.spade:12:18
│
12 │ rs1_idx: inv &uint<5>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/csr.spade:13:13
│
13 │ rd: inv &uint<5>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/csr.spade:14:15
│
14 │ addr: inv &int<12>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/csr.spade:15:13
│
15 │ op: inv &instructions::Op,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/csr.spade:17:13
│
17 │ result: &uint<32>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/csr.spade:18:11
│
18 │ mepc: &uint<32>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ src/bus.spade:45:12
│
45 │ pub struct port Bus {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
45 │ pub struct port Bus {
│ ----
warning: The & modifier on types no longer has any effect
┌─ src/bus.spade:46:18
│
46 │ control: inv &ControlSignals,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/bus.spade:48:13
│
48 │ result: &uint<32>
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ src/bus.spade:52:12
│
52 │ pub struct port Buses {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
52 │ pub struct port Buses {
│ ----
warning: The & modifier on types no longer has any effect
┌─ src/bus.spade:55:16
│
55 │ load_done: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/bus.spade:135:32
│
135 │ pub entity unmap_read(signals: &ControlSignals, range: (uint<33>, uint<33>)) -> Option<uint<32>> {
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/bus.spade:162:33
│
162 │ pub entity unmap_write(signals: &ControlSignals, region: (uint<33>, uint<33>))
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/peripherals/led.spade:8:18
│
8 │ bus_signals: &ControlSignals,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/peripherals/led.spade:9:20
│
9 │ led_state: inv & bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/peripherals/timer.spade:21:18
│
21 │ bus_signals: &ControlSignals,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ src/regfile.spade:5:12
│
5 │ pub struct port RegfilePort {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
5 │ pub struct port RegfilePort {
│ ----
warning: The & modifier on types no longer has any effect
┌─ src/regfile.spade:6:16
│
6 │ write: inv &Option<(uint<5>, int<32>)>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/regfile.spade:7:15
│
7 │ idxa: inv &uint<5>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/regfile.spade:8:15
│
8 │ idxb: inv &uint<5>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/regfile.spade:9:11
│
9 │ read: &(int<32>, int<32>)
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/option_ext.spade:18:25
│
18 │ write_full: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ build/libs/ready_valid/src/main.spade:7:12
│
7 │ pub struct port Rv<T> {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
7 │ pub struct port Rv<T> {
│ ----
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:8:11
│
8 │ data: &Option<T>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:9:16
│
9 │ ready: inv &bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ build/libs/ready_valid/src/main.spade:148:8
│
148 │ struct port FifoOut<T> {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
148 │ struct port FifoOut<T> {
│ ----
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:149:11
│
149 │ full: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:150:12
│
150 │ empty: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
error: Unexpected `:`, expected `Identifier`
┌─ build/libs/ready_valid/src/main.spade:155:33
│
155 │ pub fn read_empty(self, wire: inv &bool) -> FifoOut<T> {
│ ^ expected `Identifier`
error: Unexpected `:`, expected `Identifier`
┌─ build/libs/ready_valid/src/main.spade:161:32
│
161 │ pub fn read_full(self, wire: inv &bool) -> FifoOut<T> {
│ ^ expected `Identifier`
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:14:16
│
14 │ ready: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:16:15
│
16 │ sclk: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:17:15
│
17 │ mosi: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:18:11
│
18 │ miso: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/uart.spade:117:17
│
117 │ tx: inv &bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:87:16
│
87 │ ready: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:89:15
│
89 │ sclk: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:91:24
│
91 │ sda_drive_low: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:221:15
│
221 │ sclk: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:223:24
│
223 │ sda_drive_low: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:227:16
│
227 │ ready: inv &bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/option_ext.spade:9:11
│
9 │ where O: {uint_bits_to_fit(V) - 1},
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
9 │ where O: {uint::bits_for(V) - 1},
│ ~~~~~~~~~~~~~~
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/option_ext.spade:10:11
│
10 │ O: {uint_bits_to_fit(V - 1)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
10 │ O: {uint::bits_for(V - 1)}
│ ~~~~~~~~~~~~~~
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/nstd/src/mem.spade:9:15
│
9 │ where W: {uint_bits_to_fit(C)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
9 │ where W: {uint::bits_for(C)}
│ ~~~~~~~~~~~~~~
warning: The reference operator no longer has any effect.
┌─ src/csr.spade:7:9
│
7 │ (w, &inst read_mut_wire(w))
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/csr.spade:30:27
│
30 │ let (val, we) = match *op_v {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/csr.spade:31:37
│
31 │ instructions::Op::CSRRW => (*rs1_v, true),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/csr.spade:32:37
│
32 │ instructions::Op::CSRRS => (*rs1_v, !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/csr.spade:32:48
│
32 │ instructions::Op::CSRRS => (*rs1_v, !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/csr.spade:33:37
│
33 │ instructions::Op::CSRRC => (*rs1_v, !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/csr.spade:33:48
│
33 │ instructions::Op::CSRRC => (*rs1_v, !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/csr.spade:34:43
│
34 │ instructions::Op::CSRRWI => (zext(*rs1_idx_v), true),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/csr.spade:35:43
│
35 │ instructions::Op::CSRRSI => (zext(*rs1_idx_v), !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/csr.spade:35:59
│
35 │ instructions::Op::CSRRSI => (zext(*rs1_idx_v), !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/csr.spade:36:43
│
36 │ instructions::Op::CSRRCI => (zext(*rs1_idx_v), !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/csr.spade:36:59
│
36 │ instructions::Op::CSRRCI => (zext(*rs1_idx_v), !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/csr.spade:40:31
│
40 │ reg(clk) mepc = if we && (*addr_v) == 0x341 {val} else {mepc};
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/csr.spade:42:22
│
42 │ let result = if (*addr_v) == 0x341 {mepc} else {0};
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/csr.spade:51:15
│
51 │ mepc: &mepc,
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/csr.spade:52:17
│
52 │ result: &result
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/cpu.spade:57:31
│
57 │ let stopped = rst || !*buses.load_done;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/cpu.spade:62:24
│
62 │ load_done: *buses.load_done,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/cpu.spade:152:108
│
152 │ let jump_target = int_to_uint(pfc::jump_target$(op, pc, j_imm, b_imm, alu_value, mepc: uint_to_int(*csr_port.mepc)));
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/cpu.spade:154:28
│
154 │ set csr_port.rs1 = &int_to_uint(rs1);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/cpu.spade:155:32
│
155 │ set csr_port.rs1_idx = &rs1_idx;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/cpu.spade:156:29
│
156 │ set csr_port.addr = &trunc(i_imm);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/cpu.spade:157:27
│
157 │ set csr_port.rd = &rd_idx;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/cpu.spade:158:27
│
158 │ set csr_port.op = &op;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/cpu.spade:160:23
│
160 │ let csr_out = *csr_port.result;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/cpu.spade:299:27
│
299 │ set bus.control = &ControlSignals$(
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/cpu.spade:305:9
│
305 │ *bus.result
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/cpu.spade:309:27
│
309 │ set bus.control = &ControlSignals$(
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/cpu.spade:321:9
│
321 │ *bus.result
│ ^ Useless operator
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:28:54
│
28 │ Command::Write(write_data) => (zext(addr) >= range#0 && zext(addr) < range#1, write_data),
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:28:78
│
28 │ Command::Write(write_data) => (zext(addr) >= range#0 && zext(addr) < range#1, write_data),
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:31:27
│
31 │ let addr = addr-trunc(range#0);
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:106:17
│
106 │ assert (range#1 - range#0) == 16384;
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:106:27
│
106 │ assert (range#1 - range#0) == 16384;
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:109:41
│
109 │ split_control_write_signals(buses#0, range),
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:110:41
│
110 │ split_control_write_signals(buses#1, range)
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:112:85
│
112 │ let MemorySignals$(write_ports: wp0, addr_first_bits: _, access_width: _) = mem_signals#0;
│ ^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:113:85
│
113 │ let MemorySignals$(write_ports: wp1, addr_first_bits: _, access_width: _) = mem_signals#1;
│ ^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:116:22
│
116 │ assert match buses#1.cmd {Command::Read => true, Command::Nop => true, _ => false};
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:125:46
│
125 │ let data1_0 = inst read_memory(mem0, wp0[0]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:126:46
│
126 │ let data1_1 = inst read_memory(mem1, wp0[1]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:127:46
│
127 │ let data1_2 = inst read_memory(mem2, wp0[2]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:128:46
│
128 │ let data1_3 = inst read_memory(mem3, wp0[3]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:130:46
│
130 │ let data2_0 = inst read_memory(mem0, wp1[0]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:131:46
│
131 │ let data2_1 = inst read_memory(mem1, wp1[1]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:132:46
│
132 │ let data2_2 = inst read_memory(mem2, wp1[2]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:133:46
│
133 │ let data2_3 = inst read_memory(mem3, wp1[3]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:137:26
│
137 │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:137:35
│
137 │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
│ ^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:137:67
│
137 │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:137:76
│
137 │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
│ ^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: The reference operator no longer has any effect.
┌─ src/bus.spade:107:56
│
107 │ data: Bus $(control: data_control, result: &data_out),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/bus.spade:108:63
│
108 │ instruction: Bus $(control: insn_control, result: &insn_mem_out),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/bus.spade:109:24
│
109 │ load_done: &load_signals.done,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/bus.spade:141:9
│
141 │ ) = *signals;
│ ^ Useless operator
warning: Deprecated tuple syntax indexing
┌─ src/bus.spade:166:12
│
166 │ assert region#1 > region#0;
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/bus.spade:166:23
│
166 │ assert region#1 > region#0;
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: The dereference operator no longer has any effect.
┌─ src/bus.spade:172:9
│
172 │ ) = *signals;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/peripherals/led.spade:11:55
│
11 │ let ControlSignals$(cmd, addr, access_width: _) = *bus_signals;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/peripherals/led.spade:19:21
│
19 │ set led_state = &state;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/peripherals/timer.spade:85:51
│
85 │ inst timer$(clk, rst, mem_range, bus_signals: &bus_signals)
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/regfile.spade:19:29
│
19 │ set regfile.write = &write;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/regfile.spade:20:28
│
20 │ set regfile.idxa = &idxa;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/regfile.spade:21:28
│
21 │ set regfile.idxb = &idxb;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/regfile.spade:23:9
│
23 │ *regfile.read
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/regfile.spade:56:16
│
56 │ write: *w.write,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/regfile.spade:57:15
│
57 │ idxa: *w.idxa,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/regfile.spade:58:15
│
58 │ idxb: *w.idxb,
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/regfile.spade:61:18
│
61 │ set w.read = &out;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/regfile.spade:71:16
│
71 │ write: *w.write,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/regfile.spade:72:15
│
72 │ idxa: *w.idxa,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/regfile.spade:73:15
│
73 │ idxb: *w.idxb,
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/regfile.spade:76:18
│
76 │ set w.read = &out;
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/option_ext.spade:25:42
│
25 │ let (write, read) = inst fifo::<{uint_bits_to_fit(Depth - 1)}, T, Depth>$(
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
25 │ let (write, read) = inst fifo::<{uint::bits_for(Depth - 1)}, T, Depth>$(
│ ~~~~~~~~~~~~~~
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/option_ext.spade:32:27
│
32 │ set write.write = &self;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:22:57
│
22 │ reg(clk) value reset(rst: None) = match (value, *self.data) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:32:26
│
32 │ set self.ready = &value.is_none();
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:35:19
│
35 │ data: &value,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:42:51
│
42 │ reg(clk) buffer reset(rst: None) = match (*ds, buffer, *self.data) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:42:64
│
42 │ reg(clk) buffer reset(rst: None) = match (*ds, buffer, *self.data) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:54:34
│
54 │ set self.ready = &match (*ds, buffer) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:54:26
│
54 │ set self.ready = &match (*ds, buffer) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:61:12
│
61 │ Rv(&buffer, ds_inv)
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:65:26
│
65 │ set self.ready = &false;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:69:26
│
69 │ set self.ready = &true;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:75:21
│
75 │ data: &(*self.data).map(f),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:75:19
│
75 │ data: &(*self.data).map(f),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:83:21
│
83 │ data: &(*self.data).and_then(f),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:83:19
│
83 │ data: &(*self.data).and_then(f),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:89:27
│
89 │ let self_takes = (*self.data).is_some();
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:94:44
│
94 │ set other.ready = &(!self_takes && *ds_ready);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:94:27
│
94 │ set other.ready = &(!self_takes && *ds_ready);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:114:48
│
114 │ set ready = if gate {ds_ready.0} else {&false};
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:116:34
│
116 │ if gate {data} else {&None},
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:132:29
│
132 │ match (timeout, *data, *ds_ready.0) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:132:36
│
132 │ match (timeout, *data, *ds_ready.0) {
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/main.spade:131:33
│
131 │ reg(clk) timeout: uint<{uint_bits_to_fit(N)}> reset(rst: 0) =
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
131 │ reg(clk) timeout: uint<{uint::bits_for(N)}> reset(rst: 0) =
│ ~~~~~~~~~~~~~~
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:139:23
│
139 │ set ready = &(*ds_ready.0 && timeout == 0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:139:21
│
139 │ set ready = &(*ds_ready.0 && timeout == 0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:140:41
│
140 │ Rv(if timeout == 0 {data} else {&None}, ds_ready.1)
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:178:28
│
178 │ set self.ready = &!*write_full.0;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:178:26
│
178 │ set self.ready = &!*write_full.0;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:179:32
│
179 │ let Rv(data, ready) = (*self.data)
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:187:22
│
187 │ empty: &(*data).is_none(),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:187:20
│
187 │ empty: &(*data).is_none(),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:208:51
│
208 │ match (state, inst read_mut_wire(ds), *self.data) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:218:26
│
218 │ set self.ready = &match state {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:223:34
│
223 │ let data = match (state, *self.data) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:231:19
│
231 │ data: &data,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:242:17
│
242 │ match (*data, num_left, *ds_ready.0) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:242:34
│
242 │ match (*data, num_left, *ds_ready.0) {
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/main.spade:241:50
│
241 │ reg(clk) (array, num_left): ([T; N], uint<{uint_bits_to_fit(N)}>) reset(rst: (std::undef::undef(), 0)) =
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
241 │ reg(clk) (array, num_left): ([T; N], uint<{uint::bits_for(N)}>) reset(rst: (std::undef::undef(), 0)) =
│ ~~~~~~~~~~~~~~
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:250:55
│
250 │ set ready = &(num_left == 0 || num_left == 1 && *ds_ready.0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:250:19
│
250 │ set ready = &(num_left == 0 || num_left == 1 && *ds_ready.0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:253:10
│
253 │ &match num_left {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:273:24
│
273 │ let rv = Rv$(data: &value, ready: inst new_mut_wire());
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:276:21
│
276 │ set out.ready = &ready;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:277:5
│
277 │ *out.data
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:286:24
│
286 │ let rv = Rv$(data: &value, ready: inst new_mut_wire());
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:289:21
│
289 │ set out.ready = &ready;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:290:5
│
290 │ *out.data
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:32:48
│
32 │ let (out, next_state) = match (state, (*self.data), *ds_ready) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:32:61
│
32 │ let (out, next_state) = match (state, (*self.data), *ds_ready) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:54:41
│
54 │ set self.ready = &match (state, *ds_ready) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:54:26
│
54 │ set self.ready = &match (state, *ds_ready) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:60:13
│
60 │ &out,
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:44:17
│
44 │ set ready = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:49:16
│
49 │ set sclk = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:56:16
│
56 │ set mosi = &match state {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:67:18
│
67 │ [*miso].concat(captured[0..7])
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/test.spade:10:44
│
10 │ let tx_out = inst uart_tx(clk, rst, Rv(&to_transmit, port.1), config);
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/protocols/src/uart.spade:34:23
│
34 │ match *transmit.data {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/uart.spade:97:26
│
97 │ set transmit.ready = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/uart.spade:119:18
│
119 │ set tx = &inst uart_tx(clk, rst, self, config);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:143:17
│
143 │ set ready = &match (state, inst read_mut_wire(emitter_ready)) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:168:25
│
168 │ set sda_drive_low = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:179:16
│
179 │ set sclk = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:271:16
│
271 │ set sclk = &sclk_driver_out.sclk;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:273:25
│
273 │ set sda_drive_low = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:283:17
│
283 │ set ready = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/nstd/src/mem.spade:25:77
│
25 │ (WritePort$(addr: w_addr, write: w_write), ReadPort$(addr: r_addr, out: &read_result))
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/nstd/src/array.spade:70:19
│
70 │ where NSize: {uint_bits_to_fit(N-1)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
70 │ where NSize: {uint::bits_for(N-1)}
│ ~~~~~~~~~~~~~~
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/nstd/src/array.spade:70:19
│
70 │ where NSize: {uint_bits_to_fit(N-1)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
70 │ where NSize: {uint::bits_for(N-1)}
│ ~~~~~~~~~~~~~~
error: Trait bound not satisfied. spadev::bus::Buses does not implement core::Data
┌─ src/cpu.spade:46:5
│
46 │ buses: Buses,
│ ^^^^^
│ │
│ spadev::bus::Buses does not implement core::Data
│ The type of this argument is not Data which means it cannot be stored in a register.
·
52 │ ╭ ╭ {
53 │ │ │ 'pc
54 │ │ │
55 │ │ │ let NOP = 0x00000013;
· │ │
244 │ │ │ )
245 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An value not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the argument a wire
│
46 │ wire buses: Buses,
│ +++++
error: Trait bound not satisfied. spadev::bus::Bus does not implement core::Data
┌─ src/cpu.spade:278:5
│
278 │ bus: Bus,
│ ^^^
│ │
│ spadev::bus::Bus does not implement core::Data
│ The type of this argument is not Data which means it cannot be stored in a register.
·
282 │ ) -> uint<32> {
│ ╭─────────────────'
│ │ ╭───────────────'
283 │ │ │ let write_data = rs2;
284 │ │ │
285 │ │ │ let (access_width, memory_command) = match op {
· │ │
305 │ │ │ *bus.result
306 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An value not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the argument a wire
│
278 │ wire bus: Bus,
│ +++++
error: Trait bound not satisfied. spadev::bus::Bus does not implement core::Data
┌─ src/cpu.spade:308:38
│
308 │ pipeline(1) set_insn_bus(clk: clock, bus: Bus, pc_option: Option<uint<32>>) -> uint<32> {
│ ^^^
│ │
│ spadev::bus::Bus does not implement core::Data
│ The type of this argument is not Data which means it cannot be stored in a register.
│ ╭───────────────────────────────────────────────────────────────────────────────────────────'
│ │ ╭─────────────────────────────────────────────────────────────────────────────────────────'
309 │ │ │ set bus.control = &ControlSignals$(
310 │ │ │ access_width: AccessWidth::Full(),
311 │ │ │ addr: match pc_option {
· │ │
321 │ │ │ *bus.result
322 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An value not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the argument a wire
│
308 │ pipeline(1) set_insn_bus(clk: clock, wire bus: Bus, pc_option: Option<uint<32>>) -> uint<32> {
│ +++++
error: Trait bound not satisfied. Memory<uint<8>, 4096> does not implement core::Data
┌─ src/memory.spade:120:13
│
105 │ ) -> (uint<32>, uint<32>) {
│ ╭─────────────────────────────'
│ │ ╭───────────────────────────'
106 │ │ │ assert (range#1 - range#0) == 16384;
107 │ │ │
108 │ │ │ let mem_signals = (
· │ │
120 │ │ │ let mem0: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[0]]);
│ │ │ ^^^^
│ │ │ │
│ │ │ Memory<uint<8>, 4096> does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
· │ │
137 │ │ │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
138 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
120 │ let wire mem0: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[0]]);
│ +++++
error: Trait bound not satisfied. Memory<uint<8>, 4096> does not implement core::Data
┌─ src/memory.spade:121:13
│
105 │ ) -> (uint<32>, uint<32>) {
│ ╭─────────────────────────────'
│ │ ╭───────────────────────────'
106 │ │ │ assert (range#1 - range#0) == 16384;
107 │ │ │
108 │ │ │ let mem_signals = (
· │ │
121 │ │ │ let mem1: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[1]]);
│ │ │ ^^^^
│ │ │ │
│ │ │ Memory<uint<8>, 4096> does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
· │ │
137 │ │ │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
138 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
121 │ let wire mem1: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[1]]);
│ +++++
error: Trait bound not satisfied. Memory<uint<8>, 4096> does not implement core::Data
┌─ src/memory.spade:122:13
│
105 │ ) -> (uint<32>, uint<32>) {
│ ╭─────────────────────────────'
│ │ ╭───────────────────────────'
106 │ │ │ assert (range#1 - range#0) == 16384;
107 │ │ │
108 │ │ │ let mem_signals = (
· │ │
122 │ │ │ let mem2: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[2]]);
│ │ │ ^^^^
│ │ │ │
│ │ │ Memory<uint<8>, 4096> does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
· │ │
137 │ │ │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
138 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
122 │ let wire mem2: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[2]]);
│ +++++
error: Trait bound not satisfied. Memory<uint<8>, 4096> does not implement core::Data
┌─ src/memory.spade:123:13
│
105 │ ) -> (uint<32>, uint<32>) {
│ ╭─────────────────────────────'
│ │ ╭───────────────────────────'
106 │ │ │ assert (range#1 - range#0) == 16384;
107 │ │ │
108 │ │ │ let mem_signals = (
· │ │
123 │ │ │ let mem3: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[3]]);
│ │ │ ^^^^
│ │ │ │
│ │ │ Memory<uint<8>, 4096> does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
· │ │
137 │ │ │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
138 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
123 │ let wire mem3: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[3]]);
│ +++++
error: Trait bound not satisfied. inv spadev::bus::ControlSignals does not implement core::Data
┌─ src/bus.spade:69:13
│
68 │ pub(lib) pipeline(1) test_bus(clk: clock, load_signals: ProgramLoadSignals) -> Buses {
│ ╭────────────────────────────────────────────────────────────────────────────────────────'
│ │ ╭──────────────────────────────────────────────────────────────────────────────────────'
69 │ │ │ let data_control = inst new_mut_wire();
│ │ │ ^^^^^^^^^^^^
│ │ │ │
│ │ │ inv spadev::bus::ControlSignals does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
70 │ │ │ let insn_control = inst new_mut_wire();
71 │ │ │
· │ │
110 │ │ │ )
111 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
69 │ let wire data_control = inst new_mut_wire();
│ +++++
error: Trait bound not satisfied. inv spadev::bus::ControlSignals does not implement core::Data
┌─ src/bus.spade:70:13
│
68 │ pub(lib) pipeline(1) test_bus(clk: clock, load_signals: ProgramLoadSignals) -> Buses {
│ ╭────────────────────────────────────────────────────────────────────────────────────────'
│ │ ╭──────────────────────────────────────────────────────────────────────────────────────'
69 │ │ │ let data_control = inst new_mut_wire();
70 │ │ │ let insn_control = inst new_mut_wire();
│ │ │ ^^^^^^^^^^^^
│ │ │ │
│ │ │ inv spadev::bus::ControlSignals does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
71 │ │ │
· │ │
110 │ │ │ )
111 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
70 │ let wire insn_control = inst new_mut_wire();
│ +++++
error: Trait bound not satisfied. spadev::regfile::RegfilePort does not implement core::Data
┌─ src/regfile.spade:14:5
│
14 │ regfile: RegfilePort,
│ ^^^^^^^
│ │
│ spadev::regfile::RegfilePort does not implement core::Data
│ The type of this argument is not Data which means it cannot be stored in a register.
·
18 │ ) -> (int<32>, int<32>) {
│ ╭───────────────────────────'
│ │ ╭─────────────────────────'
19 │ │ │ set regfile.write = &write;
20 │ │ │ set regfile.idxa = &idxa;
21 │ │ │ set regfile.idxb = &idxb;
22 │ │ │ reg;
23 │ │ │ *regfile.read
24 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An value not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the argument a wire
│
14 │ wire regfile: RegfilePort,
│ +++++
error: Trait bound not satisfied. Memory<int<32>, _> does not implement core::Data
┌─ src/regfile.spade:38:13
│
31 │ ) -> (int<32>, int<32>) {
│ ╭───────────────────────────'
│ │ ╭─────────────────────────'
32 │ │ │ let (we, dreg, dval) = match write {
33 │ │ │ Option::Some((dreg, dval)) => (true, dreg, dval),
34 │ │ │ // NOTE: We really need to add a way to specify don't care here
· │ │
38 │ │ │ let regs: Memory<int<32>, N> = inst clocked_memory(clk, [(we, trunc(dreg), dval)]);
│ │ │ ^^^^
│ │ │ │
│ │ │ Memory<int<32>, _> does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
· │ │
48 │ │ │ )
49 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
38 │ let wire regs: Memory<int<32>, N> = inst clocked_memory(clk, [(we, trunc(dreg), dval)]);
│ +++++
Error: aborting due to previous error
Location:
spade-compiler/src/main.rs:174:23
Error:
0: Failed to build spade code
Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.
Run with RUST_BACKTRACE=full to include source snippets.
test (fail)
[INFO] Failed to fetch pre-built surfer plugin, building locally.
========
Reason: Did not find a pre-built surfer plugin for git hash "be892f685e0ec1ed4f120b8d3f9b82d51f7a62a9"
========
[INFO] Building spade-surfer-plugin
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on build directory
Blocking waiting for file lock on build directory
Compiling serde_core v1.0.228
Compiling num-traits v0.2.19
error[E0463]: can't find crate for `std`
|
= note: the `wasm32-unknown-unknown` target may not be installed
= help: consider downloading the target with `rustup target add wasm32-unknown-unknown`
For more information about this error, try `rustc --explain E0463`.
error: could not compile `serde_core` (lib) due to 1 previous error
warning: build failed, waiting for other jobs to finish...
error[E0463]: can't find crate for `core`
|
= note: the `wasm32-unknown-unknown` target may not be installed
= help: consider downloading the target with `rustup target add wasm32-unknown-unknown`
error: could not compile `num-traits` (lib) due to 1 previous error
[WARN] Failed to build surfer plugin. Continuing anyway but Surfer integration will not work
[INFO] Building spade code
[ERROR] Failed to build spade code
HEAD is now at 3170518 Fix tests
HEAD is now at d029c73 Bump Spade again
HEAD is now at 92b6b79 Add pub markers
warning: The & modifier on types no longer has any effect
┌─ src/csr.spade:5:40
│
5 │ entity mut_wire_with_read<T>() -> (inv &T, &T) {
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/csr.spade:5:44
│
5 │ entity mut_wire_with_read<T>() -> (inv &T, &T) {
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ src/csr.spade:10:12
│
10 │ pub struct port CsrInterface {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
10 │ pub struct port CsrInterface {
│ ----
warning: The & modifier on types no longer has any effect
┌─ src/csr.spade:11:14
│
11 │ rs1: inv &uint<32>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/csr.spade:12:18
│
12 │ rs1_idx: inv &uint<5>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/csr.spade:13:13
│
13 │ rd: inv &uint<5>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/csr.spade:14:15
│
14 │ addr: inv &int<12>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/csr.spade:15:13
│
15 │ op: inv &instructions::Op,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/csr.spade:17:13
│
17 │ result: &uint<32>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/csr.spade:18:11
│
18 │ mepc: &uint<32>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ src/bus.spade:45:12
│
45 │ pub struct port Bus {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
45 │ pub struct port Bus {
│ ----
warning: The & modifier on types no longer has any effect
┌─ src/bus.spade:46:18
│
46 │ control: inv &ControlSignals,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/bus.spade:48:13
│
48 │ result: &uint<32>
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ src/bus.spade:52:12
│
52 │ pub struct port Buses {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
52 │ pub struct port Buses {
│ ----
warning: The & modifier on types no longer has any effect
┌─ src/bus.spade:55:16
│
55 │ load_done: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/bus.spade:135:32
│
135 │ pub entity unmap_read(signals: &ControlSignals, range: (uint<33>, uint<33>)) -> Option<uint<32>> {
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/bus.spade:162:33
│
162 │ pub entity unmap_write(signals: &ControlSignals, region: (uint<33>, uint<33>))
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/peripherals/led.spade:8:18
│
8 │ bus_signals: &ControlSignals,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/peripherals/led.spade:9:20
│
9 │ led_state: inv & bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/peripherals/timer.spade:21:18
│
21 │ bus_signals: &ControlSignals,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ src/regfile.spade:5:12
│
5 │ pub struct port RegfilePort {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
5 │ pub struct port RegfilePort {
│ ----
warning: The & modifier on types no longer has any effect
┌─ src/regfile.spade:6:16
│
6 │ write: inv &Option<(uint<5>, int<32>)>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/regfile.spade:7:15
│
7 │ idxa: inv &uint<5>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/regfile.spade:8:15
│
8 │ idxb: inv &uint<5>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/regfile.spade:9:11
│
9 │ read: &(int<32>, int<32>)
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:14:16
│
14 │ ready: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:16:15
│
16 │ sclk: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:17:15
│
17 │ mosi: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:18:11
│
18 │ miso: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/uart.spade:117:17
│
117 │ tx: inv &bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:87:16
│
87 │ ready: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:89:15
│
89 │ sclk: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:91:24
│
91 │ sda_drive_low: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:221:15
│
221 │ sclk: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:223:24
│
223 │ sda_drive_low: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:227:16
│
227 │ ready: inv &bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/option_ext.spade:18:25
│
18 │ write_full: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ build/libs/ready_valid/src/main.spade:7:12
│
7 │ pub struct port Rv<T> {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
7 │ pub struct port Rv<T> {
│ ----
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:8:11
│
8 │ data: &Option<T>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:9:16
│
9 │ ready: inv &bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ build/libs/ready_valid/src/main.spade:148:8
│
148 │ struct port FifoOut<T> {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
148 │ struct port FifoOut<T> {
│ ----
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:149:11
│
149 │ full: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:150:12
│
150 │ empty: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
error: Unexpected `:`, expected `Identifier`
┌─ build/libs/ready_valid/src/main.spade:155:33
│
155 │ pub fn read_empty(self, wire: inv &bool) -> FifoOut<T> {
│ ^ expected `Identifier`
error: Unexpected `:`, expected `Identifier`
┌─ build/libs/ready_valid/src/main.spade:161:32
│
161 │ pub fn read_full(self, wire: inv &bool) -> FifoOut<T> {
│ ^ expected `Identifier`
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/option_ext.spade:9:11
│
9 │ where O: {uint_bits_to_fit(V) - 1},
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
9 │ where O: {uint::bits_for(V) - 1},
│ ~~~~~~~~~~~~~~
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/option_ext.spade:10:11
│
10 │ O: {uint_bits_to_fit(V - 1)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
10 │ O: {uint::bits_for(V - 1)}
│ ~~~~~~~~~~~~~~
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/nstd/src/mem.spade:9:15
│
9 │ where W: {uint_bits_to_fit(C)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
9 │ where W: {uint::bits_for(C)}
│ ~~~~~~~~~~~~~~
warning: The reference operator no longer has any effect.
┌─ src/csr.spade:7:9
│
7 │ (w, &inst read_mut_wire(w))
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/csr.spade:30:27
│
30 │ let (val, we) = match *op_v {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/csr.spade:31:37
│
31 │ instructions::Op::CSRRW => (*rs1_v, true),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/csr.spade:32:37
│
32 │ instructions::Op::CSRRS => (*rs1_v, !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/csr.spade:32:48
│
32 │ instructions::Op::CSRRS => (*rs1_v, !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/csr.spade:33:37
│
33 │ instructions::Op::CSRRC => (*rs1_v, !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/csr.spade:33:48
│
33 │ instructions::Op::CSRRC => (*rs1_v, !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/csr.spade:34:43
│
34 │ instructions::Op::CSRRWI => (zext(*rs1_idx_v), true),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/csr.spade:35:43
│
35 │ instructions::Op::CSRRSI => (zext(*rs1_idx_v), !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/csr.spade:35:59
│
35 │ instructions::Op::CSRRSI => (zext(*rs1_idx_v), !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/csr.spade:36:43
│
36 │ instructions::Op::CSRRCI => (zext(*rs1_idx_v), !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/csr.spade:36:59
│
36 │ instructions::Op::CSRRCI => (zext(*rs1_idx_v), !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/csr.spade:40:31
│
40 │ reg(clk) mepc = if we && (*addr_v) == 0x341 {val} else {mepc};
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/csr.spade:42:22
│
42 │ let result = if (*addr_v) == 0x341 {mepc} else {0};
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/csr.spade:51:15
│
51 │ mepc: &mepc,
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/csr.spade:52:17
│
52 │ result: &result
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/cpu.spade:57:31
│
57 │ let stopped = rst || !*buses.load_done;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/cpu.spade:62:24
│
62 │ load_done: *buses.load_done,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/cpu.spade:152:108
│
152 │ let jump_target = int_to_uint(pfc::jump_target$(op, pc, j_imm, b_imm, alu_value, mepc: uint_to_int(*csr_port.mepc)));
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/cpu.spade:154:28
│
154 │ set csr_port.rs1 = &int_to_uint(rs1);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/cpu.spade:155:32
│
155 │ set csr_port.rs1_idx = &rs1_idx;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/cpu.spade:156:29
│
156 │ set csr_port.addr = &trunc(i_imm);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/cpu.spade:157:27
│
157 │ set csr_port.rd = &rd_idx;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/cpu.spade:158:27
│
158 │ set csr_port.op = &op;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/cpu.spade:160:23
│
160 │ let csr_out = *csr_port.result;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/cpu.spade:299:27
│
299 │ set bus.control = &ControlSignals$(
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/cpu.spade:305:9
│
305 │ *bus.result
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/cpu.spade:309:27
│
309 │ set bus.control = &ControlSignals$(
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/cpu.spade:321:9
│
321 │ *bus.result
│ ^ Useless operator
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:28:54
│
28 │ Command::Write(write_data) => (zext(addr) >= range#0 && zext(addr) < range#1, write_data),
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:28:78
│
28 │ Command::Write(write_data) => (zext(addr) >= range#0 && zext(addr) < range#1, write_data),
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:31:27
│
31 │ let addr = addr-trunc(range#0);
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:106:17
│
106 │ assert (range#1 - range#0) == 16384;
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:106:27
│
106 │ assert (range#1 - range#0) == 16384;
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:109:41
│
109 │ split_control_write_signals(buses#0, range),
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:110:41
│
110 │ split_control_write_signals(buses#1, range)
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:112:85
│
112 │ let MemorySignals$(write_ports: wp0, addr_first_bits: _, access_width: _) = mem_signals#0;
│ ^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:113:85
│
113 │ let MemorySignals$(write_ports: wp1, addr_first_bits: _, access_width: _) = mem_signals#1;
│ ^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:116:22
│
116 │ assert match buses#1.cmd {Command::Read => true, Command::Nop => true, _ => false};
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:125:46
│
125 │ let data1_0 = inst read_memory(mem0, wp0[0]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:126:46
│
126 │ let data1_1 = inst read_memory(mem1, wp0[1]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:127:46
│
127 │ let data1_2 = inst read_memory(mem2, wp0[2]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:128:46
│
128 │ let data1_3 = inst read_memory(mem3, wp0[3]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:130:46
│
130 │ let data2_0 = inst read_memory(mem0, wp1[0]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:131:46
│
131 │ let data2_1 = inst read_memory(mem1, wp1[1]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:132:46
│
132 │ let data2_2 = inst read_memory(mem2, wp1[2]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:133:46
│
133 │ let data2_3 = inst read_memory(mem3, wp1[3]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:137:26
│
137 │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:137:35
│
137 │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
│ ^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:137:67
│
137 │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/memory.spade:137:76
│
137 │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
│ ^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: The reference operator no longer has any effect.
┌─ src/bus.spade:107:56
│
107 │ data: Bus $(control: data_control, result: &data_out),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/bus.spade:108:63
│
108 │ instruction: Bus $(control: insn_control, result: &insn_mem_out),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/bus.spade:109:24
│
109 │ load_done: &load_signals.done,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/bus.spade:141:9
│
141 │ ) = *signals;
│ ^ Useless operator
warning: Deprecated tuple syntax indexing
┌─ src/bus.spade:166:12
│
166 │ assert region#1 > region#0;
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/bus.spade:166:23
│
166 │ assert region#1 > region#0;
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: The dereference operator no longer has any effect.
┌─ src/bus.spade:172:9
│
172 │ ) = *signals;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/peripherals/led.spade:11:55
│
11 │ let ControlSignals$(cmd, addr, access_width: _) = *bus_signals;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/peripherals/led.spade:19:21
│
19 │ set led_state = &state;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/peripherals/timer.spade:85:51
│
85 │ inst timer$(clk, rst, mem_range, bus_signals: &bus_signals)
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/regfile.spade:19:29
│
19 │ set regfile.write = &write;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/regfile.spade:20:28
│
20 │ set regfile.idxa = &idxa;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/regfile.spade:21:28
│
21 │ set regfile.idxb = &idxb;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/regfile.spade:23:9
│
23 │ *regfile.read
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/regfile.spade:56:16
│
56 │ write: *w.write,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/regfile.spade:57:15
│
57 │ idxa: *w.idxa,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/regfile.spade:58:15
│
58 │ idxb: *w.idxb,
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/regfile.spade:61:18
│
61 │ set w.read = &out;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/regfile.spade:71:16
│
71 │ write: *w.write,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/regfile.spade:72:15
│
72 │ idxa: *w.idxa,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ src/regfile.spade:73:15
│
73 │ idxb: *w.idxb,
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/regfile.spade:76:18
│
76 │ set w.read = &out;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:44:17
│
44 │ set ready = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:49:16
│
49 │ set sclk = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:56:16
│
56 │ set mosi = &match state {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:67:18
│
67 │ [*miso].concat(captured[0..7])
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/test.spade:10:44
│
10 │ let tx_out = inst uart_tx(clk, rst, Rv(&to_transmit, port.1), config);
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/protocols/src/uart.spade:34:23
│
34 │ match *transmit.data {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/uart.spade:97:26
│
97 │ set transmit.ready = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/uart.spade:119:18
│
119 │ set tx = &inst uart_tx(clk, rst, self, config);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:143:17
│
143 │ set ready = &match (state, inst read_mut_wire(emitter_ready)) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:168:25
│
168 │ set sda_drive_low = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:179:16
│
179 │ set sclk = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:271:16
│
271 │ set sclk = &sclk_driver_out.sclk;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:273:25
│
273 │ set sda_drive_low = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:283:17
│
283 │ set ready = &match state {
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/option_ext.spade:25:42
│
25 │ let (write, read) = inst fifo::<{uint_bits_to_fit(Depth - 1)}, T, Depth>$(
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
25 │ let (write, read) = inst fifo::<{uint::bits_for(Depth - 1)}, T, Depth>$(
│ ~~~~~~~~~~~~~~
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/option_ext.spade:32:27
│
32 │ set write.write = &self;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:22:57
│
22 │ reg(clk) value reset(rst: None) = match (value, *self.data) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:32:26
│
32 │ set self.ready = &value.is_none();
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:35:19
│
35 │ data: &value,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:42:51
│
42 │ reg(clk) buffer reset(rst: None) = match (*ds, buffer, *self.data) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:42:64
│
42 │ reg(clk) buffer reset(rst: None) = match (*ds, buffer, *self.data) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:54:34
│
54 │ set self.ready = &match (*ds, buffer) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:54:26
│
54 │ set self.ready = &match (*ds, buffer) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:61:12
│
61 │ Rv(&buffer, ds_inv)
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:65:26
│
65 │ set self.ready = &false;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:69:26
│
69 │ set self.ready = &true;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:75:21
│
75 │ data: &(*self.data).map(f),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:75:19
│
75 │ data: &(*self.data).map(f),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:83:21
│
83 │ data: &(*self.data).and_then(f),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:83:19
│
83 │ data: &(*self.data).and_then(f),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:89:27
│
89 │ let self_takes = (*self.data).is_some();
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:94:44
│
94 │ set other.ready = &(!self_takes && *ds_ready);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:94:27
│
94 │ set other.ready = &(!self_takes && *ds_ready);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:114:48
│
114 │ set ready = if gate {ds_ready.0} else {&false};
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:116:34
│
116 │ if gate {data} else {&None},
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:132:29
│
132 │ match (timeout, *data, *ds_ready.0) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:132:36
│
132 │ match (timeout, *data, *ds_ready.0) {
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/main.spade:131:33
│
131 │ reg(clk) timeout: uint<{uint_bits_to_fit(N)}> reset(rst: 0) =
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
131 │ reg(clk) timeout: uint<{uint::bits_for(N)}> reset(rst: 0) =
│ ~~~~~~~~~~~~~~
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:139:23
│
139 │ set ready = &(*ds_ready.0 && timeout == 0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:139:21
│
139 │ set ready = &(*ds_ready.0 && timeout == 0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:140:41
│
140 │ Rv(if timeout == 0 {data} else {&None}, ds_ready.1)
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:178:28
│
178 │ set self.ready = &!*write_full.0;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:178:26
│
178 │ set self.ready = &!*write_full.0;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:179:32
│
179 │ let Rv(data, ready) = (*self.data)
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:187:22
│
187 │ empty: &(*data).is_none(),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:187:20
│
187 │ empty: &(*data).is_none(),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:208:51
│
208 │ match (state, inst read_mut_wire(ds), *self.data) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:218:26
│
218 │ set self.ready = &match state {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:223:34
│
223 │ let data = match (state, *self.data) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:231:19
│
231 │ data: &data,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:242:17
│
242 │ match (*data, num_left, *ds_ready.0) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:242:34
│
242 │ match (*data, num_left, *ds_ready.0) {
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/main.spade:241:50
│
241 │ reg(clk) (array, num_left): ([T; N], uint<{uint_bits_to_fit(N)}>) reset(rst: (std::undef::undef(), 0)) =
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
241 │ reg(clk) (array, num_left): ([T; N], uint<{uint::bits_for(N)}>) reset(rst: (std::undef::undef(), 0)) =
│ ~~~~~~~~~~~~~~
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:250:55
│
250 │ set ready = &(num_left == 0 || num_left == 1 && *ds_ready.0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:250:19
│
250 │ set ready = &(num_left == 0 || num_left == 1 && *ds_ready.0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:253:10
│
253 │ &match num_left {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:273:24
│
273 │ let rv = Rv$(data: &value, ready: inst new_mut_wire());
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:276:21
│
276 │ set out.ready = &ready;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:277:5
│
277 │ *out.data
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:286:24
│
286 │ let rv = Rv$(data: &value, ready: inst new_mut_wire());
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:289:21
│
289 │ set out.ready = &ready;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:290:5
│
290 │ *out.data
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:32:48
│
32 │ let (out, next_state) = match (state, (*self.data), *ds_ready) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:32:61
│
32 │ let (out, next_state) = match (state, (*self.data), *ds_ready) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:54:41
│
54 │ set self.ready = &match (state, *ds_ready) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:54:26
│
54 │ set self.ready = &match (state, *ds_ready) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:60:13
│
60 │ &out,
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/nstd/src/mem.spade:25:77
│
25 │ (WritePort$(addr: w_addr, write: w_write), ReadPort$(addr: r_addr, out: &read_result))
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/nstd/src/array.spade:70:19
│
70 │ where NSize: {uint_bits_to_fit(N-1)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
70 │ where NSize: {uint::bits_for(N-1)}
│ ~~~~~~~~~~~~~~
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/nstd/src/array.spade:70:19
│
70 │ where NSize: {uint_bits_to_fit(N-1)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
70 │ where NSize: {uint::bits_for(N-1)}
│ ~~~~~~~~~~~~~~
error: Trait bound not satisfied. spadev::bus::Buses does not implement core::Data
┌─ src/cpu.spade:46:5
│
46 │ buses: Buses,
│ ^^^^^
│ │
│ spadev::bus::Buses does not implement core::Data
│ The type of this argument is not Data which means it cannot be stored in a register.
·
52 │ ╭ ╭ {
53 │ │ │ 'pc
54 │ │ │
55 │ │ │ let NOP = 0x00000013;
· │ │
244 │ │ │ )
245 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An value not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the argument a wire
│
46 │ wire buses: Buses,
│ +++++
error: Trait bound not satisfied. spadev::bus::Bus does not implement core::Data
┌─ src/cpu.spade:278:5
│
278 │ bus: Bus,
│ ^^^
│ │
│ spadev::bus::Bus does not implement core::Data
│ The type of this argument is not Data which means it cannot be stored in a register.
·
282 │ ) -> uint<32> {
│ ╭─────────────────'
│ │ ╭───────────────'
283 │ │ │ let write_data = rs2;
284 │ │ │
285 │ │ │ let (access_width, memory_command) = match op {
· │ │
305 │ │ │ *bus.result
306 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An value not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the argument a wire
│
278 │ wire bus: Bus,
│ +++++
error: Trait bound not satisfied. spadev::bus::Bus does not implement core::Data
┌─ src/cpu.spade:308:38
│
308 │ pipeline(1) set_insn_bus(clk: clock, bus: Bus, pc_option: Option<uint<32>>) -> uint<32> {
│ ^^^
│ │
│ spadev::bus::Bus does not implement core::Data
│ The type of this argument is not Data which means it cannot be stored in a register.
│ ╭───────────────────────────────────────────────────────────────────────────────────────────'
│ │ ╭─────────────────────────────────────────────────────────────────────────────────────────'
309 │ │ │ set bus.control = &ControlSignals$(
310 │ │ │ access_width: AccessWidth::Full(),
311 │ │ │ addr: match pc_option {
· │ │
321 │ │ │ *bus.result
322 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An value not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the argument a wire
│
308 │ pipeline(1) set_insn_bus(clk: clock, wire bus: Bus, pc_option: Option<uint<32>>) -> uint<32> {
│ +++++
error: Trait bound not satisfied. Memory<uint<8>, 4096> does not implement core::Data
┌─ src/memory.spade:120:13
│
105 │ ) -> (uint<32>, uint<32>) {
│ ╭─────────────────────────────'
│ │ ╭───────────────────────────'
106 │ │ │ assert (range#1 - range#0) == 16384;
107 │ │ │
108 │ │ │ let mem_signals = (
· │ │
120 │ │ │ let mem0: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[0]]);
│ │ │ ^^^^
│ │ │ │
│ │ │ Memory<uint<8>, 4096> does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
· │ │
137 │ │ │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
138 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
120 │ let wire mem0: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[0]]);
│ +++++
error: Trait bound not satisfied. Memory<uint<8>, 4096> does not implement core::Data
┌─ src/memory.spade:121:13
│
105 │ ) -> (uint<32>, uint<32>) {
│ ╭─────────────────────────────'
│ │ ╭───────────────────────────'
106 │ │ │ assert (range#1 - range#0) == 16384;
107 │ │ │
108 │ │ │ let mem_signals = (
· │ │
121 │ │ │ let mem1: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[1]]);
│ │ │ ^^^^
│ │ │ │
│ │ │ Memory<uint<8>, 4096> does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
· │ │
137 │ │ │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
138 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
121 │ let wire mem1: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[1]]);
│ +++++
error: Trait bound not satisfied. Memory<uint<8>, 4096> does not implement core::Data
┌─ src/memory.spade:122:13
│
105 │ ) -> (uint<32>, uint<32>) {
│ ╭─────────────────────────────'
│ │ ╭───────────────────────────'
106 │ │ │ assert (range#1 - range#0) == 16384;
107 │ │ │
108 │ │ │ let mem_signals = (
· │ │
122 │ │ │ let mem2: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[2]]);
│ │ │ ^^^^
│ │ │ │
│ │ │ Memory<uint<8>, 4096> does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
· │ │
137 │ │ │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
138 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
122 │ let wire mem2: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[2]]);
│ +++++
error: Trait bound not satisfied. Memory<uint<8>, 4096> does not implement core::Data
┌─ src/memory.spade:123:13
│
105 │ ) -> (uint<32>, uint<32>) {
│ ╭─────────────────────────────'
│ │ ╭───────────────────────────'
106 │ │ │ assert (range#1 - range#0) == 16384;
107 │ │ │
108 │ │ │ let mem_signals = (
· │ │
123 │ │ │ let mem3: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[3]]);
│ │ │ ^^^^
│ │ │ │
│ │ │ Memory<uint<8>, 4096> does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
· │ │
137 │ │ │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
138 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
123 │ let wire mem3: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[3]]);
│ +++++
error: Trait bound not satisfied. inv spadev::bus::ControlSignals does not implement core::Data
┌─ src/bus.spade:69:13
│
68 │ pub(lib) pipeline(1) test_bus(clk: clock, load_signals: ProgramLoadSignals) -> Buses {
│ ╭────────────────────────────────────────────────────────────────────────────────────────'
│ │ ╭──────────────────────────────────────────────────────────────────────────────────────'
69 │ │ │ let data_control = inst new_mut_wire();
│ │ │ ^^^^^^^^^^^^
│ │ │ │
│ │ │ inv spadev::bus::ControlSignals does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
70 │ │ │ let insn_control = inst new_mut_wire();
71 │ │ │
· │ │
110 │ │ │ )
111 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
69 │ let wire data_control = inst new_mut_wire();
│ +++++
error: Trait bound not satisfied. inv spadev::bus::ControlSignals does not implement core::Data
┌─ src/bus.spade:70:13
│
68 │ pub(lib) pipeline(1) test_bus(clk: clock, load_signals: ProgramLoadSignals) -> Buses {
│ ╭────────────────────────────────────────────────────────────────────────────────────────'
│ │ ╭──────────────────────────────────────────────────────────────────────────────────────'
69 │ │ │ let data_control = inst new_mut_wire();
70 │ │ │ let insn_control = inst new_mut_wire();
│ │ │ ^^^^^^^^^^^^
│ │ │ │
│ │ │ inv spadev::bus::ControlSignals does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
71 │ │ │
· │ │
110 │ │ │ )
111 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
70 │ let wire insn_control = inst new_mut_wire();
│ +++++
error: Trait bound not satisfied. spadev::regfile::RegfilePort does not implement core::Data
┌─ src/regfile.spade:14:5
│
14 │ regfile: RegfilePort,
│ ^^^^^^^
│ │
│ spadev::regfile::RegfilePort does not implement core::Data
│ The type of this argument is not Data which means it cannot be stored in a register.
·
18 │ ) -> (int<32>, int<32>) {
│ ╭───────────────────────────'
│ │ ╭─────────────────────────'
19 │ │ │ set regfile.write = &write;
20 │ │ │ set regfile.idxa = &idxa;
21 │ │ │ set regfile.idxb = &idxb;
22 │ │ │ reg;
23 │ │ │ *regfile.read
24 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An value not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the argument a wire
│
14 │ wire regfile: RegfilePort,
│ +++++
error: Trait bound not satisfied. Memory<int<32>, _> does not implement core::Data
┌─ src/regfile.spade:38:13
│
31 │ ) -> (int<32>, int<32>) {
│ ╭───────────────────────────'
│ │ ╭─────────────────────────'
32 │ │ │ let (we, dreg, dval) = match write {
33 │ │ │ Option::Some((dreg, dval)) => (true, dreg, dval),
34 │ │ │ // NOTE: We really need to add a way to specify don't care here
· │ │
38 │ │ │ let regs: Memory<int<32>, N> = inst clocked_memory(clk, [(we, trunc(dreg), dval)]);
│ │ │ ^^^^
│ │ │ │
│ │ │ Memory<int<32>, _> does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
· │ │
48 │ │ │ )
49 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
38 │ let wire regs: Memory<int<32>, N> = inst clocked_memory(clk, [(we, trunc(dreg), dval)]);
│ +++++
Error: aborting due to previous error
Location:
spade-compiler/src/main.rs:174:23
Error:
0: Failed to build spade code
Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.
Run with RUST_BACKTRACE=full to include source snippets.
spade-v-hwtest-uart (0/3)
build (fail)
[WARN] swim.toml contains 1 unknown field:
[WARN] synthesis.?.extra_verilog
[INFO] Failed to fetch pre-built Spade compiler, building locally.
========
Reason: Did not find a pre-built Spade compiler for git hash "be892f685e0ec1ed4f120b8d3f9b82d51f7a62a9"
========
[INFO] Building Spade Compiler
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on build directory
Finished `release` profile [optimized] target(s) in 4m 22s
[INFO] Failed to fetch pre-built surfer plugin, building locally.
========
Reason: Did not find a pre-built surfer plugin for git hash "be892f685e0ec1ed4f120b8d3f9b82d51f7a62a9"
========
[INFO] Building spade-surfer-plugin
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on package cache
Blocking waiting for file lock on build directory
Blocking waiting for file lock on build directory
Compiling serde_core v1.0.228
Compiling num-traits v0.2.19
error[E0463]: can't find crate for `std`
|
= note: the `wasm32-unknown-unknown` target may not be installed
= help: consider downloading the target with `rustup target add wasm32-unknown-unknown`
For more information about this error, try `rustc --explain E0463`.
error: could not compile `serde_core` (lib) due to 1 previous error
warning: build failed, waiting for other jobs to finish...
error[E0463]: can't find crate for `core`
|
= note: the `wasm32-unknown-unknown` target may not be installed
= help: consider downloading the target with `rustup target add wasm32-unknown-unknown`
error: could not compile `num-traits` (lib) due to 1 previous error
[WARN] Failed to build surfer plugin. Continuing anyway but Surfer integration will not work
[INFO] Cloning "protocols"
[INFO] Cloning "ready_valid"
[INFO] Cloning "nstd"
[INFO] Building spade code
[ERROR] Failed to build spade code
Cloning into '/builds/spade-lang/trawler/work/spade-v-hwtest-uart/hwtest_uart/build/libs/protocols'...
HEAD is now at 3170518 Fix tests
Cloning into '/builds/spade-lang/trawler/work/spade-v-hwtest-uart/hwtest_uart/build/libs/ready_valid'...
HEAD is now at d029c73 Bump Spade again
Cloning into '/builds/spade-lang/trawler/work/spade-v-hwtest-uart/hwtest_uart/build/libs/nstd'...
HEAD is now at 92b6b79 Add pub markers
warning: The & modifier on types no longer has any effect
┌─ src/led_blink.spade:26:14
│
26 │ led: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/led_blink.spade:78:20
│
78 │ reset_led: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/led_blink.spade:80:24
│
80 │ load_done_led: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/led_blink.spade:82:22
│
82 │ program_led: inv &bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:14:16
│
14 │ ready: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:16:15
│
16 │ sclk: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:17:15
│
17 │ mosi: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:18:11
│
18 │ miso: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/uart.spade:117:17
│
117 │ tx: inv &bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:87:16
│
87 │ ready: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:89:15
│
89 │ sclk: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:91:24
│
91 │ sda_drive_low: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:221:15
│
221 │ sclk: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:223:24
│
223 │ sda_drive_low: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:227:16
│
227 │ ready: inv &bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/csr.spade:5:40
│
5 │ entity mut_wire_with_read<T>() -> (inv &T, &T) {
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/csr.spade:5:44
│
5 │ entity mut_wire_with_read<T>() -> (inv &T, &T) {
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ ../src/csr.spade:10:12
│
10 │ pub struct port CsrInterface {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
10 │ pub struct port CsrInterface {
│ ----
warning: The & modifier on types no longer has any effect
┌─ ../src/csr.spade:11:14
│
11 │ rs1: inv &uint<32>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/csr.spade:12:18
│
12 │ rs1_idx: inv &uint<5>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/csr.spade:13:13
│
13 │ rd: inv &uint<5>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/csr.spade:14:15
│
14 │ addr: inv &int<12>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/csr.spade:15:13
│
15 │ op: inv &instructions::Op,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/csr.spade:17:13
│
17 │ result: &uint<32>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/csr.spade:18:11
│
18 │ mepc: &uint<32>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ ../src/bus.spade:45:12
│
45 │ pub struct port Bus {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
45 │ pub struct port Bus {
│ ----
warning: The & modifier on types no longer has any effect
┌─ ../src/bus.spade:46:18
│
46 │ control: inv &ControlSignals,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/bus.spade:48:13
│
48 │ result: &uint<32>
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ ../src/bus.spade:52:12
│
52 │ pub struct port Buses {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
52 │ pub struct port Buses {
│ ----
warning: The & modifier on types no longer has any effect
┌─ ../src/bus.spade:55:16
│
55 │ load_done: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/bus.spade:135:32
│
135 │ pub entity unmap_read(signals: &ControlSignals, range: (uint<33>, uint<33>)) -> Option<uint<32>> {
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/bus.spade:162:33
│
162 │ pub entity unmap_write(signals: &ControlSignals, region: (uint<33>, uint<33>))
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/peripherals/led.spade:8:18
│
8 │ bus_signals: &ControlSignals,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/peripherals/led.spade:9:20
│
9 │ led_state: inv & bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/peripherals/timer.spade:21:18
│
21 │ bus_signals: &ControlSignals,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ ../src/regfile.spade:5:12
│
5 │ pub struct port RegfilePort {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
5 │ pub struct port RegfilePort {
│ ----
warning: The & modifier on types no longer has any effect
┌─ ../src/regfile.spade:6:16
│
6 │ write: inv &Option<(uint<5>, int<32>)>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/regfile.spade:7:15
│
7 │ idxa: inv &uint<5>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/regfile.spade:8:15
│
8 │ idxb: inv &uint<5>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/regfile.spade:9:11
│
9 │ read: &(int<32>, int<32>)
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/option_ext.spade:18:25
│
18 │ write_full: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ build/libs/ready_valid/src/main.spade:7:12
│
7 │ pub struct port Rv<T> {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
7 │ pub struct port Rv<T> {
│ ----
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:8:11
│
8 │ data: &Option<T>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:9:16
│
9 │ ready: inv &bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ build/libs/ready_valid/src/main.spade:148:8
│
148 │ struct port FifoOut<T> {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
148 │ struct port FifoOut<T> {
│ ----
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:149:11
│
149 │ full: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:150:12
│
150 │ empty: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
error: Unexpected `:`, expected `Identifier`
┌─ build/libs/ready_valid/src/main.spade:155:33
│
155 │ pub fn read_empty(self, wire: inv &bool) -> FifoOut<T> {
│ ^ expected `Identifier`
error: Unexpected `:`, expected `Identifier`
┌─ build/libs/ready_valid/src/main.spade:161:32
│
161 │ pub fn read_full(self, wire: inv &bool) -> FifoOut<T> {
│ ^ expected `Identifier`
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/option_ext.spade:9:11
│
9 │ where O: {uint_bits_to_fit(V) - 1},
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
9 │ where O: {uint::bits_for(V) - 1},
│ ~~~~~~~~~~~~~~
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/option_ext.spade:10:11
│
10 │ O: {uint_bits_to_fit(V - 1)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
10 │ O: {uint::bits_for(V - 1)}
│ ~~~~~~~~~~~~~~
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/nstd/src/mem.spade:9:15
│
9 │ where W: {uint_bits_to_fit(C)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
9 │ where W: {uint::bits_for(C)}
│ ~~~~~~~~~~~~~~
warning: Deprecated tuple syntax indexing
┌─ src/led_blink.spade:49:27
│
49 │ range: (trunc(UPPER_DMEM#0), trunc(UPPER_DMEM#1)),
│ ^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/led_blink.spade:49:48
│
49 │ range: (trunc(UPPER_DMEM#0), trunc(UPPER_DMEM#1)),
│ ^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: The reference operator no longer has any effect.
┌─ src/led_blink.spade:52:49
│
52 │ let _ = inst led_driver(clk, LED_RANGE, &data_control_signals, led);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/led_blink.spade:53:59
│
53 │ let timer_out = inst timer(clk, rst, TIMER_RANGE, &data_control_signals);
│ ^ Useless operator
warning: Deprecated tuple syntax indexing
┌─ src/led_blink.spade:57:32
│
57 │ if zext(address) < LOWER_DATA_MEM_RANGE#1 { lower_data_mem_out }
│ ^^^^^^^^^^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/led_blink.spade:58:37
│
58 │ else if zext(address) < LED_RANGE#1 { 0 }
│ ^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/led_blink.spade:59:37
│
59 │ else if zext(address) < TIMER_RANGE#1 { stage(-1).timer_out }
│ ^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: The reference operator no longer has any effect.
┌─ src/led_blink.spade:63:56
│
63 │ data: Bus $(control: data_control, result: &read_value),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/led_blink.spade:64:63
│
64 │ instruction: Bus $(control: insn_control, result: &insn_mem_out),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/led_blink.spade:65:24
│
65 │ load_done: &load_signals.done,
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/led_blink.spade:112:23
│
112 │ set program_led = &inst read_mut_wire(led);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/led_blink.spade:113:25
│
113 │ set load_done_led = &load_port.done;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/led_blink.spade:114:21
│
114 │ set reset_led = &rst;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:44:17
│
44 │ set ready = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:49:16
│
49 │ set sclk = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:56:16
│
56 │ set mosi = &match state {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:67:18
│
67 │ [*miso].concat(captured[0..7])
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/test.spade:10:44
│
10 │ let tx_out = inst uart_tx(clk, rst, Rv(&to_transmit, port.1), config);
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/protocols/src/uart.spade:34:23
│
34 │ match *transmit.data {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/uart.spade:97:26
│
97 │ set transmit.ready = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/uart.spade:119:18
│
119 │ set tx = &inst uart_tx(clk, rst, self, config);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:143:17
│
143 │ set ready = &match (state, inst read_mut_wire(emitter_ready)) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:168:25
│
168 │ set sda_drive_low = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:179:16
│
179 │ set sclk = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:271:16
│
271 │ set sclk = &sclk_driver_out.sclk;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:273:25
│
273 │ set sda_drive_low = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:283:17
│
283 │ set ready = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/csr.spade:7:9
│
7 │ (w, &inst read_mut_wire(w))
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:30:27
│
30 │ let (val, we) = match *op_v {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:31:37
│
31 │ instructions::Op::CSRRW => (*rs1_v, true),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:32:37
│
32 │ instructions::Op::CSRRS => (*rs1_v, !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:32:48
│
32 │ instructions::Op::CSRRS => (*rs1_v, !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:33:37
│
33 │ instructions::Op::CSRRC => (*rs1_v, !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:33:48
│
33 │ instructions::Op::CSRRC => (*rs1_v, !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:34:43
│
34 │ instructions::Op::CSRRWI => (zext(*rs1_idx_v), true),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:35:43
│
35 │ instructions::Op::CSRRSI => (zext(*rs1_idx_v), !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:35:59
│
35 │ instructions::Op::CSRRSI => (zext(*rs1_idx_v), !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:36:43
│
36 │ instructions::Op::CSRRCI => (zext(*rs1_idx_v), !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:36:59
│
36 │ instructions::Op::CSRRCI => (zext(*rs1_idx_v), !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:40:31
│
40 │ reg(clk) mepc = if we && (*addr_v) == 0x341 {val} else {mepc};
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:42:22
│
42 │ let result = if (*addr_v) == 0x341 {mepc} else {0};
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/csr.spade:51:15
│
51 │ mepc: &mepc,
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/csr.spade:52:17
│
52 │ result: &result
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/cpu.spade:57:31
│
57 │ let stopped = rst || !*buses.load_done;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/cpu.spade:62:24
│
62 │ load_done: *buses.load_done,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/cpu.spade:152:108
│
152 │ let jump_target = int_to_uint(pfc::jump_target$(op, pc, j_imm, b_imm, alu_value, mepc: uint_to_int(*csr_port.mepc)));
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/cpu.spade:154:28
│
154 │ set csr_port.rs1 = &int_to_uint(rs1);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/cpu.spade:155:32
│
155 │ set csr_port.rs1_idx = &rs1_idx;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/cpu.spade:156:29
│
156 │ set csr_port.addr = &trunc(i_imm);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/cpu.spade:157:27
│
157 │ set csr_port.rd = &rd_idx;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/cpu.spade:158:27
│
158 │ set csr_port.op = &op;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/cpu.spade:160:23
│
160 │ let csr_out = *csr_port.result;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/cpu.spade:299:27
│
299 │ set bus.control = &ControlSignals$(
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/cpu.spade:305:9
│
305 │ *bus.result
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/cpu.spade:309:27
│
309 │ set bus.control = &ControlSignals$(
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/cpu.spade:321:9
│
321 │ *bus.result
│ ^ Useless operator
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:28:54
│
28 │ Command::Write(write_data) => (zext(addr) >= range#0 && zext(addr) < range#1, write_data),
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:28:78
│
28 │ Command::Write(write_data) => (zext(addr) >= range#0 && zext(addr) < range#1, write_data),
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:31:27
│
31 │ let addr = addr-trunc(range#0);
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:106:17
│
106 │ assert (range#1 - range#0) == 16384;
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:106:27
│
106 │ assert (range#1 - range#0) == 16384;
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:109:41
│
109 │ split_control_write_signals(buses#0, range),
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:110:41
│
110 │ split_control_write_signals(buses#1, range)
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:112:85
│
112 │ let MemorySignals$(write_ports: wp0, addr_first_bits: _, access_width: _) = mem_signals#0;
│ ^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:113:85
│
113 │ let MemorySignals$(write_ports: wp1, addr_first_bits: _, access_width: _) = mem_signals#1;
│ ^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:116:22
│
116 │ assert match buses#1.cmd {Command::Read => true, Command::Nop => true, _ => false};
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:125:46
│
125 │ let data1_0 = inst read_memory(mem0, wp0[0]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:126:46
│
126 │ let data1_1 = inst read_memory(mem1, wp0[1]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:127:46
│
127 │ let data1_2 = inst read_memory(mem2, wp0[2]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:128:46
│
128 │ let data1_3 = inst read_memory(mem3, wp0[3]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:130:46
│
130 │ let data2_0 = inst read_memory(mem0, wp1[0]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:131:46
│
131 │ let data2_1 = inst read_memory(mem1, wp1[1]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:132:46
│
132 │ let data2_2 = inst read_memory(mem2, wp1[2]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:133:46
│
133 │ let data2_3 = inst read_memory(mem3, wp1[3]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:137:26
│
137 │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:137:35
│
137 │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
│ ^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:137:67
│
137 │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:137:76
│
137 │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
│ ^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: The reference operator no longer has any effect.
┌─ ../src/bus.spade:107:56
│
107 │ data: Bus $(control: data_control, result: &data_out),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/bus.spade:108:63
│
108 │ instruction: Bus $(control: insn_control, result: &insn_mem_out),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/bus.spade:109:24
│
109 │ load_done: &load_signals.done,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/bus.spade:141:9
│
141 │ ) = *signals;
│ ^ Useless operator
warning: Deprecated tuple syntax indexing
┌─ ../src/bus.spade:166:12
│
166 │ assert region#1 > region#0;
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/bus.spade:166:23
│
166 │ assert region#1 > region#0;
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: The dereference operator no longer has any effect.
┌─ ../src/bus.spade:172:9
│
172 │ ) = *signals;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/peripherals/led.spade:11:55
│
11 │ let ControlSignals$(cmd, addr, access_width: _) = *bus_signals;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/peripherals/led.spade:19:21
│
19 │ set led_state = &state;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/peripherals/timer.spade:85:51
│
85 │ inst timer$(clk, rst, mem_range, bus_signals: &bus_signals)
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/regfile.spade:19:29
│
19 │ set regfile.write = &write;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/regfile.spade:20:28
│
20 │ set regfile.idxa = &idxa;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/regfile.spade:21:28
│
21 │ set regfile.idxb = &idxb;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/regfile.spade:23:9
│
23 │ *regfile.read
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/regfile.spade:56:16
│
56 │ write: *w.write,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/regfile.spade:57:15
│
57 │ idxa: *w.idxa,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/regfile.spade:58:15
│
58 │ idxb: *w.idxb,
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/regfile.spade:61:18
│
61 │ set w.read = &out;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/regfile.spade:71:16
│
71 │ write: *w.write,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/regfile.spade:72:15
│
72 │ idxa: *w.idxa,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/regfile.spade:73:15
│
73 │ idxb: *w.idxb,
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/regfile.spade:76:18
│
76 │ set w.read = &out;
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/option_ext.spade:25:42
│
25 │ let (write, read) = inst fifo::<{uint_bits_to_fit(Depth - 1)}, T, Depth>$(
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
25 │ let (write, read) = inst fifo::<{uint::bits_for(Depth - 1)}, T, Depth>$(
│ ~~~~~~~~~~~~~~
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/option_ext.spade:32:27
│
32 │ set write.write = &self;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:22:57
│
22 │ reg(clk) value reset(rst: None) = match (value, *self.data) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:32:26
│
32 │ set self.ready = &value.is_none();
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:35:19
│
35 │ data: &value,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:42:51
│
42 │ reg(clk) buffer reset(rst: None) = match (*ds, buffer, *self.data) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:42:64
│
42 │ reg(clk) buffer reset(rst: None) = match (*ds, buffer, *self.data) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:54:34
│
54 │ set self.ready = &match (*ds, buffer) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:54:26
│
54 │ set self.ready = &match (*ds, buffer) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:61:12
│
61 │ Rv(&buffer, ds_inv)
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:65:26
│
65 │ set self.ready = &false;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:69:26
│
69 │ set self.ready = &true;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:75:21
│
75 │ data: &(*self.data).map(f),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:75:19
│
75 │ data: &(*self.data).map(f),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:83:21
│
83 │ data: &(*self.data).and_then(f),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:83:19
│
83 │ data: &(*self.data).and_then(f),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:89:27
│
89 │ let self_takes = (*self.data).is_some();
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:94:44
│
94 │ set other.ready = &(!self_takes && *ds_ready);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:94:27
│
94 │ set other.ready = &(!self_takes && *ds_ready);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:114:48
│
114 │ set ready = if gate {ds_ready.0} else {&false};
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:116:34
│
116 │ if gate {data} else {&None},
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:132:29
│
132 │ match (timeout, *data, *ds_ready.0) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:132:36
│
132 │ match (timeout, *data, *ds_ready.0) {
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/main.spade:131:33
│
131 │ reg(clk) timeout: uint<{uint_bits_to_fit(N)}> reset(rst: 0) =
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
131 │ reg(clk) timeout: uint<{uint::bits_for(N)}> reset(rst: 0) =
│ ~~~~~~~~~~~~~~
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:139:23
│
139 │ set ready = &(*ds_ready.0 && timeout == 0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:139:21
│
139 │ set ready = &(*ds_ready.0 && timeout == 0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:140:41
│
140 │ Rv(if timeout == 0 {data} else {&None}, ds_ready.1)
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:178:28
│
178 │ set self.ready = &!*write_full.0;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:178:26
│
178 │ set self.ready = &!*write_full.0;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:179:32
│
179 │ let Rv(data, ready) = (*self.data)
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:187:22
│
187 │ empty: &(*data).is_none(),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:187:20
│
187 │ empty: &(*data).is_none(),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:208:51
│
208 │ match (state, inst read_mut_wire(ds), *self.data) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:218:26
│
218 │ set self.ready = &match state {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:223:34
│
223 │ let data = match (state, *self.data) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:231:19
│
231 │ data: &data,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:242:17
│
242 │ match (*data, num_left, *ds_ready.0) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:242:34
│
242 │ match (*data, num_left, *ds_ready.0) {
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/main.spade:241:50
│
241 │ reg(clk) (array, num_left): ([T; N], uint<{uint_bits_to_fit(N)}>) reset(rst: (std::undef::undef(), 0)) =
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
241 │ reg(clk) (array, num_left): ([T; N], uint<{uint::bits_for(N)}>) reset(rst: (std::undef::undef(), 0)) =
│ ~~~~~~~~~~~~~~
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:250:55
│
250 │ set ready = &(num_left == 0 || num_left == 1 && *ds_ready.0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:250:19
│
250 │ set ready = &(num_left == 0 || num_left == 1 && *ds_ready.0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:253:10
│
253 │ &match num_left {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:273:24
│
273 │ let rv = Rv$(data: &value, ready: inst new_mut_wire());
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:276:21
│
276 │ set out.ready = &ready;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:277:5
│
277 │ *out.data
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:286:24
│
286 │ let rv = Rv$(data: &value, ready: inst new_mut_wire());
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:289:21
│
289 │ set out.ready = &ready;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:290:5
│
290 │ *out.data
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:32:48
│
32 │ let (out, next_state) = match (state, (*self.data), *ds_ready) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:32:61
│
32 │ let (out, next_state) = match (state, (*self.data), *ds_ready) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:54:41
│
54 │ set self.ready = &match (state, *ds_ready) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:54:26
│
54 │ set self.ready = &match (state, *ds_ready) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:60:13
│
60 │ &out,
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/nstd/src/mem.spade:25:77
│
25 │ (WritePort$(addr: w_addr, write: w_write), ReadPort$(addr: r_addr, out: &read_result))
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/nstd/src/array.spade:70:19
│
70 │ where NSize: {uint_bits_to_fit(N-1)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
70 │ where NSize: {uint::bits_for(N-1)}
│ ~~~~~~~~~~~~~~
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/nstd/src/array.spade:70:19
│
70 │ where NSize: {uint_bits_to_fit(N-1)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
70 │ where NSize: {uint::bits_for(N-1)}
│ ~~~~~~~~~~~~~~
error: Trait bound not satisfied. inv bool does not implement core::Data
┌─ src/led_blink.spade:26:5
│
26 │ led: inv &bool,
│ ^^^
│ │
│ inv bool does not implement core::Data
│ The type of this argument is not Data which means it cannot be stored in a register.
27 │ ) -> Buses {
│ ╭──────────────'
│ │ ╭────────────'
28 │ │ │ // Build the bus signals
29 │ │ │ let data_control = inst new_mut_wire();
30 │ │ │ let insn_control = inst new_mut_wire();
· │ │
66 │ │ │ )
67 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An value not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the argument a wire
│
26 │ wire led: inv &bool,
│ +++++
error: Trait bound not satisfied. spadev::bus::Buses does not implement core::Data
┌─ ../src/cpu.spade:46:5
│
46 │ buses: Buses,
│ ^^^^^
│ │
│ spadev::bus::Buses does not implement core::Data
│ The type of this argument is not Data which means it cannot be stored in a register.
·
52 │ ╭ ╭ {
53 │ │ │ 'pc
54 │ │ │
55 │ │ │ let NOP = 0x00000013;
· │ │
244 │ │ │ )
245 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An value not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the argument a wire
│
46 │ wire buses: Buses,
│ +++++
error: Trait bound not satisfied. spadev::bus::Bus does not implement core::Data
┌─ ../src/cpu.spade:278:5
│
278 │ bus: Bus,
│ ^^^
│ │
│ spadev::bus::Bus does not implement core::Data
│ The type of this argument is not Data which means it cannot be stored in a register.
·
282 │ ) -> uint<32> {
│ ╭─────────────────'
│ │ ╭───────────────'
283 │ │ │ let write_data = rs2;
284 │ │ │
285 │ │ │ let (access_width, memory_command) = match op {
· │ │
305 │ │ │ *bus.result
306 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An value not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the argument a wire
│
278 │ wire bus: Bus,
│ +++++
error: Trait bound not satisfied. spadev::bus::Bus does not implement core::Data
┌─ ../src/cpu.spade:308:38
│
308 │ pipeline(1) set_insn_bus(clk: clock, bus: Bus, pc_option: Option<uint<32>>) -> uint<32> {
│ ^^^
│ │
│ spadev::bus::Bus does not implement core::Data
│ The type of this argument is not Data which means it cannot be stored in a register.
│ ╭───────────────────────────────────────────────────────────────────────────────────────────'
│ │ ╭─────────────────────────────────────────────────────────────────────────────────────────'
309 │ │ │ set bus.control = &ControlSignals$(
310 │ │ │ access_width: AccessWidth::Full(),
311 │ │ │ addr: match pc_option {
· │ │
321 │ │ │ *bus.result
322 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An value not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the argument a wire
│
308 │ pipeline(1) set_insn_bus(clk: clock, wire bus: Bus, pc_option: Option<uint<32>>) -> uint<32> {
│ +++++
error: Trait bound not satisfied. Memory<uint<8>, 4096> does not implement core::Data
┌─ ../src/memory.spade:120:13
│
105 │ ) -> (uint<32>, uint<32>) {
│ ╭─────────────────────────────'
│ │ ╭───────────────────────────'
106 │ │ │ assert (range#1 - range#0) == 16384;
107 │ │ │
108 │ │ │ let mem_signals = (
· │ │
120 │ │ │ let mem0: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[0]]);
│ │ │ ^^^^
│ │ │ │
│ │ │ Memory<uint<8>, 4096> does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
· │ │
137 │ │ │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
138 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
120 │ let wire mem0: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[0]]);
│ +++++
error: Trait bound not satisfied. Memory<uint<8>, 4096> does not implement core::Data
┌─ ../src/memory.spade:121:13
│
105 │ ) -> (uint<32>, uint<32>) {
│ ╭─────────────────────────────'
│ │ ╭───────────────────────────'
106 │ │ │ assert (range#1 - range#0) == 16384;
107 │ │ │
108 │ │ │ let mem_signals = (
· │ │
121 │ │ │ let mem1: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[1]]);
│ │ │ ^^^^
│ │ │ │
│ │ │ Memory<uint<8>, 4096> does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
· │ │
137 │ │ │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
138 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
121 │ let wire mem1: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[1]]);
│ +++++
error: Trait bound not satisfied. Memory<uint<8>, 4096> does not implement core::Data
┌─ ../src/memory.spade:122:13
│
105 │ ) -> (uint<32>, uint<32>) {
│ ╭─────────────────────────────'
│ │ ╭───────────────────────────'
106 │ │ │ assert (range#1 - range#0) == 16384;
107 │ │ │
108 │ │ │ let mem_signals = (
· │ │
122 │ │ │ let mem2: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[2]]);
│ │ │ ^^^^
│ │ │ │
│ │ │ Memory<uint<8>, 4096> does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
· │ │
137 │ │ │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
138 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
122 │ let wire mem2: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[2]]);
│ +++++
error: Trait bound not satisfied. Memory<uint<8>, 4096> does not implement core::Data
┌─ ../src/memory.spade:123:13
│
105 │ ) -> (uint<32>, uint<32>) {
│ ╭─────────────────────────────'
│ │ ╭───────────────────────────'
106 │ │ │ assert (range#1 - range#0) == 16384;
107 │ │ │
108 │ │ │ let mem_signals = (
· │ │
123 │ │ │ let mem3: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[3]]);
│ │ │ ^^^^
│ │ │ │
│ │ │ Memory<uint<8>, 4096> does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
· │ │
137 │ │ │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
138 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
123 │ let wire mem3: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[3]]);
│ +++++
error: Trait bound not satisfied. inv spadev::bus::ControlSignals does not implement core::Data
┌─ ../src/bus.spade:69:13
│
68 │ pub(lib) pipeline(1) test_bus(clk: clock, load_signals: ProgramLoadSignals) -> Buses {
│ ╭────────────────────────────────────────────────────────────────────────────────────────'
│ │ ╭──────────────────────────────────────────────────────────────────────────────────────'
69 │ │ │ let data_control = inst new_mut_wire();
│ │ │ ^^^^^^^^^^^^
│ │ │ │
│ │ │ inv spadev::bus::ControlSignals does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
70 │ │ │ let insn_control = inst new_mut_wire();
71 │ │ │
· │ │
110 │ │ │ )
111 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
69 │ let wire data_control = inst new_mut_wire();
│ +++++
error: Trait bound not satisfied. inv spadev::bus::ControlSignals does not implement core::Data
┌─ ../src/bus.spade:70:13
│
68 │ pub(lib) pipeline(1) test_bus(clk: clock, load_signals: ProgramLoadSignals) -> Buses {
│ ╭────────────────────────────────────────────────────────────────────────────────────────'
│ │ ╭──────────────────────────────────────────────────────────────────────────────────────'
69 │ │ │ let data_control = inst new_mut_wire();
70 │ │ │ let insn_control = inst new_mut_wire();
│ │ │ ^^^^^^^^^^^^
│ │ │ │
│ │ │ inv spadev::bus::ControlSignals does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
71 │ │ │
· │ │
110 │ │ │ )
111 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
70 │ let wire insn_control = inst new_mut_wire();
│ +++++
error: Trait bound not satisfied. spadev::regfile::RegfilePort does not implement core::Data
┌─ ../src/regfile.spade:14:5
│
14 │ regfile: RegfilePort,
│ ^^^^^^^
│ │
│ spadev::regfile::RegfilePort does not implement core::Data
│ The type of this argument is not Data which means it cannot be stored in a register.
·
18 │ ) -> (int<32>, int<32>) {
│ ╭───────────────────────────'
│ │ ╭─────────────────────────'
19 │ │ │ set regfile.write = &write;
20 │ │ │ set regfile.idxa = &idxa;
21 │ │ │ set regfile.idxb = &idxb;
22 │ │ │ reg;
23 │ │ │ *regfile.read
24 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An value not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the argument a wire
│
14 │ wire regfile: RegfilePort,
│ +++++
error: Trait bound not satisfied. Memory<int<32>, _> does not implement core::Data
┌─ ../src/regfile.spade:38:13
│
31 │ ) -> (int<32>, int<32>) {
│ ╭───────────────────────────'
│ │ ╭─────────────────────────'
32 │ │ │ let (we, dreg, dval) = match write {
33 │ │ │ Option::Some((dreg, dval)) => (true, dreg, dval),
34 │ │ │ // NOTE: We really need to add a way to specify don't care here
· │ │
38 │ │ │ let regs: Memory<int<32>, N> = inst clocked_memory(clk, [(we, trunc(dreg), dval)]);
│ │ │ ^^^^
│ │ │ │
│ │ │ Memory<int<32>, _> does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
· │ │
48 │ │ │ )
49 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
38 │ let wire regs: Memory<int<32>, N> = inst clocked_memory(clk, [(we, trunc(dreg), dval)]);
│ +++++
Error: aborting due to previous error
Location:
spade-compiler/src/main.rs:174:23
Error:
0: Failed to build spade code
Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.
Run with RUST_BACKTRACE=full to include source snippets.
pnr (fail)
[WARN] swim.toml contains 1 unknown field:
[WARN] synthesis.?.extra_verilog
[INFO] Failed to fetch pre-built surfer plugin, building locally.
========
Reason: Did not find a pre-built surfer plugin for git hash "be892f685e0ec1ed4f120b8d3f9b82d51f7a62a9"
========
[INFO] Building spade-surfer-plugin
Compiling serde_core v1.0.228
Compiling num-traits v0.2.19
error[E0463]: can't find crate for `std`
|
= note: the `wasm32-unknown-unknown` target may not be installed
= help: consider downloading the target with `rustup target add wasm32-unknown-unknown`
For more information about this error, try `rustc --explain E0463`.
error: could not compile `serde_core` (lib) due to 1 previous error
warning: build failed, waiting for other jobs to finish...
error[E0463]: can't find crate for `core`
|
= note: the `wasm32-unknown-unknown` target may not be installed
= help: consider downloading the target with `rustup target add wasm32-unknown-unknown`
error: could not compile `num-traits` (lib) due to 1 previous error
[WARN] Failed to build surfer plugin. Continuing anyway but Surfer integration will not work
[INFO] Building spade code
[ERROR] Failed to build spade code
HEAD is now at 3170518 Fix tests
HEAD is now at d029c73 Bump Spade again
HEAD is now at 92b6b79 Add pub markers
warning: The & modifier on types no longer has any effect
┌─ src/led_blink.spade:26:14
│
26 │ led: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/led_blink.spade:78:20
│
78 │ reset_led: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/led_blink.spade:80:24
│
80 │ load_done_led: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/led_blink.spade:82:22
│
82 │ program_led: inv &bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/csr.spade:5:40
│
5 │ entity mut_wire_with_read<T>() -> (inv &T, &T) {
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/csr.spade:5:44
│
5 │ entity mut_wire_with_read<T>() -> (inv &T, &T) {
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ ../src/csr.spade:10:12
│
10 │ pub struct port CsrInterface {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
10 │ pub struct port CsrInterface {
│ ----
warning: The & modifier on types no longer has any effect
┌─ ../src/csr.spade:11:14
│
11 │ rs1: inv &uint<32>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/csr.spade:12:18
│
12 │ rs1_idx: inv &uint<5>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/csr.spade:13:13
│
13 │ rd: inv &uint<5>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/csr.spade:14:15
│
14 │ addr: inv &int<12>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/csr.spade:15:13
│
15 │ op: inv &instructions::Op,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/csr.spade:17:13
│
17 │ result: &uint<32>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/csr.spade:18:11
│
18 │ mepc: &uint<32>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ ../src/bus.spade:45:12
│
45 │ pub struct port Bus {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
45 │ pub struct port Bus {
│ ----
warning: The & modifier on types no longer has any effect
┌─ ../src/bus.spade:46:18
│
46 │ control: inv &ControlSignals,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/bus.spade:48:13
│
48 │ result: &uint<32>
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ ../src/bus.spade:52:12
│
52 │ pub struct port Buses {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
52 │ pub struct port Buses {
│ ----
warning: The & modifier on types no longer has any effect
┌─ ../src/bus.spade:55:16
│
55 │ load_done: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/bus.spade:135:32
│
135 │ pub entity unmap_read(signals: &ControlSignals, range: (uint<33>, uint<33>)) -> Option<uint<32>> {
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/bus.spade:162:33
│
162 │ pub entity unmap_write(signals: &ControlSignals, region: (uint<33>, uint<33>))
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/peripherals/led.spade:8:18
│
8 │ bus_signals: &ControlSignals,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/peripherals/led.spade:9:20
│
9 │ led_state: inv & bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/peripherals/timer.spade:21:18
│
21 │ bus_signals: &ControlSignals,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ ../src/regfile.spade:5:12
│
5 │ pub struct port RegfilePort {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
5 │ pub struct port RegfilePort {
│ ----
warning: The & modifier on types no longer has any effect
┌─ ../src/regfile.spade:6:16
│
6 │ write: inv &Option<(uint<5>, int<32>)>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/regfile.spade:7:15
│
7 │ idxa: inv &uint<5>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/regfile.spade:8:15
│
8 │ idxb: inv &uint<5>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/regfile.spade:9:11
│
9 │ read: &(int<32>, int<32>)
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:14:16
│
14 │ ready: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:16:15
│
16 │ sclk: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:17:15
│
17 │ mosi: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:18:11
│
18 │ miso: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/uart.spade:117:17
│
117 │ tx: inv &bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:87:16
│
87 │ ready: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:89:15
│
89 │ sclk: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:91:24
│
91 │ sda_drive_low: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:221:15
│
221 │ sclk: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:223:24
│
223 │ sda_drive_low: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:227:16
│
227 │ ready: inv &bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/option_ext.spade:18:25
│
18 │ write_full: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ build/libs/ready_valid/src/main.spade:7:12
│
7 │ pub struct port Rv<T> {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
7 │ pub struct port Rv<T> {
│ ----
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:8:11
│
8 │ data: &Option<T>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:9:16
│
9 │ ready: inv &bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ build/libs/ready_valid/src/main.spade:148:8
│
148 │ struct port FifoOut<T> {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
148 │ struct port FifoOut<T> {
│ ----
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:149:11
│
149 │ full: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:150:12
│
150 │ empty: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
error: Unexpected `:`, expected `Identifier`
┌─ build/libs/ready_valid/src/main.spade:155:33
│
155 │ pub fn read_empty(self, wire: inv &bool) -> FifoOut<T> {
│ ^ expected `Identifier`
error: Unexpected `:`, expected `Identifier`
┌─ build/libs/ready_valid/src/main.spade:161:32
│
161 │ pub fn read_full(self, wire: inv &bool) -> FifoOut<T> {
│ ^ expected `Identifier`
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/nstd/src/mem.spade:9:15
│
9 │ where W: {uint_bits_to_fit(C)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
9 │ where W: {uint::bits_for(C)}
│ ~~~~~~~~~~~~~~
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/option_ext.spade:9:11
│
9 │ where O: {uint_bits_to_fit(V) - 1},
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
9 │ where O: {uint::bits_for(V) - 1},
│ ~~~~~~~~~~~~~~
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/option_ext.spade:10:11
│
10 │ O: {uint_bits_to_fit(V - 1)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
10 │ O: {uint::bits_for(V - 1)}
│ ~~~~~~~~~~~~~~
warning: Deprecated tuple syntax indexing
┌─ src/led_blink.spade:49:27
│
49 │ range: (trunc(UPPER_DMEM#0), trunc(UPPER_DMEM#1)),
│ ^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/led_blink.spade:49:48
│
49 │ range: (trunc(UPPER_DMEM#0), trunc(UPPER_DMEM#1)),
│ ^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: The reference operator no longer has any effect.
┌─ src/led_blink.spade:52:49
│
52 │ let _ = inst led_driver(clk, LED_RANGE, &data_control_signals, led);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/led_blink.spade:53:59
│
53 │ let timer_out = inst timer(clk, rst, TIMER_RANGE, &data_control_signals);
│ ^ Useless operator
warning: Deprecated tuple syntax indexing
┌─ src/led_blink.spade:57:32
│
57 │ if zext(address) < LOWER_DATA_MEM_RANGE#1 { lower_data_mem_out }
│ ^^^^^^^^^^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/led_blink.spade:58:37
│
58 │ else if zext(address) < LED_RANGE#1 { 0 }
│ ^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/led_blink.spade:59:37
│
59 │ else if zext(address) < TIMER_RANGE#1 { stage(-1).timer_out }
│ ^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: The reference operator no longer has any effect.
┌─ src/led_blink.spade:63:56
│
63 │ data: Bus $(control: data_control, result: &read_value),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/led_blink.spade:64:63
│
64 │ instruction: Bus $(control: insn_control, result: &insn_mem_out),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/led_blink.spade:65:24
│
65 │ load_done: &load_signals.done,
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/led_blink.spade:112:23
│
112 │ set program_led = &inst read_mut_wire(led);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/led_blink.spade:113:25
│
113 │ set load_done_led = &load_port.done;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/led_blink.spade:114:21
│
114 │ set reset_led = &rst;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/csr.spade:7:9
│
7 │ (w, &inst read_mut_wire(w))
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:30:27
│
30 │ let (val, we) = match *op_v {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:31:37
│
31 │ instructions::Op::CSRRW => (*rs1_v, true),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:32:37
│
32 │ instructions::Op::CSRRS => (*rs1_v, !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:32:48
│
32 │ instructions::Op::CSRRS => (*rs1_v, !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:33:37
│
33 │ instructions::Op::CSRRC => (*rs1_v, !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:33:48
│
33 │ instructions::Op::CSRRC => (*rs1_v, !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:34:43
│
34 │ instructions::Op::CSRRWI => (zext(*rs1_idx_v), true),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:35:43
│
35 │ instructions::Op::CSRRSI => (zext(*rs1_idx_v), !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:35:59
│
35 │ instructions::Op::CSRRSI => (zext(*rs1_idx_v), !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:36:43
│
36 │ instructions::Op::CSRRCI => (zext(*rs1_idx_v), !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:36:59
│
36 │ instructions::Op::CSRRCI => (zext(*rs1_idx_v), !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:40:31
│
40 │ reg(clk) mepc = if we && (*addr_v) == 0x341 {val} else {mepc};
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:42:22
│
42 │ let result = if (*addr_v) == 0x341 {mepc} else {0};
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/csr.spade:51:15
│
51 │ mepc: &mepc,
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/csr.spade:52:17
│
52 │ result: &result
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/cpu.spade:57:31
│
57 │ let stopped = rst || !*buses.load_done;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/cpu.spade:62:24
│
62 │ load_done: *buses.load_done,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/cpu.spade:152:108
│
152 │ let jump_target = int_to_uint(pfc::jump_target$(op, pc, j_imm, b_imm, alu_value, mepc: uint_to_int(*csr_port.mepc)));
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/cpu.spade:154:28
│
154 │ set csr_port.rs1 = &int_to_uint(rs1);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/cpu.spade:155:32
│
155 │ set csr_port.rs1_idx = &rs1_idx;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/cpu.spade:156:29
│
156 │ set csr_port.addr = &trunc(i_imm);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/cpu.spade:157:27
│
157 │ set csr_port.rd = &rd_idx;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/cpu.spade:158:27
│
158 │ set csr_port.op = &op;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/cpu.spade:160:23
│
160 │ let csr_out = *csr_port.result;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/cpu.spade:299:27
│
299 │ set bus.control = &ControlSignals$(
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/cpu.spade:305:9
│
305 │ *bus.result
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/cpu.spade:309:27
│
309 │ set bus.control = &ControlSignals$(
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/cpu.spade:321:9
│
321 │ *bus.result
│ ^ Useless operator
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:28:54
│
28 │ Command::Write(write_data) => (zext(addr) >= range#0 && zext(addr) < range#1, write_data),
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:28:78
│
28 │ Command::Write(write_data) => (zext(addr) >= range#0 && zext(addr) < range#1, write_data),
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:31:27
│
31 │ let addr = addr-trunc(range#0);
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:106:17
│
106 │ assert (range#1 - range#0) == 16384;
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:106:27
│
106 │ assert (range#1 - range#0) == 16384;
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:109:41
│
109 │ split_control_write_signals(buses#0, range),
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:110:41
│
110 │ split_control_write_signals(buses#1, range)
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:112:85
│
112 │ let MemorySignals$(write_ports: wp0, addr_first_bits: _, access_width: _) = mem_signals#0;
│ ^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:113:85
│
113 │ let MemorySignals$(write_ports: wp1, addr_first_bits: _, access_width: _) = mem_signals#1;
│ ^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:116:22
│
116 │ assert match buses#1.cmd {Command::Read => true, Command::Nop => true, _ => false};
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:125:46
│
125 │ let data1_0 = inst read_memory(mem0, wp0[0]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:126:46
│
126 │ let data1_1 = inst read_memory(mem1, wp0[1]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:127:46
│
127 │ let data1_2 = inst read_memory(mem2, wp0[2]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:128:46
│
128 │ let data1_3 = inst read_memory(mem3, wp0[3]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:130:46
│
130 │ let data2_0 = inst read_memory(mem0, wp1[0]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:131:46
│
131 │ let data2_1 = inst read_memory(mem1, wp1[1]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:132:46
│
132 │ let data2_2 = inst read_memory(mem2, wp1[2]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:133:46
│
133 │ let data2_3 = inst read_memory(mem3, wp1[3]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:137:26
│
137 │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:137:35
│
137 │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
│ ^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:137:67
│
137 │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:137:76
│
137 │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
│ ^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: The reference operator no longer has any effect.
┌─ ../src/bus.spade:107:56
│
107 │ data: Bus $(control: data_control, result: &data_out),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/bus.spade:108:63
│
108 │ instruction: Bus $(control: insn_control, result: &insn_mem_out),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/bus.spade:109:24
│
109 │ load_done: &load_signals.done,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/bus.spade:141:9
│
141 │ ) = *signals;
│ ^ Useless operator
warning: Deprecated tuple syntax indexing
┌─ ../src/bus.spade:166:12
│
166 │ assert region#1 > region#0;
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/bus.spade:166:23
│
166 │ assert region#1 > region#0;
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: The dereference operator no longer has any effect.
┌─ ../src/bus.spade:172:9
│
172 │ ) = *signals;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/peripherals/led.spade:11:55
│
11 │ let ControlSignals$(cmd, addr, access_width: _) = *bus_signals;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/peripherals/led.spade:19:21
│
19 │ set led_state = &state;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/peripherals/timer.spade:85:51
│
85 │ inst timer$(clk, rst, mem_range, bus_signals: &bus_signals)
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/regfile.spade:19:29
│
19 │ set regfile.write = &write;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/regfile.spade:20:28
│
20 │ set regfile.idxa = &idxa;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/regfile.spade:21:28
│
21 │ set regfile.idxb = &idxb;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/regfile.spade:23:9
│
23 │ *regfile.read
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/regfile.spade:56:16
│
56 │ write: *w.write,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/regfile.spade:57:15
│
57 │ idxa: *w.idxa,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/regfile.spade:58:15
│
58 │ idxb: *w.idxb,
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/regfile.spade:61:18
│
61 │ set w.read = &out;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/regfile.spade:71:16
│
71 │ write: *w.write,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/regfile.spade:72:15
│
72 │ idxa: *w.idxa,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/regfile.spade:73:15
│
73 │ idxb: *w.idxb,
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/regfile.spade:76:18
│
76 │ set w.read = &out;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:44:17
│
44 │ set ready = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:49:16
│
49 │ set sclk = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:56:16
│
56 │ set mosi = &match state {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:67:18
│
67 │ [*miso].concat(captured[0..7])
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/test.spade:10:44
│
10 │ let tx_out = inst uart_tx(clk, rst, Rv(&to_transmit, port.1), config);
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/protocols/src/uart.spade:34:23
│
34 │ match *transmit.data {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/uart.spade:97:26
│
97 │ set transmit.ready = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/uart.spade:119:18
│
119 │ set tx = &inst uart_tx(clk, rst, self, config);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:143:17
│
143 │ set ready = &match (state, inst read_mut_wire(emitter_ready)) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:168:25
│
168 │ set sda_drive_low = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:179:16
│
179 │ set sclk = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:271:16
│
271 │ set sclk = &sclk_driver_out.sclk;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:273:25
│
273 │ set sda_drive_low = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:283:17
│
283 │ set ready = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/nstd/src/mem.spade:25:77
│
25 │ (WritePort$(addr: w_addr, write: w_write), ReadPort$(addr: r_addr, out: &read_result))
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/nstd/src/array.spade:70:19
│
70 │ where NSize: {uint_bits_to_fit(N-1)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
70 │ where NSize: {uint::bits_for(N-1)}
│ ~~~~~~~~~~~~~~
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/nstd/src/array.spade:70:19
│
70 │ where NSize: {uint_bits_to_fit(N-1)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
70 │ where NSize: {uint::bits_for(N-1)}
│ ~~~~~~~~~~~~~~
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/option_ext.spade:25:42
│
25 │ let (write, read) = inst fifo::<{uint_bits_to_fit(Depth - 1)}, T, Depth>$(
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
25 │ let (write, read) = inst fifo::<{uint::bits_for(Depth - 1)}, T, Depth>$(
│ ~~~~~~~~~~~~~~
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/option_ext.spade:32:27
│
32 │ set write.write = &self;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:22:57
│
22 │ reg(clk) value reset(rst: None) = match (value, *self.data) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:32:26
│
32 │ set self.ready = &value.is_none();
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:35:19
│
35 │ data: &value,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:42:51
│
42 │ reg(clk) buffer reset(rst: None) = match (*ds, buffer, *self.data) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:42:64
│
42 │ reg(clk) buffer reset(rst: None) = match (*ds, buffer, *self.data) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:54:34
│
54 │ set self.ready = &match (*ds, buffer) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:54:26
│
54 │ set self.ready = &match (*ds, buffer) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:61:12
│
61 │ Rv(&buffer, ds_inv)
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:65:26
│
65 │ set self.ready = &false;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:69:26
│
69 │ set self.ready = &true;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:75:21
│
75 │ data: &(*self.data).map(f),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:75:19
│
75 │ data: &(*self.data).map(f),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:83:21
│
83 │ data: &(*self.data).and_then(f),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:83:19
│
83 │ data: &(*self.data).and_then(f),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:89:27
│
89 │ let self_takes = (*self.data).is_some();
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:94:44
│
94 │ set other.ready = &(!self_takes && *ds_ready);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:94:27
│
94 │ set other.ready = &(!self_takes && *ds_ready);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:114:48
│
114 │ set ready = if gate {ds_ready.0} else {&false};
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:116:34
│
116 │ if gate {data} else {&None},
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:132:29
│
132 │ match (timeout, *data, *ds_ready.0) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:132:36
│
132 │ match (timeout, *data, *ds_ready.0) {
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/main.spade:131:33
│
131 │ reg(clk) timeout: uint<{uint_bits_to_fit(N)}> reset(rst: 0) =
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
131 │ reg(clk) timeout: uint<{uint::bits_for(N)}> reset(rst: 0) =
│ ~~~~~~~~~~~~~~
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:139:23
│
139 │ set ready = &(*ds_ready.0 && timeout == 0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:139:21
│
139 │ set ready = &(*ds_ready.0 && timeout == 0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:140:41
│
140 │ Rv(if timeout == 0 {data} else {&None}, ds_ready.1)
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:178:28
│
178 │ set self.ready = &!*write_full.0;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:178:26
│
178 │ set self.ready = &!*write_full.0;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:179:32
│
179 │ let Rv(data, ready) = (*self.data)
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:187:22
│
187 │ empty: &(*data).is_none(),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:187:20
│
187 │ empty: &(*data).is_none(),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:208:51
│
208 │ match (state, inst read_mut_wire(ds), *self.data) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:218:26
│
218 │ set self.ready = &match state {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:223:34
│
223 │ let data = match (state, *self.data) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:231:19
│
231 │ data: &data,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:242:17
│
242 │ match (*data, num_left, *ds_ready.0) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:242:34
│
242 │ match (*data, num_left, *ds_ready.0) {
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/main.spade:241:50
│
241 │ reg(clk) (array, num_left): ([T; N], uint<{uint_bits_to_fit(N)}>) reset(rst: (std::undef::undef(), 0)) =
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
241 │ reg(clk) (array, num_left): ([T; N], uint<{uint::bits_for(N)}>) reset(rst: (std::undef::undef(), 0)) =
│ ~~~~~~~~~~~~~~
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:250:55
│
250 │ set ready = &(num_left == 0 || num_left == 1 && *ds_ready.0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:250:19
│
250 │ set ready = &(num_left == 0 || num_left == 1 && *ds_ready.0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:253:10
│
253 │ &match num_left {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:273:24
│
273 │ let rv = Rv$(data: &value, ready: inst new_mut_wire());
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:276:21
│
276 │ set out.ready = &ready;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:277:5
│
277 │ *out.data
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:286:24
│
286 │ let rv = Rv$(data: &value, ready: inst new_mut_wire());
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:289:21
│
289 │ set out.ready = &ready;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:290:5
│
290 │ *out.data
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:32:48
│
32 │ let (out, next_state) = match (state, (*self.data), *ds_ready) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:32:61
│
32 │ let (out, next_state) = match (state, (*self.data), *ds_ready) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:54:41
│
54 │ set self.ready = &match (state, *ds_ready) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:54:26
│
54 │ set self.ready = &match (state, *ds_ready) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:60:13
│
60 │ &out,
│ ^ Useless operator
error: Trait bound not satisfied. inv bool does not implement core::Data
┌─ src/led_blink.spade:26:5
│
26 │ led: inv &bool,
│ ^^^
│ │
│ inv bool does not implement core::Data
│ The type of this argument is not Data which means it cannot be stored in a register.
27 │ ) -> Buses {
│ ╭──────────────'
│ │ ╭────────────'
28 │ │ │ // Build the bus signals
29 │ │ │ let data_control = inst new_mut_wire();
30 │ │ │ let insn_control = inst new_mut_wire();
· │ │
66 │ │ │ )
67 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An value not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the argument a wire
│
26 │ wire led: inv &bool,
│ +++++
error: Trait bound not satisfied. spadev::bus::Buses does not implement core::Data
┌─ ../src/cpu.spade:46:5
│
46 │ buses: Buses,
│ ^^^^^
│ │
│ spadev::bus::Buses does not implement core::Data
│ The type of this argument is not Data which means it cannot be stored in a register.
·
52 │ ╭ ╭ {
53 │ │ │ 'pc
54 │ │ │
55 │ │ │ let NOP = 0x00000013;
· │ │
244 │ │ │ )
245 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An value not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the argument a wire
│
46 │ wire buses: Buses,
│ +++++
error: Trait bound not satisfied. spadev::bus::Bus does not implement core::Data
┌─ ../src/cpu.spade:278:5
│
278 │ bus: Bus,
│ ^^^
│ │
│ spadev::bus::Bus does not implement core::Data
│ The type of this argument is not Data which means it cannot be stored in a register.
·
282 │ ) -> uint<32> {
│ ╭─────────────────'
│ │ ╭───────────────'
283 │ │ │ let write_data = rs2;
284 │ │ │
285 │ │ │ let (access_width, memory_command) = match op {
· │ │
305 │ │ │ *bus.result
306 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An value not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the argument a wire
│
278 │ wire bus: Bus,
│ +++++
error: Trait bound not satisfied. spadev::bus::Bus does not implement core::Data
┌─ ../src/cpu.spade:308:38
│
308 │ pipeline(1) set_insn_bus(clk: clock, bus: Bus, pc_option: Option<uint<32>>) -> uint<32> {
│ ^^^
│ │
│ spadev::bus::Bus does not implement core::Data
│ The type of this argument is not Data which means it cannot be stored in a register.
│ ╭───────────────────────────────────────────────────────────────────────────────────────────'
│ │ ╭─────────────────────────────────────────────────────────────────────────────────────────'
309 │ │ │ set bus.control = &ControlSignals$(
310 │ │ │ access_width: AccessWidth::Full(),
311 │ │ │ addr: match pc_option {
· │ │
321 │ │ │ *bus.result
322 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An value not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the argument a wire
│
308 │ pipeline(1) set_insn_bus(clk: clock, wire bus: Bus, pc_option: Option<uint<32>>) -> uint<32> {
│ +++++
error: Trait bound not satisfied. Memory<uint<8>, 4096> does not implement core::Data
┌─ ../src/memory.spade:120:13
│
105 │ ) -> (uint<32>, uint<32>) {
│ ╭─────────────────────────────'
│ │ ╭───────────────────────────'
106 │ │ │ assert (range#1 - range#0) == 16384;
107 │ │ │
108 │ │ │ let mem_signals = (
· │ │
120 │ │ │ let mem0: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[0]]);
│ │ │ ^^^^
│ │ │ │
│ │ │ Memory<uint<8>, 4096> does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
· │ │
137 │ │ │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
138 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
120 │ let wire mem0: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[0]]);
│ +++++
error: Trait bound not satisfied. Memory<uint<8>, 4096> does not implement core::Data
┌─ ../src/memory.spade:121:13
│
105 │ ) -> (uint<32>, uint<32>) {
│ ╭─────────────────────────────'
│ │ ╭───────────────────────────'
106 │ │ │ assert (range#1 - range#0) == 16384;
107 │ │ │
108 │ │ │ let mem_signals = (
· │ │
121 │ │ │ let mem1: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[1]]);
│ │ │ ^^^^
│ │ │ │
│ │ │ Memory<uint<8>, 4096> does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
· │ │
137 │ │ │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
138 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
121 │ let wire mem1: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[1]]);
│ +++++
error: Trait bound not satisfied. Memory<uint<8>, 4096> does not implement core::Data
┌─ ../src/memory.spade:122:13
│
105 │ ) -> (uint<32>, uint<32>) {
│ ╭─────────────────────────────'
│ │ ╭───────────────────────────'
106 │ │ │ assert (range#1 - range#0) == 16384;
107 │ │ │
108 │ │ │ let mem_signals = (
· │ │
122 │ │ │ let mem2: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[2]]);
│ │ │ ^^^^
│ │ │ │
│ │ │ Memory<uint<8>, 4096> does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
· │ │
137 │ │ │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
138 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
122 │ let wire mem2: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[2]]);
│ +++++
error: Trait bound not satisfied. Memory<uint<8>, 4096> does not implement core::Data
┌─ ../src/memory.spade:123:13
│
105 │ ) -> (uint<32>, uint<32>) {
│ ╭─────────────────────────────'
│ │ ╭───────────────────────────'
106 │ │ │ assert (range#1 - range#0) == 16384;
107 │ │ │
108 │ │ │ let mem_signals = (
· │ │
123 │ │ │ let mem3: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[3]]);
│ │ │ ^^^^
│ │ │ │
│ │ │ Memory<uint<8>, 4096> does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
· │ │
137 │ │ │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
138 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
123 │ let wire mem3: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[3]]);
│ +++++
error: Trait bound not satisfied. inv spadev::bus::ControlSignals does not implement core::Data
┌─ ../src/bus.spade:69:13
│
68 │ pub(lib) pipeline(1) test_bus(clk: clock, load_signals: ProgramLoadSignals) -> Buses {
│ ╭────────────────────────────────────────────────────────────────────────────────────────'
│ │ ╭──────────────────────────────────────────────────────────────────────────────────────'
69 │ │ │ let data_control = inst new_mut_wire();
│ │ │ ^^^^^^^^^^^^
│ │ │ │
│ │ │ inv spadev::bus::ControlSignals does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
70 │ │ │ let insn_control = inst new_mut_wire();
71 │ │ │
· │ │
110 │ │ │ )
111 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
69 │ let wire data_control = inst new_mut_wire();
│ +++++
error: Trait bound not satisfied. inv spadev::bus::ControlSignals does not implement core::Data
┌─ ../src/bus.spade:70:13
│
68 │ pub(lib) pipeline(1) test_bus(clk: clock, load_signals: ProgramLoadSignals) -> Buses {
│ ╭────────────────────────────────────────────────────────────────────────────────────────'
│ │ ╭──────────────────────────────────────────────────────────────────────────────────────'
69 │ │ │ let data_control = inst new_mut_wire();
70 │ │ │ let insn_control = inst new_mut_wire();
│ │ │ ^^^^^^^^^^^^
│ │ │ │
│ │ │ inv spadev::bus::ControlSignals does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
71 │ │ │
· │ │
110 │ │ │ )
111 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
70 │ let wire insn_control = inst new_mut_wire();
│ +++++
error: Trait bound not satisfied. spadev::regfile::RegfilePort does not implement core::Data
┌─ ../src/regfile.spade:14:5
│
14 │ regfile: RegfilePort,
│ ^^^^^^^
│ │
│ spadev::regfile::RegfilePort does not implement core::Data
│ The type of this argument is not Data which means it cannot be stored in a register.
·
18 │ ) -> (int<32>, int<32>) {
│ ╭───────────────────────────'
│ │ ╭─────────────────────────'
19 │ │ │ set regfile.write = &write;
20 │ │ │ set regfile.idxa = &idxa;
21 │ │ │ set regfile.idxb = &idxb;
22 │ │ │ reg;
23 │ │ │ *regfile.read
24 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An value not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the argument a wire
│
14 │ wire regfile: RegfilePort,
│ +++++
error: Trait bound not satisfied. Memory<int<32>, _> does not implement core::Data
┌─ ../src/regfile.spade:38:13
│
31 │ ) -> (int<32>, int<32>) {
│ ╭───────────────────────────'
│ │ ╭─────────────────────────'
32 │ │ │ let (we, dreg, dval) = match write {
33 │ │ │ Option::Some((dreg, dval)) => (true, dreg, dval),
34 │ │ │ // NOTE: We really need to add a way to specify don't care here
· │ │
38 │ │ │ let regs: Memory<int<32>, N> = inst clocked_memory(clk, [(we, trunc(dreg), dval)]);
│ │ │ ^^^^
│ │ │ │
│ │ │ Memory<int<32>, _> does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
· │ │
48 │ │ │ )
49 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
38 │ let wire regs: Memory<int<32>, N> = inst clocked_memory(clk, [(we, trunc(dreg), dval)]);
│ +++++
Error: aborting due to previous error
Location:
spade-compiler/src/main.rs:174:23
Error:
0: Failed to build spade code
Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.
Run with RUST_BACKTRACE=full to include source snippets.
test (fail)
[WARN] swim.toml contains 1 unknown field:
[WARN] synthesis.?.extra_verilog
[INFO] Failed to fetch pre-built surfer plugin, building locally.
========
Reason: Did not find a pre-built surfer plugin for git hash "be892f685e0ec1ed4f120b8d3f9b82d51f7a62a9"
========
[INFO] Building spade-surfer-plugin
Blocking waiting for file lock on package cache
Compiling serde_core v1.0.228
Compiling num-traits v0.2.19
error[E0463]: can't find crate for `std`
|
= note: the `wasm32-unknown-unknown` target may not be installed
= help: consider downloading the target with `rustup target add wasm32-unknown-unknown`
For more information about this error, try `rustc --explain E0463`.
error: could not compile `serde_core` (lib) due to 1 previous error
warning: build failed, waiting for other jobs to finish...
error[E0463]: can't find crate for `core`
|
= note: the `wasm32-unknown-unknown` target may not be installed
= help: consider downloading the target with `rustup target add wasm32-unknown-unknown`
error: could not compile `num-traits` (lib) due to 1 previous error
[WARN] Failed to build surfer plugin. Continuing anyway but Surfer integration will not work
[INFO] Building spade code
[ERROR] Failed to build spade code
HEAD is now at 3170518 Fix tests
HEAD is now at d029c73 Bump Spade again
HEAD is now at 92b6b79 Add pub markers
warning: The & modifier on types no longer has any effect
┌─ src/led_blink.spade:26:14
│
26 │ led: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/led_blink.spade:78:20
│
78 │ reset_led: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/led_blink.spade:80:24
│
80 │ load_done_led: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ src/led_blink.spade:82:22
│
82 │ program_led: inv &bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/option_ext.spade:18:25
│
18 │ write_full: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ build/libs/ready_valid/src/main.spade:7:12
│
7 │ pub struct port Rv<T> {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
7 │ pub struct port Rv<T> {
│ ----
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:8:11
│
8 │ data: &Option<T>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:9:16
│
9 │ ready: inv &bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ build/libs/ready_valid/src/main.spade:148:8
│
148 │ struct port FifoOut<T> {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
148 │ struct port FifoOut<T> {
│ ----
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:149:11
│
149 │ full: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/ready_valid/src/main.spade:150:12
│
150 │ empty: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
error: Unexpected `:`, expected `Identifier`
┌─ build/libs/ready_valid/src/main.spade:155:33
│
155 │ pub fn read_empty(self, wire: inv &bool) -> FifoOut<T> {
│ ^ expected `Identifier`
error: Unexpected `:`, expected `Identifier`
┌─ build/libs/ready_valid/src/main.spade:161:32
│
161 │ pub fn read_full(self, wire: inv &bool) -> FifoOut<T> {
│ ^ expected `Identifier`
warning: The & modifier on types no longer has any effect
┌─ ../src/csr.spade:5:40
│
5 │ entity mut_wire_with_read<T>() -> (inv &T, &T) {
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/csr.spade:5:44
│
5 │ entity mut_wire_with_read<T>() -> (inv &T, &T) {
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ ../src/csr.spade:10:12
│
10 │ pub struct port CsrInterface {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
10 │ pub struct port CsrInterface {
│ ----
warning: The & modifier on types no longer has any effect
┌─ ../src/csr.spade:11:14
│
11 │ rs1: inv &uint<32>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/csr.spade:12:18
│
12 │ rs1_idx: inv &uint<5>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/csr.spade:13:13
│
13 │ rd: inv &uint<5>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/csr.spade:14:15
│
14 │ addr: inv &int<12>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/csr.spade:15:13
│
15 │ op: inv &instructions::Op,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/csr.spade:17:13
│
17 │ result: &uint<32>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/csr.spade:18:11
│
18 │ mepc: &uint<32>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ ../src/bus.spade:45:12
│
45 │ pub struct port Bus {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
45 │ pub struct port Bus {
│ ----
warning: The & modifier on types no longer has any effect
┌─ ../src/bus.spade:46:18
│
46 │ control: inv &ControlSignals,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/bus.spade:48:13
│
48 │ result: &uint<32>
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ ../src/bus.spade:52:12
│
52 │ pub struct port Buses {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
52 │ pub struct port Buses {
│ ----
warning: The & modifier on types no longer has any effect
┌─ ../src/bus.spade:55:16
│
55 │ load_done: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/bus.spade:135:32
│
135 │ pub entity unmap_read(signals: &ControlSignals, range: (uint<33>, uint<33>)) -> Option<uint<32>> {
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/bus.spade:162:33
│
162 │ pub entity unmap_write(signals: &ControlSignals, region: (uint<33>, uint<33>))
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/peripherals/led.spade:8:18
│
8 │ bus_signals: &ControlSignals,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/peripherals/led.spade:9:20
│
9 │ led_state: inv & bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/peripherals/timer.spade:21:18
│
21 │ bus_signals: &ControlSignals,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The port keyword no longer has any effect on structs.
┌─ ../src/regfile.spade:5:12
│
5 │ pub struct port RegfilePort {
│ ^^^^ struct port and struct are now the same thing
│
= Consider removing `port`
│
5 │ pub struct port RegfilePort {
│ ----
warning: The & modifier on types no longer has any effect
┌─ ../src/regfile.spade:6:16
│
6 │ write: inv &Option<(uint<5>, int<32>)>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/regfile.spade:7:15
│
7 │ idxa: inv &uint<5>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/regfile.spade:8:15
│
8 │ idxb: inv &uint<5>,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ ../src/regfile.spade:9:11
│
9 │ read: &(int<32>, int<32>)
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:14:16
│
14 │ ready: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:16:15
│
16 │ sclk: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:17:15
│
17 │ mosi: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/spi.spade:18:11
│
18 │ miso: &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/uart.spade:117:17
│
117 │ tx: inv &bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:87:16
│
87 │ ready: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:89:15
│
89 │ sclk: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:91:24
│
91 │ sda_drive_low: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:221:15
│
221 │ sclk: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:223:24
│
223 │ sda_drive_low: inv &bool,
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: The & modifier on types no longer has any effect
┌─ build/libs/protocols/src/i2c.spade:227:16
│
227 │ ready: inv &bool
│ ^ Useless &
│
= help: Spade no longer differentiates types from ports at the individual type level
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/nstd/src/mem.spade:9:15
│
9 │ where W: {uint_bits_to_fit(C)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
9 │ where W: {uint::bits_for(C)}
│ ~~~~~~~~~~~~~~
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/option_ext.spade:9:11
│
9 │ where O: {uint_bits_to_fit(V) - 1},
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
9 │ where O: {uint::bits_for(V) - 1},
│ ~~~~~~~~~~~~~~
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/option_ext.spade:10:11
│
10 │ O: {uint_bits_to_fit(V - 1)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
10 │ O: {uint::bits_for(V - 1)}
│ ~~~~~~~~~~~~~~
warning: Deprecated tuple syntax indexing
┌─ src/led_blink.spade:49:27
│
49 │ range: (trunc(UPPER_DMEM#0), trunc(UPPER_DMEM#1)),
│ ^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/led_blink.spade:49:48
│
49 │ range: (trunc(UPPER_DMEM#0), trunc(UPPER_DMEM#1)),
│ ^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: The reference operator no longer has any effect.
┌─ src/led_blink.spade:52:49
│
52 │ let _ = inst led_driver(clk, LED_RANGE, &data_control_signals, led);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/led_blink.spade:53:59
│
53 │ let timer_out = inst timer(clk, rst, TIMER_RANGE, &data_control_signals);
│ ^ Useless operator
warning: Deprecated tuple syntax indexing
┌─ src/led_blink.spade:57:32
│
57 │ if zext(address) < LOWER_DATA_MEM_RANGE#1 { lower_data_mem_out }
│ ^^^^^^^^^^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/led_blink.spade:58:37
│
58 │ else if zext(address) < LED_RANGE#1 { 0 }
│ ^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ src/led_blink.spade:59:37
│
59 │ else if zext(address) < TIMER_RANGE#1 { stage(-1).timer_out }
│ ^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: The reference operator no longer has any effect.
┌─ src/led_blink.spade:63:56
│
63 │ data: Bus $(control: data_control, result: &read_value),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/led_blink.spade:64:63
│
64 │ instruction: Bus $(control: insn_control, result: &insn_mem_out),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/led_blink.spade:65:24
│
65 │ load_done: &load_signals.done,
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/led_blink.spade:112:23
│
112 │ set program_led = &inst read_mut_wire(led);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/led_blink.spade:113:25
│
113 │ set load_done_led = &load_port.done;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ src/led_blink.spade:114:21
│
114 │ set reset_led = &rst;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/nstd/src/mem.spade:25:77
│
25 │ (WritePort$(addr: w_addr, write: w_write), ReadPort$(addr: r_addr, out: &read_result))
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/nstd/src/array.spade:70:19
│
70 │ where NSize: {uint_bits_to_fit(N-1)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
70 │ where NSize: {uint::bits_for(N-1)}
│ ~~~~~~~~~~~~~~
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/nstd/src/array.spade:70:19
│
70 │ where NSize: {uint_bits_to_fit(N-1)}
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
70 │ where NSize: {uint::bits_for(N-1)}
│ ~~~~~~~~~~~~~~
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/option_ext.spade:25:42
│
25 │ let (write, read) = inst fifo::<{uint_bits_to_fit(Depth - 1)}, T, Depth>$(
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
25 │ let (write, read) = inst fifo::<{uint::bits_for(Depth - 1)}, T, Depth>$(
│ ~~~~~~~~~~~~~~
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/option_ext.spade:32:27
│
32 │ set write.write = &self;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:22:57
│
22 │ reg(clk) value reset(rst: None) = match (value, *self.data) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:32:26
│
32 │ set self.ready = &value.is_none();
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:35:19
│
35 │ data: &value,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:42:51
│
42 │ reg(clk) buffer reset(rst: None) = match (*ds, buffer, *self.data) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:42:64
│
42 │ reg(clk) buffer reset(rst: None) = match (*ds, buffer, *self.data) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:54:34
│
54 │ set self.ready = &match (*ds, buffer) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:54:26
│
54 │ set self.ready = &match (*ds, buffer) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:61:12
│
61 │ Rv(&buffer, ds_inv)
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:65:26
│
65 │ set self.ready = &false;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:69:26
│
69 │ set self.ready = &true;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:75:21
│
75 │ data: &(*self.data).map(f),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:75:19
│
75 │ data: &(*self.data).map(f),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:83:21
│
83 │ data: &(*self.data).and_then(f),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:83:19
│
83 │ data: &(*self.data).and_then(f),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:89:27
│
89 │ let self_takes = (*self.data).is_some();
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:94:44
│
94 │ set other.ready = &(!self_takes && *ds_ready);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:94:27
│
94 │ set other.ready = &(!self_takes && *ds_ready);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:114:48
│
114 │ set ready = if gate {ds_ready.0} else {&false};
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:116:34
│
116 │ if gate {data} else {&None},
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:132:29
│
132 │ match (timeout, *data, *ds_ready.0) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:132:36
│
132 │ match (timeout, *data, *ds_ready.0) {
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/main.spade:131:33
│
131 │ reg(clk) timeout: uint<{uint_bits_to_fit(N)}> reset(rst: 0) =
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
131 │ reg(clk) timeout: uint<{uint::bits_for(N)}> reset(rst: 0) =
│ ~~~~~~~~~~~~~~
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:139:23
│
139 │ set ready = &(*ds_ready.0 && timeout == 0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:139:21
│
139 │ set ready = &(*ds_ready.0 && timeout == 0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:140:41
│
140 │ Rv(if timeout == 0 {data} else {&None}, ds_ready.1)
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:178:28
│
178 │ set self.ready = &!*write_full.0;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:178:26
│
178 │ set self.ready = &!*write_full.0;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:179:32
│
179 │ let Rv(data, ready) = (*self.data)
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:187:22
│
187 │ empty: &(*data).is_none(),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:187:20
│
187 │ empty: &(*data).is_none(),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:208:51
│
208 │ match (state, inst read_mut_wire(ds), *self.data) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:218:26
│
218 │ set self.ready = &match state {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:223:34
│
223 │ let data = match (state, *self.data) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:231:19
│
231 │ data: &data,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:242:17
│
242 │ match (*data, num_left, *ds_ready.0) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:242:34
│
242 │ match (*data, num_left, *ds_ready.0) {
│ ^ Useless operator
warning: Deprecated type-level function `uint_bits_to_fit`
┌─ build/libs/ready_valid/src/main.spade:241:50
│
241 │ reg(clk) (array, num_left): ([T; N], uint<{uint_bits_to_fit(N)}>) reset(rst: (std::undef::undef(), 0)) =
│ ^^^^^^^^^^^^^^^^
│
= Use `uint::bits_for` instead
│
241 │ reg(clk) (array, num_left): ([T; N], uint<{uint::bits_for(N)}>) reset(rst: (std::undef::undef(), 0)) =
│ ~~~~~~~~~~~~~~
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:250:55
│
250 │ set ready = &(num_left == 0 || num_left == 1 && *ds_ready.0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:250:19
│
250 │ set ready = &(num_left == 0 || num_left == 1 && *ds_ready.0);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:253:10
│
253 │ &match num_left {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:273:24
│
273 │ let rv = Rv$(data: &value, ready: inst new_mut_wire());
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:276:21
│
276 │ set out.ready = &ready;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:277:5
│
277 │ *out.data
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:286:24
│
286 │ let rv = Rv$(data: &value, ready: inst new_mut_wire());
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:289:21
│
289 │ set out.ready = &ready;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/main.spade:290:5
│
290 │ *out.data
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:32:48
│
32 │ let (out, next_state) = match (state, (*self.data), *ds_ready) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:32:61
│
32 │ let (out, next_state) = match (state, (*self.data), *ds_ready) {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:54:41
│
54 │ set self.ready = &match (state, *ds_ready) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:54:26
│
54 │ set self.ready = &match (state, *ds_ready) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/ready_valid/src/escape_byte.spade:60:13
│
60 │ &out,
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/csr.spade:7:9
│
7 │ (w, &inst read_mut_wire(w))
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:30:27
│
30 │ let (val, we) = match *op_v {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:31:37
│
31 │ instructions::Op::CSRRW => (*rs1_v, true),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:32:37
│
32 │ instructions::Op::CSRRS => (*rs1_v, !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:32:48
│
32 │ instructions::Op::CSRRS => (*rs1_v, !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:33:37
│
33 │ instructions::Op::CSRRC => (*rs1_v, !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:33:48
│
33 │ instructions::Op::CSRRC => (*rs1_v, !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:34:43
│
34 │ instructions::Op::CSRRWI => (zext(*rs1_idx_v), true),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:35:43
│
35 │ instructions::Op::CSRRSI => (zext(*rs1_idx_v), !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:35:59
│
35 │ instructions::Op::CSRRSI => (zext(*rs1_idx_v), !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:36:43
│
36 │ instructions::Op::CSRRCI => (zext(*rs1_idx_v), !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:36:59
│
36 │ instructions::Op::CSRRCI => (zext(*rs1_idx_v), !((*rs1_idx_v) == 0)),
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:40:31
│
40 │ reg(clk) mepc = if we && (*addr_v) == 0x341 {val} else {mepc};
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/csr.spade:42:22
│
42 │ let result = if (*addr_v) == 0x341 {mepc} else {0};
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/csr.spade:51:15
│
51 │ mepc: &mepc,
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/csr.spade:52:17
│
52 │ result: &result
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/cpu.spade:57:31
│
57 │ let stopped = rst || !*buses.load_done;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/cpu.spade:62:24
│
62 │ load_done: *buses.load_done,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/cpu.spade:152:108
│
152 │ let jump_target = int_to_uint(pfc::jump_target$(op, pc, j_imm, b_imm, alu_value, mepc: uint_to_int(*csr_port.mepc)));
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/cpu.spade:154:28
│
154 │ set csr_port.rs1 = &int_to_uint(rs1);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/cpu.spade:155:32
│
155 │ set csr_port.rs1_idx = &rs1_idx;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/cpu.spade:156:29
│
156 │ set csr_port.addr = &trunc(i_imm);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/cpu.spade:157:27
│
157 │ set csr_port.rd = &rd_idx;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/cpu.spade:158:27
│
158 │ set csr_port.op = &op;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/cpu.spade:160:23
│
160 │ let csr_out = *csr_port.result;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/cpu.spade:299:27
│
299 │ set bus.control = &ControlSignals$(
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/cpu.spade:305:9
│
305 │ *bus.result
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/cpu.spade:309:27
│
309 │ set bus.control = &ControlSignals$(
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/cpu.spade:321:9
│
321 │ *bus.result
│ ^ Useless operator
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:28:54
│
28 │ Command::Write(write_data) => (zext(addr) >= range#0 && zext(addr) < range#1, write_data),
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:28:78
│
28 │ Command::Write(write_data) => (zext(addr) >= range#0 && zext(addr) < range#1, write_data),
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:31:27
│
31 │ let addr = addr-trunc(range#0);
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:106:17
│
106 │ assert (range#1 - range#0) == 16384;
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:106:27
│
106 │ assert (range#1 - range#0) == 16384;
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:109:41
│
109 │ split_control_write_signals(buses#0, range),
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:110:41
│
110 │ split_control_write_signals(buses#1, range)
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:112:85
│
112 │ let MemorySignals$(write_ports: wp0, addr_first_bits: _, access_width: _) = mem_signals#0;
│ ^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:113:85
│
113 │ let MemorySignals$(write_ports: wp1, addr_first_bits: _, access_width: _) = mem_signals#1;
│ ^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:116:22
│
116 │ assert match buses#1.cmd {Command::Read => true, Command::Nop => true, _ => false};
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:125:46
│
125 │ let data1_0 = inst read_memory(mem0, wp0[0]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:126:46
│
126 │ let data1_1 = inst read_memory(mem1, wp0[1]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:127:46
│
127 │ let data1_2 = inst read_memory(mem2, wp0[2]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:128:46
│
128 │ let data1_3 = inst read_memory(mem3, wp0[3]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:130:46
│
130 │ let data2_0 = inst read_memory(mem0, wp1[0]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:131:46
│
131 │ let data2_1 = inst read_memory(mem1, wp1[1]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:132:46
│
132 │ let data2_2 = inst read_memory(mem2, wp1[2]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:133:46
│
133 │ let data2_3 = inst read_memory(mem3, wp1[3]#1);
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:137:26
│
137 │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:137:35
│
137 │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
│ ^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:137:67
│
137 │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
│ ^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/memory.spade:137:76
│
137 │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
│ ^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: The reference operator no longer has any effect.
┌─ ../src/bus.spade:107:56
│
107 │ data: Bus $(control: data_control, result: &data_out),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/bus.spade:108:63
│
108 │ instruction: Bus $(control: insn_control, result: &insn_mem_out),
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/bus.spade:109:24
│
109 │ load_done: &load_signals.done,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/bus.spade:141:9
│
141 │ ) = *signals;
│ ^ Useless operator
warning: Deprecated tuple syntax indexing
┌─ ../src/bus.spade:166:12
│
166 │ assert region#1 > region#0;
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: Deprecated tuple syntax indexing
┌─ ../src/bus.spade:166:23
│
166 │ assert region#1 > region#0;
│ ^^^^^^^^ `#` syntax for tuple indexing is deprecated
│
= note: replace `#` with `.`
warning: The dereference operator no longer has any effect.
┌─ ../src/bus.spade:172:9
│
172 │ ) = *signals;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/peripherals/led.spade:11:55
│
11 │ let ControlSignals$(cmd, addr, access_width: _) = *bus_signals;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/peripherals/led.spade:19:21
│
19 │ set led_state = &state;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/peripherals/timer.spade:85:51
│
85 │ inst timer$(clk, rst, mem_range, bus_signals: &bus_signals)
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/regfile.spade:19:29
│
19 │ set regfile.write = &write;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/regfile.spade:20:28
│
20 │ set regfile.idxa = &idxa;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/regfile.spade:21:28
│
21 │ set regfile.idxb = &idxb;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/regfile.spade:23:9
│
23 │ *regfile.read
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/regfile.spade:56:16
│
56 │ write: *w.write,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/regfile.spade:57:15
│
57 │ idxa: *w.idxa,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/regfile.spade:58:15
│
58 │ idxb: *w.idxb,
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/regfile.spade:61:18
│
61 │ set w.read = &out;
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/regfile.spade:71:16
│
71 │ write: *w.write,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/regfile.spade:72:15
│
72 │ idxa: *w.idxa,
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ ../src/regfile.spade:73:15
│
73 │ idxb: *w.idxb,
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ ../src/regfile.spade:76:18
│
76 │ set w.read = &out;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:44:17
│
44 │ set ready = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:49:16
│
49 │ set sclk = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:56:16
│
56 │ set mosi = &match state {
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/protocols/src/spi.spade:67:18
│
67 │ [*miso].concat(captured[0..7])
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/test.spade:10:44
│
10 │ let tx_out = inst uart_tx(clk, rst, Rv(&to_transmit, port.1), config);
│ ^ Useless operator
warning: The dereference operator no longer has any effect.
┌─ build/libs/protocols/src/uart.spade:34:23
│
34 │ match *transmit.data {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/uart.spade:97:26
│
97 │ set transmit.ready = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/uart.spade:119:18
│
119 │ set tx = &inst uart_tx(clk, rst, self, config);
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:143:17
│
143 │ set ready = &match (state, inst read_mut_wire(emitter_ready)) {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:168:25
│
168 │ set sda_drive_low = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:179:16
│
179 │ set sclk = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:271:16
│
271 │ set sclk = &sclk_driver_out.sclk;
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:273:25
│
273 │ set sda_drive_low = &match state {
│ ^ Useless operator
warning: The reference operator no longer has any effect.
┌─ build/libs/protocols/src/i2c.spade:283:17
│
283 │ set ready = &match state {
│ ^ Useless operator
error: Trait bound not satisfied. inv bool does not implement core::Data
┌─ src/led_blink.spade:26:5
│
26 │ led: inv &bool,
│ ^^^
│ │
│ inv bool does not implement core::Data
│ The type of this argument is not Data which means it cannot be stored in a register.
27 │ ) -> Buses {
│ ╭──────────────'
│ │ ╭────────────'
28 │ │ │ // Build the bus signals
29 │ │ │ let data_control = inst new_mut_wire();
30 │ │ │ let insn_control = inst new_mut_wire();
· │ │
66 │ │ │ )
67 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An value not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the argument a wire
│
26 │ wire led: inv &bool,
│ +++++
error: Trait bound not satisfied. spadev::bus::Buses does not implement core::Data
┌─ ../src/cpu.spade:46:5
│
46 │ buses: Buses,
│ ^^^^^
│ │
│ spadev::bus::Buses does not implement core::Data
│ The type of this argument is not Data which means it cannot be stored in a register.
·
52 │ ╭ ╭ {
53 │ │ │ 'pc
54 │ │ │
55 │ │ │ let NOP = 0x00000013;
· │ │
244 │ │ │ )
245 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An value not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the argument a wire
│
46 │ wire buses: Buses,
│ +++++
error: Trait bound not satisfied. spadev::bus::Bus does not implement core::Data
┌─ ../src/cpu.spade:278:5
│
278 │ bus: Bus,
│ ^^^
│ │
│ spadev::bus::Bus does not implement core::Data
│ The type of this argument is not Data which means it cannot be stored in a register.
·
282 │ ) -> uint<32> {
│ ╭─────────────────'
│ │ ╭───────────────'
283 │ │ │ let write_data = rs2;
284 │ │ │
285 │ │ │ let (access_width, memory_command) = match op {
· │ │
305 │ │ │ *bus.result
306 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An value not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the argument a wire
│
278 │ wire bus: Bus,
│ +++++
error: Trait bound not satisfied. spadev::bus::Bus does not implement core::Data
┌─ ../src/cpu.spade:308:38
│
308 │ pipeline(1) set_insn_bus(clk: clock, bus: Bus, pc_option: Option<uint<32>>) -> uint<32> {
│ ^^^
│ │
│ spadev::bus::Bus does not implement core::Data
│ The type of this argument is not Data which means it cannot be stored in a register.
│ ╭───────────────────────────────────────────────────────────────────────────────────────────'
│ │ ╭─────────────────────────────────────────────────────────────────────────────────────────'
309 │ │ │ set bus.control = &ControlSignals$(
310 │ │ │ access_width: AccessWidth::Full(),
311 │ │ │ addr: match pc_option {
· │ │
321 │ │ │ *bus.result
322 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An value not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the argument a wire
│
308 │ pipeline(1) set_insn_bus(clk: clock, wire bus: Bus, pc_option: Option<uint<32>>) -> uint<32> {
│ +++++
error: Trait bound not satisfied. Memory<uint<8>, 4096> does not implement core::Data
┌─ ../src/memory.spade:120:13
│
105 │ ) -> (uint<32>, uint<32>) {
│ ╭─────────────────────────────'
│ │ ╭───────────────────────────'
106 │ │ │ assert (range#1 - range#0) == 16384;
107 │ │ │
108 │ │ │ let mem_signals = (
· │ │
120 │ │ │ let mem0: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[0]]);
│ │ │ ^^^^
│ │ │ │
│ │ │ Memory<uint<8>, 4096> does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
· │ │
137 │ │ │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
138 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
120 │ let wire mem0: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[0]]);
│ +++++
error: Trait bound not satisfied. Memory<uint<8>, 4096> does not implement core::Data
┌─ ../src/memory.spade:121:13
│
105 │ ) -> (uint<32>, uint<32>) {
│ ╭─────────────────────────────'
│ │ ╭───────────────────────────'
106 │ │ │ assert (range#1 - range#0) == 16384;
107 │ │ │
108 │ │ │ let mem_signals = (
· │ │
121 │ │ │ let mem1: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[1]]);
│ │ │ ^^^^
│ │ │ │
│ │ │ Memory<uint<8>, 4096> does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
· │ │
137 │ │ │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
138 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
121 │ let wire mem1: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[1]]);
│ +++++
error: Trait bound not satisfied. Memory<uint<8>, 4096> does not implement core::Data
┌─ ../src/memory.spade:122:13
│
105 │ ) -> (uint<32>, uint<32>) {
│ ╭─────────────────────────────'
│ │ ╭───────────────────────────'
106 │ │ │ assert (range#1 - range#0) == 16384;
107 │ │ │
108 │ │ │ let mem_signals = (
· │ │
122 │ │ │ let mem2: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[2]]);
│ │ │ ^^^^
│ │ │ │
│ │ │ Memory<uint<8>, 4096> does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
· │ │
137 │ │ │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
138 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
122 │ let wire mem2: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[2]]);
│ +++++
error: Trait bound not satisfied. Memory<uint<8>, 4096> does not implement core::Data
┌─ ../src/memory.spade:123:13
│
105 │ ) -> (uint<32>, uint<32>) {
│ ╭─────────────────────────────'
│ │ ╭───────────────────────────'
106 │ │ │ assert (range#1 - range#0) == 16384;
107 │ │ │
108 │ │ │ let mem_signals = (
· │ │
123 │ │ │ let mem3: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[3]]);
│ │ │ ^^^^
│ │ │ │
│ │ │ Memory<uint<8>, 4096> does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
· │ │
137 │ │ │ (unswizzle_reads(bytes#0, mem_signals#0), unswizzle_reads(bytes#1, mem_signals#1))
138 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
123 │ let wire mem3: Memory<uint<8>, 4096> = inst clocked_memory(clk, [wp0[3]]);
│ +++++
error: Trait bound not satisfied. inv spadev::bus::ControlSignals does not implement core::Data
┌─ ../src/bus.spade:69:13
│
68 │ pub(lib) pipeline(1) test_bus(clk: clock, load_signals: ProgramLoadSignals) -> Buses {
│ ╭────────────────────────────────────────────────────────────────────────────────────────'
│ │ ╭──────────────────────────────────────────────────────────────────────────────────────'
69 │ │ │ let data_control = inst new_mut_wire();
│ │ │ ^^^^^^^^^^^^
│ │ │ │
│ │ │ inv spadev::bus::ControlSignals does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
70 │ │ │ let insn_control = inst new_mut_wire();
71 │ │ │
· │ │
110 │ │ │ )
111 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
69 │ let wire data_control = inst new_mut_wire();
│ +++++
error: Trait bound not satisfied. inv spadev::bus::ControlSignals does not implement core::Data
┌─ ../src/bus.spade:70:13
│
68 │ pub(lib) pipeline(1) test_bus(clk: clock, load_signals: ProgramLoadSignals) -> Buses {
│ ╭────────────────────────────────────────────────────────────────────────────────────────'
│ │ ╭──────────────────────────────────────────────────────────────────────────────────────'
69 │ │ │ let data_control = inst new_mut_wire();
70 │ │ │ let insn_control = inst new_mut_wire();
│ │ │ ^^^^^^^^^^^^
│ │ │ │
│ │ │ inv spadev::bus::ControlSignals does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
71 │ │ │
· │ │
110 │ │ │ )
111 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
70 │ let wire insn_control = inst new_mut_wire();
│ +++++
error: Trait bound not satisfied. spadev::regfile::RegfilePort does not implement core::Data
┌─ ../src/regfile.spade:14:5
│
14 │ regfile: RegfilePort,
│ ^^^^^^^
│ │
│ spadev::regfile::RegfilePort does not implement core::Data
│ The type of this argument is not Data which means it cannot be stored in a register.
·
18 │ ) -> (int<32>, int<32>) {
│ ╭───────────────────────────'
│ │ ╭─────────────────────────'
19 │ │ │ set regfile.write = &write;
20 │ │ │ set regfile.idxa = &idxa;
21 │ │ │ set regfile.idxb = &idxb;
22 │ │ │ reg;
23 │ │ │ *regfile.read
24 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An value not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the argument a wire
│
14 │ wire regfile: RegfilePort,
│ +++++
error: Trait bound not satisfied. Memory<int<32>, _> does not implement core::Data
┌─ ../src/regfile.spade:38:13
│
31 │ ) -> (int<32>, int<32>) {
│ ╭───────────────────────────'
│ │ ╭─────────────────────────'
32 │ │ │ let (we, dreg, dval) = match write {
33 │ │ │ Option::Some((dreg, dval)) => (true, dreg, dval),
34 │ │ │ // NOTE: We really need to add a way to specify don't care here
· │ │
38 │ │ │ let regs: Memory<int<32>, N> = inst clocked_memory(clk, [(we, trunc(dreg), dval)]);
│ │ │ ^^^^
│ │ │ │
│ │ │ Memory<int<32>, _> does not implement core::Data
│ │ │ The type of this expression is not Data which means it cannot be stored in a register.
· │ │
48 │ │ │ )
49 │ │ │ }
│ ╰─│─' Required because of the trait bound specified here
│ ╰─' The value needs to be in a register because it is in this pipeline
│
= help: An expression not being Data typically means it contains at least one `inv` type
= help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
= Consider making the binding a wire
│
38 │ let wire regs: Memory<int<32>, N> = inst clocked_memory(clk, [(we, trunc(dreg), dval)]);
│ +++++
Error: aborting due to previous error
Location:
spade-compiler/src/main.rs:174:23
Error:
0: Failed to build spade code
Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.
Run with RUST_BACKTRACE=full to include source snippets.
templates-alchitry-cu (2/2)
build (success)
pnr (success)
templates-ecpix5 (2/2)
build (success)
pnr (success)
templates-go-board (2/2)
build (success)
pnr (success)
templates-icestick (2/2)
build (success)
pnr (success)
templates-icesugar-nano (2/2)
build (success)
pnr (success)
templates-pico-ice40up5k (2/2)
build (success)
pnr (success)
templates-tangnano20k (2/2)
build (success)
pnr (success)
templates-tangnano4k (2/2)
build (success)
pnr (success)
templates-tangnano9k (2/2)
build (success)
pnr (success)
templates-tinyfpga-bx (2/2)
build (success)
pnr (success)
templates-ulx3s_85k (2/2)
build (success)
pnr (success)
vga_spade (1/1)
build (success)
ws2812 (3/3)
build (success)
pnr (success)
test (success)
ws2812-lithekod (3/3)
build (success)
pnr (success)
test (success)
This page was generated at 2026-03-21T11:31:17Z.