xilpuf
Vitis Drivers API Documentation
XilPuf APIs

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...
 

Macro Definition Documentation

#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
Value:
(XPUF_STATUS_SYNDROME_WORD_RDY | XPUF_STATUS_KEY_RDY | \
#define XPUF_OV_MASK_VALUE
Mask value for overflow.
Definition: spartanup/xpuf.c:41
#define XPUF_AUX_MASK_VALUE
Mask value for AUX.
Definition: spartanup/xpuf.c:39

PUF status mask.

#define XPUF_STATUS_WAIT_TIMEOUT   (1000000U)

Recommended software timeout is 1 second.

Referenced by XPuf_ClearPufID().

Function Documentation

int XPuf_ClearPufID ( void  )

This function clears PUF ID.

Returns
  • XST_SUCCESS if PUF ID is cleared successfully
  • XPUF_ERROR_PUF_ID_ZERO_TIMEOUT if timedout while clearing 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.

Parameters
PufDataPointer to XPuf_Data structure which includes options to configure PUF.
Returns
  • XST_SUCCESS PUF key regeneration successful
  • XPUF_ERROR_SYNDROME_WORD_WAIT_TIMEOUT Timeout occurred while waiting for PUF Syndrome data
  • XPUF_ERROR_KEY_NOT_CONVERGED When PUF key is not converged
  • XST_FAILURE Unexpected event

Run PUF regeneration through iterative convergence

int XPuf_Registration ( XPuf_Data *  PufData)

This functions performs PUF registration.

Parameters
PufDataPointer to XPuf_Data structure which includes options to configure PUF.
Returns
  • XST_SUCCESS PUF registration successful
  • XPUF_ERROR_INVALID_PARAM PufData is NULL
  • XPUF_ERROR_SYNDROME_WORD_WAIT_TIMEOUT Timeout occurred while waiting for PUF Syndrome data
  • XPUF_ERROR_PUF_OVERFLOW When PUF overflow error has occured
  • XPUF_ERROR_SYN_DATA_ERROR Error when syndrome data is not generated properly
  • XST_FAILURE Unexpected event
Note
Helper data will be available in PufData->SyndromeData, PufData->Chash, PufData->Aux

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.

Parameters
PufDataPointer to XPuf_Data structure which includes options to configure PUF.
Returns
  • XST_SUCCESS Syndrome data is successfully trimmed
  • XPUF_ERROR_INVALID_PARAM PufData instance pointer is NULL
Note
Formatted data will be available at PufData->TrimmedSynData

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.

Illustration:

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.