철저하게 처리 할 수없는 처리를 위해 배열간에 데이터를 전달하는 데 문제가 있습니다. (Nios II 프로세서에서 코드를 실행 중입니다.)배열 데이터 처리
HAL 타입 정의 : alt_u8 : 부호없는 8 비트 정수. alt_u32 : 부호없는 32 비트 정수.
내 FPGA의 코어는 데이터 처리를 위해 한 번에 128 비트를 사용합니다. 이 데이터
alt_u32 load[4] = {0x10101010, 0x10101010, 0x10101010, 0x10101010};
함수 과정을 그리고 내가 정보를 검색하는 다른 배열을 사용 :이 함수에 4 × 32 비트 부호없는 INT를 전달하여 내 원래의 코드에서 일하고있다.
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
}
위의 코드는 완벽하게 작동하지만 두 번째 부분과 결합하면 작동하지 않습니다.
데이터 저장에 버퍼가 있습니다. alt_u8 rbuf [512];
데이터 버퍼가 가득 차면 'rbuf'의 내용을 'load'배열로 전송하려고합니다. 가장 큰 문제는 load [4]가 처리를 위해 4 x 32 비트 부호없는 int를 사용한다는 것입니다. 그래서이 4 개를 32 비트 부호없는 정수로 rbuf의 데이터로 '채우고'데이터를 처리하고 결과를 배열에 저장하려고합니다. 그런 다음 다시 반복하고 배열 load [4]를 다음 데이터 집합 (rbuf)으로 채우고 rbuf가 비어있을 때까지 계속합니다. 8 비트가 Array_B [4] 부호없는 32 비트 >>을 Array_B [4 과정에 복사 부호의
Array_A (패드 제로 필요하다면)
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]);
최종 목표 걸릴 것입니다 ] 내 HDL 코드. 입력이 128 비트가되어야합니다. 그런 다음 루프 백하고 다음 128 비트를 가져 와서 처리합니다.
이 잘못 C#을이에 와서 않는 경우 나, C 코드를 볼 – Gusman
태그, C#을하지 않습니다 :
마지막으로, 여기에 최소 메모리 사용량과 최상의 성능과 전체 rewriten 기능은 무엇입니까? – crashmstr
변경됨 ... 사과 –