/* * Copyright 2011-2019 Xilinx, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef __AP_DECL_H__ #define __AP_DECL_H__ // ---------------------------------------------------------------------- #if !defined(__AP_FIXED_H__) && !defined(__AP_INT_H__) && !defined(__AUTOPILOT_CBE_H__) && !defined(__HLS_HALF_H__) #error "Only ap_fixed.h and ap_int.h can be included directly in user code." #endif // Test __SYNTHESIS__ only for mode #if !defined(__SYNTHESIS__) && (defined(AESL_SYN) || defined(__HLS_SYN__)) //#pragma message "AESL_SYN and __HLS_SYN__ should be replaced by __SYNTHESIS__" #define __SYNTHESIS__ #endif /* for safety*/ #if (defined(_AP_N) || defined(_AP_C)) #error One or more of the following is defined: _AP_N, _AP_C. Definition conflicts with their usage as template parameters. #endif /* for safety*/ #if (defined(_AP_W) || defined(_AP_I) || defined(_AP_S) || defined(_AP_Q) || \ defined(_AP_O) || defined(_AP_W2) || defined(_AP_I2) || \ defined(_AP_S2) || defined(_AP_Q2) || defined(_AP_O2) || \ defined(_AP_N) || defined(_AP_N2)) #error \ "One or more of the following is defined: _AP_W, _AP_I, _AP_S, _AP_Q, _AP_O, _AP_N, _AP_W2, _AP_I2, _AP_S2, _AP_Q2, _AP_O2, _AP_N2. Definition conflicts with their usage as template parameters." #endif /*for safety*/ #if (defined(_AP_W3) || defined(_AP_S3) || defined(_AP_W4) || defined(_AP_S4)) #error \ "One or more of the following is defined: _AP_W3, _AP_S3, _AP_W4,_AP_S4. Definition conflicts with their usage as template parameters." #endif #if (defined(_AP_W1) || defined(_AP_S1) || defined(_AP_T) || \ defined(_AP_T1) || defined(_AP_T2) || defined(_AP_T3) || defined(_AP_T4)) #error \ "One or more of the following is defined: _AP_W1, _AP_S1, _AP_T, _AP_T1, _AP_T2, _AP_T3, _AP_T4. Definition conflicts with their usage as template parameters." #endif #ifndef __cplusplus #error "AP data type can only be used in C++" #endif // ---------------------------------------------------------------------- #ifndef __SC_COMPATIBLE__ /// ap_fixed quantification mode enum ap_q_mode { AP_RND, //< rounding to plus infinity AP_RND_ZERO, //< rounding to zero AP_RND_MIN_INF, //< rounding to minus infinity AP_RND_INF, //< rounding to infinity AP_RND_CONV, //< convergent rounding AP_TRN, //< truncation AP_TRN_ZERO, //< truncation to zero }; // FIXME for legacy code #ifndef SYSTEMC_INCLUDED #define SC_RND AP_RND #define SC_RND_ZERO AP_RND_ZERO #define SC_RND_MIN_INF AP_RND_MIN_INF #define SC_RND_INF AP_RND_INF #define SC_RND_CONV AP_RND_CONV #define SC_TRN AP_TRN #define SC_TRN_ZERO AP_TRN_ZERO #endif // !defined(SYSTEMC_INCLUDED) /// ap_fixed saturation mode enum ap_o_mode { AP_SAT, //< saturation AP_SAT_ZERO, //< saturation to zero AP_SAT_SYM, //< symmetrical saturation AP_WRAP, //< wrap-around (*) AP_WRAP_SM, //< sign magnitude wrap-around (*) }; // FIXME for legacy code #ifndef SYSTEMC_INCLUDED #define SC_SAT AP_SAT #define SC_SAT_ZERO AP_SAT_ZERO #define SC_SAT_SYM AP_SAT_SYM #define SC_WRAP AP_WRAP #define SC_WRAP_SM AP_WRAP_SM #endif // !defined(SYSTEMC_INCLUDED) #else // defined(__SC_COMPATIBLE__) // There will not be sc_fxdefs.h, and the emu should be defined by ap_fixed. /// ap_fixed quantification mode enum ap_q_mode { SC_RND, //< rounding to plus infinity SC_RND_ZERO, //< rounding to zero SC_RND_MIN_INF, //< rounding to minus infinity SC_RND_INF, //< rounding to infinity SC_RND_CONV, //< convergent rounding SC_TRN, //< truncation SC_TRN_ZERO, //< truncation to zero }; #define AP_RND SC_RND #define AP_RND_ZERO SC_RND_ZERO #define AP_RND_MIN_INF SC_RND_MIN_INF #define AP_RND_INF SC_RND_INF #define AP_RND_CONV SC_RND_CONV #define AP_TRN SC_TRN #define AP_TRN_ZERO SC_TRN_ZERO /// ap_fixed saturation mode enum ap_o_mode { SC_SAT, //< saturation SC_SAT_ZERO, //< saturation to zero SC_SAT_SYM, //< symmetrical saturation SC_WRAP, //< wrap-around (*) SC_WRAP_SM, //< sign magnitude wrap-around (*) }; #define AP_SAT SC_SAT #define AP_SAT_ZERO SC_SAT_ZERO #define AP_SAT_SYM SC_SAT_SYM #define AP_WRAP SC_WRAP #define AP_WRAP_SM SC_WRAP_SM #endif // defined(__SC_COMPATIBLE__) template struct ap_int_base; template struct ap_int; template struct ap_uint; template struct ap_range_ref; template struct ap_bit_ref; template struct ap_concat_ref; template struct ap_fixed_base; template struct ap_fixed; template struct ap_ufixed; template struct af_range_ref; template struct af_bit_ref; /// string base mode enum BaseMode { AP_BIN = 2, AP_OCT = 8, AP_DEC = 10, AP_HEX = 16 }; #ifndef SYSTEMC_INCLUDED #define SC_BIN 2 #define SC_OCT 8 #define SC_DEC 10 #define SC_HEX 16 #endif // !defined(SYSTEMC_INCLUDED) // Alias C data types #ifdef _MSC_VER typedef signed __int64 ap_slong; typedef unsigned __int64 ap_ulong; #else // !defined(_MSC_VER) typedef signed long long ap_slong; typedef unsigned long long ap_ulong; #endif // !defined(_MSC_VER) enum { _AP_SIZE_char = 8, _AP_SIZE_short = sizeof(short) * 8, _AP_SIZE_int = sizeof(int) * 8, _AP_SIZE_long = sizeof(long) * 8, _AP_SIZE_ap_slong = sizeof(ap_slong) * 8 }; #endif // !defined(__AP_DECL_H__) // -*- cpp -*-