Skip to content

Commit 8b47022

Browse files
committed
usb_audio: builds with luna-native iso endpoints
1 parent 0c2819c commit 8b47022

File tree

4 files changed

+31
-19
lines changed

4 files changed

+31
-19
lines changed

gateware/pdm.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

gateware/src/top/usb_audio/channels_to_usb_stream.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
from amaranth import *
66
from amaranth.build import Platform
77
from amaranth.lib.fifo import SyncFIFO
8+
from amaranth.lib import stream
89
from luna.gateware.stream import StreamInterface
10+
from luna.gateware.stream.future import Packet
911
from util import connect_fifo_to_stream
1012

1113
class ChannelsToUSBStream(Elaboratable):
@@ -21,7 +23,12 @@ def __init__(self, max_nr_channels=2, sample_width=24, max_packet_size=256):
2123
# ports
2224
self.no_channels_in = Signal(self._channel_bits + 1)
2325
self.channel_stream_in = StreamInterface(payload_width=self._sample_width, extra_fields=[("channel_nr", self._channel_bits)])
24-
self.usb_stream_out = StreamInterface()
26+
self.usb_stream_out = stream.Interface(
27+
stream.Signature(
28+
unsigned(8)
29+
)
30+
)
31+
2532
self.audio_in_active = Signal()
2633
self.data_requested_in = Signal()
2734
self.frame_finished_in = Signal()

gateware/src/top/usb_audio/top.py

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@
2323

2424
from luna import top_level_cli
2525
from luna.usb2 import (USBDevice,
26-
USBIsochronousInMemoryEndpoint,
27-
USBIsochronousOutStreamEndpoint,
28-
USBIsochronousInStreamEndpoint,
26+
USBIsochronousInEndpoint,
27+
USBIsochronousStreamOutEndpoint,
28+
USBIsochronousStreamInEndpoint,
2929
USBStreamInEndpoint,
3030
USBStreamOutEndpoint)
3131

@@ -354,17 +354,17 @@ def elaborate(self, platform):
354354
(setup.type == USBRequestType.RESERVED)
355355
control_ep.add_request_handler(StallOnlyRequestHandler(stall_condition))
356356

357-
ep1_out = USBIsochronousOutStreamEndpoint(
357+
ep1_out = USBIsochronousStreamOutEndpoint(
358358
endpoint_number=1, # EP 1 OUT
359359
max_packet_size=self.MAX_PACKET_SIZE)
360360
usb.add_endpoint(ep1_out)
361361

362-
ep1_in = USBIsochronousInMemoryEndpoint(
362+
ep1_in = USBIsochronousInEndpoint(
363363
endpoint_number=1, # EP 1 IN
364364
max_packet_size=4)
365365
usb.add_endpoint(ep1_in)
366366

367-
ep2_in = USBIsochronousInStreamEndpoint(
367+
ep2_in = USBIsochronousStreamInEndpoint(
368368
endpoint_number=2, # EP 2 IN
369369
max_packet_size=self.MAX_PACKET_SIZE)
370370
usb.add_endpoint(ep2_in)
@@ -388,12 +388,12 @@ def elaborate(self, platform):
388388
with m.If(audio_in_frame_bytes_counting):
389389
m.d.usb += audio_in_frame_bytes.eq(audio_in_frame_bytes + 1)
390390

391-
with m.If(ep1_out.stream.first):
391+
with m.If(ep1_out.stream.payload.first):
392392
m.d.usb += [
393393
audio_in_frame_bytes.eq(1),
394394
audio_in_frame_bytes_counting.eq(1),
395395
]
396-
with m.Elif(ep1_out.stream.last):
396+
with m.Elif(ep1_out.stream.payload.last):
397397
m.d.usb += audio_in_frame_bytes_counting.eq(0)
398398

399399
# Connect our device as a high speed device
@@ -476,11 +476,10 @@ def detect_active_audio_in(m, name: str, usb, ep2_in):
476476

477477
usb_audio_in_active = detect_active_audio_in(m, "usb", usb, ep2_in)
478478

479-
m.d.comb += [
480-
# Wire USB <-> stream synchronizers
481-
usb_to_channel_stream.usb_stream_in.stream_eq(ep1_out.stream),
482-
ep2_in.stream.stream_eq(channels_to_usb_stream.usb_stream_out),
479+
wiring.connect(m, wiring.flipped(usb_to_channel_stream.usb_stream_in), ep1_out.stream)
480+
wiring.connect(m, wiring.flipped(ep2_in.stream), channels_to_usb_stream.usb_stream_out)
483481

482+
m.d.comb += [
484483
channels_to_usb_stream.no_channels_in.eq(self.NR_CHANNELS),
485484
channels_to_usb_stream.data_requested_in.eq(ep2_in.data_requested),
486485
channels_to_usb_stream.frame_finished_in.eq(ep2_in.frame_finished),
@@ -585,14 +584,14 @@ def detect_active_audio_in(m, name: str, usb, ep2_in):
585584
#usb_to_channel_stream.channel_stream_out.valid,
586585
#usb_to_channel_stream.garbage_seen_out,
587586

588-
# interface from IsochronousOutStreamEndpoint
587+
# interface from IsochronousStreamOutEndpoint
589588
#usb_to_channel_stream.usb_stream_in.first,
590589
#usb_to_channel_stream.usb_stream_in.valid,
591590
#usb_to_channel_stream.usb_stream_in.payload,
592591
#usb_to_channel_stream.usb_stream_in.last,
593592
#usb_to_channel_stream.usb_stream_in.ready,
594593

595-
# interface to IsochronousOutStreamEndpoint
594+
# interface to IsochronousStreamOutEndpoint
596595
#ep1_out.interface.rx.next,
597596
#ep1_out.interface.rx.valid,
598597
#ep1_out.interface.rx.payload,

gateware/src/top/usb_audio/usb_stream_to_channels.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44

55
from amaranth import *
66
from amaranth.build import Platform
7+
from amaranth.lib import stream
78
from luna.gateware.stream import StreamInterface
9+
from luna.gateware.stream.future import Packet
810

911
class USBStreamToChannels(Elaboratable):
1012
def __init__(self, max_no_channels=2):
@@ -14,7 +16,11 @@ def __init__(self, max_no_channels=2):
1416

1517
# ports
1618
self.no_channels_in = Signal(self._channel_bits + 1)
17-
self.usb_stream_in = StreamInterface()
19+
self.usb_stream_in = stream.Interface(
20+
stream.Signature(
21+
Packet(unsigned(8))
22+
)
23+
)
1824
self.channel_stream_out = StreamInterface(payload_width=24, extra_fields=[("channel_nr", self._channel_bits)])
1925
self.garbage_seen_out = Signal()
2026

@@ -31,9 +37,9 @@ def elaborate(self, platform: Platform) -> Module:
3137
last_channel = Signal(self._channel_bits)
3238

3339
m.d.comb += [
34-
usb_first.eq(self.usb_stream_in.first),
40+
usb_first.eq(self.usb_stream_in.payload.first),
3541
usb_valid.eq(self.usb_stream_in.valid),
36-
usb_payload.eq(self.usb_stream_in.payload),
42+
usb_payload.eq(self.usb_stream_in.payload.data),
3743
out_ready.eq(self.channel_stream_out.ready),
3844
self.usb_stream_in.ready.eq(out_ready),
3945
last_channel.eq(self.no_channels_in - 1),

0 commit comments

Comments
 (0)