From 9b5f325a7d0c260b2bb7b5051bbf457e5343f88e Mon Sep 17 00:00:00 2001 From: Damien Pretet Date: Tue, 28 May 2024 21:03:30 +0200 Subject: [PATCH] Fix: slv switch AW channel didn't check wrch FIFO was ready to propagate request to master switch --- doc/architecture.md | 100 ++++++++++++++++++++----------------- doc/assets/intro.monopic | Bin 12547 -> 13251 bytes rtl/axicb_slv_switch_rd.sv | 30 +++++------ rtl/axicb_slv_switch_wr.sv | 8 +-- 4 files changed, 72 insertions(+), 66 deletions(-) diff --git a/doc/architecture.md b/doc/architecture.md index 71cc244..8ad1b3d 100644 --- a/doc/architecture.md +++ b/doc/architecture.md @@ -112,11 +112,11 @@ from the excellent Clifford Cummings. ### Clock Domain Crossing -The core provides a CDC stage for each master or slave interface if needed. The stage is +The core provides a CDC stage for each master or slave interface if needed. The stage is activated with `MSTx_CDC` or `SLVx_CDC`. Internally, the switching fabric uses a specific clock (`aclk`) to route the requests and the completions from/to the agents. The master -and slave interfaces must activate a CDC stage if they don't use the same clock than -the fabric (same frequency & phase). If an agent uses the same clock than the fabric, the +and slave interfaces must activate a CDC stage if they don't use the same clock than +the fabric (same frequency & phase). If an agent uses the same clock than the fabric, the agent must also use the same reset to ensure a clean reset sequence. @@ -127,7 +127,7 @@ sequence: 1. Drive low all the reset inputs 2. Source all the clocks of the active interface 3. Wait for several clock cycles, for each clock domain, to be sure the whole logic has been reset -4. Before releasing the resets, be sure all the domains has been completly reset (point 3). Some +4. Before releasing the resets, be sure all the domains has been completly reset (point 3). Some clock can be very slower than another domain, be sure to take it in account. 5. Release the resets 6. Start to issue request in the core @@ -162,8 +162,8 @@ BUSER and RUSER). These bus fields of the AMBA channels can be activated individually, e.g. for address channel only and configured to any width. This applies for both AXI4 and AXI4-lite configuration. -The core proposes a top level for [AXI4](../rtl/axicb_crossbar_top.sv), and a -top level for [AXI4-lite](../rtl/axicb_crossbar_lite_top.sv). Each supports up +The core proposes a top level for [AXI4](../rtl/axicb_crossbar_top.sv), and a +top level for [AXI4-lite](../rtl/axicb_crossbar_lite_top.sv). Each supports up to 4 masters and 4 slaves. If the user needs less than 4 agents, it can tied to 0 the input signals of an interface, and leave unconnected the outputs. @@ -226,8 +226,8 @@ interfaces with two parameters: - `MSTx_OSTDREQ_NUM` or `SLVx_OSTDREQ_NUM`: the maximum number of oustanding requests the core is capable to store - `MSTx_OSTDREQ_SIZE` or `SLVx_OSTDREQ_SIZE`: the number of datpahases of an - outstanding requets. Can be useful to save area if a system doesn't need to - use biggest AXI4 payload possible, i.e. if a processor only use [1,2,4,8,16] + outstanding requets. Can be useful to save area if a system doesn't need to + use biggest AXI4 payload possible, i.e. if a processor only use [1,2,4,8,16] dataphases maximum. Default should be `256` beats. When an inteface enables the CDC support to cross its clock domain, the internal @@ -270,21 +270,27 @@ All slave switches can target any master switch to drive read/write requests, while any master switch can drive back completions to any slave switch. ``` - │ │ - │ │ - ▼ ▼ -┌─────────────────────────────────────────────┐ -│ ┌──────────────┐ ┌──────────────┐ │ -│ │ slv0 switch │ │ slv1 switch │ │ -│ └──────────────┘ └──────────────┘ │ -│ │ -│ ┌──────────────┐ ┌──────────────┐ │ -│ │ mst0 switch │ │ mst1 switch │ │ -│ └──────────────┘ └──────────────┘ │ -└─────────────────────────────────────────────┘ - │ │ - │ │ - ▼ ▼ + + │ │ + │ │ + ▼ ▼ + ┌─────────────────────────────────────────────┐ + │ ┌──────────────┐ ┌──────────────┐ │ + │ │slv0 pipeline │ ..... │slvX pipeline │ │ + │ └──────────────┘ └──────────────┘ │ + │ ┌──────────────┐ ┌──────────────┐ │ + │ │ slv0 switch │ ..... │ slvX switch │ │ + │ └──────────────┘ └──────────────┘ │ + │ ┌──────────────┐ ┌──────────────┐ │ + │ │ mst0 switch │ ..... │ mstX switch │ │ + │ └──────────────┘ └──────────────┘ │ + │ ┌──────────────┐ ┌──────────────┐ │ + │ │mst0 pipeline │ ..... │mstX pipeline │ │ + │ └──────────────┘ └──────────────┘ │ + └─────────────────────────────────────────────┘ + │ │ + │ │ + ▼ ▼ ``` A pipeline stage can be activated for input and output of the switch layer to @@ -302,23 +308,23 @@ completion if needed by its internal core. ``` - From slave interface + From slave interface - AW Channel W Channel B channel AR Channel R Channel + AW Channel W Channel B channel AR Channel R Channel - │ │ ▲ │ ▲ - │ │ │ │ │ - ▼ ▼ │ ▼ │ -┌──────────────┐ ┌────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ -│decoder+router│──▶│FIFO│──│decoder+router│ │arbiter+switch│ │decoder+router│ │arbiter+switch│ -└──────────────┘ └────┘ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ - │ │ │ │ ▲ ▲ │ │ ▲ ▲ - │ │ │ │ │ │ │ │ │ │ - ▼ ▼ ▼ ▼ │ │ ▼ ▼ │ │ + │ │ ▲ │ ▲ + │ │ │ │ │ + ▼ ▼ │ ▼ │ + ┌──────────────┐ ┌────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ + │decoder+router│──▶│FIFO│──│decoder+router│ │arbiter+switch│ │decoder+router│ │arbiter+switch│ + └──────────────┘ └────┘ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ + │ │ │ │ ▲ ▲ │ │ ▲ ▲ + │ │ │ │ │ │ │ │ │ │ + ▼ ▼ ▼ ▼ │ │ ▼ ▼ │ │ - To master switches + To master switches ``` ### Switching Logic to Master Interfaces @@ -328,23 +334,23 @@ A fair-share round robin arbitration ensures a fair traffic share from the maste completion are routed back to the requester by decoding the ID. ``` - From slave switches + From slave switches - AW Channels W Channels B channels AR Channels R Channels + AW Channels W Channels B channels AR Channels R Channels - │ │ │ │ ▲ ▲ │ │ ▲ ▲ - │ │ │ │ │ │ │ │ │ │ - ▼ ▼ ▼ ▼ │ │ ▼ ▼ │ │ -┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ -│arbiter+switch│ │arbiter+switch│ │arbiter+switch│ │decoder+router│ │decoder+router│ -└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ - │ │ ▲ │ ▲ - │ │ │ │ │ - ▼ ▼ │ ▼ │ + │ │ │ │ ▲ ▲ │ │ ▲ ▲ + │ │ │ │ │ │ │ │ │ │ + ▼ ▼ ▼ ▼ │ │ ▼ ▼ │ │ + ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ + │arbiter+switch│ │arbiter+switch│ │arbiter+switch│ │decoder+router│ │decoder+router│ + └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ + │ │ ▲ │ ▲ + │ │ │ │ │ + ▼ ▼ │ ▼ │ - To master interface + To master interface ``` diff --git a/doc/assets/intro.monopic b/doc/assets/intro.monopic index 75ed79e17cb772b88b042655bc48ec846dae7cfc..d2e8fb702ba3c16014f00a2fbaee2ca53b27c32d 100644 GIT binary patch literal 13251 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