diff options
author | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2012-11-20 11:27:56 -0600 |
---|---|---|
committer | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2012-11-20 11:27:56 -0600 |
commit | 1e0e20535638122a86f0e44f0505c0eccc4a9fee (patch) | |
tree | cda81b08ef6e0a4e76b724b20ccb71a142f3c65e /fpga/xilinx/programmer/bit2svf/bitdevice.c | |
parent | f1ead126008e8e73fac05c193450d3aac57fc4e1 (diff) | |
download | ulab-1e0e20535638122a86f0e44f0505c0eccc4a9fee.tar.gz ulab-1e0e20535638122a86f0e44f0505c0eccc4a9fee.zip |
Add verified Xilinx programming script and device type extractor
Diffstat (limited to 'fpga/xilinx/programmer/bit2svf/bitdevice.c')
-rw-r--r-- | fpga/xilinx/programmer/bit2svf/bitdevice.c | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/fpga/xilinx/programmer/bit2svf/bitdevice.c b/fpga/xilinx/programmer/bit2svf/bitdevice.c new file mode 100644 index 0000000..cad4b7e --- /dev/null +++ b/fpga/xilinx/programmer/bit2svf/bitdevice.c @@ -0,0 +1,83 @@ +/************************************************************************** + + Copyright (c) 2012 Timothy Pearson <kb9vqf@pearsoncomputing.net> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA + + Description: Dumps the specified device in a xilinx bit file to stdout + +***************************************************************************/ +#include <stdio.h> +#include <ctype.h> +#include <string.h> +#include <stdlib.h> +#include "bitfile.h" + +#define BSIZE 1048576 /* 1k */ + +void convertToUpperCase(char *str) +{ + while(*str != '\0') { + *str = toupper((unsigned char)*str); + str++; + } +} + +void findAndRemoveEndString(char *str, char* text) +{ + char *location = strstr(str, text); + int len = strlen(str); + int sublen = strlen(text); + if (location && (location == (str+(len-sublen)))) { + *location = 0; + } +} + +void stripPackageSuffix(char *str) +{ + findAndRemoveEndString(str, "FG256"); + findAndRemoveEndString(str, "CSG324"); +} + +/* read a bit file from stdin */ +int main(int argc, char *argv[]) +{ + struct bithead bh; + FILE *bitfile; + + if (argc < 1) { + fprintf(stderr,"Insufficient args %s filename.bit\n",argv[0]); + return 1; + } + + if ((bitfile=fopen(argv[1],"rb"))==NULL) { + perror("BITFILE"); + return 2; + } + + initbh(&bh); + if (readhead(&bh, bitfile)) { + fprintf(stderr,"Invalid bit file header\n"); + return 3; + } + + convertToUpperCase(bh.part); + stripPackageSuffix(bh.part); + printf("XC%s\n", bh.part); + + fclose(bitfile); + freebh(&bh); + return 0; +} |