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 (2/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] 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 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 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> {
│ ----
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/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: 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: 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: 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: 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.
test (fail)
[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 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 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> {
│ ----
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/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: 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: 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: 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: 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] Cloning "ecp5stubs"
[INFO] Cloning "ready_valid"
[INFO] Cloning "nstd"
[INFO] Building spade code
[ERROR] Failed to build spade code
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/ready_valid'...
HEAD is now at 30e51db Make escape_bytes public
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 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 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 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 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 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> {
│ ----
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 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: 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: 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: 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)) =
│ ~~~~~~~~~~~~~~
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] 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
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 (2/2)
build (success)
test (success)
quickscope (0/1)
build (fail)
[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/quickscope/build/libs/protocols'...
HEAD is now at 3170518 Fix tests
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/nstd'...
HEAD is now at 92b6b79 Add pub markers
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 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> {
│ ----
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 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: 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: 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: 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: _ 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] 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 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 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 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 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 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 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> {
│ ----
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/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: 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: 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: 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: 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: 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] 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 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 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 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 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 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 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> {
│ ----
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/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: 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: 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: 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: 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: 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] 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 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 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 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 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 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 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> {
│ ----
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: 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: 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: 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: 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: 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: 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: 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] 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 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 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> {
│ ----
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 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 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 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 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: 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: 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: 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: 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: 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: 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: 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 `.`
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] 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 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 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 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 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 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 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> {
│ ----
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: 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: 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: 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: 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: 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: 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: 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.
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.