summaryrefslogtreecommitdiffstats
path: root/fpga/xilinx/programmer/bit2svf/bitdevice.c
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2012-11-20 11:27:56 -0600
committerTimothy Pearson <kb9vqf@pearsoncomputing.net>2012-11-20 11:27:56 -0600
commit1e0e20535638122a86f0e44f0505c0eccc4a9fee (patch)
treecda81b08ef6e0a4e76b724b20ccb71a142f3c65e /fpga/xilinx/programmer/bit2svf/bitdevice.c
parentf1ead126008e8e73fac05c193450d3aac57fc4e1 (diff)
downloadulab-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.c83
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;
+}