// square_root_apfixed.h
// 2022/02/07 by marsee
//
#ifndef __SQUARE_ROOT_APFIXED__
#define __SQUARE_ROOT_APFIXED__
#include <stdint.h>
#include <ap_int.h>
#include <ap_fixed.h>
#include <math.h>
#define INT_BIT 8
#define BIT_LEN 16
int square_root_apfixed(ap_ufixed<BIT_LEN, INT_BIT, AP_TRN_ZERO, AP_WRAP> in_val,
ap_ufixed<BIT_LEN, INT_BIT, AP_TRN_ZERO, AP_WRAP> &sqroot);
#endif
// square_root_apfixed.cpp
// 2022/02/07 by marsee
//
#include "square_root_apfixed.h"
static constexpr int DB_BIT_LEN = BIT_LEN*2;
static constexpr int DB_INT_BIT = INT_BIT*2;
int square_root_apfixed(ap_ufixed<BIT_LEN, INT_BIT, AP_TRN_ZERO, AP_WRAP> in_val,
ap_ufixed<BIT_LEN, INT_BIT, AP_TRN_ZERO, AP_WRAP> &sqroot){
#pragma HLS INTERFACE mode=s_axilite port=return
#pragma HLS INTERFACE mode=s_axilite port=sqroot
#pragma HLS INTERFACE mode=s_axilite port=in_val
ap_ufixed<DB_BIT_LEN, DB_INT_BIT, AP_TRN_ZERO, AP_WRAP> temp = 0.0;
ap_ufixed<DB_BIT_LEN, DB_INT_BIT, AP_TRN_ZERO, AP_WRAP> square;
ap_ufixed<DB_BIT_LEN, DB_INT_BIT, AP_TRN_ZERO, AP_WRAP> val = pow(2.0, INT_BIT-1);
for(int i=(BIT_LEN-1); i>=0; --i){
//#pragma HLS PIPELINE II=1
temp += val;
square = temp * temp;
if(square > in_val){
temp -= val;
}
val /= 2;
}
sqroot = (ap_ufixed<BIT_LEN, INT_BIT, AP_TRN, AP_WRAP>)temp;
return(0);
}
// square_root_apfixed_tb.cpp
// 2022/02/07 by marsee
//
#include "square_root_apfixed.h"
int main(){
ap_ufixed<BIT_LEN, INT_BIT, AP_TRN_ZERO, AP_WRAP> result;
for(uint32_t i=0; i<256; i++){
square_root_apfixed((ap_ufixed<BIT_LEN, INT_BIT, AP_TRN_ZERO, AP_WRAP>)i, result);
printf("i = %d, result = %f\n", i, (float)result);
}
return(0);
}
i = 0, result = 0.000000
i = 1, result = 1.000000
i = 2, result = 1.414062
i = 3, result = 1.730469
i = 4, result = 2.000000
i = 5, result = 2.234375
i = 6, result = 2.449219
i = 7, result = 2.644531
i = 8, result = 2.828125
i = 9, result = 3.000000
i = 10, result = 3.160156
i = 11, result = 3.316406
i = 12, result = 3.460938
i = 13, result = 3.605469
i = 14, result = 3.738281
i = 15, result = 3.871094
i = 16, result = 4.000000
i = 17, result = 4.121094
i = 18, result = 4.242188
i = 19, result = 4.355469
i = 20, result = 4.468750
i = 21, result = 4.582031
i = 22, result = 4.687500
i = 23, result = 4.792969
i = 24, result = 4.898438
i = 25, result = 5.000000
i = 26, result = 5.097656
i = 27, result = 5.195312
i = 28, result = 5.289062
i = 29, result = 5.382812
i = 30, result = 5.476562
i = 31, result = 5.566406
i = 32, result = 5.656250
i = 33, result = 5.742188
i = 34, result = 5.828125
i = 35, result = 5.914062
i = 36, result = 6.000000
i = 37, result = 6.082031
i = 38, result = 6.164062
i = 39, result = 6.242188
i = 40, result = 6.324219
i = 41, result = 6.402344
i = 42, result = 6.480469
i = 43, result = 6.554688
i = 44, result = 6.632812
i = 45, result = 6.707031
i = 46, result = 6.781250
i = 47, result = 6.855469
i = 48, result = 6.925781
i = 49, result = 7.000000
i = 50, result = 7.070312
i = 51, result = 7.140625
i = 52, result = 7.210938
i = 53, result = 7.277344
i = 54, result = 7.347656
i = 55, result = 7.414062
i = 56, result = 7.480469
i = 57, result = 7.546875
i = 58, result = 7.613281
i = 59, result = 7.679688
i = 60, result = 7.742188
i = 61, result = 7.808594
i = 62, result = 7.871094
i = 63, result = 7.933594
i = 64, result = 8.000000
i = 65, result = 8.058594
i = 66, result = 8.121094
i = 67, result = 8.183594
i = 68, result = 8.246094
i = 69, result = 8.304688
i = 70, result = 8.363281
i = 71, result = 8.425781
i = 72, result = 8.484375
i = 73, result = 8.542969
i = 74, result = 8.601562
i = 75, result = 8.660156
i = 76, result = 8.714844
i = 77, result = 8.773438
i = 78, result = 8.828125
i = 79, result = 8.886719
i = 80, result = 8.941406
i = 81, result = 9.000000
i = 82, result = 9.054688
i = 83, result = 9.109375
i = 84, result = 9.164062
i = 85, result = 9.218750
i = 86, result = 9.273438
i = 87, result = 9.324219
i = 88, result = 9.378906
i = 89, result = 9.433594
i = 90, result = 9.484375
i = 91, result = 9.539062
i = 92, result = 9.589844
i = 93, result = 9.640625
i = 94, result = 9.695312
i = 95, result = 9.746094
i = 96, result = 9.796875
i = 97, result = 9.847656
i = 98, result = 9.898438
i = 99, result = 9.949219
i = 100, result = 10.000000
i = 101, result = 10.046875
i = 102, result = 10.097656
i = 103, result = 10.148438
i = 104, result = 10.195312
i = 105, result = 10.246094
i = 106, result = 10.292969
i = 107, result = 10.343750
i = 108, result = 10.390625
i = 109, result = 10.437500
i = 110, result = 10.484375
i = 111, result = 10.535156
i = 112, result = 10.582031
i = 113, result = 10.628906
i = 114, result = 10.675781
i = 115, result = 10.722656
i = 116, result = 10.769531
i = 117, result = 10.816406
i = 118, result = 10.859375
i = 119, result = 10.906250
i = 120, result = 10.953125
i = 121, result = 11.000000
i = 122, result = 11.042969
i = 123, result = 11.089844
i = 124, result = 11.132812
i = 125, result = 11.179688
i = 126, result = 11.222656
i = 127, result = 11.265625
i = 128, result = 11.312500
i = 129, result = 11.355469
i = 130, result = 11.398438
i = 131, result = 11.445312
i = 132, result = 11.488281
i = 133, result = 11.531250
i = 134, result = 11.574219
i = 135, result = 11.617188
i = 136, result = 11.660156
i = 137, result = 11.703125
i = 138, result = 11.746094
i = 139, result = 11.789062
i = 140, result = 11.832031
i = 141, result = 11.871094
i = 142, result = 11.914062
i = 143, result = 11.957031
i = 144, result = 12.000000
i = 145, result = 12.039062
i = 146, result = 12.082031
i = 147, result = 12.121094
i = 148, result = 12.164062
i = 149, result = 12.203125
i = 150, result = 12.246094
i = 151, result = 12.285156
i = 152, result = 12.328125
i = 153, result = 12.367188
i = 154, result = 12.406250
i = 155, result = 12.449219
i = 156, result = 12.488281
i = 157, result = 12.527344
i = 158, result = 12.566406
i = 159, result = 12.609375
i = 160, result = 12.648438
i = 161, result = 12.687500
i = 162, result = 12.726562
i = 163, result = 12.765625
i = 164, result = 12.804688
i = 165, result = 12.843750
i = 166, result = 12.882812
i = 167, result = 12.921875
i = 168, result = 12.960938
i = 169, result = 13.000000
i = 170, result = 13.035156
i = 171, result = 13.074219
i = 172, result = 13.113281
i = 173, result = 13.152344
i = 174, result = 13.187500
i = 175, result = 13.226562
i = 176, result = 13.265625
i = 177, result = 13.300781
i = 178, result = 13.339844
i = 179, result = 13.378906
i = 180, result = 13.414062
i = 181, result = 13.453125
i = 182, result = 13.488281
i = 183, result = 13.527344
i = 184, result = 13.562500
i = 185, result = 13.597656
i = 186, result = 13.636719
i = 187, result = 13.671875
i = 188, result = 13.710938
i = 189, result = 13.746094
i = 190, result = 13.781250
i = 191, result = 13.816406
i = 192, result = 13.855469
i = 193, result = 13.890625
i = 194, result = 13.925781
i = 195, result = 13.960938
i = 196, result = 14.000000
i = 197, result = 14.035156
i = 198, result = 14.070312
i = 199, result = 14.105469
i = 200, result = 14.140625
i = 201, result = 14.175781
i = 202, result = 14.210938
i = 203, result = 14.246094
i = 204, result = 14.281250
i = 205, result = 14.316406
i = 206, result = 14.351562
i = 207, result = 14.386719
i = 208, result = 14.421875
i = 209, result = 14.453125
i = 210, result = 14.488281
i = 211, result = 14.523438
i = 212, result = 14.558594
i = 213, result = 14.593750
i = 214, result = 14.625000
i = 215, result = 14.660156
i = 216, result = 14.695312
i = 217, result = 14.730469
i = 218, result = 14.761719
i = 219, result = 14.796875
i = 220, result = 14.832031
i = 221, result = 14.863281
i = 222, result = 14.898438
i = 223, result = 14.929688
i = 224, result = 14.964844
i = 225, result = 15.000000
i = 226, result = 15.031250
i = 227, result = 15.066406
i = 228, result = 15.097656
i = 229, result = 15.128906
i = 230, result = 15.164062
i = 231, result = 15.195312
i = 232, result = 15.230469
i = 233, result = 15.261719
i = 234, result = 15.296875
i = 235, result = 15.328125
i = 236, result = 15.359375
i = 237, result = 15.394531
i = 238, result = 15.425781
i = 239, result = 15.457031
i = 240, result = 15.488281
i = 241, result = 15.523438
i = 242, result = 15.554688
i = 243, result = 15.585938
i = 244, result = 15.617188
i = 245, result = 15.652344
i = 246, result = 15.683594
i = 247, result = 15.714844
i = 248, result = 15.746094
i = 249, result = 15.777344
i = 250, result = 15.808594
i = 251, result = 15.839844
i = 252, result = 15.871094
i = 253, result = 15.902344
i = 254, result = 15.933594
i = 255, result = 15.964844
日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|
- | - | - | - | - | 1 | 2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 | - | - | - | - | - | - |