解決できないように見える処理のために配列間でデータを渡すことに問題があります。(Nios II プロセッサでコードを実行しています)
HAL タイプの定義: alt_u8 : 符号なし 8 ビット整数。alt_u32 : 符号なし 32 ビット整数。
私の FPGA のコアは、データ処理のために一度に 128 ビットを取り込みます。関数に 4 x 32 ビットの unsigned int を渡すことで、元のコードでこれを機能させています。
alt_u32 load[4] = {0x10101010, 0x10101010, 0x10101010, 0x10101010};
関数はこのデータを処理し、別の配列を使用して情報を取得します。
data_setload(&context,&load); //load data
data_process(&context); //process
memcpy(resultdata,context.result,4*sizeof(unsigned int));
for(i=0; i<4 ; i++){
printf("received 0x%X \n",resultdata[i]); //print to screen
}
上記は完全に機能しますが、2番目の部分と組み合わせようとすると機能しません。
データの保存に使用するバッファがあります: alt_u8 rbuf[512];
データ バッファがいっぱいになると、「rbuf」の内容を配列「load」に転送しようとしています。主な問題は、load[4] が 4 × 32 ビットの unsigned int を処理に使用することです。したがって、これらの 4 x 32 ビット符号なし int を rbuf からのデータで「埋め」、データを処理し、結果を配列に保存したいと考えています。次に、再度ループして、配列 load[4] に (rbuf からの) 次のデータ セットを入力し、rbuf が空になるまで続けます。(必要に応じてゼロで埋めます)
alt_u8 rbuf[512];
alt_u8 store[512];
alt_u32 resultdata[512];
alt_u32 *reg;
int d, k, j;
for (j=0; j<512; j++){
read_byte(&ch); //gets data
rbuf[j]=ch; //stores to array rbuf
}
printf(" rbuf is full \n");
memcpy(store,rbuf,512*sizeof(alt_u8)); //store gets the value in rbuf.
for(k=0;k<16;k++) //for loop used take in 4 chars to one unsigned 32 bit int
{
for(d=0;d<4;d++) //store 4 chars into an one 32 bit unsigned int
{
*reg = (*reg<<8 | store[d]) ;
}
reg =+1; //increment pointer to next address location(not working properly)
} //loop back
reg = 0; //set pointer address back to 0
for(j=0;j<16;j++) //trying to process data from here
{
memcpy(load,reg,4*sizeof(alt_u32)); //copy first 4 locations from 'reg' to 'load'
data_setload(&context,&load); //pass 'load' to function
data_process(&context); //process 128 bits
memcpy(resultdata,context.result,4*sizeof(alt_u32)); //results copied to 'resultdata'
*reg = *reg + 4; //increment pointer address by 4?
*resultdata = *resultdata+4; //increment resultdata address by 4 and loop again
}
/** need to put data back in char form for displaying***/
for(k=0;k<16;k++) //for loop used take chars from 32 unsigned int
{
for(d=4;d>=0;d--) //loads 4 chars FROM A 32 unsigned int
{
store[d] = *resultdata;
*resultdata = *resultdata>>8;
}
resultdata =+1; //increment pointer next address location
}
for(d=0; d<512 ; d++){
printf("received 0x%X ",store[d]);
最終的な目標は次のとおりです。
符号なし 8 ビットの Array_A を符号なし 32 ビットの Array_B[4] にコピーします >> Array_B[4] を HDL コードで処理します。入力が 128 ビットである必要があります。次にループバックし、次の 128 ビットを取得して処理します。