summaryrefslogtreecommitdiff
path: root/rtl/bus/ari_ring.sv
diff options
context:
space:
mode:
Diffstat (limited to 'rtl/bus/ari_ring.sv')
-rw-r--r--rtl/bus/ari_ring.sv52
1 files changed, 52 insertions, 0 deletions
diff --git a/rtl/bus/ari_ring.sv b/rtl/bus/ari_ring.sv
new file mode 100644
index 0000000..48062c7
--- /dev/null
+++ b/rtl/bus/ari_ring.sv
@@ -0,0 +1,52 @@
+//
+// Copyright (c) 2026, Apollo Telephone Laboratories.
+// Provided under the BSD-3 clause.
+//
+
+`include "bus/ari.svh"
+
+//
+// Represents a ring of ARI segments which forms a single
+// bus channel.
+//
+// @clk_i: Clock input
+// @reset_i: Reset input
+// @tap_i: Segment taps
+//
+module ari_ring (
+ input wire clk_i,
+ input wire reset_i,
+ input AriFrame tap_i[0:ARI_SEGMENT_COUNT-1]
+);
+ // Segment feeders
+ AriFrame seg3_feed;
+ AriFrame seg2_feed;
+ AriFrame seg1_feed;
+
+ // Segment 0
+ ari_segment seg0 (
+ .clk_i(clk_i),
+ .reset_i(reset_i),
+ .ingress_i(seg3_feed),
+ .tap_i(tap_i[0]),
+ .egress_o(seg1_feed)
+ );
+
+ // Segment 1
+ ari_segment seg1 (
+ .clk_i(clk_i),
+ .reset_i(reset_i),
+ .ingress_i(seg1_feed),
+ .tap_i(tap_i[1]),
+ .egress_o(seg2_feed)
+ );
+
+ // Segment 2
+ ari_segment seg2 (
+ .clk_i(clk_i),
+ .reset_i(reset_i),
+ .ingress_i(seg2_feed),
+ .tap_i(tap_i[2]),
+ .egress_o(seg3_feed)
+ );
+endmodule