LPC55S28 CASPER ECC Multiply Execution Time

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
已解决

LPC55S28 CASPER ECC Multiply Execution Time

跳至解决方案
64 次查看
guitardenver
Contributor IV

I am trying to figure out if the below code is expected to execute within the time I'm measuring or if I have something set up wrong and it's making it very slow. This code is part of a function that generates a Public Key from given private key using kCASPER_ECC_P256.

The below code uses a GPIO toggle to measure execution time. Between the Set and Clear GPIO calls, it takes 337mS. Which seems slow for hardware accelerated math for this operation. Is this expected? My MCU has a core clock of 148MHz. Is there a way to choose the clock source for the CASPER engine to speed this up?

   /* Base Generator Point G(x, y) for secp256r1 in 32-bit Little-Endian word arrays */
    static const uint32_t G_x_le[8] = {
        0xD898C296, 0xF4A13945, 0x2DEB33A0, 0x77037D81,
        0x63A440F2, 0xF8BCE6E5, 0xE12C4247, 0x6B17D1F2
    };

    static const uint32_t G_y_le[8] = {
        0x37BF51F5, 0xCBB64068, 0x6B315ECE, 0x2BCE3357,
        0x7C0F9E16, 0x8EE7EB4A, 0xFE1A7F9B, 0x4FE342E2
    };

    uint32_t scalar_le[8];
    uint32_t Q_x_le[8];
    uint32_t Q_y_le[8];

    /* Copy Big-Endian private scalar and convert to Little-Endian for CASPER */
    memcpy(scalar_le, key_buffer, 32);
    swap_endian_32((uint8_t *)scalar_le);



    /* 1. Initialize CASPER coprocessor */
    CASPER_Init(CASPER);
    CASPER_ecc_init(kCASPER_ECC_P256);

    HW_DB_PinSet();

    /* 2. Compute Q = d * G using CASPER hardware */
    CASPER_ECC_SECP256R1_Mul(
        CASPER,
        Q_x_le, Q_y_le,
        G_x_le, G_y_le,
        scalar_le
    );
    HW_DB_PinClear();
0 项奖励
回复
1 解答
37 次查看
Harry_Zhang
NXP Employee
NXP Employee

Hi @guitardenver 

We measured the same operation using the MCUXpresso SDK CASPER example on an LPC55S28 EVK running at 150 MHz. A single call to CASPER_ECC_SECP256R1_Mul() required approximately 24.1 million CPU cycles, corresponding to about 160 ms execution time.

Based on this result, the measured 337 ms in your application does not appear unreasonable, especially if additional key formatting, data conversion, initialization, or debug-build overhead is included.

CASPER does not provide a separate user-configurable clock source. The execution time is primarily determined by the ECC software implementation that utilizes the CASPER accelerator.

BR

Harry

在原帖中查看解决方案

0 项奖励
回复
3 回复数
17 次查看
Niklschmidt
Contributor I
I am trying to figure out if the below code is expected to execute within the time I'm measuring or if I have something set up  Hey there! That 337ms for a hardware-accelerated ECC operation definitely sounds a bit high for a 148MHz MCU, even with P256. It's good you're looking into it. Sometimes driver overhead or clocking issues can sneak in. Have you checked the CASPER engine's specific clock source or any available documentation on optimizing its performance?
0 项奖励
回复
13 次查看
guitardenver
Contributor IV

There are a couple things you can do.  But I do not see any configurable clock options for CASPER engine on this MCU.

 

1. Use O2 optimizations for speed

2. Enable the Flash accelerator prefetch and wait state optimization. 

SYSCON->FMCCR |= SYSCON_FMCCR_PREFEN_MASK;
 
After this I am able to get it down to 160mS

 

0 项奖励
回复
38 次查看
Harry_Zhang
NXP Employee
NXP Employee

Hi @guitardenver 

We measured the same operation using the MCUXpresso SDK CASPER example on an LPC55S28 EVK running at 150 MHz. A single call to CASPER_ECC_SECP256R1_Mul() required approximately 24.1 million CPU cycles, corresponding to about 160 ms execution time.

Based on this result, the measured 337 ms in your application does not appear unreasonable, especially if additional key formatting, data conversion, initialization, or debug-build overhead is included.

CASPER does not provide a separate user-configurable clock source. The execution time is primarily determined by the ECC software implementation that utilizes the CASPER accelerator.

BR

Harry

0 项奖励
回复
%3CLINGO-SUB%20id%3D%22lingo-sub-2413809%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3ELPC55S28%20CASPER%20ECC%20%E4%B9%98%E6%B3%95%E6%89%A7%E8%A1%8C%E6%97%B6%E9%97%B4%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2413809%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E6%88%91%E6%AD%A3%E5%9C%A8%E5%B0%9D%E8%AF%95%E5%BC%84%E6%B8%85%E6%A5%9A%E4%B8%8B%E9%9D%A2%E7%9A%84%E4%BB%A3%E7%A0%81%E6%98%AF%E5%90%A6%E5%BA%94%E8%AF%A5%E5%9C%A8%E6%88%91%E6%B5%8B%E9%87%8F%E7%9A%84%E6%97%B6%E9%97%B4%E5%86%85%E6%89%A7%E8%A1%8C%E5%AE%8C%E6%AF%95%EF%BC%8C%E6%88%96%E8%80%85%E6%88%91%E7%9A%84%E8%AE%BE%E7%BD%AE%E6%98%AF%E5%90%A6%E5%87%BA%E9%94%99%E5%AF%BC%E8%87%B4%E5%AE%83%E8%BF%90%E8%A1%8C%E9%80%9F%E5%BA%A6%E9%9D%9E%E5%B8%B8%E6%85%A2%E3%80%82%E8%BF%99%E6%AE%B5%E4%BB%A3%E7%A0%81%E6%98%AF%E4%BD%BF%E7%94%A8%20kCASPER_ECC_P256%20%E4%BB%8E%E7%BB%99%E5%AE%9A%E7%9A%84%E7%A7%81%E9%92%A5%E7%94%9F%E6%88%90%E5%85%AC%E9%92%A5%E7%9A%84%E5%87%BD%E6%95%B0%E7%9A%84%E4%B8%80%E9%83%A8%E5%88%86%E3%80%82%3C%2FP%3E%3CP%3E%E4%BB%A5%E4%B8%8B%E4%BB%A3%E7%A0%81%E4%BD%BF%E7%94%A8%20GPIO%20%E5%BC%80%E5%85%B3%E6%9D%A5%E6%B5%8B%E9%87%8F%E6%89%A7%E8%A1%8C%E6%97%B6%E9%97%B4%E3%80%82%E8%AE%BE%E7%BD%AE%E5%92%8C%E6%B8%85%E9%99%A4%20GPIO%20%E8%B0%83%E7%94%A8%E4%B9%8B%E9%97%B4%E9%9C%80%E8%A6%81%20337%20%E6%AF%AB%E7%A7%92%E3%80%82%E5%AF%B9%E4%BA%8E%E8%BF%99%E7%A7%8D%E7%A1%AC%E4%BB%B6%E5%8A%A0%E9%80%9F%E7%9A%84%E6%95%B0%E5%AD%A6%E8%BF%90%E7%AE%97%E6%9D%A5%E8%AF%B4%EF%BC%8C%E8%BF%99%E4%B8%AA%E9%80%9F%E5%BA%A6%E4%BC%BC%E4%B9%8E%E5%A4%AA%E6%85%A2%E4%BA%86%E3%80%82%E8%BF%99%E6%98%AF%E9%A2%84%E6%9C%9F%E4%B9%8B%E5%86%85%E7%9A%84%E5%90%97%EF%BC%9F%E6%88%91%E7%9A%84MCU%E6%A0%B8%E5%BF%83%E6%97%B6%E9%92%9F%E9%A2%91%E7%8E%87%E4%B8%BA148MHz%E3%80%82%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8A%9E%E6%B3%95%E9%80%89%E6%8B%A9%20CASPER%20%E5%BC%95%E6%93%8E%E7%9A%84%E6%97%B6%E9%92%9F%E6%BA%90%E6%9D%A5%E5%8A%A0%E5%BF%AB%E9%80%9F%E5%BA%A6%EF%BC%9F%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%20translate%3D%22no%22%3E%20%20%20%2F*%20Base%20Generator%20Point%20G(x%2C%20y)%20for%20secp256r1%20in%2032-bit%20Little-Endian%20word%20arrays%20*%2F%0A%20%20%20%20static%20const%20uint32_t%20G_x_le%5B8%5D%20%3D%20%7B%0A%20%20%20%20%20%20%20%200xD898C296%2C%200xF4A13945%2C%200x2DEB33A0%2C%200x77037D81%2C%0A%20%20%20%20%20%20%20%200x63A440F2%2C%200xF8BCE6E5%2C%200xE12C4247%2C%200x6B17D1F2%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20static%20const%20uint32_t%20G_y_le%5B8%5D%20%3D%20%7B%0A%20%20%20%20%20%20%20%200x37BF51F5%2C%200xCBB64068%2C%200x6B315ECE%2C%200x2BCE3357%2C%0A%20%20%20%20%20%20%20%200x7C0F9E16%2C%200x8EE7EB4A%2C%200xFE1A7F9B%2C%200x4FE342E2%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20uint32_t%20scalar_le%5B8%5D%3B%0A%20%20%20%20uint32_t%20Q_x_le%5B8%5D%3B%0A%20%20%20%20uint32_t%20Q_y_le%5B8%5D%3B%0A%0A%20%20%20%20%2F*%20Copy%20Big-Endian%20private%20scalar%20and%20convert%20to%20Little-Endian%20for%20CASPER%20*%2F%0A%20%20%20%20memcpy(scalar_le%2C%20key_buffer%2C%2032)%3B%0A%20%20%20%20swap_endian_32((uint8_t%20*)scalar_le)%3B%0A%0A%0A%0A%20%20%20%20%2F*%201.%20Initialize%20CASPER%20coprocessor%20*%2F%0A%20%20%20%20CASPER_Init(CASPER)%3B%0A%20%20%20%20CASPER_ecc_init(kCASPER_ECC_P256)%3B%0A%0A%20%20%20%20HW_DB_PinSet()%3B%0A%0A%20%20%20%20%2F*%202.%20Compute%20Q%20%3D%20d%20*%20G%20using%20CASPER%20hardware%20*%2F%0A%20%20%20%20CASPER_ECC_SECP256R1_Mul(%0A%20%20%20%20%20%20%20%20CASPER%2C%0A%20%20%20%20%20%20%20%20Q_x_le%2C%20Q_y_le%2C%0A%20%20%20%20%20%20%20%20G_x_le%2C%20G_y_le%2C%0A%20%20%20%20%20%20%20%20scalar_le%0A%20%20%20%20)%3B%0A%20%20%20%20HW_DB_PinClear()%3B%3C%2FCODE%3E%3C%2FPRE%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2413891%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3E%E5%9B%9E%E5%A4%8D%EF%BC%9A%20LPC55S28%20CASPER%20ECC%20Multiply%20Execution%20Time%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2413891%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E5%97%A8%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F43524%22%20target%3D%22_blank%22%3E%40guitardenver%3C%2FA%3E%3C%2FP%3E%0A%3CP%3E%E6%88%91%E4%BB%AC%E4%BD%BF%E7%94%A8%20MCUXpresso%20SDK%20CASPER%20%E7%A4%BA%E4%BE%8B%E5%9C%A8%E8%BF%90%E8%A1%8C%E9%A2%91%E7%8E%87%E4%B8%BA%20150%20MHz%20%E7%9A%84%20LPC55S28%20EVK%20%E4%B8%8A%E6%B5%8B%E9%87%8F%E4%BA%86%E7%9B%B8%E5%90%8C%E7%9A%84%E6%93%8D%E4%BD%9C%E3%80%82%E5%AF%B9%20CASPER_ECC_SECP256R1_Mul()%20%E7%9A%84%E4%B8%80%E6%AC%A1%E8%B0%83%E7%94%A8%E5%A4%A7%E7%BA%A6%E9%9C%80%E8%A6%81%202410%20%E4%B8%87%E4%B8%AA%20CPU%20%E5%91%A8%E6%9C%9F%EF%BC%8C%E7%9B%B8%E5%BD%93%E4%BA%8E%E5%A4%A7%E7%BA%A6%20160%20%E6%AF%AB%E7%A7%92%E7%9A%84%E6%89%A7%E8%A1%8C%E6%97%B6%E9%97%B4%E3%80%82%3C%2FP%3E%0A%3CP%3E%E6%A0%B9%E6%8D%AE%E8%BF%99%E4%B8%80%E7%BB%93%E6%9E%9C%EF%BC%8C%E6%82%A8%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E4%B8%AD%E6%B5%8B%E5%BE%97%E7%9A%84%20337%20%E6%AF%AB%E7%A7%92%E4%BC%BC%E4%B9%8E%E5%B9%B6%E4%B8%8D%E7%AE%97%E4%B8%8D%E5%90%88%E7%90%86%EF%BC%8C%E7%89%B9%E5%88%AB%E6%98%AF%E5%A6%82%E6%9E%9C%E8%80%83%E8%99%91%E5%88%B0%E9%A2%9D%E5%A4%96%E7%9A%84%E5%AF%86%E9%92%A5%E6%A0%BC%E5%BC%8F%E5%8C%96%E3%80%81%E6%95%B0%E6%8D%AE%E8%BD%AC%E6%8D%A2%E3%80%81%E5%88%9D%E5%A7%8B%E5%8C%96%E6%88%96%E8%B0%83%E8%AF%95%E7%89%88%E6%9C%AC%E5%BC%80%E9%94%80%E7%9A%84%E8%AF%9D%E3%80%82%3C%2FP%3E%0A%3CP%3ECASPER%20%E4%B8%8D%E6%8F%90%E4%BE%9B%E5%8D%95%E7%8B%AC%E7%9A%84%E7%94%A8%E6%88%B7%E5%8F%AF%E9%85%8D%E7%BD%AE%E6%97%B6%E9%92%9F%E6%BA%90%E3%80%82%E6%89%A7%E8%A1%8C%E6%97%B6%E9%97%B4%E4%B8%BB%E8%A6%81%E5%8F%96%E5%86%B3%E4%BA%8E%E4%BD%BF%E7%94%A8%20CASPER%20%E5%8A%A0%E9%80%9F%E5%99%A8%E7%9A%84%20ECC%20%E8%BD%AF%E4%BB%B6%E5%AE%9E%E7%8E%B0%E3%80%82%3C%2FP%3E%0A%3CP%3EBR%3C%2FP%3E%0A%3CP%3E%E5%93%88%E9%87%8C%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2414646%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20LPC55S28%20CASPER%20ECC%20Multiply%20Execution%20Time%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2414646%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E4%BD%A0%E5%8F%AF%E4%BB%A5%E5%81%9A%E4%BB%A5%E4%B8%8B%E5%87%A0%E4%BB%B6%E4%BA%8B%E3%80%82%E4%BD%86%E6%98%AF%EF%BC%8C%E6%88%91%E6%B2%A1%E6%9C%89%E5%9C%A8%E8%BF%99%E4%B8%AAMCU%E4%B8%8A%E7%9C%8B%E5%88%B0CASPER%E5%BC%95%E6%93%8E%E7%9A%84%E4%BB%BB%E4%BD%95%E5%8F%AF%E9%85%8D%E7%BD%AE%E6%97%B6%E9%92%9F%E9%80%89%E9%A1%B9%E3%80%82%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E1.%20%E4%BD%BF%E7%94%A8%20O2%20%E4%BC%98%E5%8C%96%E6%9D%A5%E6%8F%90%E9%AB%98%E9%80%9F%E5%BA%A6%3C%2FP%3E%3CP%3E2.%3CSPAN%3E%E5%90%AF%E7%94%A8%20Flash%20%E5%8A%A0%E9%80%9F%E5%99%A8%E9%A2%84%E5%8F%96%E5%92%8C%E7%AD%89%E5%BE%85%E7%8A%B6%E6%80%81%E4%BC%98%E5%8C%96%E3%80%82%3CBR%20%2F%3E%3C%2FSPAN%3E%3C%2FP%3E%3CDIV%3E%3CDIV%3E%3CSPAN%3ESYSCON%3C%2FSPAN%3E%20%3CSPAN%3E-%26gt%3B%3C%2FSPAN%3E%20%3CSPAN%3EFMCCR%3C%2FSPAN%3E%20%3CSPAN%3E%7C%3D%3C%2FSPAN%3E%20%3CSPAN%3ESYSCON_FMCCR_PREFEN_MASK%3C%2FSPAN%3E%20%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%E4%B9%8B%E5%90%8E%E6%88%91%E6%8A%8A%E5%AE%83%E9%99%8D%E5%88%B0%E4%BA%86160%E6%AF%AB%E7%A7%92%E3%80%82%3C%2FSPAN%3E%3C%2FDIV%3E%3C%2FDIV%3E%3CP%3E%3CSPAN%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2414511%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20LPC55S28%20CASPER%20ECC%20Multiply%20Execution%20Time%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2414511%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CDIV%20class%3D%22%22%3E%3CDIV%20class%3D%22%22%3E%3CDIV%20class%3D%22%22%3E%3CDIV%20class%3D%22%22%3E%E6%88%91%E6%AD%A3%E5%9C%A8%E5%B0%9D%E8%AF%95%E5%BC%84%E6%B8%85%E6%A5%9A%E4%B8%8B%E9%9D%A2%E7%9A%84%E4%BB%A3%E7%A0%81%E6%98%AF%E5%90%A6%E5%BA%94%E8%AF%A5%E5%9C%A8%E6%88%91%E6%B5%8B%E9%87%8F%E7%9A%84%E6%97%B6%E9%97%B4%E5%86%85%E6%89%A7%E8%A1%8C%EF%BC%8C%E6%88%96%E8%80%85%E6%88%91%E6%98%AF%E5%90%A6%E8%AE%BE%E7%BD%AE%E4%BA%86%E6%9F%90%E4%BA%9B%E9%99%90%E5%88%B6%E3%80%82%3CSTRONG%3E%26nbsp%3B%3C%2FSTRONG%3E%E5%98%BF%EF%BC%81%E5%8D%B3%E4%BD%BF%E4%BD%BF%E7%94%A8%20P256%EF%BC%8C%E5%AF%B9%E4%BA%8E%20148MHz%20%E7%9A%84%20MCU%20%E6%9D%A5%E8%AF%B4%EF%BC%8C%E7%A1%AC%E4%BB%B6%E5%8A%A0%E9%80%9F%E7%9A%84%20ECC%20%E6%93%8D%E4%BD%9C%E8%80%97%E6%97%B6%20337%20%E6%AF%AB%E7%A7%92%E4%B9%9F%E7%A1%AE%E5%AE%9E%E6%9C%89%E7%82%B9%E9%AB%98%E3%80%82%E4%BD%A0%E8%B0%83%E6%9F%A5%E8%BF%99%E4%BB%B6%E4%BA%8B%E6%98%AF%E4%BB%B6%E5%A5%BD%E4%BA%8B%E3%80%82%E6%9C%89%E6%97%B6%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%E5%BC%80%E9%94%80%E6%88%96%E6%97%B6%E9%92%9F%E9%97%AE%E9%A2%98%E5%8F%AF%E8%83%BD%E4%BC%9A%E6%82%84%E6%82%84%E5%87%BA%E7%8E%B0%E3%80%82%E6%82%A8%E6%98%AF%E5%90%A6%E6%A3%80%E6%9F%A5%E8%BF%87%20CASPER%20%E5%BC%95%E6%93%8E%E7%9A%84%E5%85%B7%E4%BD%93%E6%97%B6%E9%92%9F%E6%BA%90%EF%BC%8C%E6%88%96%E8%80%85%E6%98%AF%E5%90%A6%E6%9C%89%E4%BB%BB%E4%BD%95%E5%85%B3%E4%BA%8E%E4%BC%98%E5%8C%96%E5%85%B6%E6%80%A7%E8%83%BD%E7%9A%84%E5%8F%AF%E7%94%A8%E6%96%87%E6%A1%A3%EF%BC%9F%3C%2FDIV%3E%3C%2FDIV%3E%3C%2FDIV%3E%3C%2FDIV%3E%3C%2FLINGO-BODY%3E