METHOD OF CONVERTING A SERIAL VECTOR FORMAT (SVF) FILE TO A VECTOR COMPATIBLE WITH A SEMICONDUCTOR TESTING SYSTEM
20230027456 · 2023-01-26
Assignee
Inventors
Cpc classification
G01R31/318314
PHYSICS
International classification
Abstract
Provided is a method for enabling a semiconductor test system for testing field programmable gate arrays (FPGAs) to operate as a device programmer by converting a serial vector format (SVF) file containing a bitstream and converting the file to a vector compatible with the semiconductor test system. When executed on an HP93K test system, as an example, the vector generates JTAG (Joint Test Action Group) signals, which program the bitstream into a Field Programmable Gate Array (FPGA). The inventive method eliminates the need for a separate computer system that is normally required to run FPGA programming software and also eliminates the need to use FPGA vendor provided JTAG programming pods. Eliminating the need for the vendor software, a separate computer system, and programming pods reduces equipment cost, maintenance, and streamlines the electrical test, evaluation, and characterization of FPGAs.
Claims
1. A method for converting a serial vector file (SVF) to operate as a semiconductor system vector for a semiconductor testing system, the method comprising: searching the SVF file for at least one boundary scan description language (BSDL) configuration instruction; searching text in the SVF file that follows the configuration instruction for at least a first occurrence of text that is enclosed between an open parenthesis that includes at least one configuration bitstream; extracting the at least one configuration bitstream from the searched text and save to a at least one separate text file; parsing the at least one separate text file into one or more nibbles each containing four configuration data bits; and converting the one or more nibbles into a semiconductor system vector that is compatible with the semiconductor testing system.
2. The method of claim 1, wherein each nibble of the one of more nibbles comprises a series of hexadecimal characters.
3. The method of claim 2, wherein each hexadecimal character represents four data bits, of a field programmable gate array (FPGA) bitstream.
4. The method of claim 1, wherein the SVF file includes a plurality of configuration bitstreams and the method further comprises: extracting each of the plurality of configuration bitstreams and saving each of the extracted plurality of configuration bitstreams to a respective file.
5. The method of claim 1, further comprising: reading in a BSDL file that contains boundary scan and Joint Test Action Group (JTAG) instructions for an FPGA; generating one or more of a JTAG RESET or a configuration load instruction based on the BSDL file that contains the boundary scan and Joint Test Action Group (JTAG) instructions for the FPGA.
6. The method of claim 1, further comprising: wherein parsing the at least one separate text file further comprises detecting particular BSDL instructions; and calling a function to generate a corresponding JTAG vector text when the particular BSDL instructions are detected.
7. The method of claim 6, wherein the particular BSDL instructions includes the word “RESET” in the SVF file.
8. The method of claim 1, wherein a semiconductor under test by the semiconductor testing system in an FPGA.
9. The method of claim 1, wherein the semiconductor testing system is one of an HP93000 or a Teledyne Microflex testing system.
10. The method of claim 9, wherein the semiconductor system vector is an HP93000 vector file.
11. A computer-readable medium storing computer executable code, the code when executed by a processor causes the processor to: search an SVF file for at least one boundary scan description language configuration (BSDL) instruction in a semiconductor testing system; search text in the SVF file that follows the configuration instruction for at least a first occurrence of text that is enclosed between an open parenthesis that includes at least one configuration bitstream; extract the at least one configuration bitstream from the searched text and save to a at least one separate text file; parse the at least one separate text file into one or more nibbles each containing four configuration data bits; and convert the one or more nibbles into a semiconductor system vector that is compatible with the semiconductor testing system.
12. The computer-readable medium of claim 11, wherein each nibble of the one of more nibbles comprises a series of hexadecimal characters.
13. The computer-readable medium of claim 12, wherein each hexadecimal character represents four data bits, of a field programmable gate array (FPGA) bitstream.
14. The computer-readable medium of claim 11, wherein the SVF file includes a plurality of configuration bitstreams and the code when executed by a processor further causes the processor to: extract each of the plurality of configuration bitstreams and saving each of the extracted plurality of configuration bitstreams to a respective file.
15. The computer-readable medium of claim 11, wherein the code when executed by a processor causes the processor to: read in a BSDL file that contains boundary scan and Joint Test Action Group (JTAG) instructions for an FPGA; and generate one or more of a JTAG RESET or a configuration load instruction based on the BSDL file that contains the boundary scan and Joint Test Action Group (JTAG) instructions for the FPGA.
16. The computer-readable medium of claim 11, wherein the code when executed by a processor causes the processor to: parse the at least one separate text file including detecting particular BSDL instructions; and call a function to generate a corresponding JTAG vector text when the particular BSDL instructions are detected.
17. The computer-readable medium of claim 16, wherein the particular BSDL instructions includes the word “RESET” in the SVF file.
18. The computer-readable medium of claim 11, wherein a semiconductor under test by the semiconductor testing system in an FPGA.
19. The computer-readable medium of claim 11, wherein the semiconductor testing system is one of an HP93000 or a Teledyne Microflex testing system.
20. The computer-readable medium of claim 11, wherein the semiconductor system vector is an HP93000 vector file.
Description
BRIEF DESCRIPTION OF THE DRAWINGS
[0010] The detailed description of the drawings particularly refers to the accompanying figures in which:
[0011]
[0012]
[0013]
[0014]
[0015]
[0016]
[0017]
[0018]
[0019]
[0020]
[0021]
[0022]
[0023]
DETAILED DESCRIPTION
[0024] The embodiments of the invention described herein are not intended to be exhaustive or to limit the invention to the precise forms disclosed. Rather, the embodiments selected for description have been chosen to enable one skilled in the art to practice the invention.
[0025] The present invention provides for methods to enable a semiconductor test system, such as an HP93K system, to also operate as a device programmer. In some aspects, the disclosed methodologies include converting a Serial Vector Format (SVF) file containing a bitstream to a vector compatible with the test system, such as an HP93K vector. When executed on an HP93K tester, the vector generates Joint Test Action Group (JTAG) signals that program the bitstream into the Field Programmable Gate Array (FPGA). The present inventive methods eliminate the need for separate computer systems that are normally required to run FPGA programming software and eliminates the need to use an FPGA vendor JTAG programming pod. Eliminating the need for the vendor software, a separate computer system, and a programming pod reduces equipment cost, maintenance, and streamlines the electrical test, evaluation, and characterization of FPGAs. It is noted that while the present disclosure illustrates examples pertaining the HP93K test systems, the methods disclosed herein are also applicable to other similar systems that utilize vectors and digital signals, such a Teradyne Microflex testing system as merely one example.
[0026] In order to explain how software converts an SVF file to an HP93K vector, a brief overview of the components of an SVF file, as well as the components of an HP93K vector file will be discussed.
[0027] Referring now to
[0028]
[0029] The presently disclosed methodology, which may be implemented by a processor executing executable code or software, consists of at least two processes or steps. The first process is extracts a bitstream from an SVF and is named herein “bitstream_extractor.” This process involves searching the SVF file for the BSDL configuration instruction. After finding an occurrence of the BSDL configuration instruction, the next step in the first process involves searching the text following the configuration instruction for the first occurrence of text that is enclosed between an open parenthesis “(” and a closed parenthesis “).” The text that is enclosed between the open and closed parentheses and that immediately follows a BSDL configuration instruction is a configuration bitstream. The first process then serves to extract this configuration bitstream and save it to a separate text file. There can be multiple bitstreams inside one SVF file and the first process serves to extract each bitstream and save each one to its own file. The first file is assigned a filename with a “0” appended to it as the suffix. For each subsequent file that is created the suffix is incremented to create a unique filename for each bitstream file.
[0030] The second process is a bitstream-to-vector conversion, which is named “bitstream2vector” as one exemplary nomenclature, and opens the text file(s) generated by the first process and parses the text, which is a series of hexadecimal characters. Each hexadecimal character represents four data bits, or a “nibble” of the FPGA bitstream. Thus, for each hexadecimal character the second process will generate a body of HP93K compatible vector text that represents four configuration data bits. This body of HP93K compatible vector text is herein referred to as “Vector_nibble_text.”
[0031]
[0032] As illustrated at 500 in
[0033] The vector text is then saved to an ASCII text file. When this file is converted to the HP93K binary format, merged into the HP93K vector set for an FPGA, and used with the appropriate pin configuration, levels setup, and timing setup for the HP93K, this vector text will load a bitstream into an FPGA. The existing HP93K vector set will already have BSDL vectors to place the JTAG state machine of the FPGA into the Test Logic Reset state, issue BSDL instructions to condition the FPGA to be ready to accept a configuration bitstream, and move the JTAG state machine of the FPGA into the “Shift Data Register”, (Shift-DR) state.
[0034]
[0035] As shown in
[0036] The method 600 then begins a “WHILE” loop as indicated through the inclusion of decision block 610, as an example. The loop effectuates a search of the “SVF_File_Text” string variable for a BSDL configuration load command, which in this case is “SIR 5 TDI (05)” as shown by the query in decision block 610. As long as “SIR 5 TDI (05)” is found within the “SVF_File_Text” string variable, the WHILE loop will continue to execute. When “SIR 5 TDI (05)” is not found in the “SVF_File_Text” string variable the WHILE loop will terminate as shown at block 612.
[0037] When “SIR 5 TDI (05)” is found at block 610, flow proceeds to block 614 where all text occurring after the “SIR 5 TDI (05)” search string is stored into a string variable referred to herein as “after_substring” as merely an exemplary nomenclature as shown in block 614. Next, the string variable “after_substring” is then searched for the first occurrence of the open parenthesis character “(” and all text occurring after the open parenthesis character is stored into a string variable herein referred to as “temp_substring” as shown in block 616. Additionally as shown at block 616, when the close parenthesis character is found the “temp_substring” is then split into two segments. The first segment is the text that comes before the “)” character and is stored to a string variable herein referred to as “BITSTREAM”. The second segment is the text that follows the “)” character.
[0038] Flow then proceeds to block 618 wherein the processes therein include overwriting the contents of the “SVF_File_Text” string variable by the contents of the second segment, which thus updates the “SVF_File_Text” string variable and readies the WHILE loop to find the next bitstream in the “SVF_File_Text.” Next the value of the “loop_counter” integer variable, which is incremented on every loop iteration, is converted to a string data type and stored to a string variable herein referred to as “loop_suffix_string” as shown in block 620.
[0039] Next, as shown in the continued illustration of the flow diagram of method 600 in
[0040] Next, flow proceed to block 626 where the order of the hexadecimal characters in the “BITSTREAM” string variable is reversed to make it so the least significant nibble is loaded into the FPGA first, then all line feed characters in “BITSTREAM” are replaced with null strings. Further, the file pointed to by the “Current_Bitstream_destination_file” variable is opened as shown at block 628. The contents of the “BITSTREAM” string variable are copied into the file as shown at block 630. The file pointed to by the “Current_Bitstream_destination_file” variable is then closed as also indicated in block 630. After block 630, flow proceeds to block 632 wherein the “loop_counter” integer variable by is then incremented by ‘1’, and the program then returns to the beginning of the WHILE loop start (i.e., decision block 610) as shown in
[0041]
[0042] The method 700 then employs, at least in this example, a nested FOR loop, where the value of “Number_of_Segments” controls the number of iterations of the outer loop and the “Max_number_of_Characters_allowed” controls the number of iterations of the inner loop. The outer FOR loop is accomplished by creating a new integer variable, “Segment_count” and initializing it to ‘0’ as shown at block 718. Another integer variable named, “Outer_Character_count” is created to keep track of the character position from which text is retrieved from the “Bit_File_Text” string variable on each iteration. The variable “Outer_Character_count” is initialized to ‘0’ before the outer loop as also shown at block 718. Every iteration of the outer FOR loop will increment the value in “Segment_count” and compare it to “Number_of_Segments” as shown at decision block 720. When the value of “Segment_count” becomes greater than or equal to “Number_of_Segments”, the FOR loop will terminate as shown at 722. The incrementing of the value “Segment_count” is updated near the end of the outer loop as will be shown at block 774 in
[0043] When “Segment_count” is less than “Number_of_Segments” as determined in block 720 and shown at block 724, flow proceeds to block 726 shown in
[0044] Method 700 further includes performing a search and replace operation on the “Bitstream_source_file_string” string variable to replace the occurrence of “IM.bit” with the string value “VECTOR” as shown at block 730. The value of the “Segment_count” integer variable is further converted to a string data type and appended to the end of the value in “Bitstream_source_file_string” as shown at block 732. Moreover, the string value, “.dat” is appended to the end of the value in “Bitstream_source_file_string” and this new string value is then converted to a path variable, referred to herein as a “Vector_Destination_File” as shown at block 734.
[0045] At this point in the outer loop control is transferred to the inner FOR loop. This inner FOR loop is accomplished by creating an integer variable named “Character_count” and initializing it to a value of ‘0’ as shown at block 736. Additionally, an integer variable named “Vector_Text_string” is initializing to Null as shown at block 738. Each iteration of the inner FOR loop will increment the “Character_count” variable and compare it to the value of “Max_number_of_Characters_allowed” as will be seen from decision block 740. When the value of “Character_count” becomes greater than or equal to “Max_number_of_Characters_allowed”, the inner FOR loop will return the “Vector_Text_string” variable and release program control back to the outer FOR loop as shown at block 742 (and continued in
[0046] It is noted that when the value “Character_count” is less than “Max_number_of_Characters_allowed”, the inner loop essentially swaps a single hexadecimal character of the bitstream with a body of ASCII text that represents four HP93K clock cycles (using the example of an HP 93000 testing system, and not limited to such). For most of the hexadecimal characters, a substitution of four HP93K clock cycles will work. However, the last bit of the bitstream, which occurs on the last hexadecimal character as shown in
[0047] Turning back to
[0048] The detection of the last hexadecimal character is accomplished by adding ‘1’ to the “Character_count” variable and comparing it to the “Max_number_of_Characters_allowed” variable, which is further indicated at block 748. If these two values are not equal, then it indicates the last hexadecimal character is not being processed and the “last_character” Boolean variable is then set to FALSE as shown at block 750. If these two values are equal, then it indicates the last hexadecimal character in the last segment is being processed and the “last_character” Boolean variable is then set to TRUE as shown at block 752. Next, a single character is retrieved from “Bitstream_segment_string” variable and stored to string variable named “Current_Bitstream_Character” as shown at block 754.
[0049] The method 700 then calls a function referred to herein as, “HEX2BIN_BITSTREAM_TAP,” which takes the “Current_Bitstream_Character” and “last_character” variables as arguments and returns a string variable named, “Vector_nibble_text. This call is shown at block 756 in
[0050]
[0051] Considering the case where the “Current_Bitstream_Character” is a hexadecimal “1”, 0x1h the “HEX2BIN_BITSTREAM_TAP” function will evaluate the logic state of the “last_character” variable and if TRUE, the function will return the “Vector_nibble_text” variable composed of six HP93K vector cycles as shown in
[0052] Turning back to
[0053] If the “Character_count” variable is equal to the “Max_number_of_Characters_allowed” as determined at block 740, then the inner FOR loop has completed its last iteration and the inner FOR loop will release the “Vector_Text_string” variable and return program control to the outer FOR loop at shown at 742 and continued on
[0054] The vendor software for programming FPGAs typically supports an option to generate a Serial Vector Format File, (SVF File). The SVF file contains boundary scan instructions that are issued through the JTAG interface of the FPGA to perform programming or readback of the FPGA bitstream. By accepting the SVF file as an input and outputting an HP93K compatible vector, the software described in this patent offers an alternative method to load a bitstream into an FPGA connected to the HP93K tester. When executed from the HP93K tester, the vector issues the appropriate boundary scan instructions and bitstream data through the JTAG interface and allows the HP93K tester to replace both the vendor programming pod and vendor software.
[0055] By using the HP93K tester as the device programmer there is no longer a need to connect the vendor programming pod to FPGA when it is connected to the HP93K tester, which avoids the problem of subjecting the vendor programming pod to the same temperature conditions as the FPGA. The vectors generated by the software are issued from the HP93K tester directly to the FPGA through the JTAG interface. After the vector is generated by the software, it is merged into the HP93K vector set and stored on the HP93K workstation. The vector is tightly integrated into the instrument controller software that is part of the HP93K workstation. Whenever the bitstream is required to be loaded, the vector can be executed from the HP93K tester, which will then generate signals on the four to five JTAG device pins of the FPGA. This eliminates the need for an additional computer running the vendor software, which avoids the potential point of failure if Ethernet traffic or serial port traffic is restricted due to an IA mandate, and avoids under-utilizing an expensive resource, such as an additional computer, for the sole purpose of programming an FPGA.
[0056] Presently, the methodology disclosed herein extracts the bitstream portion from the SVF file and converts it to an HP93K vector and relies on the other boundary scan vectors, such as the JTAG RESET and configuration load instruction to already exist in the HP93K vector set. However, it is possible to enhance the methodology to also generate the JTAG RESET, configuration load instruction, as well as other vectors by modifying the software to read in a BSDL, (Boundary Scan Description Language) File, which contains all of the possible boundary scan/JTAG instructions for the FPGA. As the method can be configured to parse the text in the SVF file, it can be further configured to detect which BSDL instructions are issued, then call a function to generate the corresponding HP93K JTAG vector text. For instance, any occurrence of the word “RESET” in the SVF file would initiate a call to the function, which would then generate the following JTAG RESET vector:
[0057] In an example illustrated by
[0058]
[0059] Next, method 1200 includes extracting the at least one configuration bitstream from the searched text and save to a at least one separate text file as shown at block 1206. In block 1208, the method 1200 then includes parsing the at least one separate text file into one or more nibbles each containing four configuration data bits. Finally, method 1200 includes converting the one or more nibbles into a semiconductor system vector that is compatible with the semiconductor testing system as shown at block 1210.
[0060] In other aspects, it is noted that each nibble of the one of more nibbles comprises a series of hexadecimal characters. Additionally, each hexadecimal character represents four data bits, of a field programmable gate array (FPGA) bitstream.
[0061] In yet further aspects, the method 1200 includes that the SVF file includes a plurality of configuration bitstreams and extracting each of the plurality of configuration bitstreams and saving each of the extracted plurality of configuration bitstreams to a respective file. In yet other aspects, method 1200 includes reading in a BSDL file that contains boundary scan and Joint Test Action Group (JTAG) instructions for an FPGA, and generating one or more of a JTAG RESET or a configuration load instruction based on the BSDL file that contains the boundary scan and Joint Test Action Group (JTAG) instructions for the FPGA.
[0062] In yet more aspects, method 1200 includes that parsing the at least one separate text file further comprises detecting particular BSDL instructions, and calling a function to generate a corresponding JTAG vector text when the particular BSDL instructions are detected. In one example, the particular BSDL instructions includes the word “RESET” in the SVF file.
[0063] Method 1200 as includes that a semiconductor under test by the semiconductor testing system in an FPGA. Also, the semiconductor testing system is one of an HP93000 or a Teledyne Microflex testing system, and the semiconductor system vector may be an HP93000 vector file or other vector file compatible with other semiconductor testing systems.
[0064] In aspects, the present methods may be implemented by an apparatus that includes a computer, microcontroller, microprocessor, or specialized processor that executes computer-readable code stored on a tangible computer readable medium. An exemplary block diagram of such an apparatus 1300 that may implement the methods disclosed herein in illustrated in
[0065] Apparatus 1300 includes at least one processing system 1302 including one or more processors 1304 responsible for processing, including the execution of computer executable code or software stored on a computer-readable medium 1306. Software shall be construed broadly to mean instructions, instruction sets, code, code segments, program code, programs, subprograms, software modules, applications, software applications, software packages, routines, subroutines, objects, executables, threads of execution, procedures, functions, etc., whether referred to as software, firmware, middleware, microcode, hardware description language, or otherwise. The software, when executed by the processor 1304, causes the processing system 1302 to perform the various functions described above for any particular apparatus. The computer-readable medium 1306 may also be used for storing data that is manipulated by the processor 1304 when executing software.
[0066] In further aspects, the computer-readable medium 1306 may be a non-transitory computer-readable medium. A non-transitory computer-readable medium includes, by way of example, a magnetic storage device (e.g., hard disk, floppy disk, magnetic strip), an optical disk (e.g., a compact disc (CD) or a digital versatile disc (DVD)), a smart card, a flash memory device (e.g., a card, a stick, or a key drive), a random access memory (RAM), a read only memory (ROM), a programmable ROM (PROM), an erasable PROM (EPROM), an electrically erasable PROM (EEPROM), a register, a removable disk, and any other suitable medium for storing software and/or instructions that may be accessed and read by a computer. The computer-readable medium 1306 may reside in the processing system 1302, external to the processing system 1302, or distributed across multiple entities including the processing system 1302. The computer-readable medium 1306 may be embodied in a computer program product. By way of example, a computer program product may include a computer-readable medium in packaging materials. Those skilled in the art will recognize how best to implement the described functionality presented throughout this disclosure depending on the particular application and the overall design constraints imposed on the overall system.
[0067] Additionally, the apparatus 1300 may include an Input/Output Interface 1308 for reading in data (e.g., SVF files) and outputting processed vector files (e.g., HP93K vector files).
[0068] Although the invention has been described in detail with reference to certain preferred embodiments or examples, variations and modifications exist within the spirit and scope of the invention as described and defined in the following claims.