#include <ap_int.h>
int sum_of_squares(volatile ap_int<8> *x, volatile ap_int<8> *y, volatile ap_int<17> *result){
#pragma HLS INTERFACE m_axi depth=10 port=y offset=slave
#pragma HLS INTERFACE m_axi depth=10 port=x offset=slave
#pragma HLS INTERFACE s_axilite port=return
#pragma HLS INTERFACE m_axi depth=10 port=result offset=slave
for(int i=0; i<10; i++){
result[i] = x[i]*x[i] + y[i]*y[i];
}
return(0);
}
// sum_of_squares_tb.cpp
#include <iostream>
#include <ap_int.h>
int sum_of_squares(volatile ap_int<8> *x, volatile ap_int<8> *y, volatile ap_int<17> *result);
int main(){
ap_int<8> x[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
ap_int<8> y[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
ap_int<17> result[10];
sum_of_squares(x, y, result);
for(int i=0; i<10; i++){
std::cout << "x[" << i << "]= " << (int)x[i] <<
", y[" << i << "] = " << (int)y[i] <<
", result[" << i << "] = " <<
result[i] << std::endl;
}
}
../../../sum_of_squares.cpp: 関数 ‘int sum_of_squares(volatile ap_int<8>*, volatile ap_int<8>*, volatile ap_int<17>*)’ 内:
../../../sum_of_squares.cpp:10:19: エラー: no match for ‘operator*’ (operand types are ‘volatile ap_int<8>’ and ‘volatile ap_int<8>’)
result[i] = x[i]*x[i] + y[i]*y[i];
と書いてあるので、volatile は必要だ。値が複数回更新されるデータ信号を指定するには、volatile 修飾子を使用してください。
int sum_of_squares(volatile char *x, volatile char *y, volatile int *result){
#pragma HLS INTERFACE m_axi depth=10 port=y offset=slave
#pragma HLS INTERFACE m_axi depth=10 port=x offset=slave
#pragma HLS INTERFACE s_axilite port=return
#pragma HLS INTERFACE m_axi depth=10 port=result offset=slave
for(int i=0; i<10; i++){
result[i] = x[i]*x[i] + y[i]*y[i];
}
return(0);
}
// sum_of_squares_tb.cpp
#include <iostream>
int sum_of_squares(volatile char *x, volatile char *y, volatile int *result);
int main(){
char x[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
char y[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int result[10];
sum_of_squares(x, y, result);
for(int i=0; i<10; i++){
std::cout << "x[" << i << "]= " << (int)x[i] <<
", y[" << i << "] = " << (int)y[i] <<
", result[" << i << "] = " <<
result[i] << std::endl;
}
}
//------------------------Address Info-------------------
// 0x00 : Control signals
// bit 0 - ap_start (Read/Write/COH)
// bit 1 - ap_done (Read/COR)
// bit 2 - ap_idle (Read)
// bit 3 - ap_ready (Read)
// bit 7 - auto_restart (Read/Write)
// others - reserved
// 0x04 : Global Interrupt Enable Register
// bit 0 - Global Interrupt Enable (Read/Write)
// others - reserved
// 0x08 : IP Interrupt Enable Register (Read/Write)
// bit 0 - Channel 0 (ap_done)
// bit 1 - Channel 1 (ap_ready)
// others - reserved
// 0x0c : IP Interrupt Status Register (Read/TOW)
// bit 0 - Channel 0 (ap_done)
// bit 1 - Channel 1 (ap_ready)
// others - reserved
// 0x10 : Data signal of ap_return
// bit 31~0 - ap_return[31:0] (Read)
// 0x18 : Data signal of x
// bit 31~0 - x[31:0] (Read/Write)
// 0x1c : reserved
// 0x20 : Data signal of y
// bit 31~0 - y[31:0] (Read/Write)
// 0x24 : reserved
// 0x28 : Data signal of result
// bit 31~0 - result[31:0] (Read/Write)
// 0x2c : reserved
// (SC = Self Clear, COR = Clear on Read, TOW = Toggle on Write, COH = Clear on Handshake)
int sum_of_squares(volatile char *x, volatile char *y, volatile int *result){
#pragma HLS INTERFACE m_axi depth=10 port=y offset=slave
#pragma HLS INTERFACE m_axi depth=10 port=x offset=slave
#pragma HLS INTERFACE s_axilite port=return
#pragma HLS INTERFACE m_axi depth=10 port=result offset=slave
LOOP1: for(int i=0; i<10; i++){
#pragma HLS PIPELINE II=1
result[i] = x[i]*x[i] + y[i]*y[i];
}
return(0);
}
int sum_of_squares(volatile char *x, volatile char *y, volatile int *result){
#pragma HLS INTERFACE m_axi depth=10 port=y offset=slave
#pragma HLS INTERFACE m_axi depth=10 port=x offset=slave
#pragma HLS INTERFACE s_axilite port=return
#pragma HLS INTERFACE m_axi depth=10 port=result offset=slave
LOOP1: for(int i=0; i<10; i++){
#pragma HLS PIPELINE II=1
char xt = x[i];
char yt = y[i];
result[i] = xt*xt + yt*yt;
}
return(0);
}
日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|
- | - | - | - | - | 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 | - | - | - | - | - | - |