/** * Main entry point. */ int main(int argc, char* argv[]) { fpga_dev * fpgaDev; int rtn, channel, timeout; unsigned int arg0, arg1; struct timeval tv; double tempTime; timeout = 10*1000; // 10 secs. channel = 1; arg0 = (unsigned int)rand(); arg1 = (unsigned int)rand(); if ((rtn = fpga_init(&fpgaDev)) < 0) { printf("error opening fpga: %d\n", rtn); return rtn; } if ((rtn = fpga_channel_open(fpgaDev, channel, timeout)) < 0) { printf("error opening fpga channel: %d\n", rtn); return rtn; } printf("Opened.\n"); while (1) { if ((rtn = fpga_send_args(fpgaDev, channel, arg0, arg1, 2, 1)) < 0) { printf("error sending args to fpga: %d\n", rtn); break; } printf("Called with args: 0x%x, 0x%x.\n", arg0, arg1); gettimeofday(&tv, NULL); tempTime = tv.tv_sec + tv.tv_usec / 1000000.0; if ((rtn = fpga_recv_data(fpgaDev, channel, (unsigned char *)gData, DATA_SIZE)) < 0) { printf("error receiving data from fpga: %d\n", rtn); break; } gettimeofday(&tv, NULL); tempTime = (tv.tv_sec + tv.tv_usec / 1000000.0) - tempTime; printf("Duration: %f MBs: %f\n", tempTime, (rtn/tempTime)/(1024*1024)); printf("Received data response, length: %d (0x%x)\n", rtn, rtn); printf("Values 1 & 2: 0x%x, 0x%x (from first half DMA transfer) should equal 0x%x, 0x%x\n", gData[1], gData[2], arg0, arg1); printf("Values 64KB + 1 & 64KB + 2: 0x%x, 0x%x (from second half DMA transfer) should equal 0x%x, 0x%x\n", gData[(64*1024/4) + 1], gData[(64*1024/4) + 2], arg0, arg1); break; } printf("Done.\n"); fpga_channel_close(fpgaDev, 0); fpga_free(fpgaDev); printf("Exiting.\n"); return 0; }
int main(int argc, char *argv[]) { FILE *in_file; FILE *out_file; char *file_header; char *file_data; int rtn; int sent = 0; int recv = 0; int len = 512*512; FILE *file; char *buffer; unsigned long fileLen; if(argc != 3) { printf("Wrong number of arguments\n"); return -1; } in_file = fopen(argv[1],"rb"); if (!in_file) { fprintf(stderr, "Unable to open image file\n"); return; } file_header=(char *)malloc(header_size); fread(file_header, 1, header_size, in_file); //Save file data file_data=(char *)malloc(image_size); fread(file_data, 4, image_size, in_file); //Close the image file fclose(in_file); //Open a new file to store the result out_file = fopen(argv[2],"wb"); //Store image header fwrite(file_header, 1, header_size, out_file); //Open partial bitstream file //Reset user logic rtn = fpga_reg_wr(UCTR_REG,0x0); rtn = fpga_reg_wr(UCTR_REG,0x1); rtn = fpga_reg_wr(CTRL_REG,0x0); rtn = fpga_reg_wr(CTRL_REG,0x1); while(sent < len){ rtn = fpga_send_data(USERPCIE1,(unsigned char *) file_data+sent,512,1); rtn = fpga_send_data(USERPCIE2,(unsigned char *) file_data+sent+512,512,1); rtn = fpga_send_data(USERPCIE3,(unsigned char *) file_data+sent+1024,512,1); rtn = fpga_reg_wr(0x400,0x1); rtn = fpga_recv_data(USERPCIE1,(unsigned char *) gDATA+recv,512,1); rtn = fpga_reg_wr(0x400,0x0); sent += 512; recv += 512; } fwrite(gDATA,1,image_size+2,out_file); fclose(out_file); free(file_header); free(file_data); return 0; }
int main(int argc, char *argv[]) { FILE *in_file; FILE *out_file; char *file_header; char *file_data; int rtn; int sent = 0; int recv = 0; int len = 512*512; int line_buff = 1; FILE *file; char *buffer; unsigned long fileLen; in_file = fopen(argv[1],"rb"); if (!in_file) { fprintf(stderr, "Unable to open image file\n"); return; } file_header=(char *)malloc(header_size); fread(file_header, 1, header_size, in_file); //Save file data file_data=(char *)malloc(image_size); fread(file_data, 4, image_size, in_file); //Close the image file fclose(in_file); //Open a new file to store the result out_file = fopen(argv[2],"wb"); //Store image header fwrite(file_header, 1, header_size, out_file); //Open partial bitstream file file = fopen(argv[3], "rb"); if (!file) { fprintf(stderr, "Unable to open partial bit file\n"); return; } //Get file length fseek(file, 0, SEEK_END); fileLen=ftell(file); fseek(file, 0, SEEK_SET); //Allocate memory buffer=(char *)malloc(fileLen+1); if (!buffer) { fprintf(stderr, "Memory error!\n"); fclose(file); return; } //Read file contents into buffer fread(buffer, 1, fileLen, file); fclose(file); //Send partial bitstream to FPGA rtn = fpga_send_data(ICAP, (unsigned char *) buffer, fileLen, 0); free(buffer); //Reset user logic rtn = fpga_reg_wr(UCTR_REG,0x0); rtn = fpga_reg_wr(UCTR_REG,0x1); rtn = fpga_reg_wr(CTRL_REG,0x0); rtn = fpga_reg_wr(CTRL_REG,0x1); if(strcmp(argv[4],"s")==0) { printf("Streaming filter"); while(sent < len){ rtn = fpga_send_data(USERPCIE1,(unsigned char *) file_data+sent,4096,1); rtn = fpga_recv_data(USERPCIE1,(unsigned char *) gDATA+sent,4096,1); sent += 4096; } } else if (strcmp(argv[4],"c")==0) { while(sent < len){ rtn = fpga_send_data(USERPCIE1,(unsigned char *) file_data+sent,512,1); rtn = fpga_send_data(USERPCIE2,(unsigned char *) file_data+sent+512,512,1); rtn = fpga_send_data(USERPCIE3,(unsigned char *) file_data+sent+1024,512,1); //rtn = fpga_wait_interrupt(hostuser1); //rtn = fpga_wait_interrupt(hostuser2); //rtn = fpga_wait_interrupt(hostuser3); rtn = fpga_reg_wr(0x400,0x1); rtn = fpga_recv_data(USERPCIE1,(unsigned char *) gDATA+recv,512,1); //printf("Data receive done\n"); rtn = fpga_reg_wr(0x400,0x0); sent += 512; recv += 512; } } else printf("Wrong filter type %s\n",argv[3]); fwrite(gDATA,1,image_size+2,out_file); fclose(out_file); free(file_header); free(file_data); return 0; }