Files
retroSoC/rtl/mini/integration/clock_reset_domains.json
T
maksyuki e219973c45 feat: add USB2 support and related tests
- Introduced a new USB2 transaction engine testbench to validate the functionality of the USB2 transaction engine.
- Updated clock and reset domain tests to include USB2 ULPI crossings.
- Enhanced memory map tests to verify USB2 base addresses and performance offsets.
- Modified pin map tests to ensure USB2 ULPI pins are correctly generated.
- Updated SOC topology tests to account for USB2 peripherals and IRQ mappings.
- Added static timing analysis constraints for USB2 clock domains.
- Created dedicated USB2 tests for various components including packet RAM, descriptor validation, and transaction engine.
- Implemented a register parity test to ensure ABI consistency between RTL and C header definitions.
2026-08-22 07:15:41 +08:00

489 lines
14 KiB
JSON

{
"schema_version": 2,
"reset_ports": ["ext_rst_n_i_pad"],
"domains": [
{
"name": "external",
"clock": "s_ext_clk_buf",
"reset": "s_ext_rst_n_sync",
"reset_source": "ext_rst_n_i",
"reset_primitive": "rst_sync",
"path": "rtl/mini/top/rcu.sv",
"instance": "u_ext_rst_sync",
"sta": {
"source_port": "extclk_i_pad",
"pin": "u_rcu.u_ext_clk_buf/clk_o",
"period_ns": 13.888888889,
"async_group": "external"
}
},
{
"name": "system",
"clock": "sys_clk_o",
"reset": "s_sys_rst_n_sync",
"reset_source": "s_sys_reset_source_n",
"reset_primitive": "rst_sync",
"path": "rtl/mini/top/rcu.sv",
"instance": "u_sys_rst_sync",
"sta": {
"source_domain": "external",
"pin": "u_rcu.u_sys_clk_buf/clk_o",
"period_ns": 13.888888889,
"async_group": "external"
}
},
{
"name": "audio",
"clock": "s_aud_clk_buf",
"reset": "s_aud_rst_n_sync",
"reset_source": "ext_rst_n_i",
"reset_primitive": "rst_sync",
"path": "rtl/mini/top/rcu.sv",
"instance": "u_aud_rst_sync",
"sta": {
"source_port": "audclk_i_pad",
"pin": "u_rcu.u_aud_clk_buf/clk_o",
"period_ns": 54.253472222,
"async_group": "audio"
}
},
{
"name": "jtag",
"clock": "s_jtag_tck_buf",
"reset": "s_jtag_trst_n_sync",
"reset_source": "jtag_trst_n_i",
"reset_primitive": "rst_sync",
"path": "rtl/mini/top/mgmt_debug_wrapper.sv",
"instance": "u_jtag_rst_sync",
"sta": {
"source_port": "jtag_tck_i_pad",
"object_type": "port",
"period_ns": 100.0,
"async_group": "jtag"
}
},
{
"name": "dvp",
"clock": "s_pclk_sel",
"reset": "s_dvp_pclk_rst_n_sync",
"reset_source": "rst_n_i",
"reset_primitive": "rst_sync",
"path": "rtl/ip/multimedia/axi4s_dvp.sv",
"instance": "u_dvp_pclk_rst_sync",
"sta": {
"source_port": "gpio_10_io_pad",
"pin": "u_retrosoc.u_apb4_periph.u_axi4_dvp.u_dvp_pclk_clk_buf/clk_o",
"period_ns": 41.666666667,
"async_group": "dvp"
}
},
{
"name": "usb2_ulpi",
"clock": "clk_ulpi_i",
"reset": "s_ulpi_rst_n",
"reset_source": "rst_n_i",
"reset_primitive": "rst_sync",
"path": "rtl/ip/usb/apb4_usb2.sv",
"instance": "u_ulpi_rst_sync",
"sta": {
"source_port": "usb2_ulpi_clk_i_pad",
"object_type": "port",
"period_ns": 16.666666667,
"async_group": "usb2_ulpi"
}
}
],
"crossings": [
{
"name": "pll_request",
"source": "system",
"destination": "external",
"primitive": "cdc_2phase",
"path": "rtl/mini/top/pll_rcu_controller.sv",
"instance": "u_pll_request_cdc"
},
{
"name": "pll_response",
"source": "external",
"destination": "system",
"primitive": "cdc_2phase",
"path": "rtl/mini/top/pll_rcu_controller.sv",
"instance": "u_pll_response_cdc"
},
{
"name": "clint_timebase",
"source": "external",
"destination": "system",
"primitive": "edge_det",
"path": "rtl/ip/peripheral/clint_timebase.sv",
"instance": "u_tick_edge_det"
},
{
"name": "dvp_enable",
"source": "system",
"destination": "dvp",
"primitive": "cdc_2phase",
"path": "rtl/ip/multimedia/axi4s_dvp.sv",
"instance": "u_dvp_config_cdc"
},
{
"name": "dvp_fifo",
"source": "dvp",
"destination": "system",
"primitive": "cdc_fifo_warm_flush",
"path": "rtl/ip/multimedia/axi4s_dvp.sv",
"instance": "u_dvp_payload_fifo"
},
{
"name": "rtc_command",
"source": "system",
"destination": "audio",
"primitive": "async_reqack",
"path": "rtl/managed/clusterip/rtc/rtl/apb4_rtc.sv",
"instance": "u_command_mailbox"
},
{
"name": "rtc_response",
"source": "audio",
"destination": "system",
"primitive": "async_reqack",
"path": "rtl/managed/clusterip/rtc/rtl/apb4_rtc.sv",
"instance": "u_response_mailbox"
},
{
"name": "rtc_event",
"source": "audio",
"destination": "system",
"primitive": "cdc_sync",
"path": "rtl/managed/clusterip/rtc/rtl/apb4_rtc.sv",
"instance": "u_event_sync"
},
{
"name": "rtc_status",
"source": "audio",
"destination": "system",
"primitive": "cdc_sync",
"path": "rtl/managed/clusterip/rtc/rtl/apb4_rtc.sv",
"instance": "u_status_sync"
},
{
"name": "rtc_interrupt_enable",
"source": "audio",
"destination": "system",
"primitive": "cdc_sync",
"path": "rtl/managed/clusterip/rtc/rtl/apb4_rtc.sv",
"instance": "u_interrupt_enable_sync"
},
{
"name": "rtc_wake_enable",
"source": "audio",
"destination": "system",
"primitive": "cdc_sync",
"path": "rtl/managed/clusterip/rtc/rtl/apb4_rtc.sv",
"instance": "u_wake_enable_sync"
},
{
"name": "rtc_wake_status",
"source": "audio",
"destination": "system",
"primitive": "cdc_sync",
"path": "rtl/ip/peripheral/sysctrl_core.sv",
"instance": "u_rtc_wake_sync"
},
{
"name": "jtag_dmi",
"source": "jtag",
"destination": "system",
"primitive": "hazard3_apb_async_bridge",
"path": "rtl/managed/hazard3/hdl/debug/dtm/hazard3_jtag_dtm_core.v",
"instance": "inst_hazard3_apb_async_bridge"
},
{
"name": "wdg_command",
"source": "system",
"destination": "audio",
"primitive": "async_reqack",
"path": "rtl/managed/clusterip/wdg/rtl/apb4_wdg.sv",
"instance": "u_command_mailbox"
},
{
"name": "wdg_response",
"source": "audio",
"destination": "system",
"primitive": "async_reqack",
"path": "rtl/managed/clusterip/wdg/rtl/apb4_wdg.sv",
"instance": "u_response_mailbox"
},
{
"name": "wdg_debug_halted",
"source": "system",
"destination": "audio",
"primitive": "cdc_sync",
"path": "rtl/managed/clusterip/wdg/rtl/apb4_wdg.sv",
"instance": "u_debug_halted_sync"
},
{
"name": "wdg_status",
"source": "audio",
"destination": "system",
"primitive": "cdc_sync",
"path": "rtl/managed/clusterip/wdg/rtl/apb4_wdg.sv",
"instance": "u_status_sync"
},
{
"name": "wdg_reset_cause",
"source": "audio",
"destination": "system",
"primitive": "cdc_sync",
"path": "rtl/managed/clusterip/wdg/rtl/apb4_wdg.sv",
"instance": "u_reset_cause_sync"
},
{
"name": "usb2_work",
"source": "system",
"destination": "usb2_ulpi",
"primitive": "async_reqack",
"path": "rtl/ip/usb/apb4_usb2.sv",
"instance": "u_work_cdc"
},
{
"name": "usb2_result",
"source": "usb2_ulpi",
"destination": "system",
"primitive": "async_reqack",
"path": "rtl/ip/usb/apb4_usb2.sv",
"instance": "u_result_cdc"
},
{
"name": "usb2_setup",
"source": "usb2_ulpi",
"destination": "system",
"primitive": "async_reqack",
"path": "rtl/ip/usb/apb4_usb2.sv",
"instance": "u_setup_cdc"
},
{
"name": "usb2_fill_command",
"source": "system",
"destination": "usb2_ulpi",
"primitive": "async_reqack",
"path": "rtl/ip/usb/apb4_usb2.sv",
"instance": "u_fill_command_cdc"
},
{
"name": "usb2_drain_command",
"source": "system",
"destination": "usb2_ulpi",
"primitive": "async_reqack",
"path": "rtl/ip/usb/apb4_usb2.sv",
"instance": "u_drain_command_cdc"
},
{
"name": "usb2_buffer_event",
"source": "usb2_ulpi",
"destination": "system",
"primitive": "async_reqack",
"path": "rtl/ip/usb/apb4_usb2.sv",
"instance": "u_buffer_event_cdc"
},
{
"name": "usb2_view_request",
"source": "system",
"destination": "usb2_ulpi",
"primitive": "async_reqack",
"path": "rtl/ip/usb/apb4_usb2.sv",
"instance": "u_view_request_cdc"
},
{
"name": "usb2_view_response",
"source": "usb2_ulpi",
"destination": "system",
"primitive": "async_reqack",
"path": "rtl/ip/usb/apb4_usb2.sv",
"instance": "u_view_response_cdc"
},
{
"name": "usb2_fill_stream",
"source": "system",
"destination": "usb2_ulpi",
"primitive": "cdc_fifo",
"path": "rtl/ip/usb/apb4_usb2.sv",
"instance": "u_fill_stream_cdc"
},
{
"name": "usb2_drain_stream",
"source": "usb2_ulpi",
"destination": "system",
"primitive": "cdc_fifo",
"path": "rtl/ip/usb/apb4_usb2.sv",
"instance": "u_drain_stream_cdc"
},
{
"name": "usb2_role",
"source": "system",
"destination": "usb2_ulpi",
"primitive": "cdc_sync",
"path": "rtl/ip/usb/apb4_usb2.sv",
"instance": "u_role_sync"
},
{
"name": "usb2_role_reset",
"source": "system",
"destination": "usb2_ulpi",
"primitive": "cdc_sync",
"path": "rtl/ip/usb/apb4_usb2.sv",
"instance": "u_role_reset_sync"
},
{
"name": "usb2_phy_reset",
"source": "system",
"destination": "usb2_ulpi",
"primitive": "cdc_sync",
"path": "rtl/ip/usb/apb4_usb2.sv",
"instance": "u_phy_reset_sync"
},
{
"name": "usb2_high_speed",
"source": "system",
"destination": "usb2_ulpi",
"primitive": "cdc_sync",
"path": "rtl/ip/usb/apb4_usb2.sv",
"instance": "u_high_speed_sync"
},
{
"name": "usb2_enable",
"source": "system",
"destination": "usb2_ulpi",
"primitive": "cdc_sync",
"path": "rtl/ip/usb/apb4_usb2.sv",
"instance": "u_enable_sync"
},
{
"name": "usb2_device_addr",
"source": "system",
"destination": "usb2_ulpi",
"primitive": "cdc_sync",
"path": "rtl/ip/usb/apb4_usb2.sv",
"instance": "u_device_addr_sync"
},
{
"name": "usb2_endpoint_config",
"source": "system",
"destination": "usb2_ulpi",
"primitive": "cdc_sync",
"path": "rtl/ip/usb/apb4_usb2.sv",
"instance": "u_endpoint_cfg_sync"
},
{
"name": "usb2_timeout",
"source": "system",
"destination": "usb2_ulpi",
"primitive": "cdc_sync",
"path": "rtl/ip/usb/apb4_usb2.sv",
"instance": "u_timeout_sync"
},
{
"name": "usb2_phy_status",
"source": "usb2_ulpi",
"destination": "system",
"primitive": "cdc_sync",
"path": "rtl/ip/usb/apb4_usb2.sv",
"instance": "u_phy_status_sync"
},
{
"name": "usb2_transaction_busy",
"source": "usb2_ulpi",
"destination": "system",
"primitive": "cdc_sync",
"path": "rtl/ip/usb/apb4_usb2.sv",
"instance": "u_transaction_busy_sync"
},
{
"name": "usb2_frame",
"source": "usb2_ulpi",
"destination": "system",
"primitive": "cdc_sync",
"path": "rtl/ip/usb/apb4_usb2.sv",
"instance": "u_frame_sync"
},
{
"name": "usb2_ecc_counts",
"source": "usb2_ulpi",
"destination": "system",
"primitive": "cdc_sync",
"path": "rtl/ip/usb/apb4_usb2.sv",
"instance": "u_ecc_counts_sync"
},
{
"name": "usb2_retry_event",
"source": "usb2_ulpi",
"destination": "system",
"primitive": "edge_det",
"path": "rtl/ip/usb/apb4_usb2.sv",
"instance": "u_retry_event_sync"
},
{
"name": "usb2_protocol_event",
"source": "usb2_ulpi",
"destination": "system",
"primitive": "edge_det",
"path": "rtl/ip/usb/apb4_usb2.sv",
"instance": "u_protocol_event_sync"
}
],
"same_domain_contracts": [
{
"name": "opipsram_phy",
"source_domain": "system",
"destination_domain": "system",
"clock": "clk_phy_i",
"reset": "rst_phy_n_i",
"relationship": "same_physical_source_logical_cdc",
"cdc": "cdc_2phase",
"description": "Mini SoC v1 ties clk_phy_i to clk_i and rst_phy_n_i to rst_n_i physically, but the IP keeps distinct system and PHY transaction domains. Do not collapse the logical CDC contract when the qualified PHY clock is introduced."
},
{
"name": "opipsram_command_cdc",
"source_domain": "system",
"destination_domain": "system",
"logical_destination": "opipsram_phy",
"primitive": "cdc_2phase",
"path": "rtl/ip/memory/apb4_opipsram.sv",
"instance": "u_command_cdc",
"relationship": "same_physical_source_logical_cdc"
},
{
"name": "opipsram_response_cdc",
"source_domain": "system",
"destination_domain": "system",
"logical_source": "opipsram_phy",
"primitive": "cdc_2phase",
"path": "rtl/ip/memory/apb4_opipsram.sv",
"instance": "u_response_cdc",
"relationship": "same_physical_source_logical_cdc"
},
{
"name": "opipsram_abort_cdc",
"source_domain": "system",
"destination_domain": "system",
"logical_destination": "opipsram_phy",
"primitive": "cdc_2phase",
"path": "rtl/ip/memory/apb4_opipsram.sv",
"instance": "u_abort_cdc",
"relationship": "same_physical_source_logical_cdc"
},
{
"name": "opipsram_rwds_capture_reset",
"source_domain": "system",
"destination_domain": "system",
"logical_source": "opipsram_phy",
"clock": "clk_phy_i",
"reset": "rst_phy_n_i",
"contract_type": "async_fifo_reset",
"implementation": "delayed_rwds_source_synchronous_capture",
"reset_behavior": "reset holds ck_o low, cs_n_o high, dq/rwds output enables low; future qualified PHY CDC must flush payload state before re-enable",
"relationship": "same_physical_source_logical_cdc"
}
]
}