]> git.sur5r.net Git - openocd/commitdiff
Add TRST support to xsvf tools. Courtesy of Dick Hollenbeck <dick@softplc.com>
authorkc8apf <kc8apf@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Fri, 23 Jan 2009 07:05:04 +0000 (07:05 +0000)
committerkc8apf <kc8apf@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Fri, 23 Jan 2009 07:05:04 +0000 (07:05 +0000)
git-svn-id: svn://svn.berlios.de/openocd/trunk@1357 b42882b7-edfa-0310-969c-e2dbd0fdcd60

tools/xsvf_tools/svf2xsvf.py
tools/xsvf_tools/xsvfdump.py

index 20080db3049e1c04efd1d779e1ec38f32752ecc5..bf2a12099f42dda152c1a24ca8cee419201ca63d 100644 (file)
@@ -57,6 +57,11 @@ outputFilename = sys.argv[2]
 doCOMMENTs = True       # Save XCOMMENTs in the output xsvf file
 #doCOMMENTs = False       # Save XCOMMENTs in the output xsvf file
 
+# pick your file encoding
+file_encoding = 'ISO-8859-1'
+#file_encoding = 'utf-8'
+
+
 xrepeat = 0             # argument to XREPEAT, gives retry count for masked compares
 
 
@@ -74,7 +79,8 @@ StateTxt = ("RESET","IDLE",
 
 (XCOMPLETE,XTDOMASK,XSIR,XSDR,XRUNTEST,hole0,hole1,XREPEAT,XSDRSIZE,XSDRTDO,
     XSETSDRMASKS,XSDRINC,XSDRB,XSDRC,XSDRE,XSDRTDOB,XSDRTDOC,
-    XSDRTDOE,XSTATE,XENDIR,XENDDR,XSIR2,XCOMMENT,XWAIT,XWAITSTATE,LCOUNT,LDELAY,LSDR) = range(28)
+    XSDRTDOE,XSTATE,XENDIR,XENDDR,XSIR2,XCOMMENT,XWAIT,XWAITSTATE,
+    LCOUNT,LDELAY,LSDR,XTRST) = range(29)
 
 #Note: LCOUNT, LDELAY, and LSDR are Lattice extensions to SVF and provide a way to loop back
 # and check a completion status, essentially waiting on a part until it signals that it is done.
@@ -90,6 +96,8 @@ LSDR  1 TDI  (0)
         TDO  (1);
 """
 
+#XTRST is an opcode Xilinx seemed to have missed and it comes from the SVF TRST statement.
+
 LineNumber = 1
 
 def s_ident(scanner, token): return ("ident", token.upper(), LineNumber)
@@ -127,8 +135,13 @@ scanner = re.Scanner([
     re.MULTILINE
     )
 
+# open the file using the given encoding
+file = open( sys.argv[1], encoding=file_encoding )
+
 # read all svf file input into string "input"
-input = open( sys.argv[1] ).read()
+input = file.read()
+
+file.close()
 
 # Lexer:
 # create a list of tuples containing (tokenType, tokenValue, LineNumber)
@@ -368,6 +381,8 @@ run_state_allowed = ('IRPAUSE', 'DRPAUSE', 'RESET', 'IDLE')
 enddr_state_allowed = ('DRPAUSE', 'IDLE')
 endir_state_allowed = ('IRPAUSE', 'IDLE')
 
+trst_mode_allowed = ('ON', 'OFF', 'Z', 'ABSENT')
+
 enddr_state = IDLE
 endir_state = IDLE
 
@@ -681,6 +696,19 @@ try:
                 if tokVal != ';':
                     raise ParseError( tokLn, tokVal, "Expecting ';' after FREQUENCY cycles HZ")
 
+        elif tokVal == 'TRST':
+            nextTok()
+            if tokVal not in trst_mode_allowed:
+                raise ParseError( tokLn, tokVal, "Expecting 'ON|OFF|Z|ABSENT' after TRST")
+            trst_mode = tokVal
+            nextTok()
+            if tokVal != ';':
+                raise ParseError( tokLn, tokVal, "Expecting ';' after TRST trst_mode")
+            obuf = bytearray( 2 )
+            obuf[0] = XTRST
+            obuf[1] = trst_mode_allowed.index( trst_mode )  # use the index as the binary argument to XTRST opcode
+            output.write( obuf )
+
         else:
             raise ParseError( tokLn, tokVal, "Unknown token '%s'" % tokVal)
 
index b2e3c7d7e29322f266358fb9589d619b15f185a5..e65f8d5b273263fdc26daacaa4009aa157e18f91 100644 (file)
@@ -39,7 +39,8 @@ Xsdrsize = 0
 
 (XCOMPLETE,XTDOMASK,XSIR,XSDR,XRUNTEST,hole0,hole1,XREPEAT,XSDRSIZE,XSDRTDO,
     XSETSDRMASKS,XSDRINC,XSDRB,XSDRC,XSDRE,XSDRTDOB,XSDRTDOC,
-    XSDRTDOE,XSTATE,XENDIR,XENDDR,XSIR2,XCOMMENT,XWAIT,XWAITSTATE,LCOUNT,LDELAY,LSDR) = range(28)
+    XSDRTDOE,XSTATE,XENDIR,XENDDR,XSIR2,XCOMMENT,XWAIT,XWAITSTATE,
+    LCOUNT,LDELAY,LSDR,XTRST) = range(29)
 
 
 (RESET,IDLE,
@@ -51,6 +52,10 @@ State = ("RESET","IDLE",
     "DRSELECT","DRCAPTURE","DRSHIFT","DREXIT1","DRPAUSE","DREXIT2","DRUPDATE",
     "IRSELECT","IRCAPTURE","IRSHIFT","IREXIT1","IRPAUSE","IREXIT2","IRUPDATE")
 
+
+trst_mode_allowed = ('ON', 'OFF', 'Z', 'ABSENT')
+
+
 Setsdrmasks = 0
 SetsdrmasksOnesCount = 0
 
@@ -229,6 +234,14 @@ def ShowOpcode( op, f ):
         tdo = bytes2hexString( f, Xsdrsize )
         print("LSDR 0x%s 0x%s" % (tdi, tdo) )
 
+    elif op == XTRST:
+        # the argument is a single byte and it is the index into "trst_mode_allowed"
+        trst_mode = ReadByte(f)
+        if trst_mode <= 3:
+            print("TRST %s" % trst_mode_allowed[trst_mode] )
+        else:
+            print("TRST 0x%02X" % trst_mode );
+
     else:
         print("UNKNOWN op 0x%02X %d" % (op, op))
         exit(1)