caravel/docs/other/management_protect.txt

151 lines
7.8 KiB
Plaintext

Caravel management protect module
------------------------------------
The management protection module sits between the management SoC and
the user project area on the Caravel chip. Its purpose is to maintain
a protective buffer between the two, so that the user project area can
be completely powered down without the management SoC dumping current
into the user project circuits.
The management protection module has two main functions:
(1) Put tristate buffers on all outputs of the management SoC or
housekeeping that connect to the user project wrapper pins, enabled
with the 1/0 ("power good") state of the user project primary digital
power supply (vccd1). This ensures that if the user project vccd1
supply is not present and powered up to 1.8V, then the management SoC
and housekeeping modules cannot generate current on these pins that
would sink into the user project area.
(2) AND all outputs of the user project that connect to the management
SoC with memory-mapped enable bits. This allows the user project to
leave any pins of the user project wrapper unconnected or tristated.
Unconnected outputs of the user project wrapper going to the management
SoC can be floating and will not affect operation of the chip as long
as the respective enable bits are not set in the corresponding registers.
Most of the protection circuitry is transparent to the user project, but
the input enable registers must be set by the program running on the
management SoC for the user project to be able to communicate data to the
management SoC through either the logic analyzer interface or the wishbone
bus interface.
--------------------------------------------------------------------------
Register name = reg_power_good
Memory location = 0x2f000000
Housekeeping SPI location = 0x1a
+------+-------+-------+-------+-------+-------+-------+-------+-------+
| | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
+------+-------+-------+-------+-------+-------+-------+-------+-------+
| | | | | | user1 | user2 | user1 | user2 |
| 0x1a | | | | | vccd | vccd | vdda | vdda |
| | | | | | power | power | power | power |
+------+-------+-------+-------+-------+-------+-------+-------+-------+
bit 0: User 2 domain VDDA 3.3V supply (VDDA2) power good (read-only)
value 0 = Supply VDDA2 is not present or under-voltage
value 1 = Supply VDDA2 is present and powered (1.8V to 5.5V)
bit 1: User 1 domain VDDA 3.3V supply (VDDA1) power good (read-only)
value 0 = Supply VDDA1 is not present or under-voltage
value 1 = Supply VDDA1 is present and powered (1.8V to 5.5V)
bit 2: User 2 domain VCCD 1.8V supply (VCCD2) power good (read-only)
value 0 = Supply VCCD2 is not present or under-voltage
value 1 = Supply VCCD2 is present and 1.8V
bit 3: User 1 domain VCCD 1.8V supply (VCCD1) power good (read-only)
value 0 = Supply VCCD1 is not present or under-voltage
value 1 = Supply VCCD1 is present and 1.8V
--------------------------------------------------------------------------
Register name = reg_la0_iena
Memory location = 0x25000020 to 0x25000023 (32 bits or 4 bytes or 1 word)
+------+-------+-------+-------+-------+-------+-------+-------+-------+
| | 31 | 30 | 29 | | 3 | 2 | 1 | 0 |
+------+-------+-------+-------+-------+-------+-------+-------+-------+
| | la | la | la | | la | la | la | la |
| | iena | iena | iena | ... | iena | iena | iena | iena |
| | [31] | [30] | [29] | | [3] | [2] | [1] | [0] |
+------+-------+-------+-------+-------+-------+-------+-------+-------+
Register name = reg_la1_iena
Memory location = 0x25000024 to 0x25000027 (32 bits or 4 bytes or 1 word)
+------+-------+-------+-------+-------+-------+-------+-------+-------+
| | 31 | 30 | 29 | | 3 | 2 | 1 | 0 |
+------+-------+-------+-------+-------+-------+-------+-------+-------+
| | la | la | la | | la | la | la | la |
| | iena | iena | iena | ... | iena | iena | iena | iena |
| | [63] | [62] | [61] | | [35] | [34] | [33] | [32] |
+------+-------+-------+-------+-------+-------+-------+-------+-------+
Register name = reg_la2_iena
Memory location = 0x25000028 to 0x2500002b (32 bits or 4 bytes or 1 word)
+------+-------+-------+-------+-------+-------+-------+-------+-------+
| | 31 | 30 | 29 | | 3 | 2 | 1 | 0 |
+------+-------+-------+-------+-------+-------+-------+-------+-------+
| | la | la | la | | la | la | la | la |
| | iena | iena | iena | ... | iena | iena | iena | iena |
| | [95] | [94] | [93] | | [67] | [66] | [65] | [64] |
+------+-------+-------+-------+-------+-------+-------+-------+-------+
Register name = reg_la3_iena
Memory location = 0x2500002c to 0x2500002f (32 bits or 4 bytes or 1 word)
+------+-------+-------+-------+-------+-------+-------+-------+-------+
| | 31 | 30 | 29 | | 3 | 2 | 1 | 0 |
+------+-------+-------+-------+-------+-------+-------+-------+-------+
| | la | la | la | | la | la | la | la |
| | iena | iena | iena | ... | iena | iena | iena | iena |
| | [127] | [126] | [125 | | [99] | [98] | [97] | [96] |
+------+-------+-------+-------+-------+-------+-------+-------+-------+
Note that the la_iena[] bits are not ports of the user project wrapper.
They originate in the management SoC and terminate at the management
protect module. They can only be set from the management SoC program.
--------------------------------------------------------------------------
Register name = reg_irq_enable
Memory location = 0x2f000000
+------+-------+-------+-------+-------+-------+-------+-------+-------+
| | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
+------+-------+-------+-------+-------+-------+-------+-------+-------+
| | | | | | | irq 2 | irq 1 | irq 0 |
| | | | | | | enable| enable| enable|
+------+-------+-------+-------+-------+-------+-------+-------+-------+
bit 0: IRQ 0 enable
value 0 = User IRQ 0 from the user project is disabled
and may be left unconnected or tristated.
value 1 = User IRQ 0 from the user project is enabled and
must be connected and driven.
bit 1: IRQ 1 enable
value 0 = User IRQ 1 from the user project is disabled
and may be left unconnected or tristated.
value 1 = User IRQ 1 from the user project is enabled and
must be connected and driven.
bit 2: IRQ 2 enable
value 0 = User IRQ 2 from the user project is disabled
and may be left unconnected or tristated.
value 1 = User IRQ 2 from the user project is enabled and
must be connected and driven.
--------------------------------------------------------------------------
Register name = reg_wb_enable
Memory location = 0x2f000000
+------+-------+-------+-------+-------+-------+-------+-------+-------+
| | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
+------+-------+-------+-------+-------+-------+-------+-------+-------+
| | | | | | | | | wb |
| | | | | | | | | enable|
+------+-------+-------+-------+-------+-------+-------+-------+-------+
bit 0: User wishbone enable
value 0 = Wishbone signals wbs_dat_o and wbs_ack_o are
disabled and may be left unconnected.
value 1 = Wishbone signals wbs_dat_o and wbs_ack_o are
enabled and must be connected and driven.