![]() |
xilpuf
Vitis Drivers API Documentation
|
Macros | |
| #define | XPUF_STATUS_WAIT_TIMEOUT (1000000U) |
| Recommended software timeout is 1 second. More... | |
| #define | XPUF_AUX_MASK_VALUE (0x0FFFFFF0U) |
| Mask value for AUX. More... | |
| #define | XPUF_OV_MASK_VALUE (0x30000000U) |
| Mask value for overflow. More... | |
| #define | XPUF_RESET_VAL (1U) |
| PUF reset value. More... | |
| #define | XPUF_SET_VAL (0U) |
| PUF set value. More... | |
| #define | XPUF_PUF_AUX_ENABLE (0xFU) |
| PUF aux enable. More... | |
| #define | XPUF_PUF_IC_MASK (1U << 31U) |
| PUF iterative convergence mask. More... | |
| #define | XPUF_PUF_KR_MASK (1U << 3U) |
| PUF Key ready mask. More... | |
| #define | XPUF_PMC_GLOBAL_PUF_KEY_CAPTURE (1U << 2U) |
| PUF key capture mask. More... | |
| #define | XPUF_PMC_GLOBAL_PUF_ID_CAPTURE (1 << 1U) |
| PUF ID capture mask. More... | |
| #define | XPUF_KEY_GEN_ITERATIONS 6U |
| PUF maximum key generation iterations to obtain PUF iterative convergence. More... | |
| #define | XPUF_STATUS_MASK |
| PUF status mask. More... | |
Functions | |
| int | XPuf_Registration (XPuf_Data *PufData) |
| This functions performs PUF registration. More... | |
| int | XPuf_Regeneration (XPuf_Data *PufData) |
| This function regenerates PUF data using helper data stored in eFUSE or external memory. More... | |
| int | XPuf_ClearPufID (void) |
| This function clears PUF ID. More... | |
| int | XPuf_TrimPufData (XPuf_Data *PufData) |
| Converts the PUF Syndrome data to eFUSE writing format. More... | |
| #define XPUF_AUX_MASK_VALUE (0x0FFFFFF0U) |
Mask value for AUX.
Referenced by XPuf_Registration().
| #define XPUF_KEY_GEN_ITERATIONS 6U |
PUF maximum key generation iterations to obtain PUF iterative convergence.
| #define XPUF_OV_MASK_VALUE (0x30000000U) |
Mask value for overflow.
Referenced by XPuf_Registration().
| #define XPUF_PMC_GLOBAL_PUF_ID_CAPTURE (1 << 1U) |
PUF ID capture mask.
Referenced by XPuf_Registration().
| #define XPUF_PMC_GLOBAL_PUF_KEY_CAPTURE (1U << 2U) |
PUF key capture mask.
Referenced by XPuf_Registration().
| #define XPUF_PUF_AUX_ENABLE (0xFU) |
PUF aux enable.
| #define XPUF_PUF_IC_MASK (1U << 31U) |
PUF iterative convergence mask.
| #define XPUF_PUF_KR_MASK (1U << 3U) |
PUF Key ready mask.
| #define XPUF_RESET_VAL (1U) |
PUF reset value.
| #define XPUF_SET_VAL (0U) |
PUF set value.
| #define XPUF_STATUS_MASK |
PUF status mask.
| #define XPUF_STATUS_WAIT_TIMEOUT (1000000U) |
Recommended software timeout is 1 second.
Referenced by XPuf_ClearPufID().
| int XPuf_ClearPufID | ( | void | ) |
This function clears PUF ID.
Set least significant bit in the PUF_CLEAR register.
The API waits for ID_ZERO bit to be set in PUF Status register. If id zero bit is not set within 1 second then returns XPUF_ERROR_PUF_ID_ZERO_TIMEOUT else returns XST_SUCCESS.
| int XPuf_Regeneration | ( | XPuf_Data * | PufData | ) |
This function regenerates PUF data using helper data stored in eFUSE or external memory.
| PufData | Pointer to XPuf_Data structure which includes options to configure PUF. |
Run PUF regeneration through iterative convergence
| int XPuf_Registration | ( | XPuf_Data * | PufData | ) |
This functions performs PUF registration.
| PufData | Pointer to XPuf_Data structure which includes options to configure PUF. |
Issue PUF command
PUF helper data includes Syndrome data, CHash and Auxiliary data. Capturing Syndrome data word by word.
Once complete Syndrome data is captured and PUF operation is done, read CHash, Auxiliary data and PUF ID.
Check for overflow and return XPUF_ERROR_PUF_OVERFLOW incase of error
| int XPuf_TrimPufData | ( | XPuf_Data * | PufData | ) |
Converts the PUF Syndrome data to eFUSE writing format.
| PufData | Pointer to XPuf_Data structure which includes options to configure PUF. |
Check if PufData instance pointer is NULL. If NULL, return XPUF_ERROR_INVALID_PARAM.
Copy syndrome data from instance pointer to a local variable.
Trimming logic for PUF Syndrome Data:
Space allocated in eFUSE for syndrome data = 4060bits
eFUSE02 - 2032bits
eFUSE03 - 2028bits
PUF Helper data generated for 4K Mode through registration is 140 Words = 140*32 = 4480 bits. Remove lower 12 bits of every fourth word of syndrome data.
After removing these bits remaining syndrome data will be exactly 4060bits which will fit into eFUSE.
454D025B
CDCB36FC
EE1FE4C5
3FE53F74 –> F74 has to removed & next word upper 12 bits have to be shifted here
3A0AE7F8
2373F03A
C83188AF
3A5EB687–> 687 has to be removed
B83E4A1D
D53B5C50
FA8B33D9
07EEFF43 –> F43 has to be removed
CD01973F
........
........
........
Use the above mentioned logic to trim the data and copy the trimmed data in TrimmedSynData array in the instance pointer. and return XST_SUCCESS.