mirror of
https://github.com/retroSoC/retroSoC.git
synced 2026-11-05 06:32:37 +00:00
Connect DVP to Tiny DMA2/request 11, IRQ15 and the camera pad/reset lifecycle. Harden shared capture CDC, frame statistics, per-row size validation and HAL cleanup while preserving the Mini DMA3 binding and existing register ABI. Add deterministic capture/recovery firmware, source-bound evidence tooling, focused RTL/host tests and compact netlist acceptance. Preserve SAFE24, 128 KiB main SRAM, private Crypto storage and the locked dependencies. Retained validation: focused RTL, host/policy checks, Mini firmware, and ICS55/IHP130 RECOVERY, QVGA, synthesis and boot/DVP netlist checks pass. Full-system VGA remains historical; long full Icarus and broad regressions remain deferred. Global publication/format gaps and negative observational STA are retained, not reported as passing qualification. Specification: docs/ip/tiny-soc.md, TINY-R2-P9. Evidence: docs/ip/tiny-soc-verification.md.
751 lines
13 KiB
JSON
751 lines
13 KiB
JSON
{
|
|
"schema_version": 1,
|
|
"cpu": {
|
|
"module": "hazard3_cpu_2port",
|
|
"local_ports": 2,
|
|
"data_outstanding": 1
|
|
},
|
|
"main_sram": {
|
|
"groups": 4,
|
|
"group_bytes": 32768,
|
|
"macros_per_group": 8,
|
|
"macro_bytes": 4096,
|
|
"base": "0x30000000",
|
|
"macro_instance": "u_soc.u_sram.gen_group[{group}].u_group.gen_bank[{bank}].u_ram.u_mem",
|
|
"external_attachment": "per-target-P5"
|
|
},
|
|
"fabric": {
|
|
"owners": [
|
|
"cpu_slow",
|
|
"central_dma",
|
|
"sdio"
|
|
],
|
|
"active_owners": [
|
|
0,
|
|
1,
|
|
2
|
|
],
|
|
"cpu_combined_outstanding": 1,
|
|
"dma_direction_outstanding": 1,
|
|
"sdio_direction_outstanding": 1,
|
|
"target_combined_outstanding": 1,
|
|
"sram_targets": [
|
|
0,
|
|
1,
|
|
2,
|
|
3
|
|
],
|
|
"xpi_target": 4,
|
|
"apb_target_base": 5,
|
|
"decode_error_target": 26,
|
|
"protocol_error_target": 27,
|
|
"target_count": 28
|
|
},
|
|
"gpio_pins": 32,
|
|
"irq_vector_width": 32,
|
|
"external_irq_count": 30,
|
|
"dma_channels": 8,
|
|
"apb_targets": [
|
|
{
|
|
"name": "gpio",
|
|
"regions": [
|
|
"APB4_GPIO",
|
|
"APB4_GPIO_ADMIN"
|
|
]
|
|
},
|
|
{
|
|
"name": "uart0",
|
|
"regions": [
|
|
"APB4_UART0"
|
|
]
|
|
},
|
|
{
|
|
"name": "timer0",
|
|
"regions": [
|
|
"APB4_TIM0"
|
|
]
|
|
},
|
|
{
|
|
"name": "timer1",
|
|
"regions": [
|
|
"APB4_TIM1"
|
|
]
|
|
},
|
|
{
|
|
"name": "i2c0",
|
|
"regions": [
|
|
"APB4_I2C0"
|
|
]
|
|
},
|
|
{
|
|
"name": "xpi",
|
|
"regions": [
|
|
"APB4_XPI"
|
|
]
|
|
},
|
|
{
|
|
"name": "dma",
|
|
"regions": [
|
|
"APB4_DMA"
|
|
]
|
|
},
|
|
{
|
|
"name": "sysctrl",
|
|
"regions": [
|
|
"APB4_SYSCTRL"
|
|
]
|
|
},
|
|
{
|
|
"name": "clint",
|
|
"regions": [
|
|
"APB4_CLINT"
|
|
]
|
|
},
|
|
{
|
|
"name": "sram",
|
|
"regions": [
|
|
"APB4_SRAM"
|
|
]
|
|
},
|
|
{
|
|
"name": "archinfo",
|
|
"regions": [
|
|
"APB4_ARCHINFO"
|
|
]
|
|
},
|
|
{
|
|
"name": "pwm",
|
|
"regions": [
|
|
"APB4_PWM"
|
|
]
|
|
},
|
|
{
|
|
"name": "rtc",
|
|
"regions": [
|
|
"APB4_RTC"
|
|
]
|
|
},
|
|
{
|
|
"name": "wdg",
|
|
"regions": [
|
|
"APB4_WDG"
|
|
]
|
|
},
|
|
{
|
|
"name": "rng",
|
|
"regions": [
|
|
"APB4_RNG"
|
|
]
|
|
},
|
|
{
|
|
"name": "crc",
|
|
"regions": [
|
|
"APB4_CRC"
|
|
]
|
|
},
|
|
{
|
|
"name": "ws2812",
|
|
"regions": [
|
|
"APB4_WS2812"
|
|
]
|
|
},
|
|
{
|
|
"name": "crypto",
|
|
"regions": [
|
|
"APB4_CRYPTO"
|
|
]
|
|
},
|
|
{
|
|
"name": "i2s",
|
|
"regions": [
|
|
"APB4_I2S"
|
|
]
|
|
},
|
|
{
|
|
"name": "sdio",
|
|
"regions": [
|
|
"APB4_SDIO0"
|
|
]
|
|
},
|
|
{
|
|
"name": "dvp",
|
|
"regions": [
|
|
"APB4_DVP"
|
|
]
|
|
}
|
|
],
|
|
"interrupts": [
|
|
{
|
|
"name": "clint_software",
|
|
"core_bit": 0,
|
|
"signal": "u_clint_if.software_irq_o[0]"
|
|
},
|
|
{
|
|
"name": "clint_timer",
|
|
"core_bit": 1,
|
|
"signal": "u_clint_if.timer_irq_o[0]"
|
|
},
|
|
{
|
|
"name": "uart0",
|
|
"core_bit": 2,
|
|
"signal": "u_uart0_if.irq_o"
|
|
},
|
|
{
|
|
"name": "timer0",
|
|
"core_bit": 3,
|
|
"signal": "s_timer0_irq"
|
|
},
|
|
{
|
|
"name": "timer1",
|
|
"core_bit": 4,
|
|
"signal": "s_timer1_irq"
|
|
},
|
|
{
|
|
"name": "i2c0",
|
|
"core_bit": 7,
|
|
"signal": "u_i2c0_if.irq_o"
|
|
},
|
|
{
|
|
"name": "i2s",
|
|
"core_bit": 8,
|
|
"signal": "u_i2s_if.irq_o"
|
|
},
|
|
{
|
|
"name": "xpi",
|
|
"core_bit": 9,
|
|
"signal": "s_xpi_irq"
|
|
},
|
|
{
|
|
"name": "sdio",
|
|
"core_bit": 10,
|
|
"signal": "u_sdio_if.irq_o"
|
|
},
|
|
{
|
|
"name": "dvp",
|
|
"core_bit": 15,
|
|
"signal": "s_dvp_irq"
|
|
},
|
|
{
|
|
"name": "pwm",
|
|
"core_bit": 11,
|
|
"signal": "u_pwm_if.irq_o"
|
|
},
|
|
{
|
|
"name": "rtc",
|
|
"core_bit": 13,
|
|
"signal": "u_rtc_if.irq_o"
|
|
},
|
|
{
|
|
"name": "watchdog_early_warning",
|
|
"core_bit": 14,
|
|
"signal": "u_wdg_if.irq_o"
|
|
},
|
|
{
|
|
"name": "rng",
|
|
"core_bit": 16,
|
|
"signal": "s_rng_irq"
|
|
},
|
|
{
|
|
"name": "ws2812",
|
|
"core_bit": 17,
|
|
"signal": "u_ws2812_if.irq_o"
|
|
},
|
|
{
|
|
"name": "gpio",
|
|
"core_bit": 18,
|
|
"signal": "u_gpio_if.irq_o"
|
|
},
|
|
{
|
|
"name": "dma",
|
|
"core_bit": 20,
|
|
"signal": "s_dma_irq"
|
|
},
|
|
{
|
|
"name": "crypto",
|
|
"core_bit": 23,
|
|
"signal": "s_crypto_irq"
|
|
},
|
|
{
|
|
"name": "rcu",
|
|
"core_bit": 31,
|
|
"signal": "s_rcu_irq"
|
|
}
|
|
],
|
|
"gpio_alt_functions": [
|
|
{
|
|
"pin": 0,
|
|
"alt0": {
|
|
"inputs": [],
|
|
"do": "u_sdio_if.sck_o",
|
|
"oe": "1'b1"
|
|
},
|
|
"alt1": {
|
|
"inputs": [],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
}
|
|
},
|
|
{
|
|
"pin": 1,
|
|
"alt0": {
|
|
"inputs": [
|
|
"u_sdio_if.cmd_di_i"
|
|
],
|
|
"do": "u_sdio_if.cmd_do_o",
|
|
"oe": "u_sdio_if.cmd_oe_o"
|
|
},
|
|
"alt1": {
|
|
"inputs": [],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
}
|
|
},
|
|
{
|
|
"pin": 2,
|
|
"alt0": {
|
|
"inputs": [
|
|
"u_sdio_if.dat_di_i[0]"
|
|
],
|
|
"do": "u_sdio_if.dat_do_o[0]",
|
|
"oe": "u_sdio_if.dat_oe_o[0]"
|
|
},
|
|
"alt1": {
|
|
"inputs": [],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
}
|
|
},
|
|
{
|
|
"pin": 3,
|
|
"alt0": {
|
|
"inputs": [
|
|
"u_sdio_if.dat_di_i[1]"
|
|
],
|
|
"do": "u_sdio_if.dat_do_o[1]",
|
|
"oe": "u_sdio_if.dat_oe_o[1]"
|
|
},
|
|
"alt1": {
|
|
"inputs": [],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
}
|
|
},
|
|
{
|
|
"pin": 4,
|
|
"alt0": {
|
|
"inputs": [
|
|
"u_sdio_if.dat_di_i[2]"
|
|
],
|
|
"do": "u_sdio_if.dat_do_o[2]",
|
|
"oe": "u_sdio_if.dat_oe_o[2]"
|
|
},
|
|
"alt1": {
|
|
"inputs": [],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
}
|
|
},
|
|
{
|
|
"pin": 5,
|
|
"alt0": {
|
|
"inputs": [
|
|
"u_sdio_if.dat_di_i[3]"
|
|
],
|
|
"do": "u_sdio_if.dat_do_o[3]",
|
|
"oe": "u_sdio_if.dat_oe_o[3]"
|
|
},
|
|
"alt1": {
|
|
"inputs": [],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
}
|
|
},
|
|
{
|
|
"pin": 6,
|
|
"alt0": {
|
|
"inputs": [],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
},
|
|
"alt1": {
|
|
"inputs": [],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
}
|
|
},
|
|
{
|
|
"pin": 7,
|
|
"alt0": {
|
|
"inputs": [],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
},
|
|
"alt1": {
|
|
"inputs": [],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
}
|
|
},
|
|
{
|
|
"pin": 8,
|
|
"alt0": {
|
|
"inputs": [],
|
|
"do": "u_uart0_if.tx_o",
|
|
"oe": "1'b1"
|
|
},
|
|
"alt1": {
|
|
"inputs": [],
|
|
"do": "u_pwm_if.pwm_o[0]",
|
|
"oe": "u_pwm_if.oe_o[0]"
|
|
}
|
|
},
|
|
{
|
|
"pin": 9,
|
|
"alt0": {
|
|
"inputs": [
|
|
"u_uart0_if.rx_i"
|
|
],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
},
|
|
"alt1": {
|
|
"inputs": [],
|
|
"do": "u_pwm_if.pwm_o[1]",
|
|
"oe": "u_pwm_if.oe_o[1]"
|
|
}
|
|
},
|
|
{
|
|
"pin": 10,
|
|
"alt0": {
|
|
"inputs": [
|
|
"u_i2c0_if.scl_i"
|
|
],
|
|
"do": "u_i2c0_if.scl_o",
|
|
"oe": "u_i2c0_if.scl_oe_o"
|
|
},
|
|
"alt1": {
|
|
"inputs": [],
|
|
"do": "u_pwm_if.pwm_o[2]",
|
|
"oe": "u_pwm_if.oe_o[2]"
|
|
}
|
|
},
|
|
{
|
|
"pin": 11,
|
|
"alt0": {
|
|
"inputs": [
|
|
"u_i2c0_if.sda_i"
|
|
],
|
|
"do": "u_i2c0_if.sda_o",
|
|
"oe": "u_i2c0_if.sda_oe_o"
|
|
},
|
|
"alt1": {
|
|
"inputs": [],
|
|
"do": "u_pwm_if.pwm_o[3]",
|
|
"oe": "u_pwm_if.oe_o[3]"
|
|
}
|
|
},
|
|
{
|
|
"pin": 12,
|
|
"alt0": {
|
|
"inputs": [],
|
|
"do": "u_i2s_if.sclk_o",
|
|
"oe": "1'b1"
|
|
},
|
|
"alt1": {
|
|
"inputs": [
|
|
"u_dvp_if.dat_i[0]"
|
|
],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
}
|
|
},
|
|
{
|
|
"pin": 13,
|
|
"alt0": {
|
|
"inputs": [],
|
|
"do": "u_i2s_if.lrck_o",
|
|
"oe": "1'b1"
|
|
},
|
|
"alt1": {
|
|
"inputs": [
|
|
"u_dvp_if.dat_i[1]"
|
|
],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
}
|
|
},
|
|
{
|
|
"pin": 14,
|
|
"alt0": {
|
|
"inputs": [],
|
|
"do": "u_i2s_if.dacdat_o",
|
|
"oe": "1'b1"
|
|
},
|
|
"alt1": {
|
|
"inputs": [
|
|
"u_dvp_if.dat_i[2]"
|
|
],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
}
|
|
},
|
|
{
|
|
"pin": 15,
|
|
"alt0": {
|
|
"inputs": [
|
|
"u_i2s_if.adcdat_i"
|
|
],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
},
|
|
"alt1": {
|
|
"inputs": [
|
|
"u_dvp_if.dat_i[3]"
|
|
],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
}
|
|
},
|
|
{
|
|
"pin": 16,
|
|
"alt0": {
|
|
"inputs": [],
|
|
"do": "u_i2s_if.mclk_o",
|
|
"oe": "1'b1"
|
|
},
|
|
"alt1": {
|
|
"inputs": [
|
|
"u_dvp_if.dat_i[4]"
|
|
],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
}
|
|
},
|
|
{
|
|
"pin": 17,
|
|
"alt0": {
|
|
"inputs": [
|
|
"s_audio_pad_clk"
|
|
],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
},
|
|
"alt1": {
|
|
"inputs": [
|
|
"u_dvp_if.dat_i[5]"
|
|
],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
}
|
|
},
|
|
{
|
|
"pin": 18,
|
|
"alt0": {
|
|
"inputs": [],
|
|
"do": "u_pwm_if.pwm_o[0]",
|
|
"oe": "u_pwm_if.oe_o[0]"
|
|
},
|
|
"alt1": {
|
|
"inputs": [
|
|
"u_dvp_if.dat_i[6]"
|
|
],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
}
|
|
},
|
|
{
|
|
"pin": 19,
|
|
"alt0": {
|
|
"inputs": [],
|
|
"do": "u_pwm_if.pwm_o[1]",
|
|
"oe": "u_pwm_if.oe_o[1]"
|
|
},
|
|
"alt1": {
|
|
"inputs": [
|
|
"u_dvp_if.dat_i[7]"
|
|
],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
}
|
|
},
|
|
{
|
|
"pin": 20,
|
|
"alt0": {
|
|
"inputs": [],
|
|
"do": "u_pwm_if.pwm_o[2]",
|
|
"oe": "u_pwm_if.oe_o[2]"
|
|
},
|
|
"alt1": {
|
|
"inputs": [
|
|
"u_dvp_if.pclk_i"
|
|
],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
}
|
|
},
|
|
{
|
|
"pin": 21,
|
|
"alt0": {
|
|
"inputs": [],
|
|
"do": "u_pwm_if.pwm_o[3]",
|
|
"oe": "u_pwm_if.oe_o[3]"
|
|
},
|
|
"alt1": {
|
|
"inputs": [
|
|
"u_dvp_if.href_i"
|
|
],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
}
|
|
},
|
|
{
|
|
"pin": 22,
|
|
"alt0": {
|
|
"inputs": [
|
|
"u_pwm_if.fault_i"
|
|
],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
},
|
|
"alt1": {
|
|
"inputs": [
|
|
"u_dvp_if.vsync_i"
|
|
],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
}
|
|
},
|
|
{
|
|
"pin": 23,
|
|
"alt0": {
|
|
"inputs": [
|
|
"u_pwm_if.sync_i"
|
|
],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
},
|
|
"alt1": {
|
|
"inputs": [],
|
|
"do": "s_clkout",
|
|
"oe": "s_clkout_enable"
|
|
}
|
|
},
|
|
{
|
|
"pin": 24,
|
|
"alt0": {
|
|
"inputs": [
|
|
"u_pwm_if.capture_i[0]"
|
|
],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
},
|
|
"alt1": {
|
|
"inputs": [],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
}
|
|
},
|
|
{
|
|
"pin": 25,
|
|
"alt0": {
|
|
"inputs": [
|
|
"u_pwm_if.capture_i[1]"
|
|
],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
},
|
|
"alt1": {
|
|
"inputs": [],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
}
|
|
},
|
|
{
|
|
"pin": 26,
|
|
"alt0": {
|
|
"inputs": [],
|
|
"do": "u_ws2812_if.dat_o",
|
|
"oe": "1'b1"
|
|
},
|
|
"alt1": {
|
|
"inputs": [],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
}
|
|
},
|
|
{
|
|
"pin": 27,
|
|
"alt0": {
|
|
"inputs": [],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
},
|
|
"alt1": {
|
|
"inputs": [],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
}
|
|
},
|
|
{
|
|
"pin": 28,
|
|
"alt0": {
|
|
"inputs": [],
|
|
"do": "s_clkout",
|
|
"oe": "s_clkout_enable"
|
|
},
|
|
"alt1": {
|
|
"inputs": [],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
}
|
|
},
|
|
{
|
|
"pin": 29,
|
|
"alt0": {
|
|
"inputs": [],
|
|
"do": "xpi.nss_o[1]",
|
|
"oe": "1'b1"
|
|
},
|
|
"alt1": {
|
|
"inputs": [],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
}
|
|
},
|
|
{
|
|
"pin": 30,
|
|
"alt0": {
|
|
"inputs": [],
|
|
"do": "xpi.nss_o[2]",
|
|
"oe": "1'b1"
|
|
},
|
|
"alt1": {
|
|
"inputs": [],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
}
|
|
},
|
|
{
|
|
"pin": 31,
|
|
"alt0": {
|
|
"inputs": [],
|
|
"do": "xpi.nss_o[3]",
|
|
"oe": "1'b1"
|
|
},
|
|
"alt1": {
|
|
"inputs": [],
|
|
"do": "1'b0",
|
|
"oe": "1'b0"
|
|
}
|
|
}
|
|
],
|
|
"dma_request_mask": "0x39ff",
|
|
"private_crypto": {
|
|
"banks": 6,
|
|
"bank_bytes": 4096,
|
|
"macro_instance": "u_soc.u_crypto.u_storage.gen_bank[{bank}].gen_macro.u_sram.u_mem",
|
|
"clock_domain": "peripheral",
|
|
"logical_domain": "PCLK"
|
|
}
|
|
}
|