Summary
- csi2 (0/1)
- ecp5stubs (1/1)
- ethernet (0/1)
- fixed (1/1)
- mcp3002 (0/1)
- playground_blinky (1/1)
- playground_floppy_fish (1/1)
- playground_tinytapeout (1/1)
- playground_vga (1/1)
- protocols (2/2)
- quickscope (0/1)
- ready_valid (0/1)
- spade-v (2/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/1)
build (fail)
{"type"=>"Failed to clone csi2 from https://codeberg.com/TheZoq2/spade-csi2.git", "message"=>""}
ecp5stubs (1/1)
build (success)
ethernet (0/1)
build (fail)
{"type"=>"Failed to clone ethernet from https://codeberg.com/TheZoq2/ethernet.git", "message"=>""}
fixed (1/1)
build (success)
mcp3002 (0/1)
build (fail)
{"type"=>"Failed to clone mcp3002 from https://codeberg.com/TheZoq2/mcp3002-spade.git", "message"=>""}
playground_blinky (1/1)
build (success)
playground_floppy_fish (1/1)
build (success)
playground_tinytapeout (1/1)
build (success)
playground_vga (1/1)
build (success)
protocols (2/2)
build (success)
test (success)
quickscope (0/1)
build (fail)
{"type"=>"Failed to clone quickscope from https://codeberg.com/TheZoq2/quickscope.git", "message"=>""}
ready_valid (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 "95d5f6511cdb74f8a1c3a254673f9b098a481f74"
========
[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 5m 00s
[INFO] Failed to fetch pre-built surfer plugin, building locally.
========
Reason: Did not find a pre-built surfer plugin for git hash "95d5f6511cdb74f8a1c3a254673f9b098a481f74"
========
[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 "nstd"
[INFO] Building spade code
[ERROR] Failed to build spade code
Cloning into '/builds/spade-lang/trawler/work/ready_valid/build/libs/nstd'...
HEAD is now at b6de7c2 Remove deprecated *
error: [std::array::T; std::array::N] already has a method named all
┌─ <compiler dir>/stdlib/array.spade:82:5
│
82 │ ╭ fn all(self, f: impl Fn(T) -> bool) -> bool {
83 │ │ gen if N == 0 {
84 │ │ true
85 │ │ } else {
86 │ │ self.map(f).reduce_and()
87 │ │ }
88 │ │ }
│ ╰─────^ Duplicate method
│
┌─ build/libs/nstd/src/array.spade:41:9
│
41 │ pub fn all<F>(self, f: F) -> bool
│ ╭─────────'
42 │ │ where F: Fn(T) -> bool
43 │ │ {
44 │ │ self
45 │ │ .map(f)
46 │ │ .fold(true, fn |acc, next| {acc && next})
47 │ │ }
│ ╰─────' Previous definition here
error: [std::array::T; std::array::N] already has a method named fold
┌─ <compiler dir>/stdlib/array.spade:195:5
│
195 │ ╭ fn fold<B>(self, init: B, f: impl Fn(B, T) -> B) -> B {
196 │ │ gen if N == 0 {
197 │ │ init
198 │ │ } else {
· │
201 │ │ }
202 │ │ }
│ ╰─────^ Duplicate method
│
┌─ build/libs/nstd/src/array.spade:29:9
│
29 │ pub fn fold<F, Acc>(self, init: Acc, f: F) -> Acc
│ ╭─────────'
30 │ │ where F: Fn(Acc, T) -> Acc
31 │ │ {
32 │ │ gen if N == 0 {
· │
38 │ │ }
39 │ │ }
│ ╰─────' Previous definition here
error: [std::array::T; std::array::N] already has a method named any
┌─ <compiler dir>/stdlib/array.spade:103:5
│
103 │ ╭ fn any(self, f: impl Fn(T) -> bool) -> bool {
104 │ │ gen if N == 0 {
105 │ │ false
106 │ │ } else {
107 │ │ self.map(f).reduce_or()
108 │ │ }
109 │ │ }
│ ╰─────^ Duplicate method
│
┌─ build/libs/nstd/src/array.spade:49:9
│
49 │ pub fn any<F>(self, f: F) -> bool
│ ╭─────────'
50 │ │ where F: Fn(T) -> bool
51 │ │ {
52 │ │ self
53 │ │ .map(f)
54 │ │ .fold(false, fn |acc, next| {acc || next})
55 │ │ }
│ ╰─────' Previous definition here
error: [std::array::T; std::array::N] already has a method named chunks
┌─ <compiler dir>/stdlib/array.spade:130:5
│
130 │ ╭ fn chunks<#uint ChunkSize>(self) -> [[T; ChunkSize]; {N / ChunkSize}]
131 │ │ where
132 │ │ N == N / ChunkSize * ChunkSize else "The size of the input array must be a multiple of the chunk size"
133 │ │ {
· │
138 │ │ }
139 │ │ }
│ ╰─────^ Duplicate method
│
┌─ build/libs/nstd/src/array.spade:77:5
│
77 │ ╭ fn chunks<#uint Size>(self) -> [[T; Size]; {N/Size}] {
78 │ │ gen if N == Size {
79 │ │ [self]
80 │ │ } else {
81 │ │ [self[0..Size]].concat(self[Size..N].chunks())
82 │ │ }
83 │ │ }
│ ╰─────' Previous definition here
error: [[std::array::T; std::array::M]; std::array::N] already has a method named flatten
┌─ <compiler dir>/stdlib/array.spade:497:5
│
497 │ ╭ fn flatten(self) -> [T; {N * M}] {
498 │ │ gen if N == 0 {
499 │ │ []
500 │ │ } else if N == 1 {
· │
507 │ │ }
508 │ │ }
│ ╰─────^ Duplicate method
│
┌─ build/libs/nstd/src/array.spade:99:9
│
99 │ pub fn flatten<#uint O>(self) -> [T; O]
│ ╭─────────'
100 │ │ where O: {N*M}
101 │ │ {
102 │ │ gen if N == 0 {
· │
106 │ │ }
107 │ │ }
│ ╰─────' Previous definition here
Error: aborting due to previous error
Location:
spade-compiler/src/main.rs:169: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 (2/2)
build (success)
test (success)
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 "95d5f6511cdb74f8a1c3a254673f9b098a481f74"
========
[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 56s
[INFO] Failed to fetch pre-built surfer plugin, building locally.
========
Reason: Did not find a pre-built surfer plugin for git hash "95d5f6511cdb74f8a1c3a254673f9b098a481f74"
========
[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-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/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: 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: 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: Use of deprecated unit
┌─ build/libs/protocols/src/uart.spade:2:5
│
2 │ use std::ops::div_pow2;
│ ^^^^^^^^^^^^^^^^^^
│
= note: Use `/` instead
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: [std::array::T; std::array::N] already has a method named all
┌─ <compiler dir>/stdlib/array.spade:82:5
│
82 │ ╭ fn all(self, f: impl Fn(T) -> bool) -> bool {
83 │ │ gen if N == 0 {
84 │ │ true
85 │ │ } else {
86 │ │ self.map(f).reduce_and()
87 │ │ }
88 │ │ }
│ ╰─────^ Duplicate method
│
┌─ build/libs/nstd/src/array.spade:41:9
│
41 │ pub fn all<F>(self, f: F) -> bool
│ ╭─────────'
42 │ │ where F: Fn(T) -> bool
43 │ │ {
44 │ │ self
45 │ │ .map(f)
46 │ │ .fold(true, fn |acc, next| {acc && next})
47 │ │ }
│ ╰─────' Previous definition here
error: [std::array::T; std::array::N] already has a method named fold
┌─ <compiler dir>/stdlib/array.spade:195:5
│
195 │ ╭ fn fold<B>(self, init: B, f: impl Fn(B, T) -> B) -> B {
196 │ │ gen if N == 0 {
197 │ │ init
198 │ │ } else {
· │
201 │ │ }
202 │ │ }
│ ╰─────^ Duplicate method
│
┌─ build/libs/nstd/src/array.spade:29:9
│
29 │ pub fn fold<F, Acc>(self, init: Acc, f: F) -> Acc
│ ╭─────────'
30 │ │ where F: Fn(Acc, T) -> Acc
31 │ │ {
32 │ │ gen if N == 0 {
· │
38 │ │ }
39 │ │ }
│ ╰─────' Previous definition here
error: [std::array::T; std::array::N] already has a method named any
┌─ <compiler dir>/stdlib/array.spade:103:5
│
103 │ ╭ fn any(self, f: impl Fn(T) -> bool) -> bool {
104 │ │ gen if N == 0 {
105 │ │ false
106 │ │ } else {
107 │ │ self.map(f).reduce_or()
108 │ │ }
109 │ │ }
│ ╰─────^ Duplicate method
│
┌─ build/libs/nstd/src/array.spade:49:9
│
49 │ pub fn any<F>(self, f: F) -> bool
│ ╭─────────'
50 │ │ where F: Fn(T) -> bool
51 │ │ {
52 │ │ self
53 │ │ .map(f)
54 │ │ .fold(false, fn |acc, next| {acc || next})
55 │ │ }
│ ╰─────' Previous definition here
error: [[std::array::T; std::array::M]; std::array::N] already has a method named flatten
┌─ <compiler dir>/stdlib/array.spade:497:5
│
497 │ ╭ fn flatten(self) -> [T; {N * M}] {
498 │ │ gen if N == 0 {
499 │ │ []
500 │ │ } else if N == 1 {
· │
507 │ │ }
508 │ │ }
│ ╰─────^ Duplicate method
│
┌─ build/libs/nstd/src/array.spade:89:9
│
89 │ pub fn flatten<#uint O>(self) -> [T; O]
│ ╭─────────'
90 │ │ where O: {N*M}
91 │ │ {
92 │ │ gen if N == 0 {
· │
96 │ │ }
97 │ │ }
│ ╰─────' Previous definition here
error: Trait bound not satisfied. inv bool does not implement core::marker::Data
┌─ src/led_blink.spade:26:5
│
26 │ led: inv &bool,
│ ^^^
│ │
│ inv bool does not implement core::marker::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: No such argument: range
┌─ src/led_blink.spade:43:13
│
43 │ range: LOWER_DATA_MEM_RANGE,
│ ^^^^^ No such argument
│
┌─ ../src/memory.spade:114:5
│
114 │ pub pipeline(1) data_memory<#uint Size>(
│ ╭─────'
115 │ │ clk: clock,
116 │ │ ) -> (DataMemoryRW<Size>, DataMemoryR<Size>)
117 │ │ where Size == 16384 else "Currently the size of the memory has to be 16384"
· │
155 │ │ )
156 │ │ }
│ ╰─' pipeline defined here
error: No such argument: range
┌─ src/led_blink.spade:49:13
│
49 │ range: (trunc(UPPER_DMEM#0), trunc(UPPER_DMEM#1)),
│ ^^^^^ No such argument
│
┌─ ../src/memory.spade:114:5
│
114 │ pub pipeline(1) data_memory<#uint Size>(
│ ╭─────'
115 │ │ clk: clock,
116 │ │ ) -> (DataMemoryRW<Size>, DataMemoryR<Size>)
117 │ │ where Size == 16384 else "Currently the size of the memory has to be 16384"
· │
155 │ │ )
156 │ │ }
│ ╰─' pipeline defined here
Error: aborting due to previous error
Location:
spade-compiler/src/main.rs:169: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 "95d5f6511cdb74f8a1c3a254673f9b098a481f74"
========
[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
┌─ 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.
┌─ 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: Use of deprecated unit
┌─ build/libs/protocols/src/uart.spade:2:5
│
2 │ use std::ops::div_pow2;
│ ^^^^^^^^^^^^^^^^^^
│
= note: Use `/` instead
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: [std::array::T; std::array::N] already has a method named fold
┌─ <compiler dir>/stdlib/array.spade:195:5
│
195 │ ╭ fn fold<B>(self, init: B, f: impl Fn(B, T) -> B) -> B {
196 │ │ gen if N == 0 {
197 │ │ init
198 │ │ } else {
· │
201 │ │ }
202 │ │ }
│ ╰─────^ Duplicate method
│
┌─ build/libs/nstd/src/array.spade:29:9
│
29 │ pub fn fold<F, Acc>(self, init: Acc, f: F) -> Acc
│ ╭─────────'
30 │ │ where F: Fn(Acc, T) -> Acc
31 │ │ {
32 │ │ gen if N == 0 {
· │
38 │ │ }
39 │ │ }
│ ╰─────' Previous definition here
error: [std::array::T; std::array::N] already has a method named any
┌─ <compiler dir>/stdlib/array.spade:103:5
│
103 │ ╭ fn any(self, f: impl Fn(T) -> bool) -> bool {
104 │ │ gen if N == 0 {
105 │ │ false
106 │ │ } else {
107 │ │ self.map(f).reduce_or()
108 │ │ }
109 │ │ }
│ ╰─────^ Duplicate method
│
┌─ build/libs/nstd/src/array.spade:49:9
│
49 │ pub fn any<F>(self, f: F) -> bool
│ ╭─────────'
50 │ │ where F: Fn(T) -> bool
51 │ │ {
52 │ │ self
53 │ │ .map(f)
54 │ │ .fold(false, fn |acc, next| {acc || next})
55 │ │ }
│ ╰─────' Previous definition here
error: [std::array::T; std::array::N] already has a method named all
┌─ <compiler dir>/stdlib/array.spade:82:5
│
82 │ ╭ fn all(self, f: impl Fn(T) -> bool) -> bool {
83 │ │ gen if N == 0 {
84 │ │ true
85 │ │ } else {
86 │ │ self.map(f).reduce_and()
87 │ │ }
88 │ │ }
│ ╰─────^ Duplicate method
│
┌─ build/libs/nstd/src/array.spade:41:9
│
41 │ pub fn all<F>(self, f: F) -> bool
│ ╭─────────'
42 │ │ where F: Fn(T) -> bool
43 │ │ {
44 │ │ self
45 │ │ .map(f)
46 │ │ .fold(true, fn |acc, next| {acc && next})
47 │ │ }
│ ╰─────' Previous definition here
error: [[std::array::T; std::array::M]; std::array::N] already has a method named flatten
┌─ <compiler dir>/stdlib/array.spade:497:5
│
497 │ ╭ fn flatten(self) -> [T; {N * M}] {
498 │ │ gen if N == 0 {
499 │ │ []
500 │ │ } else if N == 1 {
· │
507 │ │ }
508 │ │ }
│ ╰─────^ Duplicate method
│
┌─ build/libs/nstd/src/array.spade:89:9
│
89 │ pub fn flatten<#uint O>(self) -> [T; O]
│ ╭─────────'
90 │ │ where O: {N*M}
91 │ │ {
92 │ │ gen if N == 0 {
· │
96 │ │ }
97 │ │ }
│ ╰─────' Previous definition here
error: Trait bound not satisfied. inv bool does not implement core::marker::Data
┌─ src/led_blink.spade:26:5
│
26 │ led: inv &bool,
│ ^^^
│ │
│ inv bool does not implement core::marker::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: No such argument: range
┌─ src/led_blink.spade:43:13
│
43 │ range: LOWER_DATA_MEM_RANGE,
│ ^^^^^ No such argument
│
┌─ ../src/memory.spade:114:5
│
114 │ pub pipeline(1) data_memory<#uint Size>(
│ ╭─────'
115 │ │ clk: clock,
116 │ │ ) -> (DataMemoryRW<Size>, DataMemoryR<Size>)
117 │ │ where Size == 16384 else "Currently the size of the memory has to be 16384"
· │
155 │ │ )
156 │ │ }
│ ╰─' pipeline defined here
error: No such argument: range
┌─ src/led_blink.spade:49:13
│
49 │ range: (trunc(UPPER_DMEM#0), trunc(UPPER_DMEM#1)),
│ ^^^^^ No such argument
│
┌─ ../src/memory.spade:114:5
│
114 │ pub pipeline(1) data_memory<#uint Size>(
│ ╭─────'
115 │ │ clk: clock,
116 │ │ ) -> (DataMemoryRW<Size>, DataMemoryR<Size>)
117 │ │ where Size == 16384 else "Currently the size of the memory has to be 16384"
· │
155 │ │ )
156 │ │ }
│ ╰─' pipeline defined here
Error: aborting due to previous error
Location:
spade-compiler/src/main.rs:169: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 "95d5f6511cdb74f8a1c3a254673f9b098a481f74"
========
[INFO] Building spade-surfer-plugin
Compiling serde_core v1.0.228
Compiling num-traits v0.2.19
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`
For more information about this error, try `rustc --explain E0463`.
error: could not compile `num-traits` (lib) due to 1 previous error
warning: build failed, waiting for other jobs to finish...
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`
error: could not compile `serde_core` (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/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.
┌─ 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: 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: Use of deprecated unit
┌─ build/libs/protocols/src/uart.spade:2:5
│
2 │ use std::ops::div_pow2;
│ ^^^^^^^^^^^^^^^^^^
│
= note: Use `/` instead
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
error: [std::array::T; std::array::N] already has a method named fold
┌─ <compiler dir>/stdlib/array.spade:195:5
│
195 │ ╭ fn fold<B>(self, init: B, f: impl Fn(B, T) -> B) -> B {
196 │ │ gen if N == 0 {
197 │ │ init
198 │ │ } else {
· │
201 │ │ }
202 │ │ }
│ ╰─────^ Duplicate method
│
┌─ build/libs/nstd/src/array.spade:29:9
│
29 │ pub fn fold<F, Acc>(self, init: Acc, f: F) -> Acc
│ ╭─────────'
30 │ │ where F: Fn(Acc, T) -> Acc
31 │ │ {
32 │ │ gen if N == 0 {
· │
38 │ │ }
39 │ │ }
│ ╰─────' Previous definition here
error: [std::array::T; std::array::N] already has a method named any
┌─ <compiler dir>/stdlib/array.spade:103:5
│
103 │ ╭ fn any(self, f: impl Fn(T) -> bool) -> bool {
104 │ │ gen if N == 0 {
105 │ │ false
106 │ │ } else {
107 │ │ self.map(f).reduce_or()
108 │ │ }
109 │ │ }
│ ╰─────^ Duplicate method
│
┌─ build/libs/nstd/src/array.spade:49:9
│
49 │ pub fn any<F>(self, f: F) -> bool
│ ╭─────────'
50 │ │ where F: Fn(T) -> bool
51 │ │ {
52 │ │ self
53 │ │ .map(f)
54 │ │ .fold(false, fn |acc, next| {acc || next})
55 │ │ }
│ ╰─────' Previous definition here
error: [std::array::T; std::array::N] already has a method named all
┌─ <compiler dir>/stdlib/array.spade:82:5
│
82 │ ╭ fn all(self, f: impl Fn(T) -> bool) -> bool {
83 │ │ gen if N == 0 {
84 │ │ true
85 │ │ } else {
86 │ │ self.map(f).reduce_and()
87 │ │ }
88 │ │ }
│ ╰─────^ Duplicate method
│
┌─ build/libs/nstd/src/array.spade:41:9
│
41 │ pub fn all<F>(self, f: F) -> bool
│ ╭─────────'
42 │ │ where F: Fn(T) -> bool
43 │ │ {
44 │ │ self
45 │ │ .map(f)
46 │ │ .fold(true, fn |acc, next| {acc && next})
47 │ │ }
│ ╰─────' Previous definition here
error: [[std::array::T; std::array::M]; std::array::N] already has a method named flatten
┌─ <compiler dir>/stdlib/array.spade:497:5
│
497 │ ╭ fn flatten(self) -> [T; {N * M}] {
498 │ │ gen if N == 0 {
499 │ │ []
500 │ │ } else if N == 1 {
· │
507 │ │ }
508 │ │ }
│ ╰─────^ Duplicate method
│
┌─ build/libs/nstd/src/array.spade:89:9
│
89 │ pub fn flatten<#uint O>(self) -> [T; O]
│ ╭─────────'
90 │ │ where O: {N*M}
91 │ │ {
92 │ │ gen if N == 0 {
· │
96 │ │ }
97 │ │ }
│ ╰─────' Previous definition here
error: Trait bound not satisfied. inv bool does not implement core::marker::Data
┌─ src/led_blink.spade:26:5
│
26 │ led: inv &bool,
│ ^^^
│ │
│ inv bool does not implement core::marker::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: No such argument: range
┌─ src/led_blink.spade:43:13
│
43 │ range: LOWER_DATA_MEM_RANGE,
│ ^^^^^ No such argument
│
┌─ ../src/memory.spade:114:5
│
114 │ pub pipeline(1) data_memory<#uint Size>(
│ ╭─────'
115 │ │ clk: clock,
116 │ │ ) -> (DataMemoryRW<Size>, DataMemoryR<Size>)
117 │ │ where Size == 16384 else "Currently the size of the memory has to be 16384"
· │
155 │ │ )
156 │ │ }
│ ╰─' pipeline defined here
error: No such argument: range
┌─ src/led_blink.spade:49:13
│
49 │ range: (trunc(UPPER_DMEM#0), trunc(UPPER_DMEM#1)),
│ ^^^^^ No such argument
│
┌─ ../src/memory.spade:114:5
│
114 │ pub pipeline(1) data_memory<#uint Size>(
│ ╭─────'
115 │ │ clk: clock,
116 │ │ ) -> (DataMemoryRW<Size>, DataMemoryR<Size>)
117 │ │ where Size == 16384 else "Currently the size of the memory has to be 16384"
· │
155 │ │ )
156 │ │ }
│ ╰─' pipeline defined here
Error: aborting due to previous error
Location:
spade-compiler/src/main.rs:169: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-05-20T18:36:38Z.