                 SYSTEMC OPEN SOURCE LICENSE
    (SOFTWARE DOWNLOAD AND USE LICENSE AGREEMENT VERSION 3.0)

PLEASE READ THIS LICENSE AGREEMENT CAREFULLY BEFORE CLICKING ON
THE "ACCEPT" BUTTON, AS BY CLICKING ON THE "ACCEPT" BUTTON YOU
ACKNOWLEDGE THAT YOU HAVE READ, UNDERSTOOD AND AGREE TO BE
BOUND BY THIS LICENSE AGREEMENT AND ALL OF ITS TERMS AND
CONDITIONS.

OPEN SYSTEMC INITIATIVE

The purpose of the following license agreement (the "Agreement") is to encourage
interoperability and development of a C++ modeling language known as "SystemC" for 
system simulation and design (the "Purpose"). The SystemC software and other items 
licensed hereunder are licensed, without fee of any kind, for use pursuant to the terms
and conditions set forth in this Agreement. 

LICENSE AGREEMENT

THE CONTRIBUTORS ARE WILLING TO LICENSE THEIR RESPECTIVE CONTRIBUTIONS 
TO YOU ONLY ON THE CONDITION THAT YOU ACCEPT ALL OF THE TERMS OF THIS 
LICENSE AGREEMENT. IF YOU DO NOT AGREE TO ALL OF THE TERMS OF THIS 
LICENSE AGREEMENT, THEN NO RIGHTS ARE GRANTED TO YOU HEREUNDER TO USE 
ANY CONTRIBUTIONS. NOTWITHSTANDING ANYTHING TO CONTRARY, ANY USE, 
REPRODUCTION OR DISTRIBUTION OF ANY CONTRIBUTION CONSTITUTES YOUR 
ACCEPTANCE OF THIS AGREEMENT. 

1. DEFINITIONS.

      1.1 "Agreement" means this contract. 

      1.2 "Code Contribution" means any Contribution in the form of Source Code. 

      1.3 "Contribution" means any work of authorship that is deposited or 
      contributed in accordance with Section 3 in furtherance of the Purpose including, 
      without limitation, libraries, programs, specifications and User Documentation 
      and Modifications. Without limiting the generality of the foregoing, a list of all 
      Contributions which were deposited or contributed on or before July 13, 2006 is 
      set forth on Exhibit A attached hereto and incorporated herein by reference, all of 
      which are considered Contributions pursuant to this Agreement. A list of all 
      Contributions is available upon written request to OSCI and can also be found on 
      the Website. For purposes of clarification, all contributions licensed pursuant to 
      that certain SystemC Open Source License Agreement (Software Download and 
      Use License Agreement Version 2.4) shall constitute, and be treated as, 
      Contributions pursuant to this Agreement. 

      1.4 “Copyright Agreement” means any LRM and Copyright Contribution 
      Agreement entered into between OSCI and the signatory thereto at any time 
      prior to or after the date hereof. 

      1.5 Contribution Questionnaire” means the questionnaire attached hereto as 
      Exhibit C. 

      1.6 "Contributor" means any person or entity that makes a Contribution 
      pursuant to Section 3. For purposes of clarification, any person or entity 
      depositing or contributing, as part or all of a Contribution, a Contribution which 
      has previously been so deposited or contributed is not the Contributor of such re-
      deposited Contribution for the purposes of this Agreement. A list of all 
      Contributors is available upon written request to OSCI and can also be found on 
      the Website.

      1.7 "Contributor's Necessary Patent Claims" means those claims of all patents 
      owned or licensable by Contributor throughout the world that: (1) Contributor has 
      the right to license (within the scope set forth herein) without the obligation to pay 
      royalties or other consideration to third parties; and (2) are necessarily and 
      directly infringed solely by the portion of a computer program that either 
      implements, or is compiled from, either an unmodified Contribution or an OSCI 
      Release. For clarity, Contributor’s Necessary Patent Claims shall not include any 
      claim directed towards a data structure, method, algorithm, process, technique, 
      circuit representation, or circuit implementation that is not completely and entirely 
      described either in such Contributor's Contribution or in an OSCI Release. 
      Further, a Contributor’s Necessary Patent Claims shall not include any claim 
      based upon the combination of any Contribution or an OSCI Release with other 
      works of authorship, to the extent that the Contributor’s Necessary Patent Claims 
      are infringed as a result of such combination.

      1.8 "Copyright Rights" means worldwide statutory and common law rights 
      associated solely with works of authorship including copyrights, copyright 
      applications, copyright registrations and "moral rights." For purposes of 
      clarification, patents are not included in Copyright Rights.

      1.9 “Derivative” or “Derivative work” means a work based upon one or more 
      preexisting works, such as a translation, condensation, or any other form in 
      which a work may be recast, transformed, or adapted. A work consisting of 
      editorial revisions, annotations, elaborations, or other modifications, which, as a 
      whole, represent an original work of authorship, is a “derivative work”.

      1.10 "Distribute" means making a Distribution.

      1.11 "Distribution" means any distribution, sublicensing or other transfer of a 
      Contribution to any third party.

      1.12 “Documentation” means, collectively, all User Documentation and OSCI 
      Documentation.

      1.13 “Marks” means, collectively, the registered and unregistered marks and 
      logos that OSCI has licensed or otherwise authorized Recipient to use. All marks 
      and logos are listed on Exhibit D, which list may be amended from time to time 
      by OSCI to add or delete any marks or logos.

      1.14 "Modification" means any additions or deletions to any Contribution.

      1.15 “OSCI” means Open SystemC Initiative, a California nonprofit mutual 
      benefit corporation.

      1.16 "OSCI Documentation" means the SystemC language reference manual 
      and any other materials assigned to OSCI pursuant to the Copyright Agreement. 

      1.17 “OSCI Release” means a Contribution or combination of Contributions 
      which is developed or created through the OSCI working group process, and the 
      final work approved for release by a OSCI working group, approved for release 
      by the OSCI steering group and approved for release by the board of directors of 
      OSCI. Examples of OSCI Releases include OSCI libraries and OSCI 
      specifications. OSCI Documentation shall be deemed to be included in the 
      definition of OSCI Release.

      1.18 "Recipient" means any person or entity which receives any Contribution 
      under this Agreement. For legal entities, "Recipient" includes any entity that 
      controls, is controlled by, or is under common control with Recipient. For 
      purposes of this Section 1.18, "control" means beneficial ownership of fifty 
      percent (50%) or more of the outstanding shares or similar interest of such entity 
      entitled to vote for election of the board of directors or similar managing authority.

      1.19 "Source Code" means human readable text in an electronic form suitable 
      for modification that describe the functions and data structures, including C, C++, 
      and other language modules, plus any associated interface definition files, scripts 
      used to control compilation and installation of a computer program, or a list of 
      source code differential comparisons.

      1.20 "User Documentation" means all user guides, user manuals and other 
      similar materials related to any Contribution or an OSCI Release.

      1.21 "Website” means OSCI’s Internet website located at 
      http://www.systemc.org.

2. GRANT OF RIGHTS

      2.1   Subject to the terms of this Agreement, each Contributor hereby grants to
      each Recipient a non-exclusive, worldwide, royalty-free license under such
      Contributor's Copyright Rights to do the following:

            (a)    use, reproduce, prepare Derivative works of, publicly display, 
            publicly perform and Distribute any Contributions of such Contributor and 
            Derivative works thereof; and 


            (b)   use the know-how, information and knowledge embedded in the
            Contribution, without any obligation to keep the foregoing confidential so
            long as the Recipient does not otherwise violate this Agreement.

      2.2 OSCI hereby grants to each Recipient a non-exclusive, worldwide, royalty-
      free license under OSCI's Copyright Rights to use, reproduce, prepare Derivative
      works of, publicly display, publicly perform and Distribute the OSCI
      Documentation and any Derivative works thereof, subject to the terms and
      conditions of this Agreement.

      2.3 Subject to the terms of this Agreement, each Contributor hereby grants to
      each Recipient, a worldwide, royalty-free, non-exclusive license under such
      Contributor's Necessary Patent Claims to make, have made, use, sell, offer for
      sale, or import: (a) such Contributor's Contributions; (b) those portions of a
      computer program that either implements, or is compiled from, the Contributor’s
      unmodified Contribution; and (c) those portions of a computer program that
      implement, or are compiled from, an OSCI Release.

      2.4 Each Contributor represents that, to its knowledge, it has sufficient rights
      in and to each of its Contributions to grant the licenses set forth in Sections 2.1
      and 2.3. OSCI represents that, to its knowledge, it has sufficient rights in the
      OSCI Documentation to grant the license set forth in Section 2.2.

      2.5 Except as expressly stated in Sections 2.1, 2.2 and 2.3, Recipient
      receives no rights or licenses to the intellectual property of any Contributor or
      OSCI under this Agreement, whether expressly, by implication, estoppel or
      otherwise. All rights in and to any Contribution not expressly granted under this
      Agreement are reserved.

      2.6 Except as specifically set forth in any Copyright Agreement, Contributor 
      shall ensure that transfers or assignments of all or any part of its right, title, and 
      interest in and to any Contributions contributed or deposited by Contributor 
      hereunder, including all Copyright Rights and patent rights embodied therein, 
      shall be subject to the rights expressly granted in this Agreement including, 
      without limitation, the licenses granted in Sections 2.1 and 2.3. Recipient shall 
      not remove or alter any proprietary notices contained in the Contributions 
      licensed to Recipient hereunder and shall reproduce and include such notices on 
      any copies of the Contributions made by Recipient in any media. 

      2.7 License to Marks.

            (a) OSCI shall retain all right, title and interest in and to the Marks 
	    worldwide, subject to the limited license granted to Recipient in this 
            Section 2.7. OSCI hereby grants Recipient a non-exclusive, royalty-free, 
            limited license to use the Marks solely in connection with its exercise of 
            the rights granted pursuant to this Agreement and to indicate that the 
            products being marketed by Recipient are compatible with, and meet the 
            standards of, OSCI Releases. All uses of the Marks shall be in 
            accordance with OSCI’s trademark usage policy set forth in Exhibit D. 

            (b) Recipient shall assist OSCI to the extent reasonably necessary to 
            protect and maintain the Marks worldwide, including, but not limited to, 
            giving prompt notice to OSCI of any known or potential infringement of the 
            Marks, and cooperating with OSCI in preparing and executing any 
            documents necessary to register the Marks, or as may be required by the 
            laws or rules of any country or jurisdiction. In its sole discretion, OSCI 
            may commence, prosecute or defend any action or claim concerning the 
            Marks. OSCI shall have the right to control any such litigation, and 
            Recipient shall fully cooperate with OSCI in any such litigation. OSCI shall 
            reimburse Recipient for the reasonable costs associated with providing 
            such assistance, except to the extent that such costs result from 
            Recipient’s breach of this Section 2.7. Recipient shall not commence any 
            action regarding the Marks without OSCI’s prior written consent. 

            (c) All goodwill with respect to the Marks shall accrue for the sole 
            benefit of OSCI. Recipient shall maintain the quality of any products, 
            associated packaging, collateral and marketing materials on which it uses 
            any of the Marks in a manner consistent with all terms, conditions and 
            requirements set forth in this Section 2.7 and at a level that meets or 
            exceeds Recipient’s overall reputation for quality and that is at least 
            commensurate with industry standards. 

     2.8 RECIPIENT UNDERSTANDS THAT ALTHOUGH EACH CONTRIBUTOR AND 
     OSCI GRANTS THE LICENSES SET FORTH HEREIN, NO ASSURANCES ARE 
     PROVIDED BY ANY CONTRIBUTOR OR OSCI THAT ANY OSCI RELEASE OR ANY 
     CONTRIBUTION, EITHER ALONE OR IN COMBINATION WITH ANY OTHER 
     CONTRIBUTION, DOES NOT INFRINGE THE PATENT OR OTHER INTELLECTUAL 
     PROPERTY RIGHTS OF ANY OTHER ENTITY. MOREOVER, NO ASSURANCES 
     ARE MADE THAT ANY CONTRIBUTION OF ONE CONTRIBUTOR DOES NOT 
     INFRINGE THE INTELLECTUAL PROPERTY RIGHTS OF ANOTHER CONTRIBUTOR. 
     EACH CONTRIBUTOR AND OSCI DISCLAIM ANY LIABILITY TO RECIPIENT FOR 
     CLAIMS BROUGHT BY ANY OTHER ENTITY BASED ON INFRINGEMENT OF 
     INTELLECTUAL PROPERTY RIGHTS OR OTHERWISE. In addition, as a condition 
     to exercising the rights and licenses granted hereunder, each Recipient hereby 
     assumes sole responsibility to secure any other intellectual property rights 
     needed, if any. For example, if a third party patent license is required to allow 
     Recipient to Distribute a computer program, then it is Recipient's responsibility to 
     acquire that license before Distributing such computer program. 

3. DESCRIPTION AND DEPOSIT OF CONTRIBUTIONS 

     3.1 To the extent Recipient wishes to become a Contributor by making a 
     Contribution, such Contributor shall: 

            (a) (i) deposit such Contribution at the Website according to the 
            Contribution instructions found at such Website, or (ii) disclose such 
            Contribution at a meeting of any working group of OSCI; 

            (b) (i) describe such Contribution in reasonable detail on Exhibit B 
            (including the additions or changes such Contributor made to create the 
            Contribution and the date of any such changes or additions), (ii) 
            completing a Contribution Questionnaire with respect to such Contribution, 
            and (iii) delivering both documents to the Secretary of OSCI. All 
            Contributions made after the date hereof shall be effectuated by 
            Contributor (x) amending Exhibit B and delivering such amended Exhibit B 
            to the Secretary of OSCI, which amended exhibit shall automatically 
            replace the existing Exhibit B, (y) completing a Contribution Questionnaire 
            with respect to such Contribution, and (z) delivering both documents to the 
            Secretary of OSCI; 

            (c) cause such Contribution to contain a file documenting such 
            Contributor's name and contact information, additions or changes such 
            Contributor made to create the Contribution, and the date of any such 
            changes or additions; and 

            (d) cause such Contribution to include in each file a prominent 
            statement substantially similar to the following: "Any code contained in this 
            Contribution is derived, directly or indirectly, from the SystemC source 
            code. Copyright (c) 1996-{current year here} by all Contributors. All 
            Rights reserved. The contents of this file are subject to the restrictions 
            and limitations set forth in the SystemC Open Source License Version 3.0 
            (the "License"). You may not use this file except in compliance with such 
            restrictions and limitations. You may obtain instructions on how to receive 
            a copy of the License at http://www.systemc.org/. Software distributed by 
            Contributors under the License is distributed exclusively on an "AS IS" 
            basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. 
            See the License for the specific language governing rights and limitations 
            under the License." 


     3.2 OSCI may from time to time publish policies and procedures regarding the 
     contribution or depositing of Contributions as well as establish additional details 
     regarding the contribution process. Without limiting the foregoing, OSCI or the 
     administrators of the Website shall have the right to remove any Contribution 
     from the Website at any time. 

4. REQUIREMENTS OF DISTRIBUTION 

     4.1 A Recipient may choose to Distribute any Contribution or any compilation 
     of multiple Contributions (except for any Code Contributions) under its own 
     license agreement, provided that: 

            (a) Recipient complies with the terms and conditions of this 
            Agreement; 

            (b) as between Recipient and any other Contributor, Recipient 
            assumes all warranties and conditions, express and implied, and all 
            liability for damages arising out of its Distribution; and 

            (c) Recipient makes available to recipients of such Distribution the 
            Source Code for such Distributions, and inform them on how to obtain it in 
            a reasonable manner on or through a medium customarily used for 
            software exchange. 

     4.2 If a Recipient chooses to Distribute any Code Contribution or compilations 
      of Code Contributions then: 

            (a) such Code Contribution must be Distributed under this Agreement; 
            and 

            (b) a copy of this Agreement must be included with each copy of such 
            Code Contribution. 

     4.3 Each Recipient must include the following in a conspicuous location in the 
     Code Contribution so Distributed: 

            Copyright (c) 1996-{current year here}, by all Contributors. 
            All rights reserved. 

     4.4 In addition, each Recipient that creates and Distributes or otherwise 
     transfers a Modification whether or not such Modification has been deposited 
     pursuant to Section 3 must identify the originator of such Modification in a 
     manner that reasonably allows third parties to identify the originator of the 
     Modification. 


     4.5 A Recipient may choose to Distribute the OSCI Documentation under its 
     own license agreement, provided that Recipient complies with the terms and 
     conditions of this Agreement. Each Recipient must include the following in a 
     conspicuous location in the OSCI Documentation so Distributed or transferred: 

            Copyright (c) 1996-{current year here}, by Open SystemC 
            Initiative. All rights reserved. 

     In addition, each Recipient that creates and Distributes a modification or 
     Derivative work of the OSCI Documentation, whether or not such modification or 
     Derivative work has been contributed pursuant to a Copyright Agreement must 
     identify the originator of such modification or Derivative work in a manner that 
     reasonably allows third parties to identify the originator of the modification or 
     derivative work. 

5. INDEMNIFICATION 


Any Recipient which Distributes any Contribution and/or OSCI Release (a "Distributor") 
may accept certain responsibilities with respect to end users, business partners and the 
like. While this license is intended to facilitate the commercial use of Contributions 
OSCI Documentation and OSCI Releases, a Distributor shall Distribute such 
Contributions, OSCI Documentation and OSCI Releases in a manner which does not 
create potential liability for the Contributors. Therefore each Distributor hereby agrees 
to defend and indemnify every Contributor ("Indemnified Contributor") against any 
losses, damages and costs (collectively "Losses") arising from claims, lawsuits and 
other legal actions brought by a third party against the Indemnified Contributor to the 
extent caused by the acts or omissions of such Distributor, including but not limited to 
the terms and conditions under which Distributor offered such Contributions, OSCI 
Documentation and/or OSCI Releases in connection with its Distribution thereof. The 
obligations in this Section 5 do not apply to any claims or Losses relating to any actual 
or alleged intellectual property infringement of any Contribution, OSCI Documentation or 
OSCI Release. In order to qualify, an Indemnified Contributor must: (a) promptly notify 
the Distributor in writing of such claim, and (b) allow the Distributor to control, and 
cooperate with the Distributor in, the defense and any related settlement negotiations. 
The Indemnified Contributor may participate in the defense of any such claim at its own 
expense. 

For example, a Recipient might include a Contribution in a commercial product offering, 
Product X. That Recipient is then a Distributor. If that Distributor then makes 
performance claims, or offers warranties, support, or indemnity or any other license 
terms related to Product X, those performance claims, offers and other terms are such 
Distributor's responsibility alone. Under this Section 5, the Distributor would have to 
defend claims against the Contributors related to those performance claims, offers, and 
other terms, and if a court requires any Contributor to pay any damages as a result, the 
Distributor must pay those damages. 

6. NO WARRANTY 

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, ALL CONTRIBUTIONS, OSCI 
DOCUMENTATION AND OSCI RELEASES ARE PROVIDED EXCLUSIVELY ON AN "AS IS" 
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR 
IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF 
TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR 
PURPOSE. EACH RECIPIENT IS SOLELY RESPONSIBLE FOR DETERMINING THE 
APPROPRIATENESS OF ITS USE AND DISTRIBUTION OF ANY CONTRIBUTION, OSCI 
DOCUMENTATION AND OSCI RELEASE AND ASSUMES ALL RISKS ASSOCIATED WITH 
ITS EXERCISE OF RIGHTS UNDER THIS AGREEMENT, INCLUDING BUT NOT LIMITED TO 
THE RISKS AND COSTS OF PROGRAM ERRORS, COMPLIANCE WITH APPLICABLE 
LAWS, DAMAGE TO OR LOSS OF DATA, PROGRAMS OR EQUIPMENT, AND 
UNAVAILABILITY OR INTERRUPTION OF OPERATIONS. THIS DISCLAIMER OR 
WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS AGREEMENT. NO USE OF 
ANY CONTRIBUTION, OSCI DOCUMENTATION OR OSCI RELEASE ARE AUTHORIZED 
HEREUNDER EXCEPT UNDER THIS DISCLAIMER. 

7. DISCLAIMER OF LIABILITY 

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NONE OF THE RECIPIENTS, 
CONTRIBUTORS OR OSCI SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, 
INCIDENTAL, SPECIAL, EXEMPLARY, PUNITIVE, OR CONSEQUENTIAL DAMAGES 
(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY 
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR 
DISTRIBUTION OF ANY CONTRIBUTION, OSCI DOCUMENTATION OR OSCI RELEASE OR 
THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE 
POSSIBILITY OF SUCH DAMAGES. 

8. U.S. GOVERNMENT USE 

If Recipient is licensing any computer program on behalf of any unit or agency of the 
United States Government, then such computer program is commercial computer 
software, and, pursuant to FAR 12.212 or DFARS 227.7202 and their successors, as 
applicable, shall be licensed to the Government under the terms and conditions of this 
Agreement. 

9. PATENT CLAIMS 

If Recipient institutes patent litigation against any entity (including a cross-claim, 
counterclaim or declaratory judgment claim in a lawsuit) alleging that any Contribution, 
OSCI Release or combination of Contributions (excluding combinations of any 
Contribution with other software or hardware) infringes such Recipient's patent(s), then 
the rights granted to Recipient by each Contributor under Section 2 shall terminate as of 
the date such litigation is filed. 

10. TERMINATION 

All Recipient's rights under this Agreement shall terminate if Recipient fails to comply 
with any of the material terms or conditions of this Agreement and does not cure such 
failure in a reasonable period of time after becoming aware of such noncompliance. If 
such occurs, Recipient shall cease all use and Distribution of any Contributions of any 
other Contributor, OSCI Documentation and OSCI Releases based upon the rights 
granted to Recipient under this Agreement as soon as reasonably practicable. 
However, Recipient's obligations under this Agreement and any licenses granted by 
Recipient relating to any Contributions shall survive such termination. 

11. LICENSE VERSIONS 

OSCI may publish new versions (including revisions) of this Agreement from time to 
time. Each new version of the Agreement will be given a distinguishing version number. 
Any Contribution, OSCI Documentation or OSCI Release may always be Distributed 
subject to the version of the Agreement under which it was received. In addition, after a 
new version of the Agreement is published, Contributor may elect to Distribute any 
Contribution, OSCI Documentation or OSCI Release under the new version. No one 
other than OSCI, acting by a vote of at least seventy five percent (75%) of the members 
of its Board of Directors, has the right to modify this Agreement; provided that Exhibit B 
and Exhibit C may be amended as specifically set forth in Section 3.1(b), and Exhibit D 
may be amended as specifically set forth in Section 1.13. 

12. ELECTRONIC ACCEPTANCE 

This Agreement may be executed either electronically or on paper. If this Agreement is 
executed electronically, by clicking on the “Accept” button, Recipient warrants that it 
agrees to all of the terms of this Agreement, that Recipient is authorized to enter into 
this Agreement, and that this Agreement is legally binding upon Recipient. If Recipient 
does not agree to be bound by this Agreement, then Recipient shall click the “Decline” 
button and Recipient shall not receive any rights from the Contributors nor shall 
Recipient download any Contributions, OSCI Documentation or OSCI Releases. 

13. GENERAL 

This Agreement represents the complete agreement concerning the subject matter hereof 
and supersedes all prior agreements or representations, oral or written, regarding the 
subject matter hereof. If any provision of this Agreement is invalid or unenforceable 
under applicable law, it shall not affect the validity or enforceability of the remainder of the 
terms of this Agreement, and without further action by the parties hereto, such provision 
shall be reformed to the minimum extent necessary to make such provision valid and 
enforceable. This Agreement shall be executed in multiple counterparts (either 
electronically and/or on paper), each of which shall be deemed to be an original, but all of 
which shall be one and the same Agreement. A facsimile or other copy of the Agreement 
shall have the same force and effect as an originally executed copy thereof. 

 
This Agreement is governed by the laws of California, without reference to conflict of 
laws principles. Each party waives its rights to a jury trial in any resulting litigation. Any 
litigation relating to this Agreement shall be subject to the jurisdiction of the Federal 
Courts of the Northern District of California, with venue lying in Santa Clara County, 
California, or the Santa Clara County Superior Court. The application of the United 
Nations Convention on Contracts for the International Sale of Goods is expressly 
excluded. The provisions of this Agreement shall be construed fairly in accordance with 
its terms and no rules of construction for or against either party shall be applied in the 
interpreting this Agreement. Recipient shall not use any Contribution, OSCI 
Documentation or OSCI Release in violation of local and other applicable laws 
including, but not limited to, the export control laws of the United States. 


                                     EXHIBIT A 

                        List of Contributions as of July 13, 2006 


Number Contribution 

1.  Updated TLM Proposal 

2.  TLM Extensions 

3.  Abstract titled "Transaction Level Modeling in SystemC" 

4.  Code and related material entitled "SCE-API Example - Standard Co-emulation APO v1.8 
Spec and Routed Example" 

5.  Code and related material entitled "Simplebus v2.2 Example for SystemC v2.0. 

6.  Code and related material entitled "SystemC Generic Transaction Level Communication 
Channel." 

7.  Review of TLM API code and related documents. 

8.  SystemC Verification Library version 1.0; versions 1.1, 1.2, 2.0, 2.0.1 of the SystemC modeling 
language as released by OSCI and which are, or were, available for download on the website 
prior to the agreement; version 2.1 (beta 11) of the SystemC modeling language to be 
released and made available by OSCI for download on the website. 

9.  Code and related material entitled "System Design with SystemC Examples." 

10.  Presentation document titled "Towards a SystemC Transaction Level Modeling Standard," 
dated June 2004; presentation document titled "TLM Extensions," dated April 2004; 
presentation document titled "Updated TLM Proposal," dated March 29, 2004; abstract titled 
"Transaction Level Modeling in System C." 

11.  Code and related material entitled "MP3 Decoder Example plus Performance Benchmark." 

12.  SystemC October 12 Library. 

13.  Source code modifications to the SystemC Library embodied in the October 12, 2004 kit 
(system_2_z_lib.oct_12_2004.tgz). 

Source code modifications to the SystemC Regression Test Suite embodied in the October 12, 
2004 kit (systemc_2_1_tests.oct_12_2004.tgz). 

14.  Synthesizable Subset 1.0. 

15.  TLM Contribution (Presentation documents; abstract; code; proposal dated 3/24/04). 

16.  Updated version of TLM kit 

17.  Code and related material “2.1 Beta Regression Tests” 

18.  Code and related material “OSCI SystemC 2.1 Beta” 

19.  SystemC 2.1 

20.  Assorted recommendations for enhancements, bug fixes and improved cross-platform support, 
including project files for Microsoft Visual C++ versions 6.0 and 7.1 that are contained within 
the files systemc-2.1.05may05.tgz and systemc_tests-2.105may05.tgz. 

21.  Minor modifications incorporated in SystemC 2.1 open source implementation dated July 14, 
2005 to permit port to Microsoft VC++ Version 7. 

22.  Numerous modifications incorporated in SystemC 2.1 open source implementation dated July 
14, 2005. 

23.  A collection of interfaces and implementations in SystemC for analysis objects. 

A collection of interfaces and implementations in SystemC for configuring components in a 
design. 

24.  Modifications to the most recent version of SCV which allow it to run under the SystemC-2.1v1 
kit. 

25.  Set of header files intended to be included in the SystemC TLM Modelling library code. The 
API provides for 1 interfaces: (a) “Atom at once (Variously called BA, PVT, CC) in which a 
single atom is transported at once. 

26.  Modifications included in SystemC 2.2 library labeled “systemc-2.2.04feb06.tgz;” 

Modifications included in SystemC 2.2 test suite labeled “systemc_tests-2.2.04feb06.tgz.” 

27.  Modifications to the SystemC 2.2 library to enable the port to gcc version 4; 

Addition of compliance_1666 tests to the SystemC 2.2 regression test suite. 

28.  OSCI_TL3_2006_03_01.zip, including any updates of any of the foregoing, and 
OSCI_SCML_Memory_and_Bitfield_2006_03_01.zip, including any updates of any of the 
foregoing. 

29.  C++/SystemC Code for Mentor’s SMI System PVT channel implementation; An example of a 
protocol specific SystemC PVT channel implementation; Design examples using the above 
channel models; A white-paper describing the channel implementations. 



                                     EXHIBIT D 

                             Trademark Usage Policy 

I. LIST OF MARKS 

     1. Open SystemC 

     2. Open SystemC Initiative 

     3. OSCI 

     4. SystemC 

     5. SystemC Initiative 

     6. All logos that incorporate the foregoing word marks 


II. PROPER USE OF MARKS 

Trademarks and service marks function as adjectives and generally should not be used as 
nouns or verbs. Accordingly, as often as possible, the Marks should be used as adjectives 
immediately preceding the generic noun that refers to the service in question. For example: 

             The SystemC® software 
             The OSCI® LRM 

No Possessives or Plurals. Since they are not nouns, the Marks should never be used in the 
possessive or plural forms. For example, it is not appropriate to write “SystemC’s software.” 

No Use as Verbs or as Puns. The Marks should never be used as verbs or as puns. 


III. PROPER ATTRIBUTION 

Trademark ownership is attributed in two ways, with the use of a symbol (TM, SM, ®) after the mark 
and with a legal legend, usually found at the end of a document following the copyright notice. 
Following are OSCI’s rules for symbols and legends to attribute the Marks: 

Symbols: 

Which Symbol Do I Use? 
The Marks generally function as trademarks rather than servicemarks. Unless you are 
specifically directed otherwise, please use the ® symbol after the Marks. 

Where Do I Place the ® Symbol? 
The ® symbol is placed immediately after the mark, either in superscript or subscript. 
 
When Do I Use the Symbol? 
The ® symbol is to be used after the Marks in the following instances: 
 
Most Prominent Uses: A ® symbol is required after prominent uses of the Marks, e.g., in the 
headlines and large print text of web pages, advertisements, other promotional materials and 
press releases, except where space limitations or specific style considerations prevent 
compliance with this requirement. 

First Use in Text: A ® symbol is required after the first use of each Mark in text, e.g. advertising 
copy or the body of press releases, even though the symbol may have already appeared in the 
headline or after another prominent use of the mark in the same document. 

All Logos: The ® symbol must appear after all logos incorporating the Marks. 

 
IV. Legends 

All Marks that appear on a web page or in a press release, advertisement or other written 
material (whether in print or electronic form) must be attributed in an appropriate legend. The 
legend may be presented in “mouseprint” but must be large enough to be read easily. Legends 
generally appear at the end of a document or the bottom of a web page but may be placed 
elsewhere, e.g. the inside cover of documentation. 

The OSCI Legend: The following legend should be used in all materials in which any of the 
Marks appear: 

[Insert the Marks] are trademarks or registered trademarks of Open SystemC Initiative, Inc. in 
the United States and other countries and are used with permission. 


V. MARKS NEVER COMBINED 

The Marks should never be combined with the marks of any business other than OSCI. The 
Marks should always appear visually separate from any other marks appearing in the same 
materials such that each mark creates a distinct commercial impression. It would, for instance, 
not be appropriate to superimpose the logo of another business over any OSCI logo. 
 

VI. LOGOS 

Logos incorporating the Marks can only be used in the format provided to you by OSCI for 
incorporation into your materials or web pages. The logos provided to you by OSCI cannot be 
modified in any way without OSCI’s prior written approval. Logos copied from OSCI web pages 
or other materials may not to be used. Please contact support@opensystemc.org to obtain 
electronic files containing the OSCI logos and to ask any questions regarding the logos. 
