feat: add RNG support and update related configurations

- Updated Makefile to include a check for the RNG metadata script and added a dependency for it.
- Modified memory_map.json to change the user access level of APB_RNG to 'none'.
- Updated clusterip filelist to include new RNG source files.
- Adjusted generate_soc_topology.py to replace the reserved IRQ with the RNG IRQ.
- Updated soc_topology.json to reflect the new RNG interrupt configuration.
- Added RNG source files to software.mk for compilation.
- Enhanced ip_apb_wrapper.sv to instantiate the RNG core and connect it to the APB interface.
- Updated test_memory_map.py to ensure SOC_ADDR_IS_APB_RNG is not defined.
- Modified test_script_tools.py to ensure dry runs do not write filelists.
- Updated test_soc_topology.py to verify the new RNG IRQ and adjust the user IRQ mask.
This commit is contained in:
maksyuki committed 2026-08-09 17:17:35 +08:00
1 parent 4f8d7bc699
commit 97335b9df1
22 files changed
+510 -284

No files matched your search

+4 -2
View File
@@ -29,7 +29,9 @@ under the [Mulan Permissive Software License, Version 2](LICENSE).
open-source CI coverage. open-source CI coverage.
- A memory-mapped peripheral subsystem with GPIO, UART, - A memory-mapped peripheral subsystem with GPIO, UART,
[dual general timers](docs/ip/timer.md), PWM, [dual I2C controllers](docs/ip/i2c.md), I2S, PS2, [dual general timers](docs/ip/timer.md), PWM, [dual I2C controllers](docs/ip/i2c.md), I2S, PS2,
WS2812, SPI/QSPI, SDIO, PSRAM/OPI-PSRAM, SDRAM, DMA, LCD, RTC, watchdog, RNG, and CRC WS2812, SPI/QSPI, SDIO, PSRAM/OPI-PSRAM, SDRAM, DMA, LCD, RTC, watchdog, CRC, and a
management-only RNG V2 entropy controller. The current deterministic RNG integration source is
explicitly unqualified and intended only for diagnostics until a PDK-qualified entropy source is integrated.
support. Available interfaces depend on the selected SoC configuration. support. Available interfaces depend on the selected SoC configuration.
- A standalone RISC-V runtime, HAL, board support, middleware, and `benchmark`, `bringup`, - A standalone RISC-V runtime, HAL, board support, middleware, and `benchmark`, `bringup`,
`coremark`, `debug`, and `shell` applications. `coremark`, `debug`, and `shell` applications.
@@ -74,7 +76,7 @@ user core.
| [`configs/cluster/ics55.mk`](configs/cluster/ics55.mk) | RV32IM | `bringup` | Compatibility profile for site-specific ICS55 runs. | | [`configs/cluster/ics55.mk`](configs/cluster/ics55.mk) | RV32IM | `bringup` | Compatibility profile for site-specific ICS55 runs. |
CI Verilator firmware simulations explicitly select the `ci_smoke` CI Verilator firmware simulations explicitly select the `ci_smoke`
application, which checks UART, archinfo APB readback, and test-status application, which checks UART, archinfo APB readback, RNG V2 fail-closed behavior, and test-status
completion without the verbose startup report. ARCHINFO checks include its V2 completion without the verbose startup report. ARCHINFO checks include its V2
ABI and the build/configuration identifiers generated for that variant. The profiles retain `bringup` ABI and the build/configuration identifiers generated for that variant. The profiles retain `bringup`
as their default for manual diagnostics. To run the full report in Verilator, as their default for manual diagnostics. To run the full report in Verilator,
+1 -1
View File
@@ -29,7 +29,7 @@ The build selects an application with `APP=<name>`. The supported profiles are:
| --- | --- | | --- | --- |
| `benchmark` | Fixed-workload memory and DMA baseline with machine-readable wait counters and readback checksums. | | `benchmark` | Fixed-workload memory and DMA baseline with machine-readable wait counters and readback checksums. |
| `bringup` | Manual startup diagnostic that prints complete application and archinfo details. | | `bringup` | Manual startup diagnostic that prints complete application and archinfo details. |
| `ci_smoke` | Fast deterministic CI smoke test for UART, ARCHINFO V2 ABI/build identity, and test-status completion. | | `ci_smoke` | Fast deterministic CI smoke test for UART, ARCHINFO V2 ABI/build identity, RNG V2 integration, and test-status completion. |
| `coremark` | SRAM-resident Hazard3 CoreMark measurement; use the committed quick or standard profile. | | `coremark` | SRAM-resident Hazard3 CoreMark measurement; use the committed quick or standard profile. |
| `debug` | Minimal SRAM image used only by the Hazard3 OpenOCD/GDB acceptance flow. | | `debug` | Minimal SRAM image used only by the Hazard3 OpenOCD/GDB acceptance flow. |
| `shell` | Interactive application that adds shell services, board drivers, media, FatFs, CoreMark, and UserIP integration. | | `shell` | Interactive application that adds shell services, board drivers, media, FatFs, CoreMark, and UserIP integration. |
+28 -1
View File
@@ -2,6 +2,7 @@
#include <retrosoc/core/soc.h> #include <retrosoc/core/soc.h>
#include <retrosoc/hal/clint.h> #include <retrosoc/hal/clint.h>
#include <retrosoc/hal/gpio.h> #include <retrosoc/hal/gpio.h>
#include <retrosoc/hal/rng.h>
#include <retrosoc/hal/timer.h> #include <retrosoc/hal/timer.h>
#include <retrosoc/hal/uart.h> #include <retrosoc/hal/uart.h>
#include <retrosoc/lib/printf.h> #include <retrosoc/lib/printf.h>
@@ -15,6 +16,28 @@ static bool rs_ci_smoke_archinfo_v2(void) {
(rs_archinfo_read_device_id(device_id) == RS_ENOTSUP); (rs_archinfo_read_device_id(device_id) == RS_ENOTSUP);
} }
static bool rs_ci_smoke_rng_v2(void) {
const rs_rng_config_t config = {
.fifo_watermark = 1U,
.interrupt_enable = 0U,
.lock_config = true,
};
rs_rng_snapshot_t snapshot;
uint32_t first;
uint32_t second;
uint32_t entropy;
if ((rs_rng_init(&config) != RS_OK) ||
(rs_rng_read_diagnostic(&first, RS_TIMEOUT_DEFAULT) != RS_OK) ||
(rs_rng_read_diagnostic(&second, RS_TIMEOUT_DEFAULT) != RS_OK) || (first == second) ||
(rs_rng_get_status(&snapshot) != RS_OK) || snapshot.source_qualified ||
snapshot.fatal_error) {
return false;
}
return rs_rng_read_entropy(&entropy, RS_TIMEOUT_DEFAULT) == RS_ENOTSUP;
}
static bool rs_ci_smoke_clint_standard_map(void) { static bool rs_ci_smoke_clint_standard_map(void) {
uint64_t first; uint64_t first;
uint64_t current; uint64_t current;
@@ -177,6 +200,10 @@ int main(void) {
rs_test_finish(RS_TEST_FAILED, 1U); rs_test_finish(RS_TEST_FAILED, 1U);
} }
printf("ci_smoke: archinfo passed\n"); printf("ci_smoke: archinfo passed\n");
if (!rs_ci_smoke_rng_v2()) {
rs_test_finish(RS_TEST_FAILED, 8U);
}
printf("ci_smoke: RNG V2 passed\n");
if (!rs_ci_smoke_clint_standard_map()) { if (!rs_ci_smoke_clint_standard_map()) {
rs_test_finish(RS_TEST_FAILED, 2U); rs_test_finish(RS_TEST_FAILED, 2U);
} }
@@ -193,7 +220,7 @@ int main(void) {
rs_test_finish(RS_TEST_FAILED, 5U); rs_test_finish(RS_TEST_FAILED, 5U);
} }
printf("ci_smoke: UART, archinfo, CLINT, timer, and GPIO tests passed\n"); printf("ci_smoke: UART, archinfo, RNG, CLINT, timer, and GPIO tests passed\n");
rs_test_finish(RS_TEST_PASSED, 0U); rs_test_finish(RS_TEST_PASSED, 0U);
return 0; return 0;
} }
+1 -1
View File
@@ -62,7 +62,7 @@ int main(void) {
(void)rs_shell_register("pwm", "pwm test", true, ip_pwm_test); (void)rs_shell_register("pwm", "pwm test", true, ip_pwm_test);
(void)rs_shell_register("rtc", "rtc test", true, ip_rtc_test); (void)rs_shell_register("rtc", "rtc test", true, ip_rtc_test);
(void)rs_shell_register("wdg", "wdg test", true, ip_wdg_test); (void)rs_shell_register("wdg", "wdg test", true, ip_wdg_test);
(void)rs_shell_register("rng", "rng test", true, ip_rng_test); (void)rs_shell_register("rng", "rng test", true, rs_rng_shell_test);
(void)rs_shell_register("crc", "crc test", true, ip_crc_test); (void)rs_shell_register("crc", "crc test", true, ip_crc_test);
(void)rs_shell_register("ps2", "ps2 test", false, ip_ps2_test); (void)rs_shell_register("ps2", "ps2 test", false, ip_ps2_test);
(void)rs_shell_register("lcd", "lcd test", true, ip_lcd_test); (void)rs_shell_register("lcd", "lcd test", true, ip_lcd_test);
+1 -1
View File
@@ -69,7 +69,7 @@
"cluster_plic": {"url": "https://github.com/retroSoC/plic.git", "revision": "c851d93829d2e75b224003a058e718925855c0cc", "destination": "rtl/managed/clusterip/plic", "license": "NOASSERTION"}, "cluster_plic": {"url": "https://github.com/retroSoC/plic.git", "revision": "c851d93829d2e75b224003a058e718925855c0cc", "destination": "rtl/managed/clusterip/plic", "license": "NOASSERTION"},
"cluster_ps2": {"url": "https://github.com/retroSoC/ps2.git", "revision": "60921e0f72d6113f8615d03ce54567388fc2410f", "destination": "rtl/managed/clusterip/ps2", "license": "NOASSERTION"}, "cluster_ps2": {"url": "https://github.com/retroSoC/ps2.git", "revision": "60921e0f72d6113f8615d03ce54567388fc2410f", "destination": "rtl/managed/clusterip/ps2", "license": "NOASSERTION"},
"cluster_pwm": {"url": "https://github.com/retroSoC/pwm.git", "revision": "c631ede87506d34f714167313ba69b196c0bea72", "destination": "rtl/managed/clusterip/pwm", "license": "NOASSERTION"}, "cluster_pwm": {"url": "https://github.com/retroSoC/pwm.git", "revision": "c631ede87506d34f714167313ba69b196c0bea72", "destination": "rtl/managed/clusterip/pwm", "license": "NOASSERTION"},
"cluster_rng": {"url": "https://github.com/retroSoC/rng.git", "revision": "7374e1e7f25bfd1ff9954ea99f19b77a583def29", "destination": "rtl/managed/clusterip/rng", "license": "NOASSERTION"}, "cluster_rng": {"url": "https://github.com/retroSoC/rng.git", "revision": "36f3e0774d8f3c4b597d3db8a96ca3992532b61e", "destination": "rtl/managed/clusterip/rng", "license": "MulanPSL-2.0"},
"cluster_rtc": {"url": "https://github.com/retroSoC/rtc.git", "revision": "c6cc82f7530eea0b87ebe1d2cde2a67c9268c0db", "destination": "rtl/managed/clusterip/rtc", "license": "NOASSERTION"}, "cluster_rtc": {"url": "https://github.com/retroSoC/rtc.git", "revision": "c6cc82f7530eea0b87ebe1d2cde2a67c9268c0db", "destination": "rtl/managed/clusterip/rtc", "license": "NOASSERTION"},
"cluster_spi": {"url": "https://github.com/retroSoC/spi.git", "revision": "515cb408806584525605b4747db5e890dbdf1928", "destination": "rtl/managed/clusterip/spi", "license": "NOASSERTION"}, "cluster_spi": {"url": "https://github.com/retroSoC/spi.git", "revision": "515cb408806584525605b4747db5e890dbdf1928", "destination": "rtl/managed/clusterip/spi", "license": "NOASSERTION"},
"cluster_timer": {"url": "https://github.com/retroSoC/timer.git", "revision": "75fa45d786739e1d5ab6d1e10520be2c2f0d022a", "destination": "rtl/managed/clusterip/timer", "license": "NOASSERTION"}, "cluster_timer": {"url": "https://github.com/retroSoC/timer.git", "revision": "75fa45d786739e1d5ab6d1e10520be2c2f0d022a", "destination": "rtl/managed/clusterip/timer", "license": "NOASSERTION"},
-4
View File
@@ -183,10 +183,6 @@
#define reg_dvp_recven RS_SOC_REG32(RS_SOC_RIBP_DVP_BASE, UINT32_C(0x00)) #define reg_dvp_recven RS_SOC_REG32(RS_SOC_RIBP_DVP_BASE, UINT32_C(0x00))
#define reg_dvp_rxdata RS_SOC_REG32(RS_SOC_RIBP_DVP_BASE, UINT32_C(0x04)) #define reg_dvp_rxdata RS_SOC_REG32(RS_SOC_RIBP_DVP_BASE, UINT32_C(0x04))
#define reg_dvp_status RS_SOC_REG32(RS_SOC_RIBP_DVP_BASE, UINT32_C(0x08)) #define reg_dvp_status RS_SOC_REG32(RS_SOC_RIBP_DVP_BASE, UINT32_C(0x08))
// rng
#define reg_rng_ctrl RS_SOC_REG32(RS_SOC_APB_RNG_BASE, UINT32_C(0x00))
#define reg_rng_seed RS_SOC_REG32(RS_SOC_APB_RNG_BASE, UINT32_C(0x04))
#define reg_rng_val RS_SOC_REG32(RS_SOC_APB_RNG_BASE, UINT32_C(0x08))
// uart // uart
#define reg_uart1_lcr RS_SOC_REG32(RS_SOC_APB_UART1_BASE, UINT32_C(0x00)) #define reg_uart1_lcr RS_SOC_REG32(RS_SOC_APB_UART1_BASE, UINT32_C(0x00))
#define reg_uart1_div RS_SOC_REG32(RS_SOC_APB_UART1_BASE, UINT32_C(0x04)) #define reg_uart1_div RS_SOC_REG32(RS_SOC_APB_UART1_BASE, UINT32_C(0x04))
+23 -1
View File
@@ -1,5 +1,27 @@
#ifndef RETROSOC_RNG_H #ifndef RETROSOC_RNG_H
#define RETROSOC_RNG_H #define RETROSOC_RNG_H
void ip_rng_test(int argc, char **argv); #include <rng.h>
#include <rng_regs.h>
#include <retrosoc/core/status.h>
typedef rng_config_t rs_rng_config_t;
typedef rng_snapshot_t rs_rng_snapshot_t;
#define RS_RNG_INTERRUPT_DATA_READY RNG_INTR_DATA_READY_MASK
#define RS_RNG_INTERRUPT_HEALTH_FAIL RNG_INTR_HEALTH_FAIL_MASK
#define RS_RNG_INTERRUPT_SOURCE_FAULT RNG_INTR_SOURCE_FAULT_MASK
#define RS_RNG_INTERRUPT_ALL RNG_INTR_ALL_MASK
rs_status_t rs_rng_init(const rs_rng_config_t *config);
rs_status_t rs_rng_get_status(rs_rng_snapshot_t *snapshot);
rs_status_t rs_rng_read_entropy(uint32_t *word, rs_timeout_t timeout);
rs_status_t rs_rng_read_diagnostic(uint32_t *word, rs_timeout_t timeout);
rs_status_t rs_rng_recover(void);
rs_status_t rs_rng_interrupt_enable(uint32_t mask);
rs_status_t rs_rng_interrupt_clear(uint32_t mask);
rs_status_t rs_rng_interrupt_test(uint32_t mask);
void rs_rng_shell_test(int argc, char **argv);
#endif #endif
+100 -15
View File
@@ -1,25 +1,110 @@
#include <retrosoc/hal/rng.h>
#include <retrosoc/core/soc.h> #include <retrosoc/core/soc.h>
#include <retrosoc/lib/printf.h> #include <retrosoc/lib/printf.h>
#include <retrosoc/hal/rng.h>
void ip_rng_test(int argc, char **argv) { static rs_status_t rs_rng_status(rng_status_t status) {
rs_status_t result;
switch (status) {
case RNG_STATUS_OK:
result = RS_OK;
break;
case RNG_STATUS_INVALID_ARGUMENT:
result = RS_EINVAL;
break;
case RNG_STATUS_TIMEOUT:
result = RS_ETIMEOUT;
break;
case RNG_STATUS_UNAVAILABLE:
case RNG_STATUS_UNQUALIFIED:
result = RS_ENOTSUP;
break;
case RNG_STATUS_HEALTH_FAILURE:
result = RS_EIO;
break;
case RNG_STATUS_INCOMPATIBLE:
default:
result = RS_EFORMAT;
break;
}
return result;
}
rs_status_t rs_rng_init(const rs_rng_config_t *config) {
return rs_rng_status(rng_init((uintptr_t)RS_SOC_APB_RNG_BASE, config));
}
rs_status_t rs_rng_get_status(rs_rng_snapshot_t *snapshot) {
return rs_rng_status(rng_get_status((uintptr_t)RS_SOC_APB_RNG_BASE, snapshot));
}
rs_status_t rs_rng_read_entropy(uint32_t *word, rs_timeout_t timeout) {
return rs_rng_status(rng_read_entropy((uintptr_t)RS_SOC_APB_RNG_BASE, word, timeout));
}
rs_status_t rs_rng_read_diagnostic(uint32_t *word, rs_timeout_t timeout) {
return rs_rng_status(rng_read_diagnostic((uintptr_t)RS_SOC_APB_RNG_BASE, word, timeout));
}
rs_status_t rs_rng_recover(void) {
return rs_rng_status(rng_recover((uintptr_t)RS_SOC_APB_RNG_BASE));
}
rs_status_t rs_rng_interrupt_enable(uint32_t mask) {
return rs_rng_status(rng_interrupt_enable((uintptr_t)RS_SOC_APB_RNG_BASE, mask));
}
rs_status_t rs_rng_interrupt_clear(uint32_t mask) {
return rs_rng_status(rng_interrupt_clear((uintptr_t)RS_SOC_APB_RNG_BASE, mask));
}
rs_status_t rs_rng_interrupt_test(uint32_t mask) {
return rs_rng_status(rng_interrupt_test((uintptr_t)RS_SOC_APB_RNG_BASE, mask));
}
void rs_rng_shell_test(int argc, char **argv) {
const rs_rng_config_t config = {
.fifo_watermark = 1U,
.interrupt_enable = 0U,
.lock_config = true,
};
rs_rng_snapshot_t snapshot;
uint32_t word;
rs_status_t status;
(void)argc; (void)argc;
(void)argv; (void)argv;
printf("[APB IP] rng test\n"); status = rs_rng_init(&config);
if (status != RS_OK) {
reg_rng_ctrl = (uint32_t)1; // en the core printf("[RNG] initialization failed: %d\n", status);
reg_rng_seed = (uint32_t)0xFE1C; // set the init seed return;
printf("[rng seed] %x\n", reg_rng_seed);
for (int i = 0; i < 5; ++i) {
printf("[rng val] %x\n", reg_rng_val);
} }
printf("reset the seed\n"); printf("[APB IP] RNG V2 diagnostic source\n");
reg_rng_seed = (uint32_t)0; for (uint32_t index = 0U; index < 5U; ++index) {
printf("[rng seed] %x\n", reg_rng_seed); status = rs_rng_read_diagnostic(&word, RS_TIMEOUT_DEFAULT);
for (int i = 0; i < 5; ++i) { if (status != RS_OK) {
printf("[rng val] %x\n", reg_rng_val); printf("[RNG] diagnostic read failed: %d\n", status);
return;
}
printf("[RNG diagnostic] %x\n", word);
}
status = rs_rng_get_status(&snapshot);
if (status != RS_OK) {
printf("[RNG] status read failed: %d\n", status);
return;
}
printf("[RNG status] qualified=%u level=%u errors=%x accepted=%u discarded=%u\n",
snapshot.source_qualified ? 1U : 0U, (uint32_t)snapshot.fifo_level,
snapshot.error_status, snapshot.accepted_count, snapshot.discard_count);
status = rs_rng_read_entropy(&word, RS_TIMEOUT_DEFAULT);
if (status == RS_ENOTSUP) {
printf("[RNG] security entropy unavailable: integration source is unqualified\n");
} else {
printf("[RNG] unexpected entropy status: %d\n", status);
} }
} }
+2 -1
View File
@@ -118,7 +118,8 @@ void rs_app_info(void) {
(void *)(uintptr_t)RS_SOC_RIBP_I2C1_BASE); (void *)(uintptr_t)RS_SOC_RIBP_I2C1_BASE);
printf(" 1 x ARCHINFO @%p\n", printf(" 1 x ARCHINFO @%p\n",
(void *)(uintptr_t)RS_SOC_APB_ARCHINFO_BASE); (void *)(uintptr_t)RS_SOC_APB_ARCHINFO_BASE);
printf(" 1 x RNG @%p\n", (void *)&reg_rng_ctrl); printf(" 1 x RNG @%p\n",
(void *)(uintptr_t)RS_SOC_APB_RNG_BASE);
printf(" 1 x UART1(ADV) @%p\n", (void *)&reg_uart1_lcr); printf(" 1 x UART1(ADV) @%p\n", (void *)&reg_uart1_lcr);
printf(" 1 x PWM(4CHNL) @%p\n", (void *)&reg_pwm_ctrl); printf(" 1 x PWM(4CHNL) @%p\n", (void *)&reg_pwm_ctrl);
printf(" 1 x PS2 @%p\n", (void *)&reg_ps2_ctrl); printf(" 1 x PS2 @%p\n", (void *)&reg_ps2_ctrl);
+11 -1
View File
@@ -15,7 +15,7 @@
Regression Verilator firmware simulations override the profiles' manual Regression Verilator firmware simulations override the profiles' manual
`bringup` default with `APP=ci_smoke`. This application verifies UART output, `bringup` default with `APP=ci_smoke`. This application verifies UART output,
archinfo APB readback, and test-status completion within the CI time budget; archinfo APB readback, RNG V2 integration, and test-status completion within the CI time budget;
`bringup` retains the full automatic application-information report for `bringup` retains the full automatic application-information report for
manual runs. manual runs.
@@ -28,6 +28,16 @@ dependency lock, and canonical configuration digest.
Normal builds clear the release flag; an audited release flow sets Normal builds clear the release flag; an audited release flow sets
`BUILD_RELEASE=YES`, which is part of the canonical configuration digest. `BUILD_RELEASE=YES`, which is part of the canonical configuration digest.
RNG V2 is a management-only APB entropy-controller integration. Its register
specification, portable driver, standalone simulation, synthesis, formal
properties, security boundary, and delivery checklist are owned by the
[RNG IP repository](https://github.com/retroSoC/rng). The SoC currently feeds
it from an explicitly unqualified deterministic source for reproducible
bring-up and regression. Consequently `rs_rng_read_entropy()` fails closed
with `RS_ENOTSUP`; only the diagnostic API returns words. Production use
requires replacing that source with a PDK-qualified entropy macro and
completing the source-specific characterization and NIST SP 800-90B evidence.
OpenSTA runs a reproducible core-STA baseline for every CI PDK: IHP130 uses OpenSTA runs a reproducible core-STA baseline for every CI PDK: IHP130 uses
`slow_1p08V_125C`, GF180 uses `ss_125C_4v50`, ICS55 uses the H7CR `slow_1p08V_125C`, GF180 uses `ss_125C_4v50`, ICS55 uses the H7CR
`ss_1p08_125C` view, and SKY130 uses `ss_100C_1v40`. `ss_1p08_125C` view, and SKY130 uses `ss_100C_1v40`.
+8 -2
View File
@@ -152,12 +152,16 @@ digraph mini_soc_block_diagram {
]; ];
apb_targets [ apb_targets [
fillcolor="#E6F4EA", fillcolor="#E6F4EA",
label="APB target wrapper\nRNG, UART1, PWM, PS/2, RTC\nwatchdog, CRC, advanced timer and user IP" label="APB target wrapper\nUART1, PWM, PS/2, RTC\nwatchdog, CRC, advanced timer and user IP"
]; ];
archinfo [ archinfo [
fillcolor="#E6F4EA", fillcolor="#E6F4EA",
label="ARCHINFO V2\nread-only build, topology and technology identity\nlifecycle-gated 128-bit device ID" label="ARCHINFO V2\nread-only build, topology and technology identity\nlifecycle-gated 128-bit device ID"
]; ];
rng [
fillcolor="#E6F4EA",
label="RNG V2 entropy controller\n8-word FIFO, fail-closed monitoring, IRQ16\nmanagement-only, deterministic source unqualified"
];
gpio_bridge [ gpio_bridge [
fillcolor="#E5E7EB", fillcolor="#E5E7EB",
label="GPIO pad bridge\nPDK capability-adapted controls" label="GPIO pad bridge\nPDK capability-adapted controls"
@@ -173,7 +177,7 @@ digraph mini_soc_block_diagram {
{ rank=same; user_core; dma; } { rank=same; user_core; dma; }
{ rank=same; fault; fabric; sram; } { rank=same; fault; fabric; sram; }
{ rank=same; ribp_adapter; apb_adapter; } { rank=same; ribp_adapter; apb_adapter; }
{ rank=same; sysctrl; clint; ribp_targets; uart0; i2c_controllers; gpio_controller; timers; ws2812; archinfo; apb_targets; } { rank=same; sysctrl; clint; ribp_targets; uart0; i2c_controllers; gpio_controller; timers; ws2812; archinfo; rng; apb_targets; }
{ rank=same; gpio_bridge; irq; } { rank=same; gpio_bridge; irq; }
ext_clock -> rcu [label="clock / reset"]; ext_clock -> rcu [label="clock / reset"];
@@ -204,6 +208,7 @@ digraph mini_soc_block_diagram {
ribp_adapter -> timers [label="RIBP"]; ribp_adapter -> timers [label="RIBP"];
ribp_adapter -> ws2812 [label="RIBP"]; ribp_adapter -> ws2812 [label="RIBP"];
apb_adapter -> archinfo [label="APB"]; apb_adapter -> archinfo [label="APB"];
apb_adapter -> rng [label="APB"];
apb_adapter -> apb_targets [label="APB"]; apb_adapter -> apb_targets [label="APB"];
ribp_targets -> gpio_controller [label="alternate functions"]; ribp_targets -> gpio_controller [label="alternate functions"];
@@ -219,6 +224,7 @@ digraph mini_soc_block_diagram {
i2c_controllers -> gpio_controller [label="GPIO3/4 ALT1\nGPIO7/8 ALT0"]; i2c_controllers -> gpio_controller [label="GPIO3/4 ALT1\nGPIO7/8 ALT0"];
dma -> i2c_controllers [label="DATA_CMD / RXDATA", style=dashed]; dma -> i2c_controllers [label="DATA_CMD / RXDATA", style=dashed];
i2c_controllers -> irq [label="IRQ7 / IRQ19"]; i2c_controllers -> irq [label="IRQ7 / IRQ19"];
rng -> irq [label="IRQ16"];
apb_targets -> gpio_controller [label="user_gpio"]; apb_targets -> gpio_controller [label="user_gpio"];
ribp_targets -> ext_io [dir=both, label="device interfaces"]; ribp_targets -> ext_io [dir=both, label="device interfaces"];
uart0 -> ext_io [dir=both, label="UART pads"]; uart0 -> ext_io [dir=both, label="UART pads"];
+266 -244
View File
@@ -4,19 +4,19 @@
<!-- Generated by graphviz version 2.43.0 (0) <!-- Generated by graphviz version 2.43.0 (0)
--> -->
<!-- Title: mini_soc_block_diagram Pages: 1 --> <!-- Title: mini_soc_block_diagram Pages: 1 -->
<svg width="2689pt" height="896pt" <svg width="2939pt" height="896pt"
viewBox="0.00 0.00 2689.00 896.48" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> viewBox="0.00 0.00 2939.00 896.48" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 892.48)"> <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 892.48)">
<title>mini_soc_block_diagram</title> <title>mini_soc_block_diagram</title>
<text text-anchor="middle" x="132" y="-870.08" font-family="Arial" font-size="18.00">retroSoC Mini SoC Architecture</text> <text text-anchor="middle" x="132" y="-870.08" font-family="Arial" font-size="18.00">retroSoC Mini SoC Architecture</text>
<g id="clust1" class="cluster"> <g id="clust1" class="cluster">
<title>cluster_asic</title> <title>cluster_asic</title>
<path fill="transparent" stroke="#111827" d="M160,-85C160,-85 2661,-85 2661,-85 2667,-85 2673,-91 2673,-97 2673,-97 2673,-772.48 2673,-772.48 2673,-778.48 2667,-784.48 2661,-784.48 2661,-784.48 160,-784.48 160,-784.48 154,-784.48 148,-778.48 148,-772.48 148,-772.48 148,-97 148,-97 148,-91 154,-85 160,-85"/> <path fill="transparent" stroke="#111827" d="M160,-85C160,-85 2911,-85 2911,-85 2917,-85 2923,-91 2923,-97 2923,-97 2923,-772.48 2923,-772.48 2923,-778.48 2917,-784.48 2911,-784.48 2911,-784.48 160,-784.48 160,-784.48 154,-784.48 148,-778.48 148,-772.48 148,-772.48 148,-97 148,-97 148,-91 154,-85 160,-85"/>
<text text-anchor="middle" x="196.5" y="-769.28" font-family="Arial" font-size="14.00" fill="#111827">retrosoc_asic</text> <text text-anchor="middle" x="196.5" y="-769.28" font-family="Arial" font-size="14.00" fill="#111827">retrosoc_asic</text>
</g> </g>
<g id="clust2" class="cluster"> <g id="clust2" class="cluster">
<title>cluster_soc</title> <title>cluster_soc</title>
<path fill="transparent" stroke="#94a3b8" stroke-dasharray="5,2" d="M390,-103C390,-103 2643,-103 2643,-103 2649,-103 2655,-109 2655,-115 2655,-115 2655,-729.48 2655,-729.48 2655,-735.48 2649,-741.48 2643,-741.48 2643,-741.48 390,-741.48 390,-741.48 384,-741.48 378,-735.48 378,-729.48 378,-729.48 378,-115 378,-115 378,-109 384,-103 390,-103"/> <path fill="transparent" stroke="#94a3b8" stroke-dasharray="5,2" d="M390,-103C390,-103 2893,-103 2893,-103 2899,-103 2905,-109 2905,-115 2905,-115 2905,-729.48 2905,-729.48 2905,-735.48 2899,-741.48 2893,-741.48 2893,-741.48 390,-741.48 390,-741.48 384,-741.48 378,-735.48 378,-729.48 378,-729.48 378,-115 378,-115 378,-109 384,-103 390,-103"/>
<text text-anchor="middle" x="407.5" y="-727.88" font-family="Arial" font-size="12.00" fill="#334155">retrosoc</text> <text text-anchor="middle" x="407.5" y="-727.88" font-family="Arial" font-size="12.00" fill="#334155">retrosoc</text>
</g> </g>
<!-- ext_clock --> <!-- ext_clock -->
@@ -44,490 +44,512 @@
<!-- ext_io --> <!-- ext_io -->
<g id="node2" class="node"> <g id="node2" class="node">
<title>ext_io</title> <title>ext_io</title>
<path fill="#f3f4f6" stroke="#4b5563" stroke-width="1.1" d="M2300,-45C2300,-45 2108,-45 2108,-45 2102,-45 2096,-39 2096,-33 2096,-33 2096,-12 2096,-12 2096,-6 2102,0 2108,0 2108,0 2300,0 2300,0 2306,0 2312,-6 2312,-12 2312,-12 2312,-33 2312,-33 2312,-39 2306,-45 2300,-45"/> <path fill="#f3f4f6" stroke="#4b5563" stroke-width="1.1" d="M1660,-45C1660,-45 1468,-45 1468,-45 1462,-45 1456,-39 1456,-33 1456,-33 1456,-12 1456,-12 1456,-6 1462,0 1468,0 1468,0 1660,0 1660,0 1666,0 1672,-6 1672,-12 1672,-12 1672,-33 1672,-33 1672,-39 1666,-45 1660,-45"/>
<text text-anchor="middle" x="2204" y="-31" font-family="Arial" font-size="10.00" fill="#111827">External I/O and memory</text> <text text-anchor="middle" x="1564" y="-31" font-family="Arial" font-size="10.00" fill="#111827">External I/O and memory</text>
<text text-anchor="middle" x="2204" y="-20" font-family="Arial" font-size="10.00" fill="#111827">GPIO, UART0, XPI Flash, SDRAM, PSRAM</text> <text text-anchor="middle" x="1564" y="-20" font-family="Arial" font-size="10.00" fill="#111827">GPIO, UART0, XPI Flash, SDRAM, PSRAM</text>
<text text-anchor="middle" x="2204" y="-9" font-family="Arial" font-size="10.00" fill="#111827">SD card, I2C, I2S, DVP and WS2812</text> <text text-anchor="middle" x="1564" y="-9" font-family="Arial" font-size="10.00" fill="#111827">SD card, I2C, I2S, DVP and WS2812</text>
</g> </g>
<!-- ext_jtag --> <!-- ext_jtag -->
<g id="node3" class="node"> <g id="node3" class="node">
<title>ext_jtag</title> <title>ext_jtag</title>
<path fill="#f3f4f6" stroke="#4b5563" stroke-width="1.1" d="M805.5,-860.48C805.5,-860.48 674.5,-860.48 674.5,-860.48 668.5,-860.48 662.5,-854.48 662.5,-848.48 662.5,-848.48 662.5,-836.48 662.5,-836.48 662.5,-830.48 668.5,-824.48 674.5,-824.48 674.5,-824.48 805.5,-824.48 805.5,-824.48 811.5,-824.48 817.5,-830.48 817.5,-836.48 817.5,-836.48 817.5,-848.48 817.5,-848.48 817.5,-854.48 811.5,-860.48 805.5,-860.48"/> <path fill="#f3f4f6" stroke="#4b5563" stroke-width="1.1" d="M1106.5,-860.48C1106.5,-860.48 975.5,-860.48 975.5,-860.48 969.5,-860.48 963.5,-854.48 963.5,-848.48 963.5,-848.48 963.5,-836.48 963.5,-836.48 963.5,-830.48 969.5,-824.48 975.5,-824.48 975.5,-824.48 1106.5,-824.48 1106.5,-824.48 1112.5,-824.48 1118.5,-830.48 1118.5,-836.48 1118.5,-836.48 1118.5,-848.48 1118.5,-848.48 1118.5,-854.48 1112.5,-860.48 1106.5,-860.48"/>
<text text-anchor="middle" x="740" y="-845.48" font-family="Arial" font-size="10.00" fill="#111827">Management JTAG</text> <text text-anchor="middle" x="1041" y="-845.48" font-family="Arial" font-size="10.00" fill="#111827">Management JTAG</text>
<text text-anchor="middle" x="740" y="-834.48" font-family="Arial" font-size="10.00" fill="#111827">TCK, TMS, TDI, TRST_n, TDO</text> <text text-anchor="middle" x="1041" y="-834.48" font-family="Arial" font-size="10.00" fill="#111827">TCK, TMS, TDI, TRST_n, TDO</text>
</g> </g>
<!-- jtag_dtm --> <!-- jtag_dtm -->
<g id="node6" class="node"> <g id="node6" class="node">
<title>jtag_dtm</title> <title>jtag_dtm</title>
<path fill="#e5e7eb" stroke="#4b5563" stroke-width="1.1" d="M815,-678.98C815,-678.98 665,-678.98 665,-678.98 659,-678.98 653,-672.98 653,-666.98 653,-666.98 653,-654.98 653,-654.98 653,-648.98 659,-642.98 665,-642.98 665,-642.98 815,-642.98 815,-642.98 821,-642.98 827,-648.98 827,-654.98 827,-654.98 827,-666.98 827,-666.98 827,-672.98 821,-678.98 815,-678.98"/> <path fill="#e5e7eb" stroke="#4b5563" stroke-width="1.1" d="M1116,-678.98C1116,-678.98 966,-678.98 966,-678.98 960,-678.98 954,-672.98 954,-666.98 954,-666.98 954,-654.98 954,-654.98 954,-648.98 960,-642.98 966,-642.98 966,-642.98 1116,-642.98 1116,-642.98 1122,-642.98 1128,-648.98 1128,-654.98 1128,-654.98 1128,-666.98 1128,-666.98 1128,-672.98 1122,-678.98 1116,-678.98"/>
<text text-anchor="middle" x="740" y="-663.98" font-family="Arial" font-size="10.00" fill="#111827">Hazard3 JTAG DTM</text> <text text-anchor="middle" x="1041" y="-663.98" font-family="Arial" font-size="10.00" fill="#111827">Hazard3 JTAG DTM</text>
<text text-anchor="middle" x="740" y="-652.98" font-family="Arial" font-size="10.00" fill="#111827">10 MHz asynchronous TCK domain</text> <text text-anchor="middle" x="1041" y="-652.98" font-family="Arial" font-size="10.00" fill="#111827">10 MHz asynchronous TCK domain</text>
</g> </g>
<!-- ext_jtag&#45;&gt;jtag_dtm --> <!-- ext_jtag&#45;&gt;jtag_dtm -->
<g id="edge2" class="edge"> <g id="edge2" class="edge">
<title>ext_jtag&#45;&gt;jtag_dtm</title> <title>ext_jtag&#45;&gt;jtag_dtm</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M740,-824.27C740,-792.24 740,-723.39 740,-686.51"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1041,-824.27C1041,-792.24 1041,-723.39 1041,-686.51"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="742.45,-686.14 740,-679.14 737.55,-686.14 742.45,-686.14"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1043.45,-686.14 1041,-679.14 1038.55,-686.14 1043.45,-686.14"/>
<text text-anchor="middle" x="760" y="-795.08" font-family="Arial" font-size="8.00" fill="#374151">JTAG pads</text> <text text-anchor="middle" x="1061" y="-795.08" font-family="Arial" font-size="8.00" fill="#374151">JTAG pads</text>
</g> </g>
<!-- fabric --> <!-- fabric -->
<g id="node11" class="node"> <g id="node11" class="node">
<title>fabric</title> <title>fabric</title>
<path fill="#dcecf8" stroke="#4b5563" stroke-width="1.1" d="M1184.66,-451.31C1184.66,-451.31 1116.98,-479.16 1116.98,-479.16 1111.43,-481.45 1099.88,-483.73 1093.88,-483.73 1093.88,-483.73 938.12,-483.73 938.12,-483.73 932.12,-483.73 920.57,-481.45 915.02,-479.16 915.02,-479.16 847.34,-451.31 847.34,-451.31 841.79,-449.03 841.79,-444.46 847.34,-442.18 847.34,-442.18 915.02,-414.32 915.02,-414.32 920.57,-412.04 932.12,-409.76 938.12,-409.76 938.12,-409.76 1093.88,-409.76 1093.88,-409.76 1099.88,-409.76 1111.43,-412.04 1116.98,-414.32 1116.98,-414.32 1184.66,-442.18 1184.66,-442.18 1190.21,-444.46 1190.21,-449.03 1184.66,-451.31"/> <path fill="#dcecf8" stroke="#4b5563" stroke-width="1.1" d="M1337.66,-451.31C1337.66,-451.31 1269.98,-479.16 1269.98,-479.16 1264.43,-481.45 1252.88,-483.73 1246.88,-483.73 1246.88,-483.73 1091.12,-483.73 1091.12,-483.73 1085.12,-483.73 1073.57,-481.45 1068.02,-479.16 1068.02,-479.16 1000.34,-451.31 1000.34,-451.31 994.79,-449.03 994.79,-444.46 1000.34,-442.18 1000.34,-442.18 1068.02,-414.32 1068.02,-414.32 1073.57,-412.04 1085.12,-409.76 1091.12,-409.76 1091.12,-409.76 1246.88,-409.76 1246.88,-409.76 1252.88,-409.76 1264.43,-412.04 1269.98,-414.32 1269.98,-414.32 1337.66,-442.18 1337.66,-442.18 1343.21,-444.46 1343.21,-449.03 1337.66,-451.31"/>
<text text-anchor="middle" x="1016" y="-455.24" font-family="Arial" font-size="10.00" fill="#111827">RIB fabric</text> <text text-anchor="middle" x="1169" y="-455.24" font-family="Arial" font-size="10.00" fill="#111827">RIB fabric</text>
<text text-anchor="middle" x="1016" y="-444.24" font-family="Arial" font-size="10.00" fill="#111827">3&#45;master round&#45;robin arbitration</text> <text text-anchor="middle" x="1169" y="-444.24" font-family="Arial" font-size="10.00" fill="#111827">3&#45;master round&#45;robin arbitration</text>
<text text-anchor="middle" x="1016" y="-433.24" font-family="Arial" font-size="10.00" fill="#111827">INCR1 / INCR4, access policy, fault reporting</text> <text text-anchor="middle" x="1169" y="-433.24" font-family="Arial" font-size="10.00" fill="#111827">INCR1 / INCR4, access policy, fault reporting</text>
</g> </g>
<!-- rcu&#45;&gt;fabric --> <!-- rcu&#45;&gt;fabric -->
<g id="edge3" class="edge"> <g id="edge3" class="edge">
<title>rcu&#45;&gt;fabric</title> <title>rcu&#45;&gt;fabric</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" stroke-dasharray="5,2" d="M362.03,-540.47C368.2,-539.24 372,-538.48 372,-538.48 372,-538.48 832,-483.48 832,-483.48 832,-483.48 856.75,-478.68 888.1,-472.59"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" stroke-dasharray="5,2" d="M362.03,-540.47C368.2,-539.24 372,-538.48 372,-538.48 372,-538.48 792.5,-490.61 1022.63,-464.41"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="888.92,-474.92 895.32,-471.18 887.98,-470.11 888.92,-474.92"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1023.04,-466.83 1029.72,-463.6 1022.49,-461.96 1023.04,-466.83"/>
<text text-anchor="middle" x="664" y="-509.08" font-family="Arial" font-size="8.00" fill="#374151">system clock / reset</text> <text text-anchor="middle" x="687" y="-509.08" font-family="Arial" font-size="8.00" fill="#374151">system clock / reset</text>
</g> </g>
<!-- clint --> <!-- clint -->
<g id="node17" class="node"> <g id="node17" class="node">
<title>clint</title> <title>clint</title>
<path fill="#f9e1e7" stroke="#4b5563" stroke-width="1.1" d="M527.5,-255C527.5,-255 406.5,-255 406.5,-255 400.5,-255 394.5,-249 394.5,-243 394.5,-243 394.5,-222 394.5,-222 394.5,-216 400.5,-210 406.5,-210 406.5,-210 527.5,-210 527.5,-210 533.5,-210 539.5,-216 539.5,-222 539.5,-222 539.5,-243 539.5,-243 539.5,-249 533.5,-255 527.5,-255"/> <path fill="#f9e1e7" stroke="#4b5563" stroke-width="1.1" d="M943.5,-255C943.5,-255 822.5,-255 822.5,-255 816.5,-255 810.5,-249 810.5,-243 810.5,-243 810.5,-222 810.5,-222 810.5,-216 816.5,-210 822.5,-210 822.5,-210 943.5,-210 943.5,-210 949.5,-210 955.5,-216 955.5,-222 955.5,-222 955.5,-243 955.5,-243 955.5,-249 949.5,-255 943.5,-255"/>
<text text-anchor="middle" x="467" y="-241" font-family="Arial" font-size="10.00" fill="#111827">CLINT</text> <text text-anchor="middle" x="883" y="-241" font-family="Arial" font-size="10.00" fill="#111827">CLINT</text>
<text text-anchor="middle" x="467" y="-230" font-family="Arial" font-size="10.00" fill="#111827">standard 64 KiB register map</text> <text text-anchor="middle" x="883" y="-230" font-family="Arial" font-size="10.00" fill="#111827">standard 64 KiB register map</text>
<text text-anchor="middle" x="467" y="-219" font-family="Arial" font-size="10.00" fill="#111827">mtime, mtimecmp and MSIP</text> <text text-anchor="middle" x="883" y="-219" font-family="Arial" font-size="10.00" fill="#111827">mtime, mtimecmp and MSIP</text>
</g> </g>
<!-- rcu&#45;&gt;clint --> <!-- rcu&#45;&gt;clint -->
<g id="edge8" class="edge"> <g id="edge8" class="edge">
<title>rcu&#45;&gt;clint</title> <title>rcu&#45;&gt;clint</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" stroke-dasharray="5,2" d="M277.48,-538.31C313.09,-481.03 409.7,-325.66 449.5,-261.65"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" stroke-dasharray="5,2" d="M300.25,-538.33C410.78,-472.3 736,-278 736,-278 736,-278 769.57,-267.84 804.63,-257.22"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="451.78,-262.62 453.4,-255.38 447.62,-260.03 451.78,-262.62"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="805.66,-259.47 811.65,-255.1 804.24,-254.78 805.66,-259.47"/>
<text text-anchor="middle" x="392.5" y="-380.6" font-family="Arial" font-size="8.00" fill="#374151">1 MHz tick</text> <text text-anchor="middle" x="582.5" y="-380.6" font-family="Arial" font-size="8.00" fill="#374151">1 MHz tick</text>
</g> </g>
<!-- mgmt_core --> <!-- mgmt_core -->
<g id="node5" class="node"> <g id="node5" class="node">
<title>mgmt_core</title> <title>mgmt_core</title>
<path fill="#ddf2e3" stroke="#4b5563" stroke-width="1.1" d="M1400,-683.48C1400,-683.48 1246,-683.48 1246,-683.48 1240,-683.48 1234,-677.48 1234,-671.48 1234,-671.48 1234,-650.48 1234,-650.48 1234,-644.48 1240,-638.48 1246,-638.48 1246,-638.48 1400,-638.48 1400,-638.48 1406,-638.48 1412,-644.48 1412,-650.48 1412,-650.48 1412,-671.48 1412,-671.48 1412,-677.48 1406,-683.48 1400,-683.48"/> <path fill="#ddf2e3" stroke="#4b5563" stroke-width="1.1" d="M1701,-683.48C1701,-683.48 1547,-683.48 1547,-683.48 1541,-683.48 1535,-677.48 1535,-671.48 1535,-671.48 1535,-650.48 1535,-650.48 1535,-644.48 1541,-638.48 1547,-638.48 1547,-638.48 1701,-638.48 1701,-638.48 1707,-638.48 1713,-644.48 1713,-650.48 1713,-650.48 1713,-671.48 1713,-671.48 1713,-677.48 1707,-683.48 1701,-683.48"/>
<text text-anchor="middle" x="1323" y="-669.48" font-family="Arial" font-size="10.00" fill="#111827">Management core</text> <text text-anchor="middle" x="1624" y="-669.48" font-family="Arial" font-size="10.00" fill="#111827">Management core</text>
<text text-anchor="middle" x="1323" y="-658.48" font-family="Arial" font-size="10.00" fill="#111827">Fixed Hazard3, branch predictor</text> <text text-anchor="middle" x="1624" y="-658.48" font-family="Arial" font-size="10.00" fill="#111827">Fixed Hazard3, branch predictor</text>
<text text-anchor="middle" x="1323" y="-647.48" font-family="Arial" font-size="10.00" fill="#111827">JTAG Debug Module always present</text> <text text-anchor="middle" x="1624" y="-647.48" font-family="Arial" font-size="10.00" fill="#111827">JTAG Debug Module always present</text>
</g> </g>
<!-- mgmt_adapter --> <!-- mgmt_adapter -->
<g id="node8" class="node"> <g id="node8" class="node">
<title>mgmt_adapter</title> <title>mgmt_adapter</title>
<path fill="#e5e7eb" stroke="#4b5563" stroke-width="1.1" d="M1036.5,-578.98C1036.5,-578.98 995.5,-578.98 995.5,-578.98 989.5,-578.98 983.5,-572.98 983.5,-566.98 983.5,-566.98 983.5,-554.98 983.5,-554.98 983.5,-548.98 989.5,-542.98 995.5,-542.98 995.5,-542.98 1036.5,-542.98 1036.5,-542.98 1042.5,-542.98 1048.5,-548.98 1048.5,-554.98 1048.5,-554.98 1048.5,-566.98 1048.5,-566.98 1048.5,-572.98 1042.5,-578.98 1036.5,-578.98"/> <path fill="#e5e7eb" stroke="#4b5563" stroke-width="1.1" d="M1644.5,-578.98C1644.5,-578.98 1603.5,-578.98 1603.5,-578.98 1597.5,-578.98 1591.5,-572.98 1591.5,-566.98 1591.5,-566.98 1591.5,-554.98 1591.5,-554.98 1591.5,-548.98 1597.5,-542.98 1603.5,-542.98 1603.5,-542.98 1644.5,-542.98 1644.5,-542.98 1650.5,-542.98 1656.5,-548.98 1656.5,-554.98 1656.5,-554.98 1656.5,-566.98 1656.5,-566.98 1656.5,-572.98 1650.5,-578.98 1644.5,-578.98"/>
<text text-anchor="middle" x="1016" y="-558.48" font-family="Arial" font-size="10.00" fill="#111827">RIBP2RIB</text> <text text-anchor="middle" x="1624" y="-558.48" font-family="Arial" font-size="10.00" fill="#111827">RIBP2RIB</text>
</g> </g>
<!-- mgmt_core&#45;&gt;mgmt_adapter --> <!-- mgmt_core&#45;&gt;mgmt_adapter -->
<g id="edge9" class="edge"> <g id="edge9" class="edge">
<title>mgmt_core&#45;&gt;mgmt_adapter</title> <title>mgmt_core&#45;&gt;mgmt_adapter</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1249.88,-638.47C1172.98,-615.84 1063,-583.48 1063,-583.48 1063,-583.48 1059.87,-582.05 1055.22,-579.93"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1624,-638.24C1624,-622.92 1624,-602.4 1624,-586.51"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1056.03,-577.6 1048.64,-576.92 1053.99,-582.06 1056.03,-577.6"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1626.45,-586.12 1624,-579.12 1621.55,-586.12 1626.45,-586.12"/>
<text text-anchor="middle" x="1178.5" y="-609.08" font-family="Arial" font-size="8.00" fill="#374151">RIBP</text> <text text-anchor="middle" x="1633.5" y="-609.08" font-family="Arial" font-size="8.00" fill="#374151">RIBP</text>
</g> </g>
<!-- debug_module --> <!-- debug_module -->
<g id="node7" class="node"> <g id="node7" class="node">
<title>debug_module</title> <title>debug_module</title>
<path fill="#fce7f3" stroke="#4b5563" stroke-width="1.1" d="M1076.5,-683.48C1076.5,-683.48 955.5,-683.48 955.5,-683.48 949.5,-683.48 943.5,-677.48 943.5,-671.48 943.5,-671.48 943.5,-650.48 943.5,-650.48 943.5,-644.48 949.5,-638.48 955.5,-638.48 955.5,-638.48 1076.5,-638.48 1076.5,-638.48 1082.5,-638.48 1088.5,-644.48 1088.5,-650.48 1088.5,-650.48 1088.5,-671.48 1088.5,-671.48 1088.5,-677.48 1082.5,-683.48 1076.5,-683.48"/> <path fill="#fce7f3" stroke="#4b5563" stroke-width="1.1" d="M1377.5,-683.48C1377.5,-683.48 1256.5,-683.48 1256.5,-683.48 1250.5,-683.48 1244.5,-677.48 1244.5,-671.48 1244.5,-671.48 1244.5,-650.48 1244.5,-650.48 1244.5,-644.48 1250.5,-638.48 1256.5,-638.48 1256.5,-638.48 1377.5,-638.48 1377.5,-638.48 1383.5,-638.48 1389.5,-644.48 1389.5,-650.48 1389.5,-650.48 1389.5,-671.48 1389.5,-671.48 1389.5,-677.48 1383.5,-683.48 1377.5,-683.48"/>
<text text-anchor="middle" x="1016" y="-669.48" font-family="Arial" font-size="10.00" fill="#111827">Hazard3 Debug Module</text> <text text-anchor="middle" x="1317" y="-669.48" font-family="Arial" font-size="10.00" fill="#111827">Hazard3 Debug Module</text>
<text text-anchor="middle" x="1016" y="-658.48" font-family="Arial" font-size="10.00" fill="#111827">abstract commands, no SBA</text> <text text-anchor="middle" x="1317" y="-658.48" font-family="Arial" font-size="10.00" fill="#111827">abstract commands, no SBA</text>
<text text-anchor="middle" x="1016" y="-647.48" font-family="Arial" font-size="10.00" fill="#111827">management&#45;hart&#45;only reset</text> <text text-anchor="middle" x="1317" y="-647.48" font-family="Arial" font-size="10.00" fill="#111827">management&#45;hart&#45;only reset</text>
</g> </g>
<!-- jtag_dtm&#45;&gt;debug_module --> <!-- jtag_dtm&#45;&gt;debug_module -->
<g id="edge4" class="edge"> <g id="edge4" class="edge">
<title>jtag_dtm&#45;&gt;debug_module</title> <title>jtag_dtm&#45;&gt;debug_module</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M827.33,-660.98C862.12,-660.98 901.91,-660.98 935.95,-660.98"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1128.33,-660.98C1163.12,-660.98 1202.91,-660.98 1236.95,-660.98"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="936.12,-663.43 943.12,-660.98 936.12,-658.53 936.12,-663.43"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1237.12,-663.43 1244.12,-660.98 1237.12,-658.53 1237.12,-663.43"/>
<text text-anchor="middle" x="885.25" y="-666.58" font-family="Arial" font-size="8.00" fill="#374151">DMI, asynchronous CDC</text> <text text-anchor="middle" x="1186.25" y="-666.58" font-family="Arial" font-size="8.00" fill="#374151">DMI, asynchronous CDC</text>
</g> </g>
<!-- debug_module&#45;&gt;mgmt_core --> <!-- debug_module&#45;&gt;mgmt_core -->
<g id="edge5" class="edge"> <g id="edge5" class="edge">
<title>debug_module&#45;&gt;mgmt_core</title> <title>debug_module&#45;&gt;mgmt_core</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1088.75,-660.98C1129.99,-660.98 1182.09,-660.98 1226.69,-660.98"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1389.75,-660.98C1430.99,-660.98 1483.09,-660.98 1527.69,-660.98"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1226.77,-663.43 1233.77,-660.98 1226.77,-658.53 1226.77,-663.43"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1527.77,-663.43 1534.77,-660.98 1527.77,-658.53 1527.77,-663.43"/>
<text text-anchor="middle" x="1161.25" y="-666.58" font-family="Arial" font-size="8.00" fill="#374151">halt, resume, abstract commands</text> <text text-anchor="middle" x="1462.25" y="-666.58" font-family="Arial" font-size="8.00" fill="#374151">halt, resume, abstract commands</text>
</g> </g>
<!-- debug_module&#45;&gt;mgmt_adapter --> <!-- debug_module&#45;&gt;mgmt_adapter -->
<g id="edge6" class="edge"> <g id="edge6" class="edge">
<title>debug_module&#45;&gt;mgmt_adapter</title> <title>debug_module&#45;&gt;mgmt_adapter</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" stroke-dasharray="5,2" d="M1016,-638.24C1016,-622.92 1016,-602.4 1016,-586.51"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" stroke-dasharray="5,2" d="M1389.7,-638.68C1466.93,-616.04 1578,-583.48 1578,-583.48 1578,-583.48 1580.57,-582.29 1584.49,-580.45"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1018.45,-586.12 1016,-579.12 1013.55,-586.12 1018.45,-586.12"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1585.75,-582.56 1591.06,-577.38 1583.68,-578.13 1585.75,-582.56"/>
<text text-anchor="middle" x="1054" y="-609.08" font-family="Arial" font-size="8.00" fill="#374151">reset after bridge idle</text> <text text-anchor="middle" x="1531" y="-609.08" font-family="Arial" font-size="8.00" fill="#374151">reset after bridge idle</text>
</g> </g>
<!-- timers --> <!-- timers -->
<g id="node22" class="node"> <g id="node22" class="node">
<title>timers</title> <title>timers</title>
<path fill="#f9e1e7" stroke="#4b5563" stroke-width="1.1" d="M1707.5,-255C1707.5,-255 1526.5,-255 1526.5,-255 1520.5,-255 1514.5,-249 1514.5,-243 1514.5,-243 1514.5,-222 1514.5,-222 1514.5,-216 1520.5,-210 1526.5,-210 1526.5,-210 1707.5,-210 1707.5,-210 1713.5,-210 1719.5,-216 1719.5,-222 1719.5,-222 1719.5,-243 1719.5,-243 1719.5,-249 1713.5,-255 1707.5,-255"/> <path fill="#f9e1e7" stroke="#4b5563" stroke-width="1.1" d="M771.5,-255C771.5,-255 590.5,-255 590.5,-255 584.5,-255 578.5,-249 578.5,-243 578.5,-243 578.5,-222 578.5,-222 578.5,-216 584.5,-210 590.5,-210 590.5,-210 771.5,-210 771.5,-210 777.5,-210 783.5,-216 783.5,-222 783.5,-222 783.5,-243 783.5,-243 783.5,-249 777.5,-255 771.5,-255"/>
<text text-anchor="middle" x="1617" y="-241" font-family="Arial" font-size="10.00" fill="#111827">General timers 0/1</text> <text text-anchor="middle" x="681" y="-241" font-family="Arial" font-size="10.00" fill="#111827">General timers 0/1</text>
<text text-anchor="middle" x="1617" y="-230" font-family="Arial" font-size="10.00" fill="#111827">32&#45;bit counter, 16&#45;bit prescaler</text> <text text-anchor="middle" x="681" y="-230" font-family="Arial" font-size="10.00" fill="#111827">32&#45;bit counter, 16&#45;bit prescaler</text>
<text text-anchor="middle" x="1617" y="-219" font-family="Arial" font-size="10.00" fill="#111827">periodic / one&#45;shot, compare, debug freeze</text> <text text-anchor="middle" x="681" y="-219" font-family="Arial" font-size="10.00" fill="#111827">periodic / one&#45;shot, compare, debug freeze</text>
</g> </g>
<!-- debug_module&#45;&gt;timers --> <!-- debug_module&#45;&gt;timers -->
<g id="edge7" class="edge"> <g id="edge7" class="edge">
<title>debug_module&#45;&gt;timers</title> <title>debug_module&#45;&gt;timers</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" stroke-dasharray="5,2" d="M1088.7,-649.63C1235.4,-628.73 1553,-583.48 1553,-583.48 1553,-583.48 1726,-387 1726,-387 1726,-387 1726,-378 1726,-378 1726,-378 1694,-278 1694,-278 1694,-278 1678.25,-268.9 1661,-258.93"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" stroke-dasharray="5,2" d="M1244.49,-647.47C1091.36,-621.05 749,-561.98 749,-561.98 749,-561.98 749,-561.98 749,-336 749,-336 719.45,-291.46 699.31,-261.1"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1661.88,-256.61 1654.6,-255.23 1659.43,-260.85 1661.88,-256.61"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="701.33,-259.72 695.42,-255.24 697.25,-262.43 701.33,-259.72"/>
<text text-anchor="middle" x="1715" y="-444.84" font-family="Arial" font-size="8.00" fill="#374151">halted</text> <text text-anchor="middle" x="760" y="-444.84" font-family="Arial" font-size="8.00" fill="#374151">halted</text>
</g> </g>
<!-- mgmt_adapter&#45;&gt;fabric --> <!-- mgmt_adapter&#45;&gt;fabric -->
<g id="edge10" class="edge"> <g id="edge10" class="edge">
<title>mgmt_adapter&#45;&gt;fabric</title> <title>mgmt_adapter&#45;&gt;fabric</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1016,-542.94C1016,-529.08 1016,-508.91 1016,-490.69"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1591.06,-544.59C1583.69,-541.14 1578,-538.48 1578,-538.48 1578,-538.48 1486,-506.48 1486,-506.48 1486,-506.48 1386.24,-488 1298.65,-471.77"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1018.45,-490.57 1016,-483.57 1013.55,-490.57 1018.45,-490.57"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1298.89,-469.32 1291.56,-470.45 1298,-474.14 1298.89,-469.32"/>
<text text-anchor="middle" x="1023" y="-509.08" font-family="Arial" font-size="8.00" fill="#374151">RIB</text> <text text-anchor="middle" x="1517" y="-509.08" font-family="Arial" font-size="8.00" fill="#374151">RIB</text>
</g> </g>
<!-- user_core --> <!-- user_core -->
<g id="node9" class="node"> <g id="node9" class="node">
<title>user_core</title> <title>user_core</title>
<path fill="#ddf2e3" stroke="#4b5563" stroke-width="1.1" d="M1164,-583.48C1164,-583.48 1088,-583.48 1088,-583.48 1082,-583.48 1076,-577.48 1076,-571.48 1076,-571.48 1076,-550.48 1076,-550.48 1076,-544.48 1082,-538.48 1088,-538.48 1088,-538.48 1164,-538.48 1164,-538.48 1170,-538.48 1176,-544.48 1176,-550.48 1176,-550.48 1176,-571.48 1176,-571.48 1176,-577.48 1170,-583.48 1164,-583.48"/> <path fill="#ddf2e3" stroke="#4b5563" stroke-width="1.1" d="M1552,-583.48C1552,-583.48 1476,-583.48 1476,-583.48 1470,-583.48 1464,-577.48 1464,-571.48 1464,-571.48 1464,-550.48 1464,-550.48 1464,-544.48 1470,-538.48 1476,-538.48 1476,-538.48 1552,-538.48 1552,-538.48 1558,-538.48 1564,-544.48 1564,-550.48 1564,-550.48 1564,-571.48 1564,-571.48 1564,-577.48 1558,-583.48 1552,-583.48"/>
<text text-anchor="middle" x="1126" y="-569.48" font-family="Arial" font-size="10.00" fill="#111827">Selected user core</text> <text text-anchor="middle" x="1514" y="-569.48" font-family="Arial" font-size="10.00" fill="#111827">Selected user core</text>
<text text-anchor="middle" x="1126" y="-558.48" font-family="Arial" font-size="10.00" fill="#111827">C0&#45;C5, one active</text> <text text-anchor="middle" x="1514" y="-558.48" font-family="Arial" font-size="10.00" fill="#111827">C0&#45;C5, one active</text>
<text text-anchor="middle" x="1126" y="-547.48" font-family="Arial" font-size="10.00" fill="#111827">PicoRV32 at C5</text> <text text-anchor="middle" x="1514" y="-547.48" font-family="Arial" font-size="10.00" fill="#111827">PicoRV32 at C5</text>
</g> </g>
<!-- user_core&#45;&gt;fabric --> <!-- user_core&#45;&gt;fabric -->
<g id="edge11" class="edge"> <g id="edge11" class="edge">
<title>user_core&#45;&gt;fabric</title> <title>user_core&#45;&gt;fabric</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1104.79,-538.34C1091.1,-524.37 1072.85,-505.75 1056.45,-489.02"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1490.82,-538.22C1475.04,-523.41 1457,-506.48 1457,-506.48 1457,-506.48 1372.32,-489.21 1294.8,-473.4"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1058.08,-487.18 1051.43,-483.89 1054.58,-490.61 1058.08,-487.18"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1295.15,-470.97 1287.8,-471.97 1294.17,-475.77 1295.15,-470.97"/>
<text text-anchor="middle" x="1087" y="-509.08" font-family="Arial" font-size="8.00" fill="#374151">RIB</text> <text text-anchor="middle" x="1473" y="-509.08" font-family="Arial" font-size="8.00" fill="#374151">RIB</text>
</g> </g>
<!-- dma --> <!-- dma -->
<g id="node10" class="node"> <g id="node10" class="node">
<title>dma</title> <title>dma</title>
<path fill="#ddf2e3" stroke="#4b5563" stroke-width="1.1" d="M1527,-578.98C1527,-578.98 1409,-578.98 1409,-578.98 1403,-578.98 1397,-572.98 1397,-566.98 1397,-566.98 1397,-554.98 1397,-554.98 1397,-548.98 1403,-542.98 1409,-542.98 1409,-542.98 1527,-542.98 1527,-542.98 1533,-542.98 1539,-548.98 1539,-554.98 1539,-554.98 1539,-566.98 1539,-566.98 1539,-572.98 1533,-578.98 1527,-578.98"/> <path fill="#ddf2e3" stroke="#4b5563" stroke-width="1.1" d="M1425,-578.98C1425,-578.98 1307,-578.98 1307,-578.98 1301,-578.98 1295,-572.98 1295,-566.98 1295,-566.98 1295,-554.98 1295,-554.98 1295,-548.98 1301,-542.98 1307,-542.98 1307,-542.98 1425,-542.98 1425,-542.98 1431,-542.98 1437,-548.98 1437,-554.98 1437,-554.98 1437,-566.98 1437,-566.98 1437,-572.98 1431,-578.98 1425,-578.98"/>
<text text-anchor="middle" x="1468" y="-563.98" font-family="Arial" font-size="10.00" fill="#111827">DMA</text> <text text-anchor="middle" x="1366" y="-563.98" font-family="Arial" font-size="10.00" fill="#111827">DMA</text>
<text text-anchor="middle" x="1468" y="-552.98" font-family="Arial" font-size="10.00" fill="#111827">RIB master and RIBP target</text> <text text-anchor="middle" x="1366" y="-552.98" font-family="Arial" font-size="10.00" fill="#111827">RIB master and RIBP target</text>
</g> </g>
<!-- dma&#45;&gt;fabric --> <!-- dma&#45;&gt;fabric -->
<g id="edge12" class="edge"> <g id="edge12" class="edge">
<title>dma&#45;&gt;fabric</title> <title>dma&#45;&gt;fabric</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1396.98,-548.06C1318.49,-534.88 1203,-515.48 1203,-515.48 1203,-515.48 1161.2,-500.34 1117.12,-484.37"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1393.25,-542.91C1413.27,-530.36 1437,-515.48 1437,-515.48 1437,-515.48 1437,-506.48 1437,-506.48 1437,-506.48 1362.62,-490.18 1292.23,-474.75"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1117.74,-481.99 1110.32,-481.91 1116.07,-486.6 1117.74,-481.99"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1292.35,-472.27 1284.99,-473.17 1291.3,-477.06 1292.35,-472.27"/>
<text text-anchor="middle" x="1210" y="-509.08" font-family="Arial" font-size="8.00" fill="#374151">RIB</text> <text text-anchor="middle" x="1444" y="-509.08" font-family="Arial" font-size="8.00" fill="#374151">RIB</text>
</g> </g>
<!-- uart0 --> <!-- uart0 -->
<g id="node19" class="node"> <g id="node19" class="node">
<title>uart0</title> <title>uart0</title>
<path fill="#f9e1e7" stroke="#4b5563" stroke-width="1.1" d="M2627,-255C2627,-255 2467,-255 2467,-255 2461,-255 2455,-249 2455,-243 2455,-243 2455,-222 2455,-222 2455,-216 2461,-210 2467,-210 2467,-210 2627,-210 2627,-210 2633,-210 2639,-216 2639,-222 2639,-222 2639,-243 2639,-243 2639,-249 2633,-255 2627,-255"/> <path fill="#f9e1e7" stroke="#4b5563" stroke-width="1.1" d="M1644,-255C1644,-255 1484,-255 1484,-255 1478,-255 1472,-249 1472,-243 1472,-243 1472,-222 1472,-222 1472,-216 1478,-210 1484,-210 1484,-210 1644,-210 1644,-210 1650,-210 1656,-216 1656,-222 1656,-222 1656,-243 1656,-243 1656,-249 1650,-255 1644,-255"/>
<text text-anchor="middle" x="2547" y="-241" font-family="Arial" font-size="10.00" fill="#111827">UART0 V2</text> <text text-anchor="middle" x="1564" y="-241" font-family="Arial" font-size="10.00" fill="#111827">UART0 V2</text>
<text text-anchor="middle" x="2547" y="-230" font-family="Arial" font-size="10.00" fill="#111827">64&#45;byte TX/RX FIFOs, fractional baud</text> <text text-anchor="middle" x="1564" y="-230" font-family="Arial" font-size="10.00" fill="#111827">64&#45;byte TX/RX FIFOs, fractional baud</text>
<text text-anchor="middle" x="2547" y="-219" font-family="Arial" font-size="10.00" fill="#111827">framing/errors, IRQ2, DMA&#45;paced</text> <text text-anchor="middle" x="1564" y="-219" font-family="Arial" font-size="10.00" fill="#111827">framing/errors, IRQ2, DMA&#45;paced</text>
</g> </g>
<!-- dma&#45;&gt;uart0 --> <!-- dma&#45;&gt;uart0 -->
<g id="edge35" class="edge"> <g id="edge36" class="edge">
<title>dma&#45;&gt;uart0</title> <title>dma&#45;&gt;uart0</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" stroke-dasharray="5,2" d="M1503.68,-542.82C1550.56,-520.26 1627,-483.48 1627,-483.48 1627,-483.48 1721,-410 1721,-410 1721,-410 2228.04,-301.66 2447.6,-254.74"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" stroke-dasharray="5,2" d="M1433.39,-542.94C1443.7,-540.33 1451,-538.48 1451,-538.48 1451,-538.48 1698,-483.48 1698,-483.48 1698,-483.48 1698,-410 1698,-410 1698,-410 1682,-378 1682,-378 1682,-378 1620.5,-302.69 1586.3,-260.81"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="2448.32,-257.09 2454.65,-253.23 2447.29,-252.3 2448.32,-257.09"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1587.99,-259.01 1581.67,-255.13 1584.2,-262.1 1587.99,-259.01"/>
<text text-anchor="middle" x="1889.5" y="-380.6" font-family="Arial" font-size="8.00" fill="#374151">TX/RX data</text> <text text-anchor="middle" x="1707.5" y="-380.6" font-family="Arial" font-size="8.00" fill="#374151">TX/RX data</text>
</g> </g>
<!-- i2c_controllers --> <!-- i2c_controllers -->
<g id="node20" class="node"> <g id="node20" class="node">
<title>i2c_controllers</title> <title>i2c_controllers</title>
<path fill="#f9e1e7" stroke="#4b5563" stroke-width="1.1" d="M1261.5,-255C1261.5,-255 1076.5,-255 1076.5,-255 1070.5,-255 1064.5,-249 1064.5,-243 1064.5,-243 1064.5,-222 1064.5,-222 1064.5,-216 1070.5,-210 1076.5,-210 1076.5,-210 1261.5,-210 1261.5,-210 1267.5,-210 1273.5,-216 1273.5,-222 1273.5,-222 1273.5,-243 1273.5,-243 1273.5,-249 1267.5,-255 1261.5,-255"/> <path fill="#f9e1e7" stroke="#4b5563" stroke-width="1.1" d="M1432.5,-255C1432.5,-255 1247.5,-255 1247.5,-255 1241.5,-255 1235.5,-249 1235.5,-243 1235.5,-243 1235.5,-222 1235.5,-222 1235.5,-216 1241.5,-210 1247.5,-210 1247.5,-210 1432.5,-210 1432.5,-210 1438.5,-210 1444.5,-216 1444.5,-222 1444.5,-222 1444.5,-243 1444.5,-243 1444.5,-249 1438.5,-255 1432.5,-255"/>
<text text-anchor="middle" x="1169" y="-241" font-family="Arial" font-size="10.00" fill="#111827">I2C0 / I2C1 V2</text> <text text-anchor="middle" x="1340" y="-241" font-family="Arial" font-size="10.00" fill="#111827">I2C0 / I2C1 V2</text>
<text text-anchor="middle" x="1169" y="-230" font-family="Arial" font-size="10.00" fill="#111827">16&#45;entry command/RX FIFOs, Sm/Fm/Fm+</text> <text text-anchor="middle" x="1340" y="-230" font-family="Arial" font-size="10.00" fill="#111827">16&#45;entry command/RX FIFOs, Sm/Fm/Fm+</text>
<text text-anchor="middle" x="1169" y="-219" font-family="Arial" font-size="10.00" fill="#111827">7/10&#45;bit, IRQ7/19, DMA&#45;paced</text> <text text-anchor="middle" x="1340" y="-219" font-family="Arial" font-size="10.00" fill="#111827">7/10&#45;bit, IRQ7/19, DMA&#45;paced</text>
</g> </g>
<!-- dma&#45;&gt;i2c_controllers --> <!-- dma&#45;&gt;i2c_controllers -->
<g id="edge38" class="edge"> <g id="edge39" class="edge">
<title>dma&#45;&gt;i2c_controllers</title> <title>dma&#45;&gt;i2c_controllers</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" stroke-dasharray="5,2" d="M1426.26,-542.82C1371.42,-520.26 1282,-483.48 1282,-483.48 1282,-483.48 1236,-378 1236,-378 1236,-378 1201.51,-303.62 1182.02,-261.58"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" stroke-dasharray="5,2" d="M1390.56,-542.91C1408.61,-530.36 1430,-515.48 1430,-515.48 1430,-515.48 1430,-506.48 1430,-506.48 1430,-506.48 976,-483.48 976,-483.48 976,-483.48 976,-410 976,-410 976,-410 1075,-378 1075,-378 1075,-378 1206,-355 1206,-355 1206,-355 1394,-296 1394,-296 1394,-296 1394,-278 1394,-278 1394,-278 1383.53,-269.37 1371.81,-259.71"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1184.2,-260.45 1179.03,-255.13 1179.75,-262.51 1184.2,-260.45"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1373.33,-257.79 1366.37,-255.23 1370.21,-261.57 1373.33,-257.79"/>
<text text-anchor="middle" x="1280" y="-380.6" font-family="Arial" font-size="8.00" fill="#374151">DATA_CMD / RXDATA</text> <text text-anchor="middle" x="1116" y="-380.6" font-family="Arial" font-size="8.00" fill="#374151">DATA_CMD / RXDATA</text>
</g> </g>
<!-- ws2812 --> <!-- ws2812 -->
<g id="node23" class="node"> <g id="node23" class="node">
<title>ws2812</title> <title>ws2812</title>
<path fill="#f9e1e7" stroke="#4b5563" stroke-width="1.1" d="M2416,-255C2416,-255 2282,-255 2282,-255 2276,-255 2270,-249 2270,-243 2270,-243 2270,-222 2270,-222 2270,-216 2276,-210 2282,-210 2282,-210 2416,-210 2416,-210 2422,-210 2428,-216 2428,-222 2428,-222 2428,-243 2428,-243 2428,-249 2422,-255 2416,-255"/> <path fill="#f9e1e7" stroke="#4b5563" stroke-width="1.1" d="M540,-255C540,-255 406,-255 406,-255 400,-255 394,-249 394,-243 394,-243 394,-222 394,-222 394,-216 400,-210 406,-210 406,-210 540,-210 540,-210 546,-210 552,-216 552,-222 552,-222 552,-243 552,-243 552,-249 546,-255 540,-255"/>
<text text-anchor="middle" x="2349" y="-241" font-family="Arial" font-size="10.00" fill="#111827">WS2812 TX</text> <text text-anchor="middle" x="473" y="-241" font-family="Arial" font-size="10.00" fill="#111827">WS2812 TX</text>
<text text-anchor="middle" x="2349" y="-230" font-family="Arial" font-size="10.00" fill="#111827">24&#45;bit MSB&#45;first serializer</text> <text text-anchor="middle" x="473" y="-230" font-family="Arial" font-size="10.00" fill="#111827">24&#45;bit MSB&#45;first serializer</text>
<text text-anchor="middle" x="2349" y="-219" font-family="Arial" font-size="10.00" fill="#111827">16&#45;word FIFO, IRQ17, DMA&#45;fed</text> <text text-anchor="middle" x="473" y="-219" font-family="Arial" font-size="10.00" fill="#111827">16&#45;word FIFO, IRQ17, DMA&#45;fed</text>
</g> </g>
<!-- dma&#45;&gt;ws2812 --> <!-- dma&#45;&gt;ws2812 -->
<g id="edge33" class="edge"> <g id="edge34" class="edge">
<title>dma&#45;&gt;ws2812</title> <title>dma&#45;&gt;ws2812</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" stroke-dasharray="5,2" d="M1495.6,-542.82C1531.87,-520.26 1591,-483.48 1591,-483.48 1591,-483.48 1676,-378 1676,-378 1676,-378 1752,-296 1752,-296 1752,-296 1762,-278 1762,-278 1762,-278 2256,-255 2256,-255 2256,-255 2258.58,-254.4 2262.88,-253.41"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" stroke-dasharray="5,2" d="M1294.75,-546.22C1180.73,-524.19 970,-483.48 970,-483.48 970,-483.48 647.98,-321.52 522.36,-258.33"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="2263.45,-255.79 2269.72,-251.83 2262.35,-251.02 2263.45,-255.79"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="523.16,-255.99 515.8,-255.03 520.96,-260.36 523.16,-255.99"/>
<text text-anchor="middle" x="1703.5" y="-380.6" font-family="Arial" font-size="8.00" fill="#374151">TXDATA writes</text> <text text-anchor="middle" x="799.5" y="-380.6" font-family="Arial" font-size="8.00" fill="#374151">TXDATA writes</text>
</g> </g>
<!-- fault --> <!-- fault -->
<g id="node12" class="node"> <g id="node12" class="node">
<title>fault</title> <title>fault</title>
<path fill="#fce7f3" stroke="#4b5563" stroke-width="1.1" d="M1565.5,-464.74C1565.5,-464.74 1456.5,-464.74 1456.5,-464.74 1450.5,-464.74 1444.5,-458.74 1444.5,-452.74 1444.5,-452.74 1444.5,-440.74 1444.5,-440.74 1444.5,-434.74 1450.5,-428.74 1456.5,-428.74 1456.5,-428.74 1565.5,-428.74 1565.5,-428.74 1571.5,-428.74 1577.5,-434.74 1577.5,-440.74 1577.5,-440.74 1577.5,-452.74 1577.5,-452.74 1577.5,-458.74 1571.5,-464.74 1565.5,-464.74"/> <path fill="#fce7f3" stroke="#4b5563" stroke-width="1.1" d="M1672.5,-464.74C1672.5,-464.74 1563.5,-464.74 1563.5,-464.74 1557.5,-464.74 1551.5,-458.74 1551.5,-452.74 1551.5,-452.74 1551.5,-440.74 1551.5,-440.74 1551.5,-434.74 1557.5,-428.74 1563.5,-428.74 1563.5,-428.74 1672.5,-428.74 1672.5,-428.74 1678.5,-428.74 1684.5,-434.74 1684.5,-440.74 1684.5,-440.74 1684.5,-452.74 1684.5,-452.74 1684.5,-458.74 1678.5,-464.74 1672.5,-464.74"/>
<text text-anchor="middle" x="1511" y="-449.74" font-family="Arial" font-size="10.00" fill="#111827">Error slave</text> <text text-anchor="middle" x="1618" y="-449.74" font-family="Arial" font-size="10.00" fill="#111827">Error slave</text>
<text text-anchor="middle" x="1511" y="-438.74" font-family="Arial" font-size="10.00" fill="#111827">access and protocol faults</text> <text text-anchor="middle" x="1618" y="-438.74" font-family="Arial" font-size="10.00" fill="#111827">access and protocol faults</text>
</g> </g>
<!-- fabric&#45;&gt;fault --> <!-- fabric&#45;&gt;fault -->
<g id="edge13" class="edge"> <g id="edge13" class="edge">
<title>fabric&#45;&gt;fault</title> <title>fabric&#45;&gt;fault</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1129.37,-478.99C1177.41,-492.66 1222.5,-505.48 1222.5,-505.48 1222.5,-505.48 1275.5,-505.48 1275.5,-505.48 1275.5,-505.48 1431,-483.48 1431,-483.48 1431,-483.48 1447.11,-476.08 1464.88,-467.93"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1282.37,-478.99C1330.41,-492.66 1375.5,-505.48 1375.5,-505.48 1375.5,-505.48 1428.5,-505.48 1428.5,-505.48 1428.5,-505.48 1538,-483.48 1538,-483.48 1538,-483.48 1554.11,-476.08 1571.88,-467.93"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1129.98,-476.62 1122.58,-477.06 1128.64,-481.33 1129.98,-476.62"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1282.98,-476.62 1275.58,-477.06 1281.64,-481.33 1282.98,-476.62"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1466.13,-470.05 1471.47,-464.9 1464.08,-465.59 1466.13,-470.05"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1573.13,-470.05 1578.47,-464.9 1571.08,-465.59 1573.13,-470.05"/>
<text text-anchor="middle" x="1249" y="-509.08" font-family="Arial" font-size="8.00" fill="#374151">invalid / denied</text> <text text-anchor="middle" x="1402" y="-509.08" font-family="Arial" font-size="8.00" fill="#374151">invalid / denied</text>
</g> </g>
<!-- sram --> <!-- sram -->
<g id="node13" class="node"> <g id="node13" class="node">
<title>sram</title> <title>sram</title>
<path fill="#fff3c9" stroke="#4b5563" stroke-width="1.1" d="M1405,-464.74C1405,-464.74 1307,-464.74 1307,-464.74 1301,-464.74 1295,-458.74 1295,-452.74 1295,-452.74 1295,-440.74 1295,-440.74 1295,-434.74 1301,-428.74 1307,-428.74 1307,-428.74 1405,-428.74 1405,-428.74 1411,-428.74 1417,-434.74 1417,-440.74 1417,-440.74 1417,-452.74 1417,-452.74 1417,-458.74 1411,-464.74 1405,-464.74"/> <path fill="#fff3c9" stroke="#4b5563" stroke-width="1.1" d="M1512,-464.74C1512,-464.74 1414,-464.74 1414,-464.74 1408,-464.74 1402,-458.74 1402,-452.74 1402,-452.74 1402,-440.74 1402,-440.74 1402,-434.74 1408,-428.74 1414,-428.74 1414,-428.74 1512,-428.74 1512,-428.74 1518,-428.74 1524,-434.74 1524,-440.74 1524,-440.74 1524,-452.74 1524,-452.74 1524,-458.74 1518,-464.74 1512,-464.74"/>
<text text-anchor="middle" x="1356" y="-449.74" font-family="Arial" font-size="10.00" fill="#111827">On&#45;chip SRAM</text> <text text-anchor="middle" x="1463" y="-449.74" font-family="Arial" font-size="10.00" fill="#111827">On&#45;chip SRAM</text>
<text text-anchor="middle" x="1356" y="-438.74" font-family="Arial" font-size="10.00" fill="#111827">optional RIB2RAM path</text> <text text-anchor="middle" x="1463" y="-438.74" font-family="Arial" font-size="10.00" fill="#111827">optional RIB2RAM path</text>
</g> </g>
<!-- fabric&#45;&gt;sram --> <!-- fabric&#45;&gt;sram -->
<g id="edge14" class="edge"> <g id="edge14" class="edge">
<title>fabric&#45;&gt;sram</title> <title>fabric&#45;&gt;sram</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1195.96,-446.74C1228.71,-446.74 1260.97,-446.74 1287.85,-446.74"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1348.91,-446.74C1364.95,-446.74 1380.44,-446.74 1394.56,-446.74"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1287.92,-449.19 1294.92,-446.74 1287.92,-444.29 1287.92,-449.19"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1394.81,-449.19 1401.81,-446.74 1394.81,-444.29 1394.81,-449.19"/>
<text text-anchor="middle" x="1245.31" y="-452.34" font-family="Arial" font-size="8.00" fill="#374151">RIB</text> <text text-anchor="middle" x="1375.31" y="-452.34" font-family="Arial" font-size="8.00" fill="#374151">RIB</text>
</g> </g>
<!-- ribp_adapter --> <!-- ribp_adapter -->
<g id="node14" class="node"> <g id="node14" class="node">
<title>ribp_adapter</title> <title>ribp_adapter</title>
<path fill="#e5e7eb" stroke="#4b5563" stroke-width="1.1" d="M1520.5,-355C1520.5,-355 1479.5,-355 1479.5,-355 1473.5,-355 1467.5,-349 1467.5,-343 1467.5,-343 1467.5,-331 1467.5,-331 1467.5,-325 1473.5,-319 1479.5,-319 1479.5,-319 1520.5,-319 1520.5,-319 1526.5,-319 1532.5,-325 1532.5,-331 1532.5,-331 1532.5,-343 1532.5,-343 1532.5,-349 1526.5,-355 1520.5,-355"/> <path fill="#e5e7eb" stroke="#4b5563" stroke-width="1.1" d="M1180.5,-355C1180.5,-355 1139.5,-355 1139.5,-355 1133.5,-355 1127.5,-349 1127.5,-343 1127.5,-343 1127.5,-331 1127.5,-331 1127.5,-325 1133.5,-319 1139.5,-319 1139.5,-319 1180.5,-319 1180.5,-319 1186.5,-319 1192.5,-325 1192.5,-331 1192.5,-331 1192.5,-343 1192.5,-343 1192.5,-349 1186.5,-355 1180.5,-355"/>
<text text-anchor="middle" x="1500" y="-334.5" font-family="Arial" font-size="10.00" fill="#111827">RIB2RIBP</text> <text text-anchor="middle" x="1160" y="-334.5" font-family="Arial" font-size="10.00" fill="#111827">RIB2RIBP</text>
</g> </g>
<!-- fabric&#45;&gt;ribp_adapter --> <!-- fabric&#45;&gt;ribp_adapter -->
<g id="edge15" class="edge"> <g id="edge15" class="edge">
<title>fabric&#45;&gt;ribp_adapter</title> <title>fabric&#45;&gt;ribp_adapter</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1114.41,-413.06C1166.58,-395.74 1220,-378 1220,-378 1220,-378 1382.8,-354.74 1460.12,-343.7"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1166,-409.87C1164.7,-394.27 1163.21,-376.39 1162.04,-362.38"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1460.75,-346.08 1467.33,-342.67 1460.06,-341.23 1460.75,-346.08"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1164.45,-361.79 1161.42,-355.02 1159.56,-362.2 1164.45,-361.79"/>
<text text-anchor="middle" x="1227" y="-380.6" font-family="Arial" font-size="8.00" fill="#374151">RIB</text> <text text-anchor="middle" x="1170" y="-380.6" font-family="Arial" font-size="8.00" fill="#374151">RIB</text>
</g> </g>
<!-- apb_adapter --> <!-- apb_adapter -->
<g id="node15" class="node"> <g id="node15" class="node">
<title>apb_adapter</title> <title>apb_adapter</title>
<path fill="#e5e7eb" stroke="#4b5563" stroke-width="1.1" d="M965,-355C965,-355 895,-355 895,-355 889,-355 883,-349 883,-343 883,-343 883,-331 883,-331 883,-325 889,-319 895,-319 895,-319 965,-319 965,-319 971,-319 977,-325 977,-331 977,-331 977,-343 977,-343 977,-349 971,-355 965,-355"/> <path fill="#e5e7eb" stroke="#4b5563" stroke-width="1.1" d="M2420,-355C2420,-355 2350,-355 2350,-355 2344,-355 2338,-349 2338,-343 2338,-343 2338,-331 2338,-331 2338,-325 2344,-319 2350,-319 2350,-319 2420,-319 2420,-319 2426,-319 2432,-325 2432,-331 2432,-331 2432,-343 2432,-343 2432,-349 2426,-355 2420,-355"/>
<text text-anchor="middle" x="930" y="-340" font-family="Arial" font-size="10.00" fill="#111827">RIB2APB</text> <text text-anchor="middle" x="2385" y="-340" font-family="Arial" font-size="10.00" fill="#111827">RIB2APB</text>
<text text-anchor="middle" x="930" y="-329" font-family="Arial" font-size="10.00" fill="#111827">direct APB bridge</text> <text text-anchor="middle" x="2385" y="-329" font-family="Arial" font-size="10.00" fill="#111827">direct APB bridge</text>
</g> </g>
<!-- fabric&#45;&gt;apb_adapter --> <!-- fabric&#45;&gt;apb_adapter -->
<g id="edge16" class="edge"> <g id="edge16" class="edge">
<title>fabric&#45;&gt;apb_adapter</title> <title>fabric&#45;&gt;apb_adapter</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M987.36,-409.87C974.45,-393.69 959.59,-375.07 948.23,-360.83"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1296.34,-425.05C1344.99,-417.15 1389,-410 1389,-410 1389,-410 1666,-378 1666,-378 1666,-378 2162.98,-350.35 2330.57,-341.03"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="949.87,-358.96 943.59,-355.02 946.04,-362.02 949.87,-358.96"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="2330.97,-343.46 2337.82,-340.62 2330.7,-338.57 2330.97,-343.46"/>
<text text-anchor="middle" x="974" y="-380.6" font-family="Arial" font-size="8.00" fill="#374151">RIB</text> <text text-anchor="middle" x="1673" y="-380.6" font-family="Arial" font-size="8.00" fill="#374151">RIB</text>
</g> </g>
<!-- sysctrl --> <!-- sysctrl -->
<g id="node16" class="node"> <g id="node16" class="node">
<title>sysctrl</title> <title>sysctrl</title>
<path fill="#f9e1e7" stroke="#4b5563" stroke-width="1.1" d="M1475.5,-255C1475.5,-255 1312.5,-255 1312.5,-255 1306.5,-255 1300.5,-249 1300.5,-243 1300.5,-243 1300.5,-222 1300.5,-222 1300.5,-216 1306.5,-210 1312.5,-210 1312.5,-210 1475.5,-210 1475.5,-210 1481.5,-210 1487.5,-216 1487.5,-222 1487.5,-222 1487.5,-243 1487.5,-243 1487.5,-249 1481.5,-255 1475.5,-255"/> <path fill="#f9e1e7" stroke="#4b5563" stroke-width="1.1" d="M2114.5,-255C2114.5,-255 1951.5,-255 1951.5,-255 1945.5,-255 1939.5,-249 1939.5,-243 1939.5,-243 1939.5,-222 1939.5,-222 1939.5,-216 1945.5,-210 1951.5,-210 1951.5,-210 2114.5,-210 2114.5,-210 2120.5,-210 2126.5,-216 2126.5,-222 2126.5,-222 2126.5,-243 2126.5,-243 2126.5,-249 2120.5,-255 2114.5,-255"/>
<text text-anchor="middle" x="1394" y="-241" font-family="Arial" font-size="10.00" fill="#111827">SYSCTRL</text> <text text-anchor="middle" x="2033" y="-241" font-family="Arial" font-size="10.00" fill="#111827">SYSCTRL</text>
<text text-anchor="middle" x="1394" y="-230" font-family="Arial" font-size="10.00" fill="#111827">PLL, user&#45;core select/reset/bus enable</text> <text text-anchor="middle" x="2033" y="-230" font-family="Arial" font-size="10.00" fill="#111827">PLL, user&#45;core select/reset/bus enable</text>
<text text-anchor="middle" x="1394" y="-219" font-family="Arial" font-size="10.00" fill="#111827">fault and performance control</text> <text text-anchor="middle" x="2033" y="-219" font-family="Arial" font-size="10.00" fill="#111827">fault and performance control</text>
</g> </g>
<!-- ribp_adapter&#45;&gt;sysctrl --> <!-- ribp_adapter&#45;&gt;sysctrl -->
<g id="edge17" class="edge"> <g id="edge17" class="edge">
<title>ribp_adapter&#45;&gt;sysctrl</title> <title>ribp_adapter&#45;&gt;sysctrl</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1477.65,-318.8C1463.55,-307.96 1448,-296 1448,-296 1448,-296 1432.02,-277.51 1417.45,-260.64"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1192.91,-332.52C1339.53,-317.02 1926,-255 1926,-255 1926,-255 1928.31,-254.54 1932.25,-253.74"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1419.01,-258.7 1412.58,-255.01 1415.31,-261.91 1419.01,-258.7"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1932.74,-256.14 1939.12,-252.36 1931.77,-251.34 1932.74,-256.14"/>
<text text-anchor="middle" x="1457.5" y="-285.1" font-family="Arial" font-size="8.00" fill="#374151">RIBP</text> <text text-anchor="middle" x="1708.5" y="-285.1" font-family="Arial" font-size="8.00" fill="#374151">RIBP</text>
</g> </g>
<!-- ribp_adapter&#45;&gt;clint --> <!-- ribp_adapter&#45;&gt;clint -->
<g id="edge18" class="edge"> <g id="edge18" class="edge">
<title>ribp_adapter&#45;&gt;clint</title> <title>ribp_adapter&#45;&gt;clint</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1467.47,-334.23C1325.22,-326.49 765,-296 765,-296 765,-296 554,-255 554,-255 554,-255 551.14,-254.29 546.46,-253.14"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1127.41,-323.94C1083.5,-307.69 1004.37,-278.41 948.04,-257.57"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="547.02,-250.75 539.63,-251.45 545.84,-255.51 547.02,-250.75"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="948.71,-255.2 941.29,-255.07 947.01,-259.8 948.71,-255.2"/>
<text text-anchor="middle" x="774.5" y="-285.1" font-family="Arial" font-size="8.00" fill="#374151">RIBP</text> <text text-anchor="middle" x="1055.5" y="-285.1" font-family="Arial" font-size="8.00" fill="#374151">RIBP</text>
</g> </g>
<!-- ribp_targets --> <!-- ribp_targets -->
<g id="node18" class="node"> <g id="node18" class="node">
<title>ribp_targets</title> <title>ribp_targets</title>
<path fill="#f9e1e7" stroke="#4b5563" stroke-width="1.1" d="M2230.5,-255C2230.5,-255 2025.5,-255 2025.5,-255 2019.5,-255 2013.5,-249 2013.5,-243 2013.5,-243 2013.5,-222 2013.5,-222 2013.5,-216 2019.5,-210 2025.5,-210 2025.5,-210 2230.5,-210 2230.5,-210 2236.5,-210 2242.5,-216 2242.5,-222 2242.5,-222 2242.5,-243 2242.5,-243 2242.5,-249 2236.5,-255 2230.5,-255"/> <path fill="#f9e1e7" stroke="#4b5563" stroke-width="1.1" d="M1900.5,-255C1900.5,-255 1695.5,-255 1695.5,-255 1689.5,-255 1683.5,-249 1683.5,-243 1683.5,-243 1683.5,-222 1683.5,-222 1683.5,-216 1689.5,-210 1695.5,-210 1695.5,-210 1900.5,-210 1900.5,-210 1906.5,-210 1912.5,-216 1912.5,-222 1912.5,-222 1912.5,-243 1912.5,-243 1912.5,-249 1906.5,-255 1900.5,-255"/>
<text text-anchor="middle" x="2128" y="-241" font-family="Arial" font-size="10.00" fill="#111827">RIBP target wrapper</text> <text text-anchor="middle" x="1798" y="-241" font-family="Arial" font-size="10.00" fill="#111827">RIBP target wrapper</text>
<text text-anchor="middle" x="2128" y="-230" font-family="Arial" font-size="10.00" fill="#111827">XPI/Flash, SDRAM, PSRAM, SPI&#45;SD and DVP</text> <text text-anchor="middle" x="1798" y="-230" font-family="Arial" font-size="10.00" fill="#111827">XPI/Flash, SDRAM, PSRAM, SPI&#45;SD and DVP</text>
<text text-anchor="middle" x="2128" y="-219" font-family="Arial" font-size="10.00" fill="#111827">I2S</text> <text text-anchor="middle" x="1798" y="-219" font-family="Arial" font-size="10.00" fill="#111827">I2S</text>
</g> </g>
<!-- ribp_adapter&#45;&gt;ribp_targets --> <!-- ribp_adapter&#45;&gt;ribp_targets -->
<g id="edge19" class="edge"> <g id="edge19" class="edge">
<title>ribp_adapter&#45;&gt;ribp_targets</title> <title>ribp_adapter&#45;&gt;ribp_targets</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1532.69,-321.78C1559.14,-310.29 1592,-296 1592,-296 1592,-296 1622,-278 1622,-278 1622,-278 1935,-255 1935,-255 1935,-255 1967.59,-251.37 2005.99,-247.09"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1192.58,-326.82C1234.5,-315.01 1302,-296 1302,-296 1302,-296 1332,-278 1332,-278 1332,-278 1670,-255 1670,-255 1670,-255 1672.29,-254.61 1676.27,-253.95"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="2006.54,-249.5 2013.22,-246.29 2005.99,-244.63 2006.54,-249.5"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1676.72,-256.36 1683.22,-252.78 1675.91,-251.52 1676.72,-256.36"/>
<text text-anchor="middle" x="1631.5" y="-285.1" font-family="Arial" font-size="8.00" fill="#374151">RIBP</text> <text text-anchor="middle" x="1341.5" y="-285.1" font-family="Arial" font-size="8.00" fill="#374151">RIBP</text>
</g> </g>
<!-- ribp_adapter&#45;&gt;uart0 --> <!-- ribp_adapter&#45;&gt;uart0 -->
<g id="edge20" class="edge"> <g id="edge20" class="edge">
<title>ribp_adapter&#45;&gt;uart0</title> <title>ribp_adapter&#45;&gt;uart0</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1532.74,-329.48C1589.7,-318.15 1701,-296 1701,-296 1701,-296 1738,-278 1738,-278 1738,-278 2442,-255 2442,-255 2442,-255 2444.16,-254.56 2447.87,-253.8"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1192.6,-321.67C1218.71,-310.19 1251,-296 1251,-296 1251,-296 1281,-278 1281,-278 1281,-278 1458,-255 1458,-255 1458,-255 1460.57,-254.48 1464.91,-253.6"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="2448.51,-256.17 2454.88,-252.36 2447.53,-251.37 2448.51,-256.17"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1465.48,-255.98 1471.86,-252.19 1464.51,-251.18 1465.48,-255.98"/>
<text text-anchor="middle" x="1747.5" y="-285.1" font-family="Arial" font-size="8.00" fill="#374151">RIBP</text> <text text-anchor="middle" x="1290.5" y="-285.1" font-family="Arial" font-size="8.00" fill="#374151">RIBP</text>
</g> </g>
<!-- ribp_adapter&#45;&gt;i2c_controllers --> <!-- ribp_adapter&#45;&gt;i2c_controllers -->
<g id="edge21" class="edge"> <g id="edge21" class="edge">
<title>ribp_adapter&#45;&gt;i2c_controllers</title> <title>ribp_adapter&#45;&gt;i2c_controllers</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1467.26,-329.48C1410.3,-318.15 1299,-296 1299,-296 1299,-296 1269,-278 1269,-278 1269,-278 1247.29,-268.34 1224.1,-258.02"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1159.57,-318.8C1159.3,-307.96 1159,-296 1159,-296 1159,-296 1159,-278 1159,-278 1159,-278 1201.54,-267.54 1245.38,-256.76"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1224.93,-255.71 1217.54,-255.1 1222.93,-260.18 1224.93,-255.71"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1246.2,-259.08 1252.42,-255.03 1245.03,-254.33 1246.2,-259.08"/>
<text text-anchor="middle" x="1308.5" y="-285.1" font-family="Arial" font-size="8.00" fill="#374151">RIBP</text> <text text-anchor="middle" x="1168.5" y="-285.1" font-family="Arial" font-size="8.00" fill="#374151">RIBP</text>
</g> </g>
<!-- gpio_controller --> <!-- gpio_controller -->
<g id="node21" class="node"> <g id="node21" class="node">
<title>gpio_controller</title> <title>gpio_controller</title>
<path fill="#f9e1e7" stroke="#4b5563" stroke-width="1.1" d="M1909,-255C1909,-255 1759,-255 1759,-255 1753,-255 1747,-249 1747,-243 1747,-243 1747,-222 1747,-222 1747,-216 1753,-210 1759,-210 1759,-210 1909,-210 1909,-210 1915,-210 1921,-216 1921,-222 1921,-222 1921,-243 1921,-243 1921,-249 1915,-255 1909,-255"/> <path fill="#f9e1e7" stroke="#4b5563" stroke-width="1.1" d="M1145,-255C1145,-255 995,-255 995,-255 989,-255 983,-249 983,-243 983,-243 983,-222 983,-222 983,-216 989,-210 995,-210 995,-210 1145,-210 1145,-210 1151,-210 1157,-216 1157,-222 1157,-222 1157,-243 1157,-243 1157,-249 1151,-255 1145,-255"/>
<text text-anchor="middle" x="1834" y="-241" font-family="Arial" font-size="10.00" fill="#111827">GPIO V2</text> <text text-anchor="middle" x="1070" y="-241" font-family="Arial" font-size="10.00" fill="#111827">GPIO V2</text>
<text text-anchor="middle" x="1834" y="-230" font-family="Arial" font-size="10.00" fill="#111827">user + management RIBP windows</text> <text text-anchor="middle" x="1070" y="-230" font-family="Arial" font-size="10.00" fill="#111827">user + management RIBP windows</text>
<text text-anchor="middle" x="1834" y="-219" font-family="Arial" font-size="10.00" fill="#111827">atomic I/O, filter, locks, IRQ18</text> <text text-anchor="middle" x="1070" y="-219" font-family="Arial" font-size="10.00" fill="#111827">atomic I/O, filter, locks, IRQ18</text>
</g> </g>
<!-- ribp_adapter&#45;&gt;gpio_controller --> <!-- ribp_adapter&#45;&gt;gpio_controller -->
<g id="edge22" class="edge"> <g id="edge22" class="edge">
<title>ribp_adapter&#45;&gt;gpio_controller</title> <title>ribp_adapter&#45;&gt;gpio_controller</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1514.73,-318.91C1529.48,-301.8 1550,-278 1550,-278 1550,-278 1733,-255 1733,-255 1733,-255 1735.42,-254.48 1739.52,-253.61"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1128.62,-318.8C1108.83,-307.96 1087,-296 1087,-296 1087,-296 1082.23,-278.46 1077.74,-261.96"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1740.28,-255.95 1746.62,-252.1 1739.26,-251.16 1740.28,-255.95"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1080.05,-261.12 1075.85,-255.01 1075.32,-262.41 1080.05,-261.12"/>
<text text-anchor="middle" x="1570" y="-289.6" font-family="Arial" font-size="8.00" fill="#374151">RIBP</text> <text text-anchor="middle" x="1107" y="-289.6" font-family="Arial" font-size="8.00" fill="#374151">RIBP</text>
<text text-anchor="middle" x="1570" y="-280.6" font-family="Arial" font-size="8.00" fill="#374151">user/admin</text> <text text-anchor="middle" x="1107" y="-280.6" font-family="Arial" font-size="8.00" fill="#374151">user/admin</text>
</g> </g>
<!-- ribp_adapter&#45;&gt;timers --> <!-- ribp_adapter&#45;&gt;timers -->
<g id="edge23" class="edge"> <g id="edge23" class="edge">
<title>ribp_adapter&#45;&gt;timers</title> <title>ribp_adapter&#45;&gt;timers</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1499.57,-318.8C1499.3,-307.96 1499,-296 1499,-296 1499,-296 1499,-278 1499,-278 1499,-278 1525.28,-268.09 1553.04,-257.62"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1127.45,-329.04C1059.05,-314.4 897.71,-279.87 788.91,-256.59"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1554.04,-259.86 1559.73,-255.1 1552.31,-255.28 1554.04,-259.86"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="789.18,-254.14 781.82,-255.07 788.15,-258.93 789.18,-254.14"/>
<text text-anchor="middle" x="1508.5" y="-285.1" font-family="Arial" font-size="8.00" fill="#374151">RIBP</text> <text text-anchor="middle" x="972.5" y="-285.1" font-family="Arial" font-size="8.00" fill="#374151">RIBP</text>
</g> </g>
<!-- ribp_adapter&#45;&gt;ws2812 --> <!-- ribp_adapter&#45;&gt;ws2812 -->
<g id="edge24" class="edge"> <g id="edge24" class="edge">
<title>ribp_adapter&#45;&gt;ws2812</title> <title>ribp_adapter&#45;&gt;ws2812</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1532.81,-326.82C1575.03,-315.01 1643,-296 1643,-296 1643,-296 1680,-278 1680,-278 1680,-278 2256,-255 2256,-255 2256,-255 2258.58,-254.4 2262.88,-253.41"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1127.41,-331.57C1050.87,-321.15 866,-296 866,-296 866,-296 565,-255 565,-255 565,-255 562.82,-254.49 559.14,-253.63"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="2263.45,-255.79 2269.72,-251.83 2262.35,-251.02 2263.45,-255.79"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="559.58,-251.22 552.21,-252.01 558.47,-255.99 559.58,-251.22"/>
<text text-anchor="middle" x="1689.5" y="-285.1" font-family="Arial" font-size="8.00" fill="#374151">RIBP</text> <text text-anchor="middle" x="875.5" y="-285.1" font-family="Arial" font-size="8.00" fill="#374151">RIBP</text>
</g> </g>
<!-- apb_targets --> <!-- apb_targets -->
<g id="node24" class="node"> <g id="node24" class="node">
<title>apb_targets</title> <title>apb_targets</title>
<path fill="#e6f4ea" stroke="#4b5563" stroke-width="1.1" d="M1025.5,-255C1025.5,-255 834.5,-255 834.5,-255 828.5,-255 822.5,-249 822.5,-243 822.5,-243 822.5,-222 822.5,-222 822.5,-216 828.5,-210 834.5,-210 834.5,-210 1025.5,-210 1025.5,-210 1031.5,-210 1037.5,-216 1037.5,-222 1037.5,-222 1037.5,-243 1037.5,-243 1037.5,-249 1031.5,-255 1025.5,-255"/> <path fill="#e6f4ea" stroke="#4b5563" stroke-width="1.1" d="M2356.5,-255C2356.5,-255 2165.5,-255 2165.5,-255 2159.5,-255 2153.5,-249 2153.5,-243 2153.5,-243 2153.5,-222 2153.5,-222 2153.5,-216 2159.5,-210 2165.5,-210 2165.5,-210 2356.5,-210 2356.5,-210 2362.5,-210 2368.5,-216 2368.5,-222 2368.5,-222 2368.5,-243 2368.5,-243 2368.5,-249 2362.5,-255 2356.5,-255"/>
<text text-anchor="middle" x="930" y="-241" font-family="Arial" font-size="10.00" fill="#111827">APB target wrapper</text> <text text-anchor="middle" x="2261" y="-241" font-family="Arial" font-size="10.00" fill="#111827">APB target wrapper</text>
<text text-anchor="middle" x="930" y="-230" font-family="Arial" font-size="10.00" fill="#111827">RNG, UART1, PWM, PS/2, RTC</text> <text text-anchor="middle" x="2261" y="-230" font-family="Arial" font-size="10.00" fill="#111827">UART1, PWM, PS/2, RTC</text>
<text text-anchor="middle" x="930" y="-219" font-family="Arial" font-size="10.00" fill="#111827">watchdog, CRC, advanced timer and user IP</text> <text text-anchor="middle" x="2261" y="-219" font-family="Arial" font-size="10.00" fill="#111827">watchdog, CRC, advanced timer and user IP</text>
</g> </g>
<!-- apb_adapter&#45;&gt;apb_targets --> <!-- apb_adapter&#45;&gt;apb_targets -->
<g id="edge26" class="edge"> <g id="edge27" class="edge">
<title>apb_adapter&#45;&gt;apb_targets</title> <title>apb_adapter&#45;&gt;apb_targets</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M930,-318.61C930,-303.32 930,-280.75 930,-262.69"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M2364.25,-318.84C2344.8,-302.77 2315.44,-278.5 2292.99,-259.95"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="932.45,-262.26 930,-255.26 927.55,-262.26 932.45,-262.26"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="2294.4,-257.93 2287.45,-255.36 2291.28,-261.71 2294.4,-257.93"/>
<text text-anchor="middle" x="938" y="-285.1" font-family="Arial" font-size="8.00" fill="#374151">APB</text> <text text-anchor="middle" x="2342" y="-285.1" font-family="Arial" font-size="8.00" fill="#374151">APB</text>
</g> </g>
<!-- archinfo --> <!-- archinfo -->
<g id="node25" class="node"> <g id="node25" class="node">
<title>archinfo</title> <title>archinfo</title>
<path fill="#e6f4ea" stroke="#4b5563" stroke-width="1.1" d="M783,-255C783,-255 579,-255 579,-255 573,-255 567,-249 567,-243 567,-243 567,-222 567,-222 567,-216 573,-210 579,-210 579,-210 783,-210 783,-210 789,-210 795,-216 795,-222 795,-222 795,-243 795,-243 795,-249 789,-255 783,-255"/> <path fill="#e6f4ea" stroke="#4b5563" stroke-width="1.1" d="M2612,-255C2612,-255 2408,-255 2408,-255 2402,-255 2396,-249 2396,-243 2396,-243 2396,-222 2396,-222 2396,-216 2402,-210 2408,-210 2408,-210 2612,-210 2612,-210 2618,-210 2624,-216 2624,-222 2624,-222 2624,-243 2624,-243 2624,-249 2618,-255 2612,-255"/>
<text text-anchor="middle" x="681" y="-241" font-family="Arial" font-size="10.00" fill="#111827">ARCHINFO V2</text> <text text-anchor="middle" x="2510" y="-241" font-family="Arial" font-size="10.00" fill="#111827">ARCHINFO V2</text>
<text text-anchor="middle" x="681" y="-230" font-family="Arial" font-size="10.00" fill="#111827">read&#45;only build, topology and technology identity</text> <text text-anchor="middle" x="2510" y="-230" font-family="Arial" font-size="10.00" fill="#111827">read&#45;only build, topology and technology identity</text>
<text text-anchor="middle" x="681" y="-219" font-family="Arial" font-size="10.00" fill="#111827">lifecycle&#45;gated 128&#45;bit device ID</text> <text text-anchor="middle" x="2510" y="-219" font-family="Arial" font-size="10.00" fill="#111827">lifecycle&#45;gated 128&#45;bit device ID</text>
</g> </g>
<!-- apb_adapter&#45;&gt;archinfo --> <!-- apb_adapter&#45;&gt;archinfo -->
<g id="edge25" class="edge"> <g id="edge25" class="edge">
<title>apb_adapter&#45;&gt;archinfo</title> <title>apb_adapter&#45;&gt;archinfo</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M888.6,-318.96C848.01,-302.25 785.71,-276.61 739.95,-257.77"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M2405.92,-318.84C2425.53,-302.77 2455.12,-278.5 2477.75,-259.95"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="740.73,-255.44 733.32,-255.04 738.86,-259.97 740.73,-255.44"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="2479.48,-261.69 2483.34,-255.36 2476.37,-257.9 2479.48,-261.69"/>
<text text-anchor="middle" x="835" y="-285.1" font-family="Arial" font-size="8.00" fill="#374151">APB</text> <text text-anchor="middle" x="2462" y="-285.1" font-family="Arial" font-size="8.00" fill="#374151">APB</text>
</g>
<!-- rng -->
<g id="node26" class="node">
<title>rng</title>
<path fill="#e6f4ea" stroke="#4b5563" stroke-width="1.1" d="M2877,-255C2877,-255 2663,-255 2663,-255 2657,-255 2651,-249 2651,-243 2651,-243 2651,-222 2651,-222 2651,-216 2657,-210 2663,-210 2663,-210 2877,-210 2877,-210 2883,-210 2889,-216 2889,-222 2889,-222 2889,-243 2889,-243 2889,-249 2883,-255 2877,-255"/>
<text text-anchor="middle" x="2770" y="-241" font-family="Arial" font-size="10.00" fill="#111827">RNG V2 entropy controller</text>
<text text-anchor="middle" x="2770" y="-230" font-family="Arial" font-size="10.00" fill="#111827">8&#45;word FIFO, fail&#45;closed monitoring, IRQ16</text>
<text text-anchor="middle" x="2770" y="-219" font-family="Arial" font-size="10.00" fill="#111827">management&#45;only, deterministic source unqualified</text>
</g>
<!-- apb_adapter&#45;&gt;rng -->
<g id="edge26" class="edge">
<title>apb_adapter&#45;&gt;rng</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M2432.21,-323.43C2494.29,-306.9 2604.56,-277.54 2682.19,-256.88"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="2683,-259.2 2689.13,-255.03 2681.74,-254.46 2683,-259.2"/>
<text text-anchor="middle" x="2608" y="-285.1" font-family="Arial" font-size="8.00" fill="#374151">APB</text>
</g> </g>
<!-- irq --> <!-- irq -->
<g id="node27" class="node"> <g id="node28" class="node">
<title>irq</title> <title>irq</title>
<path fill="#fce7f3" stroke="#4b5563" stroke-width="1.1" d="M1765,-155C1765,-155 1559,-155 1559,-155 1553,-155 1547,-149 1547,-143 1547,-143 1547,-131 1547,-131 1547,-125 1553,-119 1559,-119 1559,-119 1765,-119 1765,-119 1771,-119 1777,-125 1777,-131 1777,-131 1777,-143 1777,-143 1777,-149 1771,-155 1765,-155"/> <path fill="#fce7f3" stroke="#4b5563" stroke-width="1.1" d="M1226,-155C1226,-155 1020,-155 1020,-155 1014,-155 1008,-149 1008,-143 1008,-143 1008,-131 1008,-131 1008,-125 1014,-119 1020,-119 1020,-119 1226,-119 1226,-119 1232,-119 1238,-125 1238,-131 1238,-131 1238,-143 1238,-143 1238,-149 1232,-155 1226,-155"/>
<text text-anchor="middle" x="1662" y="-140" font-family="Arial" font-size="10.00" fill="#111827">Interrupt aggregation</text> <text text-anchor="middle" x="1123" y="-140" font-family="Arial" font-size="10.00" fill="#111827">Interrupt aggregation</text>
<text text-anchor="middle" x="1662" y="-129" font-family="Arial" font-size="10.00" fill="#111827">RIBP and APB target IRQs to management core</text> <text text-anchor="middle" x="1123" y="-129" font-family="Arial" font-size="10.00" fill="#111827">RIBP and APB target IRQs to management core</text>
</g> </g>
<!-- clint&#45;&gt;irq --> <!-- clint&#45;&gt;irq -->
<g id="edge31" class="edge"> <g id="edge32" class="edge">
<title>clint&#45;&gt;irq</title> <title>clint&#45;&gt;irq</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M539.63,-213.55C548.22,-211.43 554,-210 554,-210 554,-210 1251.48,-164.68 1539.67,-145.95"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M935.5,-209.89C971.58,-195.05 1013,-178 1013,-178 1013,-178 1041.4,-167.67 1069.34,-157.51"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1539.99,-148.38 1546.82,-145.48 1539.68,-143.49 1539.99,-148.38"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1070.29,-159.77 1076.03,-155.08 1068.62,-155.17 1070.29,-159.77"/>
<text text-anchor="middle" x="1079.5" y="-180.6" font-family="Arial" font-size="8.00" fill="#374151">machine IRQ0 / IRQ1</text> <text text-anchor="middle" x="1051.5" y="-180.6" font-family="Arial" font-size="8.00" fill="#374151">machine IRQ0 / IRQ1</text>
</g> </g>
<!-- ribp_targets&#45;&gt;ext_io --> <!-- ribp_targets&#45;&gt;ext_io -->
<g id="edge41" class="edge"> <g id="edge43" class="edge">
<title>ribp_targets&#45;&gt;ext_io</title> <title>ribp_targets&#45;&gt;ext_io</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M2162.16,-205.29C2174.75,-195.63 2186,-187 2186,-187 2186,-187 2195.65,-99.32 2200.82,-52.38"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1767.9,-204.74C1722.81,-164.66 1638.27,-89.52 1593.52,-49.74"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="2160.38,-203.57 2156.32,-209.77 2163.37,-207.45 2160.38,-203.57"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1766.54,-206.81 1773.4,-209.63 1769.8,-203.15 1766.54,-206.81"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="2203.28,-52.44 2201.61,-45.21 2198.41,-51.9 2203.28,-52.44"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1595.13,-47.89 1588.27,-45.07 1591.87,-51.56 1595.13,-47.89"/>
<text text-anchor="middle" x="2227" y="-135.1" font-family="Arial" font-size="8.00" fill="#374151">device interfaces</text> <text text-anchor="middle" x="1741" y="-135.1" font-family="Arial" font-size="8.00" fill="#374151">device interfaces</text>
</g> </g>
<!-- ribp_targets&#45;&gt;gpio_controller --> <!-- ribp_targets&#45;&gt;gpio_controller -->
<g id="edge27" class="edge"> <g id="edge28" class="edge">
<title>ribp_targets&#45;&gt;gpio_controller</title> <title>ribp_targets&#45;&gt;gpio_controller</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M2013.39,-232.5C1985.19,-232.5 1955.32,-232.5 1928.21,-232.5"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1683.22,-252.68C1675.08,-254.11 1670,-255 1670,-255 1670,-255 1250,-282.5 1250,-282.5 1250,-282.5 1184,-282.5 1184,-282.5 1184,-282.5 1156.22,-270.32 1128.09,-257.98"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1928.02,-230.05 1921.02,-232.5 1928.02,-234.95 1928.02,-230.05"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1128.73,-255.58 1121.33,-255.01 1126.76,-260.07 1128.73,-255.58"/>
<text text-anchor="middle" x="1967.25" y="-238.1" font-family="Arial" font-size="8.00" fill="#374151">alternate functions</text> <text text-anchor="middle" x="1217" y="-285.1" font-family="Arial" font-size="8.00" fill="#374151">alternate functions</text>
</g> </g>
<!-- uart0&#45;&gt;ext_io --> <!-- uart0&#45;&gt;ext_io -->
<g id="edge42" class="edge"> <g id="edge44" class="edge">
<title>uart0&#45;&gt;ext_io</title> <title>uart0&#45;&gt;ext_io</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M2504.87,-205.95C2438.83,-165.91 2311.69,-88.81 2245.83,-48.87"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1564,-202.41C1564,-162.61 1564,-91.61 1564,-52.07"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="2504.01,-208.29 2511.26,-209.83 2506.55,-204.1 2504.01,-208.29"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1561.55,-202.63 1564,-209.63 1566.45,-202.63 1561.55,-202.63"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="2246.91,-46.66 2239.66,-45.12 2244.37,-50.85 2246.91,-46.66"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1566.45,-52.07 1564,-45.07 1561.55,-52.07 1566.45,-52.07"/>
<text text-anchor="middle" x="2441" y="-135.1" font-family="Arial" font-size="8.00" fill="#374151">UART pads</text> <text text-anchor="middle" x="1585" y="-135.1" font-family="Arial" font-size="8.00" fill="#374151">UART pads</text>
</g> </g>
<!-- uart0&#45;&gt;irq --> <!-- uart0&#45;&gt;irq -->
<g id="edge36" class="edge"> <g id="edge37" class="edge">
<title>uart0&#45;&gt;irq</title> <title>uart0&#45;&gt;irq</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M2454.88,-212.64C2447.02,-211.03 2442,-210 2442,-210 2442,-210 2130,-178 2130,-178 2130,-178 1923.12,-160.32 1784.46,-148.47"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1471.82,-211.96C1394.89,-195.65 1286,-172.56 1210.43,-156.54"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1784.27,-145.99 1777.09,-147.84 1783.85,-150.87 1784.27,-145.99"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1210.58,-154.06 1203.22,-155.01 1209.56,-158.86 1210.58,-154.06"/>
<text text-anchor="middle" x="2222.5" y="-180.6" font-family="Arial" font-size="8.00" fill="#374151">IRQ2</text> <text text-anchor="middle" x="1352.5" y="-180.6" font-family="Arial" font-size="8.00" fill="#374151">IRQ2</text>
</g> </g>
<!-- i2c_controllers&#45;&gt;gpio_controller --> <!-- i2c_controllers&#45;&gt;gpio_controller -->
<g id="edge37" class="edge"> <g id="edge38" class="edge">
<title>i2c_controllers&#45;&gt;gpio_controller</title> <title>i2c_controllers&#45;&gt;gpio_controller</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1250.14,-255.06C1304.06,-270.05 1365,-287 1365,-287 1365,-287 1417,-287 1417,-287 1417,-287 1733,-255 1733,-255 1733,-255 1735.42,-254.46 1739.52,-253.55"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1235.1,-232.5C1211.78,-232.5 1187.19,-232.5 1164.33,-232.5"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1740.32,-255.88 1746.62,-251.97 1739.26,-251.1 1740.32,-255.88"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1164.29,-230.05 1157.29,-232.5 1164.29,-234.95 1164.29,-230.05"/>
<text text-anchor="middle" x="1391" y="-289.6" font-family="Arial" font-size="8.00" fill="#374151">GPIO3/4 ALT1</text> <text text-anchor="middle" x="1196.25" y="-247.1" font-family="Arial" font-size="8.00" fill="#374151">GPIO3/4 ALT1</text>
<text text-anchor="middle" x="1391" y="-280.6" font-family="Arial" font-size="8.00" fill="#374151">GPIO7/8 ALT0</text> <text text-anchor="middle" x="1196.25" y="-238.1" font-family="Arial" font-size="8.00" fill="#374151">GPIO7/8 ALT0</text>
</g> </g>
<!-- i2c_controllers&#45;&gt;irq --> <!-- i2c_controllers&#45;&gt;irq -->
<g id="edge39" class="edge"> <g id="edge40" class="edge">
<title>i2c_controllers&#45;&gt;irq</title> <title>i2c_controllers&#45;&gt;irq</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1273.55,-211.67C1359.74,-195.33 1481.05,-172.32 1565.07,-156.38"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1289.94,-209.93C1253.53,-194.24 1204.61,-173.16 1169.14,-157.88"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1565.65,-158.77 1572.07,-155.06 1564.73,-153.95 1565.65,-158.77"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1170.08,-155.62 1162.68,-155.1 1168.14,-160.12 1170.08,-155.62"/>
<text text-anchor="middle" x="1469.5" y="-180.6" font-family="Arial" font-size="8.00" fill="#374151">IRQ7 / IRQ19</text> <text text-anchor="middle" x="1255.5" y="-180.6" font-family="Arial" font-size="8.00" fill="#374151">IRQ7 / IRQ19</text>
</g> </g>
<!-- gpio_bridge --> <!-- gpio_bridge -->
<g id="node26" class="node"> <g id="node27" class="node">
<title>gpio_bridge</title> <title>gpio_bridge</title>
<path fill="#e5e7eb" stroke="#4b5563" stroke-width="1.1" d="M2137.5,-155C2137.5,-155 2002.5,-155 2002.5,-155 1996.5,-155 1990.5,-149 1990.5,-143 1990.5,-143 1990.5,-131 1990.5,-131 1990.5,-125 1996.5,-119 2002.5,-119 2002.5,-119 2137.5,-119 2137.5,-119 2143.5,-119 2149.5,-125 2149.5,-131 2149.5,-131 2149.5,-143 2149.5,-143 2149.5,-149 2143.5,-155 2137.5,-155"/> <path fill="#e5e7eb" stroke="#4b5563" stroke-width="1.1" d="M932.5,-155C932.5,-155 797.5,-155 797.5,-155 791.5,-155 785.5,-149 785.5,-143 785.5,-143 785.5,-131 785.5,-131 785.5,-125 791.5,-119 797.5,-119 797.5,-119 932.5,-119 932.5,-119 938.5,-119 944.5,-125 944.5,-131 944.5,-131 944.5,-143 944.5,-143 944.5,-149 938.5,-155 932.5,-155"/>
<text text-anchor="middle" x="2070" y="-140" font-family="Arial" font-size="10.00" fill="#111827">GPIO pad bridge</text> <text text-anchor="middle" x="865" y="-140" font-family="Arial" font-size="10.00" fill="#111827">GPIO pad bridge</text>
<text text-anchor="middle" x="2070" y="-129" font-family="Arial" font-size="10.00" fill="#111827">PDK capability&#45;adapted controls</text> <text text-anchor="middle" x="865" y="-129" font-family="Arial" font-size="10.00" fill="#111827">PDK capability&#45;adapted controls</text>
</g> </g>
<!-- gpio_controller&#45;&gt;gpio_bridge --> <!-- gpio_controller&#45;&gt;gpio_bridge -->
<g id="edge28" class="edge"> <g id="edge29" class="edge">
<title>gpio_controller&#45;&gt;gpio_bridge</title> <title>gpio_controller&#45;&gt;gpio_bridge</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1888.44,-209.93C1928.2,-194.18 1981.69,-172.99 2020.3,-157.69"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M982.94,-212.69C926.71,-200.55 864,-187 864,-187 864,-187 864,-178 864,-178 864,-178 864.18,-170.7 864.39,-162.33"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="2021.24,-159.95 2026.85,-155.1 2019.44,-155.4 2021.24,-159.95"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="866.84,-162.25 864.57,-155.2 861.95,-162.13 866.84,-162.25"/>
<text text-anchor="middle" x="1986" y="-180.6" font-family="Arial" font-size="8.00" fill="#374151">pad control</text> <text text-anchor="middle" x="884" y="-180.6" font-family="Arial" font-size="8.00" fill="#374151">pad control</text>
</g> </g>
<!-- gpio_controller&#45;&gt;irq --> <!-- gpio_controller&#45;&gt;irq -->
<g id="edge29" class="edge"> <g id="edge30" class="edge">
<title>gpio_controller&#45;&gt;irq</title> <title>gpio_controller&#45;&gt;irq</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1794.11,-209.81C1765.6,-194.32 1727.49,-173.6 1699.53,-158.4"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1082.29,-209.81C1090.46,-195.41 1101.18,-176.49 1109.57,-161.68"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1700.69,-156.24 1693.37,-155.05 1698.35,-160.55 1700.69,-156.24"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1111.93,-162.5 1113.25,-155.2 1107.66,-160.09 1111.93,-162.5"/>
<text text-anchor="middle" x="1760" y="-180.6" font-family="Arial" font-size="8.00" fill="#374151">IRQ18</text> <text text-anchor="middle" x="1111" y="-180.6" font-family="Arial" font-size="8.00" fill="#374151">IRQ18</text>
</g> </g>
<!-- timers&#45;&gt;irq --> <!-- timers&#45;&gt;irq -->
<g id="edge30" class="edge"> <g id="edge31" class="edge">
<title>timers&#45;&gt;irq</title> <title>timers&#45;&gt;irq</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1627.44,-209.81C1634.37,-195.41 1643.48,-176.49 1650.6,-161.68"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M783.62,-211.2C842.97,-199.47 906,-187 906,-187 906,-187 940,-178 940,-178 940,-178 990.25,-167.02 1038.09,-156.56"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1652.89,-162.57 1653.72,-155.2 1648.48,-160.45 1652.89,-162.57"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1038.81,-158.91 1045.13,-155.02 1037.76,-154.12 1038.81,-158.91"/>
<text text-anchor="middle" x="1664.5" y="-180.6" font-family="Arial" font-size="8.00" fill="#374151">IRQ3 / IRQ4</text> <text text-anchor="middle" x="962.5" y="-180.6" font-family="Arial" font-size="8.00" fill="#374151">IRQ3 / IRQ4</text>
</g> </g>
<!-- ws2812&#45;&gt;gpio_bridge --> <!-- ws2812&#45;&gt;gpio_bridge -->
<g id="edge32" class="edge"> <g id="edge33" class="edge">
<title>ws2812&#45;&gt;gpio_bridge</title> <title>ws2812&#45;&gt;gpio_bridge</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M2269.72,-213.17C2261.45,-211.26 2256,-210 2256,-210 2256,-210 2083,-187 2083,-187 2083,-187 2079.65,-174.38 2076.35,-161.94"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M535.6,-209.89C578.62,-195.05 628,-178 628,-178 628,-178 710.79,-164.03 778.5,-152.6"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="2078.71,-161.28 2074.55,-155.14 2073.97,-162.53 2078.71,-161.28"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="778.93,-155.01 785.42,-151.43 778.11,-150.18 778.93,-155.01"/>
<text text-anchor="middle" x="2105.5" y="-180.6" font-family="Arial" font-size="8.00" fill="#374151">GPIO2 ALT1</text> <text text-anchor="middle" x="650.5" y="-180.6" font-family="Arial" font-size="8.00" fill="#374151">GPIO2 ALT1</text>
</g> </g>
<!-- ws2812&#45;&gt;irq --> <!-- ws2812&#45;&gt;irq -->
<g id="edge34" class="edge"> <g id="edge35" class="edge">
<title>ws2812&#45;&gt;irq</title> <title>ws2812&#45;&gt;irq</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M2269.72,-213.17C2261.45,-211.26 2256,-210 2256,-210 2256,-210 1922,-187 1922,-187 1922,-187 1833.13,-170.25 1759.3,-156.34"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M552.21,-212.99C559.95,-211.18 565,-210 565,-210 565,-210 836.2,-175.01 1000.47,-153.81"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1759.54,-153.89 1752.21,-155 1758.63,-158.7 1759.54,-153.89"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1001.09,-156.2 1007.72,-152.87 1000.46,-151.34 1001.09,-156.2"/>
<text text-anchor="middle" x="1934" y="-180.6" font-family="Arial" font-size="8.00" fill="#374151">IRQ17</text> <text text-anchor="middle" x="822" y="-180.6" font-family="Arial" font-size="8.00" fill="#374151">IRQ17</text>
</g> </g>
<!-- apb_targets&#45;&gt;gpio_controller --> <!-- apb_targets&#45;&gt;gpio_controller -->
<g id="edge40" class="edge"> <g id="edge42" class="edge">
<title>apb_targets&#45;&gt;gpio_controller</title> <title>apb_targets&#45;&gt;gpio_controller</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M1037.59,-252.51C1045.81,-254.04 1051,-255 1051,-255 1051,-255 1324,-282.5 1324,-282.5 1324,-282.5 1360,-282.5 1360,-282.5 1360,-282.5 1733,-255 1733,-255 1733,-255 1735.42,-254.46 1739.52,-253.55"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M2153.41,-252.51C2145.19,-254.04 2140,-255 2140,-255 2140,-255 1393,-282.5 1393,-282.5 1393,-282.5 1357,-282.5 1357,-282.5 1357,-282.5 1247.93,-263.5 1164.27,-248.92"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1740.32,-255.88 1746.62,-251.97 1739.26,-251.1 1740.32,-255.88"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1164.6,-246.49 1157.28,-247.71 1163.75,-251.32 1164.6,-246.49"/>
<text text-anchor="middle" x="1342" y="-285.1" font-family="Arial" font-size="8.00" fill="#374151">user_gpio</text> <text text-anchor="middle" x="1375" y="-285.1" font-family="Arial" font-size="8.00" fill="#374151">user_gpio</text>
</g>
<!-- rng&#45;&gt;irq -->
<g id="edge41" class="edge">
<title>rng&#45;&gt;irq</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M2650.66,-212.06C2642.84,-210.79 2638,-210 2638,-210 2638,-210 1605.41,-160.93 1245.2,-143.81"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1245.22,-141.36 1238.11,-143.47 1244.99,-146.25 1245.22,-141.36"/>
<text text-anchor="middle" x="2159" y="-180.6" font-family="Arial" font-size="8.00" fill="#374151">IRQ16</text>
</g> </g>
<!-- gpio_bridge&#45;&gt;ext_io --> <!-- gpio_bridge&#45;&gt;ext_io -->
<g id="edge43" class="edge"> <g id="edge45" class="edge">
<title>gpio_bridge&#45;&gt;ext_io</title> <title>gpio_bridge&#45;&gt;ext_io</title>
<path fill="none" stroke="#4b5563" stroke-width="1.2" d="M2094,-113.95C2115.61,-94.09 2144,-68 2144,-68 2144,-68 2155.85,-59.21 2169.01,-49.45"/> <path fill="none" stroke="#4b5563" stroke-width="1.2" d="M915.39,-116.23C951.94,-101.89 995,-85 995,-85 995,-85 1282.34,-53.94 1448.64,-35.97"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="2092.17,-112.3 2088.67,-118.84 2095.49,-115.91 2092.17,-112.3"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="914.27,-114.04 908.65,-118.88 916.06,-118.6 914.27,-114.04"/>
<polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="2170.54,-51.37 2174.7,-45.23 2167.62,-47.43 2170.54,-51.37"/> <polygon fill="#4b5563" stroke="#4b5563" stroke-width="1.2" points="1449.28,-38.36 1455.97,-35.18 1448.75,-33.49 1449.28,-38.36"/>
<text text-anchor="middle" x="2164" y="-70.6" font-family="Arial" font-size="8.00" fill="#374151">pad control</text> <text text-anchor="middle" x="1167" y="-70.6" font-family="Arial" font-size="8.00" fill="#374151">pad control</text>
</g> </g>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 47 KiB

+9 -2
View File
@@ -23,6 +23,7 @@ USER_EXTENSIONS_DIR := $(VARIANT_ROOT)/generated/user_extensions
USER_EXTENSIONS_STAMP := $(USER_EXTENSIONS_DIR)/.stamp USER_EXTENSIONS_STAMP := $(USER_EXTENSIONS_DIR)/.stamp
USER_EXTENSIONS_FILELIST := $(USER_EXTENSIONS_DIR)/user_extensions.fl USER_EXTENSIONS_FILELIST := $(USER_EXTENSIONS_DIR)/user_extensions.fl
ARCHINFO_METADATA_SCRIPT := $(ROOT_PATH)/rtl/managed/clusterip/archinfo/scripts/generate_metadata.py ARCHINFO_METADATA_SCRIPT := $(ROOT_PATH)/rtl/managed/clusterip/archinfo/scripts/generate_metadata.py
ARCHINFO_METADATA_DEPS := $(wildcard $(ARCHINFO_METADATA_SCRIPT))
ARCHINFO_METADATA_DIR := $(VARIANT_ROOT)/generated/archinfo ARCHINFO_METADATA_DIR := $(VARIANT_ROOT)/generated/archinfo
ARCHINFO_METADATA_STAMP := $(ARCHINFO_METADATA_DIR)/.stamp ARCHINFO_METADATA_STAMP := $(ARCHINFO_METADATA_DIR)/.stamp
ARCHINFO_METADATA_SV := $(ARCHINFO_METADATA_DIR)/archinfo_integration_metadata.svh ARCHINFO_METADATA_SV := $(ARCHINFO_METADATA_DIR)/archinfo_integration_metadata.svh
@@ -101,7 +102,13 @@ user-extensions: $(USER_EXTENSIONS_STAMP)
check-user-extensions: check-user-extensions:
$(FLOW_PYTHON) $(USER_EXTENSIONS_SCRIPT) --map $(USER_EXTENSIONS_SOURCE) --check $(FLOW_PYTHON) $(USER_EXTENSIONS_SCRIPT) --map $(USER_EXTENSIONS_SOURCE) --check
$(ARCHINFO_METADATA_STAMP): $(ARCHINFO_METADATA_SCRIPT) $(LOCK_FILE) check-archinfo-source:
@test -f $(ARCHINFO_METADATA_SCRIPT) || { \
echo "missing $(ARCHINFO_METADATA_SCRIPT); run 'make setup-clusterip' first" >&2; \
exit 1; \
}
$(ARCHINFO_METADATA_STAMP): $(ARCHINFO_METADATA_DEPS) $(LOCK_FILE) | check-archinfo-source
$(FLOW_PYTHON) $(ARCHINFO_METADATA_SCRIPT) --repo-root $(ROOT_PATH) --lock $(LOCK_FILE) \ $(FLOW_PYTHON) $(ARCHINFO_METADATA_SCRIPT) --repo-root $(ROOT_PATH) --lock $(LOCK_FILE) \
--config-digest $(CONFIG_DIGEST) $(if $(filter YES,$(BUILD_RELEASE)),--release) \ --config-digest $(CONFIG_DIGEST) $(if $(filter YES,$(BUILD_RELEASE)),--release) \
--output-sv $(ARCHINFO_METADATA_SV) --output-c $(ARCHINFO_METADATA_C) --output-sv $(ARCHINFO_METADATA_SV) --output-c $(ARCHINFO_METADATA_C)
@@ -173,4 +180,4 @@ endif
.PHONY: gen_mpw_code generate_filelist memory-map check-memory-map pin-map check-pin-map \ .PHONY: gen_mpw_code generate_filelist memory-map check-memory-map pin-map check-pin-map \
soc-topology check-soc-topology user-extensions check-user-extensions \ soc-topology check-soc-topology user-extensions check-user-extensions \
archinfo-metadata check-clock-reset-domains firmware archinfo-metadata check-archinfo-source check-clock-reset-domains firmware
+1 -1
View File
@@ -57,7 +57,7 @@
{"symbol": "RIBP_APU", "base": "0x10013000", "size": "0x00001000", "route": "reserved", "kind": "reserved", "public": false, "user_access": "none"}, {"symbol": "RIBP_APU", "base": "0x10013000", "size": "0x00001000", "route": "reserved", "kind": "reserved", "public": false, "user_access": "none"},
{"symbol": "RIBP_GPIO_ADMIN", "base": "0x10014000", "size": "0x00001000", "route": "ribp", "kind": "active", "public": true, "user_access": "none"}, {"symbol": "RIBP_GPIO_ADMIN", "base": "0x10014000", "size": "0x00001000", "route": "ribp", "kind": "active", "public": true, "user_access": "none"},
{"symbol": "APB_ARCHINFO", "base": "0x20000000", "size": "0x00001000", "route": "apb", "kind": "active", "public": true, "user_access": "ro"}, {"symbol": "APB_ARCHINFO", "base": "0x20000000", "size": "0x00001000", "route": "apb", "kind": "active", "public": true, "user_access": "ro"},
{"symbol": "APB_RNG", "base": "0x20001000", "size": "0x00001000", "route": "apb", "kind": "active", "public": true, "user_access": "rw"}, {"symbol": "APB_RNG", "base": "0x20001000", "size": "0x00001000", "route": "apb", "kind": "active", "public": true, "user_access": "none"},
{"symbol": "APB_UART1", "base": "0x20002000", "size": "0x00001000", "route": "apb", "kind": "active", "public": true, "user_access": "rw"}, {"symbol": "APB_UART1", "base": "0x20002000", "size": "0x00001000", "route": "apb", "kind": "active", "public": true, "user_access": "rw"},
{"symbol": "APB_PWM", "base": "0x20003000", "size": "0x00001000", "route": "apb", "kind": "active", "public": true, "user_access": "rw"}, {"symbol": "APB_PWM", "base": "0x20003000", "size": "0x00001000", "route": "apb", "kind": "active", "public": true, "user_access": "rw"},
{"symbol": "APB_PS2", "base": "0x20004000", "size": "0x00001000", "route": "apb", "kind": "active", "public": true, "user_access": "rw"}, {"symbol": "APB_PS2", "base": "0x20004000", "size": "0x00001000", "route": "apb", "kind": "active", "public": true, "user_access": "rw"},
+3
View File
@@ -1,5 +1,8 @@
/clusterip/archinfo/rtl/archinfo_reg.sv /clusterip/archinfo/rtl/archinfo_reg.sv
/clusterip/archinfo/rtl/apb4_archinfo.sv /clusterip/archinfo/rtl/apb4_archinfo.sv
/clusterip/rng/rtl/rng_core.sv
/clusterip/rng/rtl/rng_reg.sv
/clusterip/rng/rtl/rng_deterministic_source.sv
/clusterip/rng/rtl/apb4_rng.sv /clusterip/rng/rtl/apb4_rng.sv
/clusterip/uart/rtl/uart_if.sv /clusterip/uart/rtl/uart_if.sv
/clusterip/uart/rtl/uart_tx.sv /clusterip/uart/rtl/uart_tx.sv
@@ -43,7 +43,7 @@ COMPATIBILITY_IRQ_BINDINGS = (
("rtc", "apb", 3, 13, "u_rtc_if.irq_o"), ("rtc", "apb", 3, 13, "u_rtc_if.irq_o"),
("watchdog_reset", "apb", 4, 14, "u_wdg_if.rst_o"), ("watchdog_reset", "apb", 4, 14, "u_wdg_if.rst_o"),
("advanced_timer", "apb", 5, 15, "u_tmr_if.irq_o"), ("advanced_timer", "apb", 5, 15, "u_tmr_if.irq_o"),
("reserved", "apb", 6, 16, "1'b0"), ("rng", "apb", 6, 16, "s_rng_irq"),
("ws2812", "ribp", 10, 17, "ws2812.irq_o"), ("ws2812", "ribp", 10, 17, "ws2812.irq_o"),
("gpio", "ribp", 11, 18, "gpio.irq_o"), ("gpio", "ribp", 11, 18, "gpio.irq_o"),
("i2c1", "ribp", 12, 19, "i2c1.irq_o"), ("i2c1", "ribp", 12, 19, "i2c1.irq_o"),
+1 -1
View File
@@ -23,7 +23,7 @@
{"name": "rtc", "description": "APB RTC interrupt", "group": "apb", "group_bit": 3, "core_bit": 13, "signal": "u_rtc_if.irq_o"}, {"name": "rtc", "description": "APB RTC interrupt", "group": "apb", "group_bit": 3, "core_bit": 13, "signal": "u_rtc_if.irq_o"},
{"name": "watchdog_reset", "description": "APB watchdog reset request", "group": "apb", "group_bit": 4, "core_bit": 14, "signal": "u_wdg_if.rst_o"}, {"name": "watchdog_reset", "description": "APB watchdog reset request", "group": "apb", "group_bit": 4, "core_bit": 14, "signal": "u_wdg_if.rst_o"},
{"name": "advanced_timer", "description": "APB advanced timer interrupt", "group": "apb", "group_bit": 5, "core_bit": 15, "signal": "u_tmr_if.irq_o"}, {"name": "advanced_timer", "description": "APB advanced timer interrupt", "group": "apb", "group_bit": 5, "core_bit": 15, "signal": "u_tmr_if.irq_o"},
{"name": "reserved", "description": "Reserved interrupt slot", "group": "apb", "group_bit": 6, "core_bit": 16, "signal": "1'b0"}, {"name": "rng", "description": "APB RNG data/error interrupt", "group": "apb", "group_bit": 6, "core_bit": 16, "signal": "s_rng_irq", "user_visible": false},
{"name": "ws2812", "description": "WS2812 transmitter interrupt", "group": "ribp", "group_bit": 10, "core_bit": 17, "signal": "ws2812.irq_o"}, {"name": "ws2812", "description": "WS2812 transmitter interrupt", "group": "ribp", "group_bit": 10, "core_bit": 17, "signal": "ws2812.irq_o"},
{"name": "gpio", "description": "RIBP GPIO combined interrupt", "group": "ribp", "group_bit": 11, "core_bit": 18, "signal": "gpio.irq_o"}, {"name": "gpio", "description": "RIBP GPIO combined interrupt", "group": "ribp", "group_bit": 11, "core_bit": 18, "signal": "gpio.irq_o"},
{"name": "i2c1", "description": "RIBP I2C1 interrupt", "group": "ribp", "group_bit": 12, "core_bit": 19, "signal": "i2c1.irq_o"} {"name": "i2c1", "description": "RIBP I2C1 interrupt", "group": "ribp", "group_bit": 12, "core_bit": 19, "signal": "i2c1.irq_o"}
+4
View File
@@ -62,6 +62,7 @@ CRT_SRCS := $(ROOT_PATH)/crt/arch/riscv/startup.S \
$(ROOT_PATH)/crt/src/lib/console.c \ $(ROOT_PATH)/crt/src/lib/console.c \
$(ROOT_PATH)/crt/src/lib/printf.c \ $(ROOT_PATH)/crt/src/lib/printf.c \
$(ROOT_PATH)/rtl/managed/clusterip/archinfo/sw/src/archinfo.c \ $(ROOT_PATH)/rtl/managed/clusterip/archinfo/sw/src/archinfo.c \
$(ROOT_PATH)/rtl/managed/clusterip/rng/sw/src/rng.c \
$(ROOT_PATH)/crt/src/core/archinfo.c \ $(ROOT_PATH)/crt/src/core/archinfo.c \
$(ROOT_PATH)/crt/src/service/bench.c \ $(ROOT_PATH)/crt/src/service/bench.c \
$(ROOT_PATH)/crt/src/service/booter.c \ $(ROOT_PATH)/crt/src/service/booter.c \
@@ -129,6 +130,7 @@ INC_PATH := -I$(SW_BUILD_DIR)/include \
-I$(USER_EXTENSIONS_DIR)/include \ -I$(USER_EXTENSIONS_DIR)/include \
-I$(ARCHINFO_METADATA_DIR) \ -I$(ARCHINFO_METADATA_DIR) \
-I$(ROOT_PATH)/rtl/managed/clusterip/archinfo/sw/include \ -I$(ROOT_PATH)/rtl/managed/clusterip/archinfo/sw/include \
-I$(ROOT_PATH)/rtl/managed/clusterip/rng/sw/include \
-I$(ROOT_PATH)/crt/include \ -I$(ROOT_PATH)/crt/include \
$(addprefix -I,$(APP_INC_DIRS)) $(addprefix -I,$(APP_INC_DIRS))
SRC_PATH := $(CRT_SRCS) $(APP_SRCS) SRC_PATH := $(CRT_SRCS) $(APP_SRCS)
@@ -141,6 +143,8 @@ SW_HEADERS := $(shell find $(ROOT_PATH)/crt/include $(ROOT_PATH)/app -typ
\( -name '*.h' -o -name '*.hpp' \) 2>/dev/null) \( -name '*.h' -o -name '*.hpp' \) 2>/dev/null)
SW_HEADERS += $(shell find $(ROOT_PATH)/rtl/managed/clusterip/archinfo/sw/include \ SW_HEADERS += $(shell find $(ROOT_PATH)/rtl/managed/clusterip/archinfo/sw/include \
-type f -name '*.h' 2>/dev/null) -type f -name '*.h' 2>/dev/null)
SW_HEADERS += $(shell find $(ROOT_PATH)/rtl/managed/clusterip/rng/sw/include \
-type f -name '*.h' 2>/dev/null)
$(VERSION_HEADER): FORCE_VERSION $(ROOT_PATH)/crt/ver.py $(ROOT_PATH)/crt/ver.tmpl $(VERSION_HEADER): FORCE_VERSION $(ROOT_PATH)/crt/ver.py $(ROOT_PATH)/crt/ver.tmpl
@mkdir -p $(dir $@) @mkdir -p $(dir $@)
+31 -1
View File
@@ -63,6 +63,14 @@ module ip_apb_wrapper (
32'h0000_FFF8 | {31'd0, ARCHINFO_HAVE_PLL} | 32'h0000_FFF8 | {31'd0, ARCHINFO_HAVE_PLL} |
({31'd0, ARCHINFO_HAVE_SRAM_IF} << 1) | ({31'd0, ARCHINFO_HAVE_SRAM_MACRO} << 2); ({31'd0, ARCHINFO_HAVE_SRAM_IF} << 1) | ({31'd0, ARCHINFO_HAVE_SRAM_MACRO} << 2);
logic s_rng_entropy_enable;
logic s_rng_entropy_ready;
logic s_rng_entropy_valid;
logic [31:0] s_rng_entropy_data;
logic s_rng_entropy_qualified;
logic s_rng_entropy_fault;
logic s_rng_irq;
`ifdef PDK_IHP130 `ifdef PDK_IHP130
localparam logic [31:0] ARCHINFO_TECHNOLOGY = 32'h0201_0082; localparam logic [31:0] ARCHINFO_TECHNOLOGY = 32'h0201_0082;
`elsif PDK_GF180 `elsif PDK_GF180
@@ -110,7 +118,29 @@ module ip_apb_wrapper (
); );
// verilog_format: on // verilog_format: on
apb4_rng u_apb4_rng (.apb4(u_rng_apb_if)); rng_deterministic_source u_rng_deterministic_source (
.clk_i (clk_i),
.rst_n_i (rst_n_i),
.enable_i (s_rng_entropy_enable),
.ready_i (s_rng_entropy_ready),
.valid_o (s_rng_entropy_valid),
.data_o (s_rng_entropy_data),
.qualified_o(s_rng_entropy_qualified),
.fault_o (s_rng_entropy_fault)
);
apb4_rng #(
.FIFO_DEPTH(8)
) u_apb4_rng (
.entropy_enable_o (s_rng_entropy_enable),
.entropy_ready_o (s_rng_entropy_ready),
.entropy_valid_i (s_rng_entropy_valid),
.entropy_data_i (s_rng_entropy_data),
.entropy_qualified_i(s_rng_entropy_qualified),
.entropy_fault_i (s_rng_entropy_fault),
.irq_o (s_rng_irq),
.apb4 (u_rng_apb_if)
);
apb4_uart #( apb4_uart #(
.FIFO_DEPTH(32) .FIFO_DEPTH(32)
+4
View File
@@ -69,6 +69,10 @@ def test_generated_artifacts_share_the_capacity_baseline(tmp_path: Path) -> None
assert "SOC_SYSCTRL_TEST_STATUS_OFFSET 32'h00000084" in rtl assert "SOC_SYSCTRL_TEST_STATUS_OFFSET 32'h00000084" in rtl
assert "SOC_ADDR_IS_RIBP(addr)" in rtl assert "SOC_ADDR_IS_RIBP(addr)" in rtl
assert "SOC_ADDR_IS_NMI" not in rtl assert "SOC_ADDR_IS_NMI" not in rtl
user_policy = rtl.split("`define SOC_USER_ADDR_READABLE", 1)[1].split(
"`define SOC_ADDR_INCR4_CAPABLE", 1
)[0]
assert "SOC_ADDR_IS_APB_RNG" not in user_policy
assert "RS_SOC_SYSCTRL_PLL_CFG_OFFSET UINT32_C(0x00000008)" in header assert "RS_SOC_SYSCTRL_PLL_CFG_OFFSET UINT32_C(0x00000008)" in header
assert "RS_SOC_SYSCTRL_PLL_STATUS_OFFSET UINT32_C(0x0000001C)" in header assert "RS_SOC_SYSCTRL_PLL_STATUS_OFFSET UINT32_C(0x0000001C)" in header
assert "RS_SOC_SYSCTRL_TEST_STATUS_OFFSET UINT32_C(0x00000084)" in header assert "RS_SOC_SYSCTRL_TEST_STATUS_OFFSET UINT32_C(0x00000084)" in header
+8 -2
View File
@@ -505,7 +505,7 @@ def test_dependency_helper_limits_recursive_submodules(monkeypatch, tmp_path: Pa
) )
def test_make_dry_run_and_validation_do_not_write_filelists() -> None: def test_make_dry_run_and_validation_do_not_write_filelists(tmp_path: Path) -> None:
def build_state() -> dict[str, tuple[int, int]]: def build_state() -> dict[str, tuple[int, int]]:
build = ROOT / "build" build = ROOT / "build"
if not build.exists(): if not build.exists():
@@ -518,7 +518,13 @@ def test_make_dry_run_and_validation_do_not_write_filelists() -> None:
before = build_state() before = build_state()
run("make", "-n", "help") run("make", "-n", "help")
run("make", "-n", "SIMU=IVERILOG", "comp") run(
"make",
"-n",
f"ARCHINFO_METADATA_SCRIPT={tmp_path / 'missing-generate-metadata.py'}",
"SIMU=IVERILOG",
"comp",
)
run( run(
"make", "make",
"-n", "-n",
+3 -2
View File
@@ -97,7 +97,7 @@ def test_topology_generates_complete_rib_apb_and_gpio_bindings(tmp_path: Path) -
assert ".apb_rib(u_apb_rib_if)" in bus_fabric assert ".apb_rib(u_apb_rib_if)" in bus_fabric
assert ".rib(u_rib_if)" in bus_fabric assert ".rib(u_rib_if)" in bus_fabric
assert "`define SOC_IRQ_VECTOR_WIDTH 32" in irq_config assert "`define SOC_IRQ_VECTOR_WIDTH 32" in irq_config
assert "`define SOC_USER_IRQ_MASK 32'h000FFFFC" in irq_config assert "`define SOC_USER_IRQ_MASK 32'h000EFFFC" in irq_config
assert "`define SOC_IRQ_RIBP_WIDTH 13" in irq_config assert "`define SOC_IRQ_RIBP_WIDTH 13" in irq_config
assert "`define SOC_IRQ_APB_WIDTH 7" in irq_config assert "`define SOC_IRQ_APB_WIDTH 7" in irq_config
assert "assign irq_o[0] = u_clint_if.software_irq_o[0];" in rib_irq assert "assign irq_o[0] = u_clint_if.software_irq_o[0];" in rib_irq
@@ -105,6 +105,7 @@ def test_topology_generates_complete_rib_apb_and_gpio_bindings(tmp_path: Path) -
assert "assign irq_o[11] = gpio.irq_o;" in rib_irq assert "assign irq_o[11] = gpio.irq_o;" in rib_irq
assert "assign irq_o[12] = i2c1.irq_o;" in rib_irq assert "assign irq_o[12] = i2c1.irq_o;" in rib_irq
assert "assign irq_o[5] = u_tmr_if.irq_o;" in apb_irq assert "assign irq_o[5] = u_tmr_if.irq_o;" in apb_irq
assert "assign irq_o[6] = s_rng_irq;" in apb_irq
assert "s_irq[16] = s_apb_irq[6];" in irq_wiring assert "s_irq[16] = s_apb_irq[6];" in irq_wiring
assert "irq_i[31] == 1'b0" in irq_sva assert "irq_i[31] == 1'b0" in irq_sva
assert "bind retrosoc soc_irq_topology_sva" in irq_sva assert "bind retrosoc soc_irq_topology_sva" in irq_sva
@@ -141,7 +142,7 @@ def test_topology_preserves_default_irq_compatibility_mapping() -> None:
("rtc", "apb", 3, 13, "u_rtc_if.irq_o"), ("rtc", "apb", 3, 13, "u_rtc_if.irq_o"),
("watchdog_reset", "apb", 4, 14, "u_wdg_if.rst_o"), ("watchdog_reset", "apb", 4, 14, "u_wdg_if.rst_o"),
("advanced_timer", "apb", 5, 15, "u_tmr_if.irq_o"), ("advanced_timer", "apb", 5, 15, "u_tmr_if.irq_o"),
("reserved", "apb", 6, 16, "1'b0"), ("rng", "apb", 6, 16, "s_rng_irq"),
("ws2812", "ribp", 10, 17, "ws2812.irq_o"), ("ws2812", "ribp", 10, 17, "ws2812.irq_o"),
("gpio", "ribp", 11, 18, "gpio.irq_o"), ("gpio", "ribp", 11, 18, "gpio.irq_o"),
("i2c1", "ribp", 12, 19, "i2c1.irq_o"), ("i2c1", "ribp", 12, 19, "i2c1.irq_o"),