Files
kunlun/export/inc/dnn/iot_dnn_api.h
2024-09-28 14:24:04 +08:00

86 lines
3.3 KiB
C
Executable File

/****************************************************************************
Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
be copied by any method or incorporated into another program without
the express written consent of Aerospace C.Power. This Information or any portion
thereof remains the property of Aerospace C.Power. The Information contained herein
is believed to be accurate and Aerospace C.Power assumes no responsibility or
liability for its use in any way and conveys no license or title under
any patent or copyright and makes no representation or warranty that this
Information is free from patent or copyright infringement.
****************************************************************************/
#ifndef IOT_DNN_API_H
#define IOT_DNN_API_H
/* os shim includes */
#include "os_types_api.h"
#ifdef __cplusplus
extern "C" {
#endif
/** \defgroup dnn APIs
* @brief dnn APIs
* These functions could be used for dnn calculation, feature must be of
* type int16, height of feature should be 1, width of feature should be
* no larger than 16(i.e. at most 16 audios can be proceeded by calling
* one dnn driver function), channel of features should be no larger than 4096
* If the width of feature is less than 16, (16 - width of feature)
* zeros will be padded on every row so that every row of the feature
* occupies 32bytes in DDR.
*
*
*/
/** @addtogroup dnn_APIs
* @{
*/
/* @brief dnn_driver() - run a dnn net!
* @param config: the array storing the config
* @param fi_start_addr: where the 1st data of input is put,
* the input should be put successively
* @param wi_start_addr: where the 1st data of weight is put,
* the weight should be put successively
* @param fo_start_addr: where the 1st data of output is put,
* the input would be put successively
* @param audio_num: how many pieces of audios need calculating
* in one dnn process, this number should between 1 and 16
* @param pause_again_layer: the number of the layers after whose completion
* the computing process will be paused, should be set to 0
* when no pause is needed
* @param non_linear: non linear algorithm in the net, there should be only
* one kind of non linear algorithm in the net
*/
void dnn_driver(volatile uint32_t *config, uint32_t fi_start_addr,
uint32_t wi_start_addr, uint32_t fo_start_addr,
uint8_t audio_num, uint8_t pause_layer, uint8_t non_linear);
/* @brief dnn_recover() - recover a paused dnn computing process
* @param pause_again_layer: the number of the layers after whose completion
* the computing process will be paused again, should be set
* to 0 when no pause is needed
*/
void dnn_recover(uint8_t pause_again_layer);
/* @brief dnn_get_cycles() - get how many cycles for trans and cal in the last
* dnn calculation
* @param trans_cycle: where the trans cycle is put
* @param cal_cycle: where the calculate cycle is put
*/
void dnn_get_cycles(uint32_t *trans_cycle, uint32_t *cal_cycle);
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif // IOT_DNN_API_H