THIS SPEC IS OBSOLETE

Similar documents
H O S T. FX2 SX2 Back - to - Back Setup. Project Objective. Overview

Cypress HX2VL Configuration Utility Blaster User Guide

Cypress HX2VL Configuration Utility Blaster User Guide

THIS SPEC IS OBSOLETE

AN EZ-USB FX3 I 2 C Boot Option. Application Note Abstract. Introduction. FX3 Boot Options

Use the Status Register when the firmware needs to query the state of internal digital signals.

HX2VL Development Kit Guide. Doc. # Rev. *A

HX2VL Development Kit Guide. Doc. # Rev. **

GPIF II Designer - Quick Start Guide

Writing to Internal Flash in PSoC 3 and PSoC 5

This optional pin is present if the Mode parameter is set to SyncMode or PulseMode. Otherwise, the clock input does not show.

Use the Status Register when the firmware needs to query the state of internal digital signals.

CE PSoC 4: Time-Stamped ADC Data Transfer Using DMA

Filter_ADC_VDAC_poll Example Project Features. General Description. Development Kit Configuration

CE56273 Associated Part Families: CY8C38xx/CY8C55xx Software: PSoC Creator Related Hardware: CY8CKIT-001 Author: Anu M D

Reviving Bit-slice Technology in a Programmable Fashion

This optional pin is present if the Mode parameter is set to SyncMode or PulseMode. Otherwise, the clock input does not show.

Voltage Reference (Vref) Features. General Description. Input/Output Connections. When to Use a Vref Voltage references and supplies

CY3660-enCoRe V and encore V LV DVK Kit Guide

THIS SPEC IS OBSOLETE

PSoC 1 I 2 C Bootloader

EZ-USB FX3 Development Kit Guide

AN SIO Tips and Tricks in PSoC 3 / PSoC 5. Application Note Abstract. Introduction

THIS SPEC IS OBSOLETE

For one or more fully configured, functional example projects that use this user module go to

FTG Programming Kit CY3670. Spec. # Rev. *C

4 to 1 Analog Multiplexer Data Sheet

CYClockMaker Programming Kit Guide CY3675. Doc. # Rev. **

CY7C603xx CYWUSB

8 to 1 Analog Multiplexer Datasheet AMux8 V 1.1. Features and Overview

CYClockMaker Programming Kit Guide CY3675. Doc. # Rev. *C

Preliminary. Gas Sensor Analog Front End Datasheet GasSensorAFE V Features and Overview. This datasheet contains Preliminary information.

Next-Generation Hot-Swap Controllers

DMX512 Receiver Datasheet DMX512Rx V 1.0. Features and Overview

Clock Programming Kit

Comparator (Comp) Features. General Description. When to use a Comparator 1.60

16-Bit Hardware Density Modulated PWM Data Sheet

This Application Note demonstrates an SPI-LIN slave bridge using a PSoC device. Demonstration projects are included.

LPF (Optional) CY8C24x93. Without LPF and ISR to 3* With LPF only** to 3* With ISR only to 3*

Programmable Threshold Comparator Data Sheet

The color of the Clock component waveform symbol will change based on the clock's domain (as shown in the DWR Clock Editor), as follows:

The following table lists user modules used in this code example and the hardware resources occupied by each user module.

CapSense I 2 C/SPI Timer Flash RAM

PSoC Programmer 3.12 Release Notes

FM3 MB9B100A/300A/400A/500A Series Inverter Solution GUI User Guide

GPIF II Designer 1.0. Doc. No Rev. **

144-Mbit QDR -II SRAM 2-Word Burst Architecture

PSoC 4 Low Power Comparator (LPComp) Features. General Description. When to Use a LPComp 2.0. Low input offset. User controlled offset calibration

Supported Devices: CY8C28x13, CY8C28x33, CY8C28x43, CY8C28x45, CY8C28x52, CY8C21x45, CY8C22x45, CY8C24x93. CY8C24x

Use the IDAC8 when a fixed or programmable current source is required in an application.

This section describes the various input and output connections for the SysInt Component.

Shadow Registers Datasheet ShadowRegs V 1.1. Features and Overview

Programmer User Guide

AN1090. NoBL : The Fast SRAM Architecture. Introduction. NoBL SRAM Description. Abstract. NoBL SRAM Operation

24-Bit Pseudo Random Sequence Generator Data Sheet

PSoC Designer Release Notes

Incremental ADC Data Sheet

Multifunction Serial Interface (PDL_MFS) Features. General Description. When to Use a PDL_MFS Component. Quick Start 1.0

12-Mbit (512 K 24) Static RAM

Bootloader project - project with Bootloader and Communication components

THIS SPEC IS OBSOLETE

Programmable Gain Amplifier Datasheet PGA V 3.2. Features and Overview

PSoC Creator Component Datasheet

CE58957 demonstrates how to implement the fade and toggle feature to the backlight LEDs of CapSense buttons.

AN Getting Started with EZ-USB FX2LP GPIF. Contents. 1 Introduction

AN PSoC 3 and PSoC 5 SFF-8485 Serial GPIO (SGPIO) Initiator Interface. Application Note Abstract. Introduction

For More Information Please contact your local sales office for additional information about Cypress products and solutions.

Digital Logic Gates. Features. General Description. Input/Output Connections. When to Use a Logic Gate. Input 1. Input 2. Inputs 3-8 * 1.

EZ-PD Analyzer Utility User Guide

EZ I 2 C Slave. Features. General Description. When to use a EZ I 2 C Slave 1.50

4K x 8 Dual-Port Static RAM and 4K x 8 Dual-Port SRAM with Semaphores

Use the Status Register when the firmware needs to query the state of internal digital signals.

One 32-bit counter that can be free running or generate periodic interrupts

PSoC Programmer Release Notes

Libraries Guide. Arithmetic Libraries User Guide. Document #: Rev. *A

This optional pin is present if the Mode parameter is set to SyncMode or PulseMode. Otherwise, the clock input does not show.

THIS SPEC IS OBSOLETE

This input determines the next value of the output. The output does not change until the next rising edge of the clock.

Base Timer Channel (BT) Features. General Description. When to Use a PDL_BT Component 1.0

Release Notes SRN065 PSoC Programmer Version Release Date: November 9, 2009

Setting Oscillation Stabilization Wait Time of the main clock (CLKMO) and sub clock (CLKSO)

CE CY8CKIT-042-BLE F-RAM Data Logger

PSoC Blocks. CY8C20xx6/6A/6AS/6H/6L, CY8C20xx7/7S, CY7C643xx, CY7C604xx, CYONS2xxx, CYONSxNxxxx, CYRF89x35, CY8C20065, CY8C24x93, CY7C69xxx

EZ-USB NX2LP USB 2.0 NAND Flash Controller

This section describes the various input and output connections for the Voltage Fault Detector.

Digital Multiplexer and Demultiplexer. Features. General Description. Input/Output Connections. When to Use a Multiplexer. Multiplexer 1.

PSoC Programmer Release Notes

Firmware Description:

CE95314 PSoC 3, PSoC 4, and PSoC 5LP EZI2C

Use a DieTemp component when you want to measure the die temperature of a device.

Release Notes. Cypress USBSuite Windows Driver and Utility. Version 1.2.2

PTG Programming Kit CY3672. Features. Functional Description. CY3672-PRG Kit Contents. Set Up

W H I T E P A P E R. Introduction. Devices. Energy Comparison of Cypress F-RAM and EEPROM

Use the Status Register when the firmware needs to query the state of internal digital signals.

This section describes the various input and output connections for the Voltage Fault Detector.

Automatic reload of the period to the count register on terminal count

Capable of adjusting detection timings for start bit and data bit

CY8C29/27/24/23/21xxx, CY8CLED02/04/08/16, CY8CLED0xD, CY8CLED0xG, CY8C28x45, CY8CPLC20, CY8CLED16P01, CY8C28xxx. Main UM

AN F²MC-16FX Family, I2C. Contents. 1 Introduction. This application note describes how to communicate via I2C with a Serial EEPROM.

PSoC Programmer User Guide. Doc. No Rev. *H

Transcription:

THIS SPEC IS OBSOLETE Spec No: 001-63620 Spec Title: CONFIGURING A XILINX SPARTAN-3E FPGA OVER USB USING EZ-USB FX2LP(TM) - AN63620 Replaced by: NONE

Configuring a Xilinx Spartan-3E FPGA Over USB Using EZ-USB FX2LP Application Note Abstract AN63620 Author: Prajith Cheerakkoda Associated Project: Yes Associated Part Family: CY7C68013A/CY7C68014A/CY7C68015A/CY7V68016A Software Version: None Associated Application Notes: AN61345, AN6077 This application note demonstrates a technique for dynamically configuring a Xilinx Spartan-3E Field Programmable Gate Array (FPGA) over USB using EZ-USB FX2LP TM, a high-speed USB peripheral controller. After the FPGA is configured, FX2LP can act as a high-speed data path between the USB host and the FPGA. This capability of FX2LP enhances FPGA-based USB applications such as logical analyzers, oscilloscopes, image processing, and high-speed data acquisition. Introduction FX2LP is an excellent solution for adding high-speed USB functionality to FPGA-based solutions. AN61345 demonstrates the implementation of a high-speed interface between FX2LP and a Xilinx Spartan-3E FPGA with FX2LP acting in Slave FIFO mode and FPGA acting as the master to it. For an advanced FPGA-based application that requires high-speed USB connectivity, configuring the FPGA over USB using FX2LP eliminates the need for a dedicated configuration chip (for example, a PROM or a processor) for the FPGA. This method can also act as a replacement for the popular JTAG configuration interface that requires JTAG connectors on the board. Usage of this method reduces cost and board space. FX2LP can be interfaced to an external system in two modes of operation: GPIF (General Programmable Interface) mode and Slave FIFO mode. machine. This eliminates the need to store FX2LP firmware on a large EEPROM, so that a smaller, less expensive EEPROM which stores only the device VID/PID can be used. Hardware Connections There are various options for configuring a Xilinx Spartan -3E FPGA. In this application note, the configuration mode implemented using GPIF is the Non-Continuous SelectMAP mode. The following diagram illustrates the hardware connections required for programming the FPGA using GPIF. Figure 1. Hardware Connections Diagram FX2LP acts as a master to the external system and generates all the necessary control signals to read and write data. This mode is known as General Programmable Interface (GPIF). When the external system is intelligent enough to generate the necessary read and write control signals, it can act as the master of the interface and FX2LP can act as the slave device. Here, we configure FX2LP in the Slave FIFO mode. This application note demonstrates the usage of GPIF mode to load the configuration bitstream into FPGA. After the configuration is performed successfully using GPIF, the operation mode of FX2LP is switched to Slave FIFO so that the FPGA can act as a master for the data transfer phase. The scripting capability of the Cypress generic driver CyUSB.sys can be used for automatically downloading firmware to FX2LP after it is plugged into the host February 18, 2016 Document No. 001-63620 Rev. *C 1

The following table defines the interface between FX2LP and FPGA for the implementation of the SelectMAP configuration mode. Table 1. Assignment of FX2LP Pins to FPGA Configuration Signals FX2LP Pin IFCLK CTL1 PE3 FD[7:0] PE4 PA5 PE1 Xilinx Spartan-3E FPGA signal CCLK CSI_B RDWR_B D[7:0] PROG_B INIT_B DONE Description IFCLK is connected to configuration clock (CCLK). The IFCLK output can be configured to either 30 MHz or 48 MHz. When CSI_B is asserted, the FPGA samples the configuration data on each rising CCLK edge. The state RDWR_B pin decides whether the FPGA bus is being read or written into. When RDWR_B is asserted low, a write operation is to be performed to the FPGA. When it is high, this indicates a read operation. Because you are writing into the FPGA, you can permanently keep this pin low to indicate a data write condition. Byte-wide configuration data bus Drive PROG_B low and release to reprogram the FPGA. Holding the PROG_B pin low clears the configuration memory of the FPGA. After the PROG_B signal is de-asserted by FX2LP, it should wait until the FPGA asserts the INIT_B signal high. This indicates that the FPGA is ready to start the configuration process. If the FPGA drives the INIT_B signal low at the end of the configuration, it indicates a configuration error. This pin is low during configuration and asserted high by the FPGA once the configuration is completed successfully. The 56-pin package can be chosen for this application because the size of the included firmware does not exceed the size of the on-chip RAM. The following diagram demonstrates the timing diagram for the slave SelectMAP method of configuration. At instants 1, 2, and 3, a byte of configuration data each is clocked into the FPGA. The configuration timing specifications for each FPGA family can be found in the respective family datasheet. Figure 2. Timing Diagram for Slave SelectMAP Mode of Operation Usage of GPIF Designer to Create the Configuration Waveform GPIF Designer is a graphical user interface from Cypress to help developers in the creation of GPIF waveforms. Familiarity with the General Programmable Interface chapter of the EZ-USB Technical Reference Manual is necessary. Extensive documentation of the general GPIF functionality and waveform programming is also available in the Help menu of the GPIF Designer tool. After the block diagram is specified and waveforms are correctly configured, the GPIF Designer is ready to generate the GPIF waveform descriptors. The utility performs the generation of the data structures when the user selects the Export to GPIF.c function in the Tools menu. The state diagram for the configuration waveform is illustrated in the following figure. In s0, CSI_B is asserted and a byte of configuration data is placed on the data bus. In state S1, CSI_B is de-asserted and the data bus stays inactive. Figure 3. State Diagram for Waveform Creation The block diagram should be modified to indicate that CTL1 is the only control line to be used in the design and it is named as CS. There are no ready lines used for this design. After the waveform is triggered, the waveform terminates only when the transaction count (TC) expires. GPIF checks the transaction count each time the waveform passes through the idle state. February 18, 2016 Document No. 001-63620 Rev. *C 2

The following figure shows the block diagram view of the design in GPIF Designer. The IFCLK is inverted so that the setup time requirement for the FPGA configuration data is easily met. Figure 4. GPIF Designer Block Diagram View Figure 5. FIFO Write Waveform The decision point at S1 unconditionally branches the state-machine to idle state. The waveform is terminated only when the transaction count expires. February 18, 2016 Document No. 001-63620 Rev. *C 3

The following figure shows a logic analyzer trace of the generated gpif waveform. Figure 6. GPIF Waveform Exporting GPIF Waveforms To export the waveforms to a C file and include it in the firmware project, follow these steps: 1. Select Tools > Export to gpif.c File. 2. Save the file as gpif.c. Firmware Implementation Cypress provides a Firmware FrameWorks that implements 8051 code for EZ-USB chip initialization, USB standard device request handling, and USB suspend power management services for the user. The user only has to provide a USB descriptor table, and code to implement the peripheral function. The FrameWorks provide function hooks and example code to help with this process. The FrameWorks as well as the basic code examples are included in the FX2LP Development Kit CY3684. You can download the kit contents here. You can also find a number of code examples after installing the CY3684 DVK in location C:\Cypress\USB\Examples\FX2LP. The Firmware FrameWorks files can be found in location C:\Cypress\USB\Target\Fw\LP. The CY3684 DVK User guide contains an overview of the Firmware FrameWorks and how to go about using the same for developing application firmware. The user is expected to go through the same for ease of understanding this section. The TD_Init() section configures the endpoint FIFOs for byte-wide auto mode operation. In auto mode of operation, all the packets received by the FIFO from the host are automatically committed to the peripheral domain without any CPU intervention. AN6077 explains in detail about the auto and manual modes of operation of the EZ-USB FIFOs. void TD_Init(void) CPUCS = 0x10; GpifInit( ); EP2CFG = 0xA0; EP6CFG = 0xE0; // Called once at startup // CLKSPD[1:0]=10, for 48MHz operation // CLKOE=0, don't drive CLKOUT // init GPIF engine via GPIFTool output file // EP2OUT, bulk, size 512, 4x buffered // EP6IN, bulk, size 512, 4x buffered FIFORESET = 0x80; // set NAKALL bit to NAK all transfers from host FIFORESET = 0x02; // reset EP2 FIFO FIFORESET = 0x06; // reset EP6 FIFO February 18, 2016 Document No. 001-63620 Rev. *C 4

FIFORESET = 0x00; // clear NAKALL bit to resume normal operation EP2FIFOCFG = 0x00; // allow core to see zero to one transition of auto out bit EP2FIFOCFG = 0x10; // auto out mode, disable PKTEND zero length send, byte operation EP6FIFOCFG = 0x08; // auto in mode, disable PKTEND zero length send, byte operation EP2GPIFFLGSEL = 0x01; // For EP2OUT, GPIF uses emtpy flag PORTECFG = 0x00; //Do not enable any of the alternate configurations of PORTE PORTACFG = 0x00; //Do not enable any of the alternate configurations of PORTA OEA = 0xC0; //PORTA_5(INIT) is set as input OEE = 0x18; //PORTE_1(DONE) is input, PORTE_4(PROG_B) and PORTE_3(RDWR_B) are outputs IOE = 0xFE; // initialize PORTE_4 and PORTE_3 as high The configuration process is triggered when FX2LP receives a vendor command 0xB2 from the host. After the vendor command is received successfully, the configuration process starts after the host sends the configuration bitstream data to endpoint FIFO 2. The vendor command handler for command 0xB2 is as follows: case StartConfig: //vendor command 0xb2 EP0CS = bmhsnak; // Acknowledge handshake phase of device request GpifInit( ); FIFORESET = 0x80; // set NAKALL bit to NAK all transfers from host FIFORESET = 0x02; // reset EP2 FIFO FIFORESET = 0x06; // reset EP6 FIFO FIFORESET = 0x00; // clear NAKALL bit to resume normal operation EP2FIFOCFG = 0x00; // allow core to see zero to one transition of auto out bit EP2FIFOCFG = 0x10; // auto out mode, byte-wide EP6FIFOCFG = 0x08; // auto in mode, byte-wide prg_enable = TRUE; IOE = IOE & 0xEF; //PROG_B signal low EZUSB_Delay1ms(); IOE = IOE 0x10; //PROG_B signal kept asserted for 1 ms //PROG_B signal high February 18, 2016 Document No. 001-63620 Rev. *C 5

IOE = IOE & 0xF7; //Assert RDWR_B low break; The GPIF waveform is triggered by writing into the GPIFTRIG register in TD_Poll(). The transaction count register is written with the length of the configuration bitstream. void TD_Poll(void) // Handle OUT data... if(prg_enable) if( GPIFTRIG & 0x80 ) // if GPIF interface IDLE if (! ( EP24FIFOFLGS & 0x02 ) ) // if there's a packet in the peripheral domain for EP2 if ( INIT ) // if the FPGA is ready GPIFTCB2 = 0x04; GPIFTCB1 = 0x54; GPIFTCB0 = 0x8A; //setup transaction count. The bitstream //size is constant for each family of FPGA. //this can be changed by host using a //vendor command GPIFTRIG = GPIFTRIGWR GPIF_EP2; //launch GPIF FIFO WRITE Transaction from EP2 FIFO while(!( GPIFTRIG & 0x80 ) ) // poll GPIFTRIG.7 GPIF Done bit ; prg_enable= FALSE; //end of configuration After the successful configuration, a vendor command 0xB3 is sent from the host to switch the mode of operation from GPIF to Slave FIFO. The vendor command handler for command 0xB3 is as follows: case StartXfer: EP0CS = bmhsnak; prg_enable = FALSE; PINFLAGSAB = 0x08; PINFLAGSCD = 0xE0; PORTACFG = 0x80; IFCONFIG = 0xE3; // FLAGA - EP6FF // FLAGD - EP2EF February 18, 2016 Document No. 001-63620 Rev. *C 6

FIFORESET = 0x80; // activate NAK-ALL to avoid race conditions // see TRM section 15.14 FIFORESET = 0x02; // reset, FIFO 2 // FIFORESET = 0x04; // reset, FIFO 4 // FIFORESET = 0x06; // reset, FIFO 6 // FIFORESET = 0x08; // reset, FIFO 8 // FIFORESET = 0x00; // deactivate NAK-ALL // handle the case where we were already in AUTO mode... //...for example: back to back firmware downloads... // EP2FIFOCFG = 0x00; // AUTOOUT=0, WORDWIDE=0 // core needs to see AUTOOUT=0 to AUTOOUT=1 switch to arm endp's // EP2FIFOCFG = 0x10; // AUTOOUT=1, WORDWIDE=0 // EP6FIFOCFG = 0x4C; // AUTOIN=1, ZEROLENIN=1, WORDWIDE=0 break; February 18, 2016 Document No. 001-63620 Rev. *C 7

FPGA Configuration Utility An example host application, FPGA Configuration Utility, created for configuring the FPGA, is included in the design. The application was developed in Visual C# 2008 Express Edition using the Cypress Application Development Library CyUSB.Net DLL which is included in SuiteUSB 3.4. The device has to be bound to CyUSB.sys, a general purpose driver developed by Cypress. This application helps as a reference for developing your own host applications for FPGA configuration. This provides the flexibility to select the bitstream file for configuration. The following figure displays the FPGA Configuration Utility. Figure 7. FPGA Configuration Utility Testing the Project You can either download firmware to FX2LP using a host application or write a script file to download the firmware automatically when the device is plugged in. AN50963 explains the implementation of scripting for automatic firmware download. For testing purposes, you can follow these steps to manually download the firmware to FX2LP using CyConsole, a development host application included in the SuiteUSB3.4 SDK. Connect the board to the PC. It enumerates with the default internal descriptors. Use the CyUSB.inf file inside the Drivers folder to bind with the device. For help on binding the driver, refer to MatchingDriverToUSBDevice.htm inside the Drivers folder. AN61465 contains detailed explanations on the generation of an.inf file. Start the CyConsole host application. In the Options menu, select EZ-USB Interface. The following window is displayed Click Select Bitstream to select the required configuration file and click Configure to perform the configuration process. Configuration Successful message displays after the completion of the process. Click the Download button and navigate to master.hex file in the associate project folder. Wait for the firmware to re-enumerate and reconnect as a Cypress EZ-USB device. A window is displayed prompting you to bind the driver. Use the appropriate CyUSB.inf file inside the Drivers folder to bind. Now, you can open the FPGA Configuration Utility from the associated project folder. After the firmware download and enumeration of the device with VID/PID 0x04B4/1002, open the FPGA configuration utility. Click Select Bitstream to select the bitstream file loopback.bin that is included in the project source folder. This is the byte-swapped February 18, 2016 Document No. 001-63620 Rev. *C 8

bitstream file generated by the impact GUI included in Xilinx ISE. Loopback.bin corresponds to the Data Loopback example explained in AN61345. The example implements a loopback on endpoints EP2OUT and EP6IN. Data sent from host to EP2 is read by the FPGA, increment and written to the EP6 endpoint FIFO. Click Configure to perform the configuration process. Configuration Successful message displays after the completion of the process. Verify the loopback operation is being performed successfully using the Cypress CyConsole application included in SuiteUSB 3.4.2. Summary This application note implements a method for configuring an FPGA over USB using the GPIF controller of FX2LP. For an FPGA design that needs high-speed USB functionality, usage of FX2LP for configuring the FPGA with high-speed USB connectivity helps in reducing component cost and board space. About the Author Name: Title: Prajith Cheerakkoda Applications Engineer. February 18, 2016 Document No. 001-63620 Rev. *C 9

Document History Document Title: Configuring a Xilinx Spartan-3E FPGA Over USB Using EZ-USB FX2LP Document Number: 001-63620 Revision ECN Orig. of Change Submission Date ** 3008686 HRID 08/17/2010 New application note Description of Change *A 3164512 HRID 03/04/2011 *B 4118977 PRJI 10/9/2013 Completing sunset review *C 5142682 GAYA 02/18/2016 Obsoleting the document. Modified title, abstract, and introduction, added more description to section on testing the product, included description of Firmware FrameWorks. EZ-USB FX2LP is a trademark of Cypress Semiconductor Corp. All other trademarks or registered trademarks referenced herein are the property of their respective owners. Cypress Semiconductor 198 Champion Court San Jose, CA 95134-1709 Phone: 408-943-2600 Fax: 408-943-4730 http://www.cypress.com/ Cypress Semiconductor Corporation, 2010 2016. The information contained herein is subject to change without notice. Cypress Semiconductor Corporation assumes no responsibility for the use of any circuitry other than circuitry embodied in a Cypress product. Nor does it convey or imply any license under patent or other rights. Cypress products are not warranted nor intended to be used for medical, life support, life saving, critical control or safety applications, unless pursuant to an express written agreement with Cypress. Furthermore, Cypress does not authorize its products for use as critical components in life-support systems where a malfunction or failure may reasonably be expected to result in significant injury to the user. The inclusion of Cypress products in life-support systems application implies that the manufacturer assumes all risk of such use and in doing so indemnifies Cypress against all charges. This Source Code (software and/or firmware) is owned by Cypress Semiconductor Corporation (Cypress) and is protected by and subject to worldwide patent protection (United States and foreign), United States copyright laws and international treaty provisions. Cypress hereby grants to licensee a personal, non-exclusive, non-transferable license to copy, use, modify, create derivative works of, and compile the Cypress Source Code and derivative works for the sole purpose of creating custom software and or firmware in support of licensee product to be used only in conjunction with a Cypress integrated circuit as specified in the applicable agreement. Any reproduction, modification, translation, compilation, or representation of this Source Code except as specified above is prohibited without the express written permission of Cypress. Disclaimer: CYPRESS MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. Cypress reserves the right to make changes without further notice to the materials described herein. Cypress does not assume any liability arising out of the application or use of any product or circuit described herein. Cypress does not authorize its products for use as critical components in life-support systems where a malfunction or failure may reasonably be expected to result in significant injury to the user. The inclusion of Cypress product in a life-support systems application implies that the manufacturer assumes all risk of such use and in doing so indemnifies Cypress against all charges. Use may be limited by and subject to the applicable Cypress software license agreement. February 18, 2016 Document No. 001-63620 Rev. *C 10