OpenCores
URL https://opencores.org/ocsvn/adv_debug_sys/adv_debug_sys/trunk

Subversion Repositories adv_debug_sys

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /adv_debug_sys/tags
    from Rev 25 to Rev 26
    Reverse comparison

Rev 25 → Rev 26

/ADS_RELEASE_1_2_0/trunk/Hardware/altera_virtual_jtag/doc/altera_virtual_jtag.pdf Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
ADS_RELEASE_1_2_0/trunk/Hardware/altera_virtual_jtag/doc/altera_virtual_jtag.pdf Property changes : Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: ADS_RELEASE_1_2_0/trunk/Hardware/altera_virtual_jtag/doc/gpl-2.0.txt =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/altera_virtual_jtag/doc/gpl-2.0.txt (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/altera_virtual_jtag/doc/gpl-2.0.txt (nonexistent) @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. Index: ADS_RELEASE_1_2_0/trunk/Hardware/altera_virtual_jtag/doc/License_FDL-1.2.txt =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/altera_virtual_jtag/doc/License_FDL-1.2.txt (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/altera_virtual_jtag/doc/License_FDL-1.2.txt (nonexistent) @@ -1,397 +0,0 @@ - GNU Free Documentation License - Version 1.2, November 2002 - - - Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. - 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - -0. PREAMBLE - -The purpose of this License is to make a manual, textbook, or other -functional and useful document "free" in the sense of freedom: to -assure everyone the effective freedom to copy and redistribute it, -with or without modifying it, either commercially or noncommercially. -Secondarily, this License preserves for the author and publisher a way -to get credit for their work, while not being considered responsible -for modifications made by others. - -This License is a kind of "copyleft", which means that derivative -works of the document must themselves be free in the same sense. It -complements the GNU General Public License, which is a copyleft -license designed for free software. - -We have designed this License in order to use it for manuals for free -software, because free software needs free documentation: a free -program should come with manuals providing the same freedoms that the -software does. But this License is not limited to software manuals; -it can be used for any textual work, regardless of subject matter or -whether it is published as a printed book. We recommend this License -principally for works whose purpose is instruction or reference. - - -1. APPLICABILITY AND DEFINITIONS - -This License applies to any manual or other work, in any medium, that -contains a notice placed by the copyright holder saying it can be -distributed under the terms of this License. Such a notice grants a -world-wide, royalty-free license, unlimited in duration, to use that -work under the conditions stated herein. The "Document", below, -refers to any such manual or work. Any member of the public is a -licensee, and is addressed as "you". You accept the license if you -copy, modify or distribute the work in a way requiring permission -under copyright law. - -A "Modified Version" of the Document means any work containing the -Document or a portion of it, either copied verbatim, or with -modifications and/or translated into another language. - -A "Secondary Section" is a named appendix or a front-matter section of -the Document that deals exclusively with the relationship of the -publishers or authors of the Document to the Document's overall subject -(or to related matters) and contains nothing that could fall directly -within that overall subject. (Thus, if the Document is in part a -textbook of mathematics, a Secondary Section may not explain any -mathematics.) The relationship could be a matter of historical -connection with the subject or with related matters, or of legal, -commercial, philosophical, ethical or political position regarding -them. - -The "Invariant Sections" are certain Secondary Sections whose titles -are designated, as being those of Invariant Sections, in the notice -that says that the Document is released under this License. If a -section does not fit the above definition of Secondary then it is not -allowed to be designated as Invariant. The Document may contain zero -Invariant Sections. If the Document does not identify any Invariant -Sections then there are none. - -The "Cover Texts" are certain short passages of text that are listed, -as Front-Cover Texts or Back-Cover Texts, in the notice that says that -the Document is released under this License. A Front-Cover Text may -be at most 5 words, and a Back-Cover Text may be at most 25 words. - -A "Transparent" copy of the Document means a machine-readable copy, -represented in a format whose specification is available to the -general public, that is suitable for revising the document -straightforwardly with generic text editors or (for images composed of -pixels) generic paint programs or (for drawings) some widely available -drawing editor, and that is suitable for input to text formatters or -for automatic translation to a variety of formats suitable for input -to text formatters. A copy made in an otherwise Transparent file -format whose markup, or absence of markup, has been arranged to thwart -or discourage subsequent modification by readers is not Transparent. -An image format is not Transparent if used for any substantial amount -of text. A copy that is not "Transparent" is called "Opaque". - -Examples of suitable formats for Transparent copies include plain -ASCII without markup, Texinfo input format, LaTeX input format, SGML -or XML using a publicly available DTD, and standard-conforming simple -HTML, PostScript or PDF designed for human modification. Examples of -transparent image formats include PNG, XCF and JPG. Opaque formats -include proprietary formats that can be read and edited only by -proprietary word processors, SGML or XML for which the DTD and/or -processing tools are not generally available, and the -machine-generated HTML, PostScript or PDF produced by some word -processors for output purposes only. - -The "Title Page" means, for a printed book, the title page itself, -plus such following pages as are needed to hold, legibly, the material -this License requires to appear in the title page. For works in -formats which do not have any title page as such, "Title Page" means -the text near the most prominent appearance of the work's title, -preceding the beginning of the body of the text. - -A section "Entitled XYZ" means a named subunit of the Document whose -title either is precisely XYZ or contains XYZ in parentheses following -text that translates XYZ in another language. (Here XYZ stands for a -specific section name mentioned below, such as "Acknowledgements", -"Dedications", "Endorsements", or "History".) To "Preserve the Title" -of such a section when you modify the Document means that it remains a -section "Entitled XYZ" according to this definition. - -The Document may include Warranty Disclaimers next to the notice which -states that this License applies to the Document. These Warranty -Disclaimers are considered to be included by reference in this -License, but only as regards disclaiming warranties: any other -implication that these Warranty Disclaimers may have is void and has -no effect on the meaning of this License. - - -2. VERBATIM COPYING - -You may copy and distribute the Document in any medium, either -commercially or noncommercially, provided that this License, the -copyright notices, and the license notice saying this License applies -to the Document are reproduced in all copies, and that you add no other -conditions whatsoever to those of this License. You may not use -technical measures to obstruct or control the reading or further -copying of the copies you make or distribute. However, you may accept -compensation in exchange for copies. If you distribute a large enough -number of copies you must also follow the conditions in section 3. - -You may also lend copies, under the same conditions stated above, and -you may publicly display copies. - - -3. COPYING IN QUANTITY - -If you publish printed copies (or copies in media that commonly have -printed covers) of the Document, numbering more than 100, and the -Document's license notice requires Cover Texts, you must enclose the -copies in covers that carry, clearly and legibly, all these Cover -Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on -the back cover. Both covers must also clearly and legibly identify -you as the publisher of these copies. The front cover must present -the full title with all words of the title equally prominent and -visible. You may add other material on the covers in addition. -Copying with changes limited to the covers, as long as they preserve -the title of the Document and satisfy these conditions, can be treated -as verbatim copying in other respects. - -If the required texts for either cover are too voluminous to fit -legibly, you should put the first ones listed (as many as fit -reasonably) on the actual cover, and continue the rest onto adjacent -pages. - -If you publish or distribute Opaque copies of the Document numbering -more than 100, you must either include a machine-readable Transparent -copy along with each Opaque copy, or state in or with each Opaque copy -a computer-network location from which the general network-using -public has access to download using public-standard network protocols -a complete Transparent copy of the Document, free of added material. -If you use the latter option, you must take reasonably prudent steps, -when you begin distribution of Opaque copies in quantity, to ensure -that this Transparent copy will remain thus accessible at the stated -location until at least one year after the last time you distribute an -Opaque copy (directly or through your agents or retailers) of that -edition to the public. - -It is requested, but not required, that you contact the authors of the -Document well before redistributing any large number of copies, to give -them a chance to provide you with an updated version of the Document. - - -4. MODIFICATIONS - -You may copy and distribute a Modified Version of the Document under -the conditions of sections 2 and 3 above, provided that you release -the Modified Version under precisely this License, with the Modified -Version filling the role of the Document, thus licensing distribution -and modification of the Modified Version to whoever possesses a copy -of it. In addition, you must do these things in the Modified Version: - -A. Use in the Title Page (and on the covers, if any) a title distinct - from that of the Document, and from those of previous versions - (which should, if there were any, be listed in the History section - of the Document). You may use the same title as a previous version - if the original publisher of that version gives permission. -B. List on the Title Page, as authors, one or more persons or entities - responsible for authorship of the modifications in the Modified - Version, together with at least five of the principal authors of the - Document (all of its principal authors, if it has fewer than five), - unless they release you from this requirement. -C. State on the Title page the name of the publisher of the - Modified Version, as the publisher. -D. Preserve all the copyright notices of the Document. -E. Add an appropriate copyright notice for your modifications - adjacent to the other copyright notices. -F. Include, immediately after the copyright notices, a license notice - giving the public permission to use the Modified Version under the - terms of this License, in the form shown in the Addendum below. -G. Preserve in that license notice the full lists of Invariant Sections - and required Cover Texts given in the Document's license notice. -H. Include an unaltered copy of this License. -I. Preserve the section Entitled "History", Preserve its Title, and add - to it an item stating at least the title, year, new authors, and - publisher of the Modified Version as given on the Title Page. If - there is no section Entitled "History" in the Document, create one - stating the title, year, authors, and publisher of the Document as - given on its Title Page, then add an item describing the Modified - Version as stated in the previous sentence. -J. Preserve the network location, if any, given in the Document for - public access to a Transparent copy of the Document, and likewise - the network locations given in the Document for previous versions - it was based on. These may be placed in the "History" section. - You may omit a network location for a work that was published at - least four years before the Document itself, or if the original - publisher of the version it refers to gives permission. -K. For any section Entitled "Acknowledgements" or "Dedications", - Preserve the Title of the section, and preserve in the section all - the substance and tone of each of the contributor acknowledgements - and/or dedications given therein. -L. Preserve all the Invariant Sections of the Document, - unaltered in their text and in their titles. Section numbers - or the equivalent are not considered part of the section titles. -M. Delete any section Entitled "Endorsements". Such a section - may not be included in the Modified Version. -N. Do not retitle any existing section to be Entitled "Endorsements" - or to conflict in title with any Invariant Section. -O. Preserve any Warranty Disclaimers. - -If the Modified Version includes new front-matter sections or -appendices that qualify as Secondary Sections and contain no material -copied from the Document, you may at your option designate some or all -of these sections as invariant. To do this, add their titles to the -list of Invariant Sections in the Modified Version's license notice. -These titles must be distinct from any other section titles. - -You may add a section Entitled "Endorsements", provided it contains -nothing but endorsements of your Modified Version by various -parties--for example, statements of peer review or that the text has -been approved by an organization as the authoritative definition of a -standard. - -You may add a passage of up to five words as a Front-Cover Text, and a -passage of up to 25 words as a Back-Cover Text, to the end of the list -of Cover Texts in the Modified Version. Only one passage of -Front-Cover Text and one of Back-Cover Text may be added by (or -through arrangements made by) any one entity. If the Document already -includes a cover text for the same cover, previously added by you or -by arrangement made by the same entity you are acting on behalf of, -you may not add another; but you may replace the old one, on explicit -permission from the previous publisher that added the old one. - -The author(s) and publisher(s) of the Document do not by this License -give permission to use their names for publicity for or to assert or -imply endorsement of any Modified Version. - - -5. COMBINING DOCUMENTS - -You may combine the Document with other documents released under this -License, under the terms defined in section 4 above for modified -versions, provided that you include in the combination all of the -Invariant Sections of all of the original documents, unmodified, and -list them all as Invariant Sections of your combined work in its -license notice, and that you preserve all their Warranty Disclaimers. - -The combined work need only contain one copy of this License, and -multiple identical Invariant Sections may be replaced with a single -copy. If there are multiple Invariant Sections with the same name but -different contents, make the title of each such section unique by -adding at the end of it, in parentheses, the name of the original -author or publisher of that section if known, or else a unique number. -Make the same adjustment to the section titles in the list of -Invariant Sections in the license notice of the combined work. - -In the combination, you must combine any sections Entitled "History" -in the various original documents, forming one section Entitled -"History"; likewise combine any sections Entitled "Acknowledgements", -and any sections Entitled "Dedications". You must delete all sections -Entitled "Endorsements". - - -6. COLLECTIONS OF DOCUMENTS - -You may make a collection consisting of the Document and other documents -released under this License, and replace the individual copies of this -License in the various documents with a single copy that is included in -the collection, provided that you follow the rules of this License for -verbatim copying of each of the documents in all other respects. - -You may extract a single document from such a collection, and distribute -it individually under this License, provided you insert a copy of this -License into the extracted document, and follow this License in all -other respects regarding verbatim copying of that document. - - -7. AGGREGATION WITH INDEPENDENT WORKS - -A compilation of the Document or its derivatives with other separate -and independent documents or works, in or on a volume of a storage or -distribution medium, is called an "aggregate" if the copyright -resulting from the compilation is not used to limit the legal rights -of the compilation's users beyond what the individual works permit. -When the Document is included in an aggregate, this License does not -apply to the other works in the aggregate which are not themselves -derivative works of the Document. - -If the Cover Text requirement of section 3 is applicable to these -copies of the Document, then if the Document is less than one half of -the entire aggregate, the Document's Cover Texts may be placed on -covers that bracket the Document within the aggregate, or the -electronic equivalent of covers if the Document is in electronic form. -Otherwise they must appear on printed covers that bracket the whole -aggregate. - - -8. TRANSLATION - -Translation is considered a kind of modification, so you may -distribute translations of the Document under the terms of section 4. -Replacing Invariant Sections with translations requires special -permission from their copyright holders, but you may include -translations of some or all Invariant Sections in addition to the -original versions of these Invariant Sections. You may include a -translation of this License, and all the license notices in the -Document, and any Warranty Disclaimers, provided that you also include -the original English version of this License and the original versions -of those notices and disclaimers. In case of a disagreement between -the translation and the original version of this License or a notice -or disclaimer, the original version will prevail. - -If a section in the Document is Entitled "Acknowledgements", -"Dedications", or "History", the requirement (section 4) to Preserve -its Title (section 1) will typically require changing the actual -title. - - -9. TERMINATION - -You may not copy, modify, sublicense, or distribute the Document except -as expressly provided for under this License. Any other attempt to -copy, modify, sublicense or distribute the Document is void, and will -automatically terminate your rights under this License. However, -parties who have received copies, or rights, from you under this -License will not have their licenses terminated so long as such -parties remain in full compliance. - - -10. FUTURE REVISIONS OF THIS LICENSE - -The Free Software Foundation may publish new, revised versions -of the GNU Free Documentation License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. See -http://www.gnu.org/copyleft/. - -Each version of the License is given a distinguishing version number. -If the Document specifies that a particular numbered version of this -License "or any later version" applies to it, you have the option of -following the terms and conditions either of that specified version or -of any later version that has been published (not as a draft) by the -Free Software Foundation. If the Document does not specify a version -number of this License, you may choose any version ever published (not -as a draft) by the Free Software Foundation. - - -ADDENDUM: How to use this License for your documents - -To use this License in a document you have written, include a copy of -the License in the document and put the following copyright and -license notices just after the title page: - - Copyright (c) YEAR YOUR NAME. - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.2 - or any later version published by the Free Software Foundation; - with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. - A copy of the license is included in the section entitled "GNU - Free Documentation License". - -If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, -replace the "with...Texts." line with this: - - with the Invariant Sections being LIST THEIR TITLES, with the - Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. - -If you have Invariant Sections without Cover Texts, or some other -combination of the three, merge those two alternatives to suit the -situation. - -If your document contains nontrivial examples of program code, we -recommend releasing these examples in parallel under your choice of -free software license, such as the GNU General Public License, -to permit their use in free software. Index: ADS_RELEASE_1_2_0/trunk/Hardware/altera_virtual_jtag/doc/src/altera_virtual_jtag.odt =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: ADS_RELEASE_1_2_0/trunk/Hardware/altera_virtual_jtag/doc/src/altera_virtual_jtag.odt =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/altera_virtual_jtag/doc/src/altera_virtual_jtag.odt (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/altera_virtual_jtag/doc/src/altera_virtual_jtag.odt (nonexistent)
ADS_RELEASE_1_2_0/trunk/Hardware/altera_virtual_jtag/doc/src/altera_virtual_jtag.odt Property changes : Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/doc/gpl-2.0.txt =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/doc/gpl-2.0.txt (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/doc/gpl-2.0.txt (nonexistent) @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/doc/License_FDL-1.2.txt =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/doc/License_FDL-1.2.txt (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/doc/License_FDL-1.2.txt (nonexistent) @@ -1,397 +0,0 @@ - GNU Free Documentation License - Version 1.2, November 2002 - - - Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. - 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - -0. PREAMBLE - -The purpose of this License is to make a manual, textbook, or other -functional and useful document "free" in the sense of freedom: to -assure everyone the effective freedom to copy and redistribute it, -with or without modifying it, either commercially or noncommercially. -Secondarily, this License preserves for the author and publisher a way -to get credit for their work, while not being considered responsible -for modifications made by others. - -This License is a kind of "copyleft", which means that derivative -works of the document must themselves be free in the same sense. It -complements the GNU General Public License, which is a copyleft -license designed for free software. - -We have designed this License in order to use it for manuals for free -software, because free software needs free documentation: a free -program should come with manuals providing the same freedoms that the -software does. But this License is not limited to software manuals; -it can be used for any textual work, regardless of subject matter or -whether it is published as a printed book. We recommend this License -principally for works whose purpose is instruction or reference. - - -1. APPLICABILITY AND DEFINITIONS - -This License applies to any manual or other work, in any medium, that -contains a notice placed by the copyright holder saying it can be -distributed under the terms of this License. Such a notice grants a -world-wide, royalty-free license, unlimited in duration, to use that -work under the conditions stated herein. The "Document", below, -refers to any such manual or work. Any member of the public is a -licensee, and is addressed as "you". You accept the license if you -copy, modify or distribute the work in a way requiring permission -under copyright law. - -A "Modified Version" of the Document means any work containing the -Document or a portion of it, either copied verbatim, or with -modifications and/or translated into another language. - -A "Secondary Section" is a named appendix or a front-matter section of -the Document that deals exclusively with the relationship of the -publishers or authors of the Document to the Document's overall subject -(or to related matters) and contains nothing that could fall directly -within that overall subject. (Thus, if the Document is in part a -textbook of mathematics, a Secondary Section may not explain any -mathematics.) The relationship could be a matter of historical -connection with the subject or with related matters, or of legal, -commercial, philosophical, ethical or political position regarding -them. - -The "Invariant Sections" are certain Secondary Sections whose titles -are designated, as being those of Invariant Sections, in the notice -that says that the Document is released under this License. If a -section does not fit the above definition of Secondary then it is not -allowed to be designated as Invariant. The Document may contain zero -Invariant Sections. If the Document does not identify any Invariant -Sections then there are none. - -The "Cover Texts" are certain short passages of text that are listed, -as Front-Cover Texts or Back-Cover Texts, in the notice that says that -the Document is released under this License. A Front-Cover Text may -be at most 5 words, and a Back-Cover Text may be at most 25 words. - -A "Transparent" copy of the Document means a machine-readable copy, -represented in a format whose specification is available to the -general public, that is suitable for revising the document -straightforwardly with generic text editors or (for images composed of -pixels) generic paint programs or (for drawings) some widely available -drawing editor, and that is suitable for input to text formatters or -for automatic translation to a variety of formats suitable for input -to text formatters. A copy made in an otherwise Transparent file -format whose markup, or absence of markup, has been arranged to thwart -or discourage subsequent modification by readers is not Transparent. -An image format is not Transparent if used for any substantial amount -of text. A copy that is not "Transparent" is called "Opaque". - -Examples of suitable formats for Transparent copies include plain -ASCII without markup, Texinfo input format, LaTeX input format, SGML -or XML using a publicly available DTD, and standard-conforming simple -HTML, PostScript or PDF designed for human modification. Examples of -transparent image formats include PNG, XCF and JPG. Opaque formats -include proprietary formats that can be read and edited only by -proprietary word processors, SGML or XML for which the DTD and/or -processing tools are not generally available, and the -machine-generated HTML, PostScript or PDF produced by some word -processors for output purposes only. - -The "Title Page" means, for a printed book, the title page itself, -plus such following pages as are needed to hold, legibly, the material -this License requires to appear in the title page. For works in -formats which do not have any title page as such, "Title Page" means -the text near the most prominent appearance of the work's title, -preceding the beginning of the body of the text. - -A section "Entitled XYZ" means a named subunit of the Document whose -title either is precisely XYZ or contains XYZ in parentheses following -text that translates XYZ in another language. (Here XYZ stands for a -specific section name mentioned below, such as "Acknowledgements", -"Dedications", "Endorsements", or "History".) To "Preserve the Title" -of such a section when you modify the Document means that it remains a -section "Entitled XYZ" according to this definition. - -The Document may include Warranty Disclaimers next to the notice which -states that this License applies to the Document. These Warranty -Disclaimers are considered to be included by reference in this -License, but only as regards disclaiming warranties: any other -implication that these Warranty Disclaimers may have is void and has -no effect on the meaning of this License. - - -2. VERBATIM COPYING - -You may copy and distribute the Document in any medium, either -commercially or noncommercially, provided that this License, the -copyright notices, and the license notice saying this License applies -to the Document are reproduced in all copies, and that you add no other -conditions whatsoever to those of this License. You may not use -technical measures to obstruct or control the reading or further -copying of the copies you make or distribute. However, you may accept -compensation in exchange for copies. If you distribute a large enough -number of copies you must also follow the conditions in section 3. - -You may also lend copies, under the same conditions stated above, and -you may publicly display copies. - - -3. COPYING IN QUANTITY - -If you publish printed copies (or copies in media that commonly have -printed covers) of the Document, numbering more than 100, and the -Document's license notice requires Cover Texts, you must enclose the -copies in covers that carry, clearly and legibly, all these Cover -Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on -the back cover. Both covers must also clearly and legibly identify -you as the publisher of these copies. The front cover must present -the full title with all words of the title equally prominent and -visible. You may add other material on the covers in addition. -Copying with changes limited to the covers, as long as they preserve -the title of the Document and satisfy these conditions, can be treated -as verbatim copying in other respects. - -If the required texts for either cover are too voluminous to fit -legibly, you should put the first ones listed (as many as fit -reasonably) on the actual cover, and continue the rest onto adjacent -pages. - -If you publish or distribute Opaque copies of the Document numbering -more than 100, you must either include a machine-readable Transparent -copy along with each Opaque copy, or state in or with each Opaque copy -a computer-network location from which the general network-using -public has access to download using public-standard network protocols -a complete Transparent copy of the Document, free of added material. -If you use the latter option, you must take reasonably prudent steps, -when you begin distribution of Opaque copies in quantity, to ensure -that this Transparent copy will remain thus accessible at the stated -location until at least one year after the last time you distribute an -Opaque copy (directly or through your agents or retailers) of that -edition to the public. - -It is requested, but not required, that you contact the authors of the -Document well before redistributing any large number of copies, to give -them a chance to provide you with an updated version of the Document. - - -4. MODIFICATIONS - -You may copy and distribute a Modified Version of the Document under -the conditions of sections 2 and 3 above, provided that you release -the Modified Version under precisely this License, with the Modified -Version filling the role of the Document, thus licensing distribution -and modification of the Modified Version to whoever possesses a copy -of it. In addition, you must do these things in the Modified Version: - -A. Use in the Title Page (and on the covers, if any) a title distinct - from that of the Document, and from those of previous versions - (which should, if there were any, be listed in the History section - of the Document). You may use the same title as a previous version - if the original publisher of that version gives permission. -B. List on the Title Page, as authors, one or more persons or entities - responsible for authorship of the modifications in the Modified - Version, together with at least five of the principal authors of the - Document (all of its principal authors, if it has fewer than five), - unless they release you from this requirement. -C. State on the Title page the name of the publisher of the - Modified Version, as the publisher. -D. Preserve all the copyright notices of the Document. -E. Add an appropriate copyright notice for your modifications - adjacent to the other copyright notices. -F. Include, immediately after the copyright notices, a license notice - giving the public permission to use the Modified Version under the - terms of this License, in the form shown in the Addendum below. -G. Preserve in that license notice the full lists of Invariant Sections - and required Cover Texts given in the Document's license notice. -H. Include an unaltered copy of this License. -I. Preserve the section Entitled "History", Preserve its Title, and add - to it an item stating at least the title, year, new authors, and - publisher of the Modified Version as given on the Title Page. If - there is no section Entitled "History" in the Document, create one - stating the title, year, authors, and publisher of the Document as - given on its Title Page, then add an item describing the Modified - Version as stated in the previous sentence. -J. Preserve the network location, if any, given in the Document for - public access to a Transparent copy of the Document, and likewise - the network locations given in the Document for previous versions - it was based on. These may be placed in the "History" section. - You may omit a network location for a work that was published at - least four years before the Document itself, or if the original - publisher of the version it refers to gives permission. -K. For any section Entitled "Acknowledgements" or "Dedications", - Preserve the Title of the section, and preserve in the section all - the substance and tone of each of the contributor acknowledgements - and/or dedications given therein. -L. Preserve all the Invariant Sections of the Document, - unaltered in their text and in their titles. Section numbers - or the equivalent are not considered part of the section titles. -M. Delete any section Entitled "Endorsements". Such a section - may not be included in the Modified Version. -N. Do not retitle any existing section to be Entitled "Endorsements" - or to conflict in title with any Invariant Section. -O. Preserve any Warranty Disclaimers. - -If the Modified Version includes new front-matter sections or -appendices that qualify as Secondary Sections and contain no material -copied from the Document, you may at your option designate some or all -of these sections as invariant. To do this, add their titles to the -list of Invariant Sections in the Modified Version's license notice. -These titles must be distinct from any other section titles. - -You may add a section Entitled "Endorsements", provided it contains -nothing but endorsements of your Modified Version by various -parties--for example, statements of peer review or that the text has -been approved by an organization as the authoritative definition of a -standard. - -You may add a passage of up to five words as a Front-Cover Text, and a -passage of up to 25 words as a Back-Cover Text, to the end of the list -of Cover Texts in the Modified Version. Only one passage of -Front-Cover Text and one of Back-Cover Text may be added by (or -through arrangements made by) any one entity. If the Document already -includes a cover text for the same cover, previously added by you or -by arrangement made by the same entity you are acting on behalf of, -you may not add another; but you may replace the old one, on explicit -permission from the previous publisher that added the old one. - -The author(s) and publisher(s) of the Document do not by this License -give permission to use their names for publicity for or to assert or -imply endorsement of any Modified Version. - - -5. COMBINING DOCUMENTS - -You may combine the Document with other documents released under this -License, under the terms defined in section 4 above for modified -versions, provided that you include in the combination all of the -Invariant Sections of all of the original documents, unmodified, and -list them all as Invariant Sections of your combined work in its -license notice, and that you preserve all their Warranty Disclaimers. - -The combined work need only contain one copy of this License, and -multiple identical Invariant Sections may be replaced with a single -copy. If there are multiple Invariant Sections with the same name but -different contents, make the title of each such section unique by -adding at the end of it, in parentheses, the name of the original -author or publisher of that section if known, or else a unique number. -Make the same adjustment to the section titles in the list of -Invariant Sections in the license notice of the combined work. - -In the combination, you must combine any sections Entitled "History" -in the various original documents, forming one section Entitled -"History"; likewise combine any sections Entitled "Acknowledgements", -and any sections Entitled "Dedications". You must delete all sections -Entitled "Endorsements". - - -6. COLLECTIONS OF DOCUMENTS - -You may make a collection consisting of the Document and other documents -released under this License, and replace the individual copies of this -License in the various documents with a single copy that is included in -the collection, provided that you follow the rules of this License for -verbatim copying of each of the documents in all other respects. - -You may extract a single document from such a collection, and distribute -it individually under this License, provided you insert a copy of this -License into the extracted document, and follow this License in all -other respects regarding verbatim copying of that document. - - -7. AGGREGATION WITH INDEPENDENT WORKS - -A compilation of the Document or its derivatives with other separate -and independent documents or works, in or on a volume of a storage or -distribution medium, is called an "aggregate" if the copyright -resulting from the compilation is not used to limit the legal rights -of the compilation's users beyond what the individual works permit. -When the Document is included in an aggregate, this License does not -apply to the other works in the aggregate which are not themselves -derivative works of the Document. - -If the Cover Text requirement of section 3 is applicable to these -copies of the Document, then if the Document is less than one half of -the entire aggregate, the Document's Cover Texts may be placed on -covers that bracket the Document within the aggregate, or the -electronic equivalent of covers if the Document is in electronic form. -Otherwise they must appear on printed covers that bracket the whole -aggregate. - - -8. TRANSLATION - -Translation is considered a kind of modification, so you may -distribute translations of the Document under the terms of section 4. -Replacing Invariant Sections with translations requires special -permission from their copyright holders, but you may include -translations of some or all Invariant Sections in addition to the -original versions of these Invariant Sections. You may include a -translation of this License, and all the license notices in the -Document, and any Warranty Disclaimers, provided that you also include -the original English version of this License and the original versions -of those notices and disclaimers. In case of a disagreement between -the translation and the original version of this License or a notice -or disclaimer, the original version will prevail. - -If a section in the Document is Entitled "Acknowledgements", -"Dedications", or "History", the requirement (section 4) to Preserve -its Title (section 1) will typically require changing the actual -title. - - -9. TERMINATION - -You may not copy, modify, sublicense, or distribute the Document except -as expressly provided for under this License. Any other attempt to -copy, modify, sublicense or distribute the Document is void, and will -automatically terminate your rights under this License. However, -parties who have received copies, or rights, from you under this -License will not have their licenses terminated so long as such -parties remain in full compliance. - - -10. FUTURE REVISIONS OF THIS LICENSE - -The Free Software Foundation may publish new, revised versions -of the GNU Free Documentation License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. See -http://www.gnu.org/copyleft/. - -Each version of the License is given a distinguishing version number. -If the Document specifies that a particular numbered version of this -License "or any later version" applies to it, you have the option of -following the terms and conditions either of that specified version or -of any later version that has been published (not as a draft) by the -Free Software Foundation. If the Document does not specify a version -number of this License, you may choose any version ever published (not -as a draft) by the Free Software Foundation. - - -ADDENDUM: How to use this License for your documents - -To use this License in a document you have written, include a copy of -the License in the document and put the following copyright and -license notices just after the title page: - - Copyright (c) YEAR YOUR NAME. - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.2 - or any later version published by the Free Software Foundation; - with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. - A copy of the license is included in the section entitled "GNU - Free Documentation License". - -If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, -replace the "with...Texts." line with this: - - with the Invariant Sections being LIST THEIR TITLES, with the - Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. - -If you have Invariant Sections without Cover Texts, or some other -combination of the three, merge those two alternatives to suit the -situation. - -If your document contains nontrivial examples of program code, we -recommend releasing these examples in parallel under your choice of -free software license, such as the GNU General Public License, -to permit their use in free software. Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/doc/AdvancedDebugInterface.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/doc/AdvancedDebugInterface.pdf =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/doc/AdvancedDebugInterface.pdf (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/doc/AdvancedDebugInterface.pdf (nonexistent)
ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/doc/AdvancedDebugInterface.pdf Property changes : Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/doc/src/system_block_diagram.odg =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/doc/src/system_block_diagram.odg =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/doc/src/system_block_diagram.odg (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/doc/src/system_block_diagram.odg (nonexistent)
ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/doc/src/system_block_diagram.odg Property changes : Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/doc/src/AdvancedDebugInterface.odt =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/doc/src/AdvancedDebugInterface.odt =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/doc/src/AdvancedDebugInterface.odt (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/doc/src/AdvancedDebugInterface.odt (nonexistent)
ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/doc/src/AdvancedDebugInterface.odt Property changes : Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/doc/src/generic_submodule.odg =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/doc/src/generic_submodule.odg =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/doc/src/generic_submodule.odg (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/doc/src/generic_submodule.odg (nonexistent)
ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/doc/src/generic_submodule.odg Property changes : Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/doc/src/top_level_module.odg =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/doc/src/top_level_module.odg =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/doc/src/top_level_module.odg (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/doc/src/top_level_module.odg (nonexistent)
ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/doc/src/top_level_module.odg Property changes : Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/full_system/xsv_fpga_defines.v =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/full_system/xsv_fpga_defines.v (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/full_system/xsv_fpga_defines.v (nonexistent) @@ -1,100 +0,0 @@ -////////////////////////////////////////////////////////////////////// -//// //// -//// OR1K test app definitions //// -//// //// -//// This file is part of the OR1K test application //// -//// http://www.opencores.org/cores/or1k/xess/ //// -//// //// -//// Description //// -//// DEfine target technology etc. Right now FIFOs are available //// -//// only for Xilinx Virtex FPGAs. (TARGET_VIRTEX) //// -//// //// -//// To Do: //// -//// - nothing really //// -//// //// -//// Author(s): //// -//// - Damjan Lampret, damjan.lampret@opencores.org //// -//// //// -////////////////////////////////////////////////////////////////////// -//// //// -//// Copyright (C) 2001 Authors //// -//// //// -//// This source file may be used and distributed without //// -//// restriction provided that this copyright statement is not //// -//// removed from the file and that any derivative work contains //// -//// the original copyright notice and the associated disclaimer. //// -//// //// -//// This source file is free software; you can redistribute it //// -//// and/or modify it under the terms of the GNU Lesser General //// -//// Public License as published by the Free Software Foundation; //// -//// either version 2.1 of the License, or (at your option) any //// -//// later version. //// -//// //// -//// This source is distributed in the hope that it will be //// -//// useful, but WITHOUT ANY WARRANTY; without even the implied //// -//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// -//// PURPOSE. See the GNU Lesser General Public License for more //// -//// details. //// -//// //// -//// You should have received a copy of the GNU Lesser General //// -//// Public License along with this source; if not, download it //// -//// from http://www.opencores.org/lgpl.shtml //// -//// //// -////////////////////////////////////////////////////////////////////// -// -// CVS Revision History -// -// $Log: xsv_fpga_defines.v,v $ -// Revision 1.2 2008/07/11 08:16:01 Nathan -// Ran through dos2unix -// -// Revision 1.1 2008/07/08 19:11:54 Nathan -// Added second testbench to simulate a complete system, including OR1200, wb_conbus, and onchipram. Renamed sim-only testbench directory from verilog to simulated_system. -// -// Revision 1.4 2004/04/05 08:44:35 lampret -// Merged branch_qmem into main tree. -// -// Revision 1.2 2002/03/29 20:58:51 lampret -// Changed hardcoded address for fake MC to use a define. -// -// Revision 1.1.1.1 2002/03/21 16:55:44 lampret -// First import of the "new" XESS XSV environment. -// -// -// - -// -// Define to target to Xilinx Virtex -// -//`define TARGET_VIRTEX - -// -// Interrupts -// -`define APP_INT_RES1 1:0 -`define APP_INT_UART 2 -`define APP_INT_RES2 3 -`define APP_INT_ETH 4 -`define APP_INT_PS2 5 -`define APP_INT_RES3 19:6 - -// -// Address map -// -`define APP_ADDR_DEC_W 3 -`define APP_ADDR_SDRAM `APP_ADDR_DEC_W'b001 -`define APP_ADDR_DEC2_W 8 -`define APP_ADDR_OCRAM `APP_ADDR_DEC2_W'h00 -`define APP_ADDR_DECP_W 8 -//`define APP_ADDR_PERIP `APP_ADDR_DECP_W'h99 -`define APP_ADDR_VGA `APP_ADDR_DECP_W'h97 -`define APP_ADDR_ETH `APP_ADDR_DECP_W'h92 -`define APP_ADDR_AUDIO `APP_ADDR_DECP_W'h9d -`define APP_ADDR_UART `APP_ADDR_DECP_W'h90 -`define APP_ADDR_PS2 `APP_ADDR_DECP_W'h94 -`define APP_ADDR_RES1 `APP_ADDR_DECP_W'h9e -//`define APP_ADDR_RES2 `APP_ADDR_DECP_W'h9f -//`define APP_ADDR_FAKEMC 4'h6 - -// For simulation... -// `define DBG_IF_MODEL 1 Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/full_system/adv_dbg_tb.v =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/full_system/adv_dbg_tb.v (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/full_system/adv_dbg_tb.v (nonexistent) @@ -1,892 +0,0 @@ -////////////////////////////////////////////////////////////////////// -//// //// -//// adv_dbg_tb.v //// -//// //// -//// //// -//// Testbench for the SoC Advanced Debug Interface. //// -//// //// -//// Author(s): //// -//// Nathan Yawn (nathan.yawn@opencores.org) //// -//// //// -//// //// -//// //// -////////////////////////////////////////////////////////////////////// -//// //// -//// Copyright (C) 2008 Authors //// -//// //// -//// This source file may be used and distributed without //// -//// restriction provided that this copyright statement is not //// -//// removed from the file and that any derivative work contains //// -//// the original copyright notice and the associated disclaimer. //// -//// //// -//// This source file is free software; you can redistribute it //// -//// and/or modify it under the terms of the GNU Lesser General //// -//// Public License as published by the Free Software Foundation; //// -//// either version 2.1 of the License, or (at your option) any //// -//// later version. //// -//// //// -//// This source is distributed in the hope that it will be //// -//// useful, but WITHOUT ANY WARRANTY; without even the implied //// -//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// -//// PURPOSE. See the GNU Lesser General Public License for more //// -//// details. //// -//// //// -//// You should have received a copy of the GNU Lesser General //// -//// Public License along with this source; if not, download it //// -//// from http://www.opencores.org/lgpl.shtml //// -//// //// -////////////////////////////////////////////////////////////////////// -// -// CVS Revision History -// -// $Log: adv_dbg_tb.v,v $ -// Revision 1.4 2009/05/17 20:54:55 Nathan -// Changed email address to opencores.org -// -// Revision 1.3 2008/07/11 08:18:47 Nathan -// Added a bit to the CPU test. Added the hack that allows the driver to work with a Xilinx BSCAN device. -// - - -`include "tap_defines.v" -`include "dbg_defines.v" -`include "dbg_wb_defines.v" - - -// Polynomial for the CRC calculation -// Yes, it's backwards. Yes, this is on purpose. -// To decrease logic + routing, we want to shift the CRC calculation -// in the same direction we use to shift the data out, LSB first. -`define DBG_CRC_POLY 32'hedb88320 - -// These are indicies into an array which hold values for the JTAG outputs -`define JTAG_TMS 0 -`define JTAG_TCK 1 -`define JTAG_TDO 2 - -`define JTAG_TMS_bit 3'h1 -`define JTAG_TCK_bit 3'h2 -`define JTAG_TDO_bit 3'h4 - -`define wait_jtag_period #50 - - -module adv_debug_tb ( - -jtag_tck_o, -jtag_tms_o, -jtag_tdo_o, -jtag_tdi_i, - -wb_clk_o, -sys_rstn_o - - -); - -output jtag_tck_o; -output jtag_tms_o; -output jtag_tdo_o; -input jtag_tdi_i; -output wb_clk_o; -output sys_rstn_o; - -// Connections to the JTAG TAP -reg jtag_tck_o; -reg jtag_tms_o; -reg jtag_tdo_o; -wire jtag_tdi_i; - -reg wb_clk_o; -reg sys_rst_o; -reg sys_rstn_o; - -reg test_enabled; - -// Data which will be written to the WB interface -reg [31:0] static_data32 [0:15]; -reg [15:0] static_data16 [0:15]; -reg [7:0] static_data8 [0:15]; - -// Arrays to hold data read back from the WB interface, for comparison -reg [31:0] input_data32 [0:15]; -reg [15:0] input_data16 [0:15]; -reg [7:0] input_data8 [0:15]; - -reg [32:0] err_data; // holds the contents of the error register from the various modules - -reg failed; -integer i; - -initial -begin - jtag_tck_o = 1'b0; - jtag_tms_o = 1'b0; - jtag_tdo_o = 1'b0; -end - -// Provide the wishbone / CPU / system clock -initial -begin - wb_clk_o = 1'b0; - forever #5 wb_clk_o = ~wb_clk_o; -end - -initial -begin - sys_rstn_o = 1'b1; - #200 sys_rstn_o = 1'b0; - #5000 sys_rstn_o = 1'b1; -end - - -// Start the test (and reset the wishbone) -initial -begin - test_enabled = 1'b0; - - // Init the memory - initialize_memory(32'h0,32'h16); - - #5 test_enabled<= 1'b1; -end - -// This is the main test procedure -always @ (posedge test_enabled) -begin - - $display("Starting advanced debug test"); - - reset_jtag; - #6000; - check_idcode; - #1000; - - // Select the debug module in the IR - set_ir(`DEBUG); - #1000; - - - `ifdef DBG_CPU0_SUPPORTED - // STALL the CPU, so it won't interfere with WB tests - // Select the CPU0 unit in the debug module - #1000; - $display("Selecting CPU0 module at time %t", $time); - select_debug_module(`DBG_TOP_CPU0_DEBUG_MODULE); - - - // Set the stall bit...holding the CPU in reset prevents WB access (?) - $display("Setting reset and stall bits at time %t", $time); - write_module_internal_register(32'h0, 8'h1, 32'h1, 8'h2); // idx, idxlen, data, datalen - #1000; - `endif - - - /////////////////////////////////////////////////////////////////// - // Test the Wishbone unit - //////////////////////////////////////////////////////////////////// - -`ifdef DBG_WISHBONE_SUPPORTED - // Select the WB unit in the debug module - #1000; - $display("Selecting Wishbone module at time %t", $time); - select_debug_module(`DBG_TOP_WISHBONE_DEBUG_MODULE); - - // Reset the error bit - write_module_internal_register(32'h0, 8'h1, 32'h1, 8'h1); // idx, idxlen, data, datalen - #1000; - - ///////////////////////////////// - // Test 8-bit WB access - failed = 0; - $display("Testing WB 8-bit burst write at time %t: resetting ", $time); - do_module_burst_write(3'h1, 16'd16, 32'h87); // 3-bit word size (bytes), 16-bit word count, 32-bit start address - #1000; - $display("Testing WB 8-bit burst read at time %t", $time); - do_module_burst_read(3'h1, 16'd16, 32'h87); - #1000; - for(i = 0; i < 16; i = i+1) begin - if(static_data8[i] != input_data8[i]) begin - failed = 1; - $display("32-bit data mismatch at index %d, wrote 0x%x, read 0x%x", i, static_data8[i], input_data8[i]); - end - end - if(!failed) $display("8-bit read/write OK!"); - - - ///////////////////////////////// - // Test 16-bit WB access - failed = 0; - $display("Testing WB 16-bit burst write at time %t", $time); - do_module_burst_write(3'h2, 16'd16, 32'h22); // 3-bit word size (bytes), 16-bit word count, 32-bit start address - #1000; - $display("Testing WB 16-bit burst read at time %t", $time); - do_module_burst_read(3'h2, 16'd16, 32'h22); - #1000; - for(i = 0; i < 16; i = i+1) begin - if(static_data16[i] != input_data16[i]) begin - failed = 1; - $display("16-bit data mismatch at index %d, wrote 0x%x, read 0x%x", i, static_data16[i], input_data16[i]); - end - end - if(!failed) $display("16-bit read/write OK!"); - - - //////////////////////////////////// - // Test 32-bit WB access - failed = 0; - $display("Testing WB 32-bit burst write at time %t", $time); - do_module_burst_write(3'h4, 16'd16, 32'h100); // 3-bit word size (bytes), 16-bit word count, 32-bit start address - #1000; - $display("Testing WB 32-bit burst read at time %t", $time); - do_module_burst_read(3'h4, 16'd16, 32'h100); - #1000; - for(i = 0; i < 16; i = i+1) begin - if(static_data32[i] != input_data32[i]) begin - failed = 1; - $display("32-bit data mismatch at index %d, wrote 0x%x, read 0x%x", i, static_data32[i], input_data32[i]); - end - end - if(!failed) $display("32-bit read/write OK!"); - - - //////////////////////////////// - // Test error register - err_data = 33'h0; - // Select and reset the error register - write_module_internal_register(`DBG_WB_INTREG_ERROR, `DBG_WB_REGSELECT_SIZE, 64'h1, 8'h1); // regidx,idxlen,writedata, datalen; - //i_wb.cycle_response(`ERR_RESPONSE, 2, 0); // response type, wait cycles, retry_cycles - do_module_burst_write(3'h4, 16'd4, 32'hdeaddead); // 3-bit word size (bytes), 16-bit word count, 32-bit start address - read_module_internal_register(8'd33, err_data); // get the error register - $display("Error bit is %d, error address is %x", err_data[0], err_data>>1); - -`endif // WB module supported - - - /////////////////////////////////////////////////////////////////// - // Test CPU0 unit - //////////////////////////////////////////////////////////////////// -`ifdef DBG_CPU0_SUPPORTED - // Select the CPU0 unit in the debug module - #1000; - $display("Selecting CPU0 module at time %t", $time); - select_debug_module(`DBG_TOP_CPU0_DEBUG_MODULE); - - - // Set the stall bit (clear the reset bit) - $display("Setting reset and stall bits at time %t", $time); - write_module_internal_register(32'h0, 8'h1, 32'h1, 8'h2); // idx, idxlen, data, datalen - #1000; - - // Make sure CPU stalled - $display("Testing reset and stall bits at time %t", $time); - read_module_internal_register(8'd2, err_data); // We assume the register is already selected - $display("Reset and stall bits are %x", err_data); - #1000; - - -// Write some opcodes into the memory -select_debug_module(`DBG_TOP_WISHBONE_DEBUG_MODULE); - -static_data32[0] = 32'hE0000005;/* l.xor r0,r0,r0 */ -static_data32[1] = 32'h9C200000; /* l.addi r1,r0,0x0 */ -static_data32[2] = 32'h18400000;/* l.movhi r2,0x4000 */ -static_data32[3] = 32'hA8420030;/* l.ori r2,r2,0x30 */ -static_data32[4] = 32'h9C210001;/* l.addi r1,r1,1 */ -static_data32[5] = 32'h9C210001; /* l.addi r1,r1,1 */ -static_data32[6] = 32'hD4020800;/* l.sw 0(r2),r1 */ -static_data32[7] = 32'h9C210001;/* l.addi r1,r1,1 */ -static_data32[8] = 32'h84620000;/* l.lwz r3,0(r2) */ -static_data32[9] = 32'h03FFFFFB;/* l.j loop2 */ -static_data32[10] = 32'hE0211800;/* l.add r1,r1,r3 */ - -do_module_burst_write(3'h4, 16'd11, 32'h0); // 3-bit word size (bytes), 16-bit word count, 32-bit start address - - #1000; -select_debug_module(`DBG_TOP_CPU0_DEBUG_MODULE); - -#1000; -$display("Enabling CPU exceptions at time %t", $time); -static_data32[0] = 32'h1; // enable exceptions -do_module_burst_write(3'h4, 16'd1, 32'd17); // 3-bit word size (bytes), 16-bit word count, 32-bit start address - -#1000; -$display("Set \'trap causes stall\' at time %t", $time); -static_data32[0] = 32'h00002000; // Trap causes stall -do_module_burst_write(3'h4, 16'd1, (6 << 11)+20); // 3-bit word size (bytes), 16-bit word count, 32-bit start address - -#1000; -$display("Set PC at time %t", $time); -static_data32[0] = 32'h0; // Set PC -do_module_burst_write(3'h4, 16'd1, 32'd16); // 3-bit word size (bytes), 16-bit word count, 32-bit start address - -#1000; -$display("Set step bit at time %t", $time); -static_data32[0] = (1 << 22); // set step bit -do_module_burst_write(3'h4, 16'd1, (6<<11) + 16); // 3-bit word size (bytes), 16-bit word count, 32-bit start address - -// Unstall x11 -for(i = 0; i < 11; i = i + 1) -begin - #1000; - $display("Unstall (%d/11) at time %t", i, $time); - write_module_internal_register(32'h0, 8'h1, 32'h0, 8'h2); // idx, idxlen, data, datalen -end - -#1000; -#1000; -#1000; - - $display("Getting NPC at time %t", $time); - do_module_burst_read(3'h4, 16'd1, 32'd16); - - $display("NPC = %x, expected 0x00000010", input_data32[0]); - - $display("Getting PPC at time %t", $time); - do_module_burst_read(3'h4, 16'd1, 32'd18); - $display("PPC = %x, expected 0x00000028", input_data32[0]); - - #1000; - $display("Getting R1 at time %t", $time); - do_module_burst_read(3'h4, 16'd1, 32'h401); // Word size, count, addr; save old instr - $display("R1 = %d, expected 5", input_data32[0]); - - #1000; -$display("Un-set step bit at %t", $time); -static_data32[0] = 32'h0; // Trap causes stall -do_module_burst_write(3'h4, 16'd1, (6 << 11)+16); - -// Put a trap instr at 0x20 -#1000; -$display("Select WB at %t", $time); -select_debug_module(`DBG_TOP_WISHBONE_DEBUG_MODULE); -#1000; -$display("Save old instr at %t", $time); -do_module_burst_read(3'h4, 16'd1, 32'h20); // Save old instr -#1000; -$display("Put trap instr at %t", $time); -static_data32[0] = 32'h21000001; /* l.trap */ -do_module_burst_write(3'h4, 16'd1, 32'h20); // put new instr -#1000; -$display("Select CPU0 at %t", $time); -select_debug_module(`DBG_TOP_CPU0_DEBUG_MODULE); -#1000; -$display("Set PC to 0x24 at %t", $time); -static_data32[0] = 32'h24; -do_module_burst_write(3'h4, 16'd1, 32'd16); // Set PC to 0x24 -#1000; -$display("Unstall at time %t", $time); -write_module_internal_register(32'h0, 8'h1, 32'h0, 8'h2); // idx, idxlen, data, datalen - -// We assume it stalls again here... -#1000; - -err_data = 1; -while(err_data != 0) -begin - $display("Testing for stall at %t", $time); - read_module_internal_register(8'd2, err_data); // We assume the register is already selected - #1000; -end - - -// *** The software self-test does 2 separate reads here... - $display("Getting NPC at time %t", $time); - do_module_burst_read(3'h4, 16'd3, 32'd16); - - $display("NPC = %x, expected 0x00000024", input_data32[0]); - $display("PPC = %x, expected 0x00000020", input_data32[2]); - - - -`endif - - -end - -task initialize_memory; - input [31:0] start_addr; - input [31:0] length; - integer i; - reg [31:0] addr; - begin - - for (i=0; i> 1; - crc_out = crc_out ^ ((d ^ c) & `DBG_CRC_POLY); - //$display("CRC Itr %d, inbit = %d, crc = 0x%x", i, data_in[i], crc_out); - end - end -endtask - -task check_idcode; -reg [63:0] readdata; -reg[31:0] idcode; -begin - set_ir(`IDCODE); - - // Read the IDCODE in the DR - write_bit(`JTAG_TMS_bit); // select_dr_scan - write_bit(3'h0); // capture_ir - write_bit(3'h0); // shift_ir - jtag_read_write_stream(64'h0, 8'd32, 1, readdata); // write data, exit_1 - write_bit(`JTAG_TMS_bit); // update_ir - write_bit(3'h0); // idle - idcode = readdata[31:0]; - $display("Got TAP IDCODE 0x%x, expected 0x%x", idcode, `IDCODE_VALUE); -end -endtask; - -task select_debug_module; -input [1:0] moduleid; -reg validid; -begin - write_bit(`JTAG_TMS_bit); // select_dr_scan - write_bit(3'h0); // capture_ir - write_bit(3'h0); // shift_ir - jtag_write_stream({1'b1,moduleid}, 8'h3, 1); // write data, exit_1 - write_bit(`JTAG_TMS_bit); // update_dr - write_bit(3'h0); // idle - - $display("Selecting module (%0x)", moduleid); - - // Read back the status to make sure a valid chain is selected - /* Pointless, the newly selected module would respond instead... - write_bit(`JTAG_TMS_bit); // select_dr_scan - write_bit(3'h0); // capture_ir - write_bit(3'h0); // shift_ir - read_write_bit(`JTAG_TMS_bit, validid); // get data, exit_1 - write_bit(`JTAG_TMS_bit); // update_dr - write_bit(3'h0); // idle - - if(validid) $display("Selected valid module (%0x)", moduleid); - else $display("Failed to select module (%0x)", moduleid); - */ -end -endtask - - -task send_module_burst_command; -input [3:0] opcode; -input [31:0] address; -input [15:0] burstlength; -reg [63:0] streamdata; -begin - streamdata = {11'h0,1'b0,opcode,address,burstlength}; - write_bit(`JTAG_TMS_bit); // select_dr_scan - write_bit(3'h0); // capture_ir - write_bit(3'h0); // shift_ir - jtag_write_stream(streamdata, 8'd53, 1); // write data, exit_1 - write_bit(`JTAG_TMS_bit); // update_dr - write_bit(3'h0); // idle -end -endtask - -task select_module_internal_register; // Really just a read, with discarded data - input [31:0] regidx; - input [7:0] len; // the length of the register index data, we assume not more than 32 - reg[63:0] streamdata; -begin - streamdata = 64'h0; - streamdata = streamdata | regidx; - streamdata = streamdata | (`DBG_WB_CMD_IREG_SEL << len); - write_bit(`JTAG_TMS_bit); // select_dr_scan - write_bit(3'h0); // capture_ir - write_bit(3'h0); // shift_ir - jtag_write_stream(streamdata, (len+5), 1); // write data, exit_1 - write_bit(`JTAG_TMS_bit); // update_dr - write_bit(3'h0); // idle -end -endtask - - -task read_module_internal_register; // We assume the register is already selected - //input [31:0] regidx; - input [7:0] len; // the length of the data desired, we assume a max of 64 bits - output [63:0] instream; - reg [63:0] bitmask; -begin - instream = 64'h0; - // We shift out all 0's, which is a NOP to the debug unit - write_bit(`JTAG_TMS_bit); // select_dr_scan - write_bit(3'h0); // capture_ir - write_bit(3'h0); // shift_ir - // Shift at least 5 bits, as this is the min, for a valid NOP - jtag_read_write_stream(64'h0, len+4,1,instream); // exit_1 - write_bit(`JTAG_TMS_bit); // update_dr - write_bit(3'h0); // idle - bitmask = 64'hffffffffffffffff; - bitmask = bitmask << len; - bitmask = ~bitmask; - instream = instream & bitmask; // Cut off any unwanted excess bits -end -endtask - -task write_module_internal_register; - input [31:0] regidx; // the length of the register index data - input [7:0] idxlen; - input [63:0] writedata; - input [7:0] datalen; // the length of the data to write. We assume the two length combined are 59 or less. - reg[63:0] streamdata; -begin - streamdata = 64'h0; // This will 0 the toplevel/module select bit - streamdata = streamdata | writedata; - streamdata = streamdata | (regidx << datalen); - streamdata = streamdata | (`DBG_WB_CMD_IREG_WR << (idxlen+datalen)); - - write_bit(`JTAG_TMS_bit); // select_dr_scan - write_bit(3'h0); // capture_ir - write_bit(3'h0); // shift_ir - jtag_write_stream(streamdata, (idxlen+datalen+5), 1); // write data, exit_1 - write_bit(`JTAG_TMS_bit); // update_dr - write_bit(3'h0); // idle -end -endtask - -// This includes the sending of the burst command -task do_module_burst_read; -input [5:0] word_size_bytes; -input [15:0] word_count; -input [31:0] start_address; -reg [3:0] opcode; -reg status; -reg [63:0] instream; -integer i; -integer j; -reg [31:0] crc_calc_i; -reg [31:0] crc_calc_o; // temp signal... -reg [31:0] crc_read; -reg [5:0] word_size_bits; -begin - $display("Doing burst read, word size %d, word count %d, start address 0x%x", word_size_bytes, word_count, start_address); - instream = 64'h0; - word_size_bits = word_size_bytes << 3; - crc_calc_i = 32'hffffffff; - - // Send the command - case (word_size_bytes) - 3'h1: opcode = `DBG_WB_CMD_BREAD8; - 3'h2: opcode = `DBG_WB_CMD_BREAD16; - 3'h4: opcode = `DBG_WB_CMD_BREAD32; - default: - begin - $display("Tried burst read with invalid word size (%0x), defaulting to 4-byte words", word_size_bytes); - opcode = `DBG_WB_CMD_BREAD32; - end - endcase - - send_module_burst_command(opcode,start_address, word_count); // returns to state idle - - // This charming kludge provides ONE TCK, in case a xilinx BSCAN TAP is used, - // because the FSM needs it between the read burst command and the actual - // read burst. Blech. - #500; - set_ir(`IDCODE); - #500; - set_ir(`DEBUG); - #500; - - // Get us back to shift_dr mode to read a burst - write_bit(`JTAG_TMS_bit); // select_dr_scan - write_bit(3'h0); // capture_ir - write_bit(3'h0); // shift_ir - - // Now, repeat... - for(i = 0; i < word_count; i=i+1) begin - // Get 1 status bit, then word_size_bytes*8 bits - status = 1'b0; - j = 0; - while(!status) begin - read_write_bit(3'h0, status); - j = j + 1; - end - - if(j > 1) begin - $display("Took %0d tries before good status bit during burst read", j); - end - - jtag_read_write_stream(64'h0, {2'h0,(word_size_bytes<<3)},0,instream); - //$display("Read 0x%0x", instream[31:0]); - compute_crc(crc_calc_i, instream[31:0], word_size_bits, crc_calc_o); - crc_calc_i = crc_calc_o; - if(word_size_bytes == 1) input_data8[i] = instream[7:0]; - else if(word_size_bytes == 2) input_data16[i] = instream[15:0]; - else input_data32[i] = instream[31:0]; - end - - // Read the data CRC from the debug module. - jtag_read_write_stream(64'h0, 6'd32, 1, crc_read); - if(crc_calc_o != crc_read) $display("CRC ERROR! Computed 0x%x, read CRC 0x%x", crc_calc_o, crc_read); - else $display("CRC OK!"); - - // Finally, shift out 5 0's, to make the next command a NOP - // Not necessary, debug unit won't latch a new opcode at the end of a burst - //jtag_write_stream(64'h0, 8'h5, 1); - write_bit(`JTAG_TMS_bit); // update_ir - write_bit(3'h0); // idle -end -endtask - - -task do_module_burst_write; -input [5:0] word_size_bytes; -input [15:0] word_count; -input [31:0] start_address; -reg [3:0] opcode; -reg status; -reg [63:0] dataword; -integer i; -integer j; -reg [31:0] crc_calc_i; -reg [31:0] crc_calc_o; -reg crc_match; -reg [5:0] word_size_bits; -begin - $display("Doing burst write, word size %d, word count %d, start address 0x%x", word_size_bytes, word_count, start_address); - word_size_bits = word_size_bytes << 3; - crc_calc_i = 32'hffffffff; - - // Send the command - case (word_size_bytes) - 3'h1: opcode = `DBG_WB_CMD_BWRITE8; - 3'h2: opcode = `DBG_WB_CMD_BWRITE16; - 3'h4: opcode = `DBG_WB_CMD_BWRITE32; - default: - begin - $display("Tried burst write with invalid word size (%0x), defaulting to 4-byte words", word_size_bytes); - opcode = `DBG_WB_CMD_BWRITE32; - end - endcase - - send_module_burst_command(opcode, start_address, word_count); // returns to state idle - - // Get us back to shift_dr mode to write a burst - write_bit(`JTAG_TMS_bit); // select_dr_scan - write_bit(3'h0); // capture_ir - write_bit(3'h0); // shift_ir - - - // Write a start bit (a 1) so it knows when to start counting - write_bit(`JTAG_TDO_bit); - - // Now, repeat... - for(i = 0; i < word_count; i=i+1) begin - // Write word_size_bytes*8 bits, then get 1 status bit - if(word_size_bytes == 4) dataword = {32'h0, static_data32[i]}; - else if(word_size_bytes == 2) dataword = {48'h0, static_data16[i]}; - else dataword = {56'h0, static_data8[i]}; - - - jtag_write_stream(dataword, {2'h0,(word_size_bytes<<3)},0); - compute_crc(crc_calc_i, dataword[31:0], word_size_bits, crc_calc_o); - crc_calc_i = crc_calc_o; - - // Check if WB bus is ready - // *** THIS WILL NOT WORK IF THERE IS MORE THAN 1 DEVICE IN THE JTAG CHAIN!!! - status = 1'b0; - read_write_bit(3'h0, status); - - if(!status) begin - $display("Bad status bit during burst write, index %d", i); - end - - - //$display("Wrote 0x%0x", dataword); - end - - // Send the CRC we computed - jtag_write_stream(crc_calc_o, 6'd32,0); - - // Read the 'CRC match' bit, and go to exit1_dr - read_write_bit(`JTAG_TMS_bit, crc_match); - if(!crc_match) $display("CRC ERROR! match bit after write is %d (computed CRC 0x%x)", crc_match, crc_calc_o); - else $display("CRC OK!"); - - // Finally, shift out 5 0's, to make the next command a NOP - // Not necessary, module will not latch new opcode during burst - //jtag_write_stream(64'h0, 8'h5, 1); - write_bit(`JTAG_TMS_bit); // update_ir - write_bit(3'h0); // idle -end - -endtask - - -// Puts a value in the TAP IR, assuming we start in IDLE state. -// Returns to IDLE state when finished -task set_ir; -input [3:0] irval; -begin - write_bit(`JTAG_TMS_bit); // select_dr_scan - write_bit(`JTAG_TMS_bit); // select_ir_scan - write_bit(3'h0); // capture_ir - write_bit(3'h0); // shift_ir - jtag_write_stream({60'h0,irval}, 8'h4, 1); // write data, exit_1 - write_bit(`JTAG_TMS_bit); // update_ir - write_bit(3'h0); // idle -end -endtask - -// Resets the TAP and puts it into idle mode -task reset_jtag; -integer i; -begin - for(i = 0; i < 8; i=i+1) begin - write_bit(`JTAG_TMS_bit); // 5 TMS should put us in test_logic_reset mode - end - write_bit(3'h0); // idle -end -endtask - - -//////////////////////////////////////////////////////////////////////////// -// Tasks to write or read-write a string of data - -task jtag_write_stream; -input [63:0] stream; -input [7:0] len; -input set_last_bit; -integer i; -integer databit; -reg [2:0] bits; -begin - for(i = 0; i < (len-1); i=i+1) begin - databit = (stream >> i) & 1'h1; - bits = databit << `JTAG_TDO; - write_bit(bits); - end - - databit = (stream >> i) & 1'h1; - bits = databit << `JTAG_TDO; - if(set_last_bit) bits = (bits | `JTAG_TMS_bit); - write_bit(bits); - -end -endtask - - -task jtag_read_write_stream; -input [63:0] stream; -input [7:0] len; -input set_last_bit; -output [63:0] instream; -integer i; -integer databit; -reg [2:0] bits; -reg inbit; -begin - instream = 64'h0; - for(i = 0; i < (len-1); i=i+1) begin - databit = (stream >> i) & 1'h1; - bits = databit << `JTAG_TDO; - read_write_bit(bits, inbit); - instream = (instream | (inbit << i)); - end - - databit = (stream >> i) & 1'h1; - bits = databit << `JTAG_TDO; - if(set_last_bit) bits = (bits | `JTAG_TMS_bit); - read_write_bit(bits, inbit); - instream = (instream | (inbit << (len-1))); -end -endtask - -///////////////////////////////////////////////////////////////////////// -// Tasks which write or readwrite a single bit (including clocking) - -task write_bit; - input [2:0] bitvals; - begin - - // Set data - jtag_out(bitvals & ~(`JTAG_TCK_bit)); - `wait_jtag_period; - - // Raise clock - jtag_out(bitvals | `JTAG_TCK_bit); - `wait_jtag_period; - - // drop clock (making output available in the SHIFT_xR states) - jtag_out(bitvals & ~(`JTAG_TCK_bit)); - `wait_jtag_period; - end -endtask - -task read_write_bit; - input [2:0] bitvals; - output l_tdi_val; - begin - - // read bit state - l_tdi_val <= jtag_tdi_i; - - // Set data - jtag_out(bitvals & ~(`JTAG_TCK_bit)); - `wait_jtag_period; - - // Raise clock - jtag_out(bitvals | `JTAG_TCK_bit); - `wait_jtag_period; - - // drop clock (making output available in the SHIFT_xR states) - jtag_out(bitvals & ~(`JTAG_TCK_bit)); - `wait_jtag_period; - end -endtask - -///////////////////////////////////////////////////////////////// -// Basic functions to set the state of the JTAG TAP I/F bits - -task jtag_out; - input [2:0] bitvals; - begin - - jtag_tck_o <= bitvals[`JTAG_TCK]; - jtag_tms_o <= bitvals[`JTAG_TMS]; - jtag_tdo_o <= bitvals[`JTAG_TDO]; - end -endtask - - -task jtag_inout; - input [2:0] bitvals; - output l_tdi_val; - begin - - jtag_tck_o <= bitvals[`JTAG_TCK]; - jtag_tms_o <= bitvals[`JTAG_TMS]; - jtag_tdo_o <= bitvals[`JTAG_TDO]; - - l_tdi_val <= jtag_tdi_i; - end -endtask - -endmodule \ No newline at end of file Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/full_system/wave.do =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/full_system/wave.do (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/full_system/wave.do (nonexistent) @@ -1,499 +0,0 @@ -onerror {resume} -quietly WaveActivateNextPane {} 0 -add wave -noupdate -format Logic /xsv_fpga_top/jtag_tdi -add wave -noupdate -format Logic /xsv_fpga_top/jtag_tms -add wave -noupdate -format Logic /xsv_fpga_top/jtag_tck -add wave -noupdate -format Logic /xsv_fpga_top/jtag_tdo -add wave -noupdate -format Logic /xsv_fpga_top/debug_select -add wave -noupdate -divider {Top level signals} -add wave -noupdate -format Logic /xsv_fpga_top/clk -add wave -noupdate -format Logic /xsv_fpga_top/rstn -add wave -noupdate -format Logic /xsv_fpga_top/rst_r -add wave -noupdate -format Logic /xsv_fpga_top/wb_rst -add wave -noupdate -format Logic /xsv_fpga_top/cpu_rst -add wave -noupdate -divider {Top-level CPU dbg} -add wave -noupdate -format Literal /xsv_fpga_top/dbg_lss -add wave -noupdate -format Literal /xsv_fpga_top/dbg_is -add wave -noupdate -format Literal /xsv_fpga_top/dbg_wp -add wave -noupdate -format Logic /xsv_fpga_top/dbg_bp -add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_dat_dbg -add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_dat_risc -add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_adr -add wave -noupdate -format Logic /xsv_fpga_top/dbg_ewt -add wave -noupdate -format Logic /xsv_fpga_top/dbg_stall -add wave -noupdate -format Logic /xsv_fpga_top/dbg_we -add wave -noupdate -format Logic /xsv_fpga_top/dbg_stb -add wave -noupdate -format Logic /xsv_fpga_top/dbg_ack -add wave -noupdate -divider {CPU IWB} -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/iwb_clk_i -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/iwb_rst_i -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/iwb_ack_i -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/iwb_err_i -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/iwb_rty_i -add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/or1200_top/iwb_dat_i -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/iwb_cyc_o -add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/or1200_top/iwb_adr_o -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/iwb_stb_o -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/iwb_we_o -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/iwb_sel_o -add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/or1200_top/iwb_dat_o -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/iwb_cab_o -add wave -noupdate -divider {DBG WB signals} -add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/wb_dm_adr_o -add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/wb_dm_dat_i -add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/wb_dm_dat_o -add wave -noupdate -format Literal /xsv_fpga_top/wb_dm_sel_o -add wave -noupdate -format Logic /xsv_fpga_top/wb_dm_we_o -add wave -noupdate -format Logic /xsv_fpga_top/wb_dm_stb_o -add wave -noupdate -format Logic /xsv_fpga_top/wb_dm_cyc_o -add wave -noupdate -format Logic /xsv_fpga_top/wb_dm_cab_o -add wave -noupdate -format Logic /xsv_fpga_top/wb_dm_ack_i -add wave -noupdate -format Logic /xsv_fpga_top/wb_dm_err_i -add wave -noupdate -divider {DBG WB BIU} -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/tck_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/rst_i -add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/data_i -add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/data_o -add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/addr_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/strobe_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/rd_wrn_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/rdy_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/err_o -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/word_size_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/wb_clk_i -add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/wb_adr_o -add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/wb_dat_o -add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/wb_dat_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/wb_cyc_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/wb_stb_o -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/wb_sel_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/wb_we_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/wb_ack_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/wb_cab_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/wb_err_i -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/wb_cti_o -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/wb_bte_o -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/sel_reg -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/addr_reg -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/data_in_reg -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/data_out_reg -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/wr_reg -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/str_sync -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/rdy_sync -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/err_reg -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/rdy_sync_tff1 -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/rdy_sync_tff2 -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/rdy_sync_tff2q -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/str_sync_wbff1 -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/str_sync_wbff2 -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/str_sync_wbff2q -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/data_o_en -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/rdy_sync_en -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/err_en -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/be_dec -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/start_toggle -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/swapped_data_i -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/swapped_data_out -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/wb_fsm_state -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/next_fsm_state -add wave -noupdate -divider {DBG WB Module} -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/tck_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/module_tdo_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/tdi_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/capture_dr_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/shift_dr_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/update_dr_i -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/data_register_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/module_select_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/top_inhibit_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/rst_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/wb_clk_i -add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_top/i_dbg_wb/wb_adr_o -add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_top/i_dbg_wb/wb_dat_o -add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_top/i_dbg_wb/wb_dat_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/wb_cyc_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/wb_stb_o -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/wb_sel_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/wb_we_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/wb_ack_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/wb_cab_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/wb_err_i -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/wb_cti_o -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/wb_bte_o -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/address_counter -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/bit_count -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/word_count -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/operation -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/data_out_shift_reg -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/internal_register_select -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/internal_reg_error -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/addr_sel -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/addr_ct_en -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/op_reg_en -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/bit_ct_en -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/bit_ct_rst -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/word_ct_sel -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/word_ct_en -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/out_reg_ld_en -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/out_reg_shift_en -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/out_reg_data_sel -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/tdo_output_sel -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu_strobe -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/crc_clr -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/crc_en -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/crc_in_sel -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/crc_shift_en -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/regsel_ld_en -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/intreg_ld_en -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/error_reg_en -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu_clr_err -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/word_count_zero -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/bit_count_max -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/module_cmd -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu_ready -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu_err -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/burst_instruction -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/intreg_instruction -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/intreg_write -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/rd_op -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/crc_match -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/bit_count_32 -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/word_size_bits -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/word_size_bytes -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/incremented_address -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/data_to_addr_counter -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/data_to_word_counter -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/decremented_word_count -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/address_data_in -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/count_data_in -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/operation_in -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/data_to_biu -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/data_from_biu -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/crc_data_out -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/crc_data_in -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/crc_serial_out -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/reg_select_data -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/out_reg_data -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/data_from_internal_reg -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu_rst -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/module_state -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/module_next_state -add wave -noupdate -divider {DBG Top} -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/tck_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/tdi_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/tdo_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/rst_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/shift_dr_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/pause_dr_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/update_dr_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/capture_dr_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/debug_select_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/wb_clk_i -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/wb_adr_o -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/wb_dat_o -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/wb_dat_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/wb_cyc_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/wb_stb_o -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/wb_sel_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/wb_we_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/wb_ack_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/wb_cab_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/wb_err_i -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/wb_cti_o -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/wb_bte_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/cpu0_clk_i -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/cpu0_addr_o -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/cpu0_data_i -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/cpu0_data_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/cpu0_bp_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/cpu0_stall_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/cpu0_stb_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/cpu0_we_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/cpu0_ack_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/cpu0_rst_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/tdo_wb -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/tdo_cpu0 -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/tdo_cpu1 -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/input_shift_reg -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/module_id_reg -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/select_inhibit -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/module_inhibit -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/select_cmd -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/module_id_in -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/module_selects -add wave -noupdate -divider {DBG CPU0 Module} -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/tck_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/module_tdo_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/tdi_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/capture_dr_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/shift_dr_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/update_dr_i -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/data_register_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/module_select_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/top_inhibit_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/rst_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/cpu_clk_i -add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/cpu_addr_o -add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/cpu_data_i -add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/cpu_data_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/cpu_stb_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/cpu_we_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/cpu_ack_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/cpu_rst_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/cpu_bp_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/cpu_stall_o -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/address_counter -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/bit_count -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/word_count -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/operation -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/data_out_shift_reg -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/internal_register_select -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/internal_reg_status -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/addr_sel -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/addr_ct_en -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/op_reg_en -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/bit_ct_en -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/bit_ct_rst -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/word_ct_sel -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/word_ct_en -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/out_reg_ld_en -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/out_reg_shift_en -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/out_reg_data_sel -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/tdo_output_sel -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/biu_strobe -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/crc_clr -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/crc_en -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/crc_in_sel -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/crc_shift_en -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/regsel_ld_en -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/intreg_ld_en -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/word_count_zero -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/bit_count_max -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/module_cmd -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/biu_ready -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/burst_instruction -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/intreg_instruction -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/intreg_write -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/rd_op -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/crc_match -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/bit_count_32 -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/word_size_bits -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/address_increment -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/incremented_address -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/data_to_addr_counter -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/data_to_word_counter -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/decremented_word_count -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/address_data_in -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/count_data_in -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/operation_in -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/data_to_biu -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/data_from_biu -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/crc_data_out -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/crc_data_in -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/crc_serial_out -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/reg_select_data -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/out_reg_data -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/data_from_internal_reg -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/status_reg_wr -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/module_state -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/module_next_state -add wave -noupdate -divider {DBG CPU0 BIU} -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/tck_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/rst_i -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/data_i -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/data_o -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/addr_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/strobe_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/rd_wrn_i -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/rdy_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/cpu_clk_i -add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/cpu_addr_o -add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/cpu_data_i -add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/cpu_data_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/cpu_stb_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/cpu_we_o -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/cpu_ack_i -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/addr_reg -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/data_in_reg -add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/data_out_reg -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/wr_reg -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/str_sync -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/rdy_sync -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/rdy_sync_tff1 -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/rdy_sync_tff2 -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/rdy_sync_tff2q -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/str_sync_wbff1 -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/str_sync_wbff2 -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/str_sync_wbff2q -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/data_o_en -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/rdy_sync_en -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/start_toggle -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/cpu_fsm_state -add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/next_fsm_state -add wave -noupdate -divider {CPU debug unit} -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/clk -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/rst -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dcpu_cycstb_i -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dcpu_we_i -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dcpu_adr_i -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dcpu_dat_lsu -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dcpu_dat_dc -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/icpu_cycstb_i -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/ex_freeze -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/branch_op -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/ex_insn -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/id_pc -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/spr_dat_npc -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/rf_dataw -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/du_dsr -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/du_stall -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/du_addr -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/du_dat_i -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/du_dat_o -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/du_read -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/du_write -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/du_except -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/du_hwbkpt -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/spr_cs -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/spr_write -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/spr_addr -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/spr_dat_i -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/spr_dat_o -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dbg_stall_i -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dbg_ewt_i -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dbg_lss_o -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dbg_is_o -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dbg_wp_o -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dbg_bp_o -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dbg_stb_i -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dbg_we_i -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dbg_adr_i -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dbg_dat_i -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dbg_dat_o -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dbg_ack_o -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dmr1 -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dmr2 -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dsr -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/drr -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dvr0 -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dvr1 -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dvr2 -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dvr3 -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dvr4 -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dvr5 -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dvr6 -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dvr7 -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dcr0 -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dcr1 -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dcr2 -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dcr3 -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dcr4 -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dcr5 -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dcr6 -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dcr7 -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dwcr0 -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dwcr1 -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dmr1_sel -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dmr2_sel -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dsr_sel -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/drr_sel -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dvr0_sel -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dvr1_sel -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dvr2_sel -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dvr3_sel -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dvr4_sel -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dvr5_sel -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dvr6_sel -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dvr7_sel -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dcr0_sel -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dcr1_sel -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dcr2_sel -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dcr3_sel -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dcr4_sel -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dcr5_sel -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dcr6_sel -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dcr7_sel -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dwcr0_sel -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dwcr1_sel -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dbg_bp_r -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/except_stop -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/tbia_dat_o -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/tbim_dat_o -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/tbar_dat_o -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/tbts_dat_o -add wave -noupdate -divider {CPU SPRs} -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/clk -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/rst -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/flagforw -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/flag_we -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/flag -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/cyforw -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/cy_we -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/carry -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/addrbase -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/addrofs -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/dat_i -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/alu_op -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/branch_op -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/epcr -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/eear -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/esr -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/except_started -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/to_wbmux -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/epcr_we -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/eear_we -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/esr_we -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/pc_we -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/sr_we -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/to_sr -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/sr -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/spr_dat_cfgr -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/spr_dat_rf -add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/spr_dat_npc -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/spr_dat_ppc -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/spr_dat_mac -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/spr_dat_pic -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/spr_dat_tt -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/spr_dat_pm -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/spr_dat_dmmu -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/spr_dat_immu -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/spr_dat_du -add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/spr_addr -add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/spr_dat_o -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/spr_cs -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/spr_we -add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/du_addr -add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/du_dat_du -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/du_read -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/du_write -add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/du_dat_cpu -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/write_spr -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/read_spr -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/cfgr_sel -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/rf_sel -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/npc_sel -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/ppc_sel -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/sr_sel -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/epcr_sel -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/eear_sel -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/esr_sel -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/sys_data -add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/du_access -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/sprs_op -add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/unqualified_cs -TreeUpdate [SetDefaultTree] -WaveRestoreCursors {{Cursor 1} {6180 ps} 0} -configure wave -namecolwidth 391 -configure wave -valuecolwidth 100 -configure wave -justifyvalue left -configure wave -signalnamewidth 0 -configure wave -snapdistance 10 -configure wave -datasetprefix 0 -configure wave -rowmargin 4 -configure wave -childrowmargin 2 -configure wave -gridoffset 0 -configure wave -gridperiod 1 -configure wave -griddelta 40 -configure wave -timeline 0 -update -WaveRestoreZoom {0 ps} {6180 ps} Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/full_system/xsv_fpga_top.v =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/full_system/xsv_fpga_top.v (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/full_system/xsv_fpga_top.v (nonexistent) @@ -1,911 +0,0 @@ -////////////////////////////////////////////////////////////////////// -//// //// -//// OR1K test application for XESS XSV board, Top Level //// -//// //// -//// This file is part of the OR1K test application //// -//// http://www.opencores.org/cores/or1k/ //// -//// //// -//// Description //// -//// Top level instantiating all the blocks. //// -//// //// -//// To Do: //// -//// - nothing really //// -//// //// -//// Author(s): //// -//// - Damjan Lampret, lampret@opencores.org //// -//// //// -////////////////////////////////////////////////////////////////////// -//// //// -//// Copyright (C) 2001 Authors //// -//// //// -//// This source file may be used and distributed without //// -//// restriction provided that this copyright statement is not //// -//// removed from the file and that any derivative work contains //// -//// the original copyright notice and the associated disclaimer. //// -//// //// -//// This source file is free software; you can redistribute it //// -//// and/or modify it under the terms of the GNU Lesser General //// -//// Public License as published by the Free Software Foundation; //// -//// either version 2.1 of the License, or (at your option) any //// -//// later version. //// -//// //// -//// This source is distributed in the hope that it will be //// -//// useful, but WITHOUT ANY WARRANTY; without even the implied //// -//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// -//// PURPOSE. See the GNU Lesser General Public License for more //// -//// details. //// -//// //// -//// You should have received a copy of the GNU Lesser General //// -//// Public License along with this source; if not, download it //// -//// from http://www.opencores.org/lgpl.shtml //// -//// //// -////////////////////////////////////////////////////////////////////// -// -// CVS Revision History -// -// $Log: xsv_fpga_top.v,v $ -// Revision 1.3 2008/07/11 08:22:17 Nathan -// Added code to make the native TAP simulate a Xilinx BSCAN device, and code to simulate the behavior of the xilinx_internal_jtag module. The adv_dbg_module should get inputs that emulate the xilinx_internal_jtag device outputs. -// -// Revision 1.10 2004/04/05 08:44:35 lampret -// Merged branch_qmem into main tree. -// -// Revision 1.8 2003/04/07 21:05:58 lampret -// WB = 1/2 RISC clock test code enabled. -// -// Revision 1.7 2003/04/07 01:28:17 lampret -// Adding OR1200_CLMODE_1TO2 test code. -// -// Revision 1.6 2002/08/12 05:35:12 lampret -// rty_i are unused - tied to zero. -// -// Revision 1.5 2002/03/29 20:58:51 lampret -// Changed hardcoded address for fake MC to use a define. -// -// Revision 1.4 2002/03/29 16:30:47 lampret -// Fixed port names that changed. -// -// Revision 1.3 2002/03/29 15:50:03 lampret -// Added response from memory controller (addr 0x60000000) -// -// Revision 1.2 2002/03/21 17:39:16 lampret -// Fixed some typos -// -// - -`include "xsv_fpga_defines.v" -//`include "bench_defines.v" - -module xsv_fpga_top ( - - // - // Global signals - // - //clk, - //rstn, - - // UART signals - uart_stx, uart_srx - - // SDRAM signals - /* - sdram_clk_i, sdram_addr_o, sdram_ba_o, sdram_dqm_o, - sdram_we_o, sdram_cas_o, sdram_ras_o, - sdram_cke_o, sdram_cs_o, sdram_data_io - */ -); - -// -// I/O Ports -// - -// -// Global -// -//input clk; -//input rstn; - -// UART -input uart_srx; -output uart_stx; - -// SDRAM -/* -input sdram_clk_i; -output [11:0] sdram_addr_o; -output [1:0] sdram_ba_o; -output [3:0] sdram_dqm_o; -output sdram_we_o; -output sdram_cas_o; -output sdram_ras_o; -output sdram_cke_o; -output sdram_cs_o; -inout [31:0] sdram_data_io; -*/ - -// -// Internal wires -// - -wire clk; -wire rstn; - -// -// Debug core master i/f wires -// -wire [31:0] wb_dm_adr_o; -wire [31:0] wb_dm_dat_i; -wire [31:0] wb_dm_dat_o; -wire [3:0] wb_dm_sel_o; -wire wb_dm_we_o; -wire wb_dm_stb_o; -wire wb_dm_cyc_o; -wire wb_dm_cab_o; -wire wb_dm_ack_i; -wire wb_dm_err_i; - -// -// Debug <-> RISC wires -// -wire [3:0] dbg_lss; -wire [1:0] dbg_is; -wire [10:0] dbg_wp; -wire dbg_bp; -wire [31:0] dbg_dat_dbg; -wire [31:0] dbg_dat_risc; -wire [31:0] dbg_adr; -wire dbg_ewt; -wire dbg_stall; -wire dbg_we; -wire dbg_stb; -wire dbg_ack; -wire dbg_cpu0_rst; - -// -// TAP<->dbg_interface -// -wire debug_rst; -wire debug_select; -wire debug_tdi; -wire debug_tdo; -wire shift_dr; -wire pause_dr; -wire update_dr; -wire capture_dr; -wire drck; // To emulate the BSCAN_VIRTEX/SPARTAN devices - -// -// RISC instruction master i/f wires -// -wire [31:0] wb_rim_adr_o; -wire wb_rim_cyc_o; -wire [31:0] wb_rim_dat_i; -wire [31:0] wb_rim_dat_o; -wire [3:0] wb_rim_sel_o; -wire wb_rim_ack_i; -wire wb_rim_err_i; -wire wb_rim_rty_i = 1'b0; -wire wb_rim_we_o; -wire wb_rim_stb_o; -wire wb_rim_cab_o; -//wire [31:0] wb_rif_adr; -//reg prefix_flash; - -// -// RISC data master i/f wires -// -wire [31:0] wb_rdm_adr_o; -wire wb_rdm_cyc_o; -wire [31:0] wb_rdm_dat_i; -wire [31:0] wb_rdm_dat_o; -wire [3:0] wb_rdm_sel_o; -wire wb_rdm_ack_i; -wire wb_rdm_err_i; -wire wb_rdm_rty_i = 1'b0; -wire wb_rdm_we_o; -wire wb_rdm_stb_o; -wire wb_rdm_cab_o; - -// -// RISC misc -// -//wire [19:0] pic_ints; - -// -// SRAM controller slave i/f wires -// -wire [31:0] wb_ss_dat_i; -wire [31:0] wb_ss_dat_o; -wire [31:0] wb_ss_adr_i; -wire [3:0] wb_ss_sel_i; -wire wb_ss_we_i; -wire wb_ss_cyc_i; -wire wb_ss_stb_i; -wire wb_ss_ack_o; -wire wb_ss_err_o; - - -// -// UART16550 core slave i/f wires -// -wire [31:0] wb_us_dat_i; -wire [31:0] wb_us_dat_o; -wire [31:0] wb_us_adr_i; -wire [3:0] wb_us_sel_i; -wire wb_us_we_i; -wire wb_us_cyc_i; -wire wb_us_stb_i; -wire wb_us_ack_o; -wire wb_us_err_o; - -// -// UART external i/f wires -// -wire uart_stx; -wire uart_srx; - - -// -// Memory controller core slave i/f wires -// -/* -wire [31:0] wb_mem_dat_i; -wire [31:0] wb_mem_dat_o; -wire [31:0] wb_mem_adr_i; -wire [3:0] wb_mem_sel_i; -wire wb_mem_we_i; -wire wb_mem_cyc_i; -wire wb_mem_stb_i; -wire wb_mem_ack_o; -wire wb_mem_err_o; - -// Internal mem control wires -wire [7:0] mc_cs; -wire [12:0] mc_addr_o; - - -// Memory control external wires -wire sdram_clk_i; -wire [11:0] sdram_addr_o; -wire [1:0] sdram_ba_o; -wire [3:0] sdram_dqm_o; -wire sdram_we_o; -wire sdram_cas_o; -wire sdram_ras_o; -wire sdram_cke_o; -wire sdram_cs_o; -wire [31:0] sdram_data_io; -*/ - -// -// JTAG wires -// -wire jtag_tdi; -wire jtag_tms; -wire jtag_tck; -wire jtag_trst; -wire jtag_tdo; - - -// -// Reset debounce -// -reg rstn_debounce; -wire rst_r; -reg wb_rst; -reg cpu_rst; - -// -// Global clock -// -`ifdef OR1200_CLMODE_1TO2 -reg wb_clk; -`else -wire wb_clk; -`endif - -// -// Reset debounce -// -always @(posedge wb_clk or negedge rstn) - if (~rstn) - rstn_debounce <= 1'b0; - else - rstn_debounce <= #1 1'b1; - -assign rst_r = ~rstn_debounce; -//assign dbg_trst = rstn_debounce & jtag_trst; - -// -// Reset debounce -// -always @(posedge wb_clk) - wb_rst <= #1 rst_r; - -always @ (posedge wb_clk) - cpu_rst <= dbg_cpu0_rst | rst_r; - -// -// This is purely for testing 1/2 WB clock -// This should never be used when implementing in -// an FPGA. It is used only for simulation regressions. -// -`ifdef OR1200_CLMODE_1TO2 -initial wb_clk = 0; -always @(posedge clk) - wb_clk = ~wb_clk; -`else -// -// Some Xilinx P&R tools need this -// -`ifdef TARGET_VIRTEX -IBUFG IBUFG1 ( - .O ( wb_clk ), - .I ( clk ) -); -`else -assign wb_clk = clk; -`endif -`endif // OR1200_CLMODE_1TO2 - -// -// Unused WISHBONE signals -// -assign wb_us_err_o = 1'b0; - - -assign jtag_tvref = 1'b1; -assign jtag_tgnd = 1'b0; - -// JTAG / adv. debug control testbench -adv_debug_tb tb ( - -.jtag_tck_o(jtag_tck), -.jtag_tms_o(jtag_tms), -.jtag_tdo_o(jtag_tdi), -.jtag_tdi_i(jtag_tdo), - -.wb_clk_o(clk), -.sys_rstn_o(rstn) -); - -// -// JTAG TAP controller instantiation -// -tap_top tap ( - // JTAG pads - .tms_pad_i(jtag_tms), - .tck_pad_i(jtag_tck), - .trstn_pad_i(1'b1), - .tdi_pad_i(jtag_tdi), - .tdo_pad_o(jtag_tdo), - .tdo_padoe_o(), - - // TAP states - .test_logic_reset_o(debug_rst), - .run_test_idle_o(), - .shift_dr_o(shift_dr), - .pause_dr_o(), - .update_dr_o(update_dr), - .capture_dr_o(capture_dr), - - // Select signals for boundary scan or mbist - .extest_select_o(), - .sample_preload_select_o(), - .mbist_select_o(), - .debug_select_o(debug_select), - - // TDO signal that is connected to TDI of sub-modules. - .tdo_o(debug_tdi), - - // TDI signals from sub-modules - .debug_tdi_i(debug_tdo), // from debug module - .bs_chain_tdi_i(1'b0), // from Boundary Scan Chain - .mbist_tdi_i(1'b0) // from Mbist Chain - ); - -// This is taken from the xilinx bscan_virtex4.v module -// It simulates the DRCK output of a BSCAN_* block -assign drck = ((debug_select & !shift_dr & !capture_dr) || - (debug_select & shift_dr & jtag_tck) || - (debug_select & capture_dr & jtag_tck)); - -reg xshift; -reg xcapture; -reg xupdate; -reg xselect; - -// TAP state outputs are also delayed half a cycle. -always @(negedge jtag_tck) -begin - xshift = shift_dr; - xcapture = capture_dr; - xupdate = update_dr; - xselect = debug_select; -end - -////////////////////////////////////////// - - -wire tck2; -assign tck2 = (drck & !xupdate); - -reg update2; - -always @ (posedge xupdate or posedge xcapture or negedge xselect) -begin - if(xupdate) update2 <= 1'b1; - else if(xcapture) update2 <= 1'b0; - else if(!xselect) update2 <= 1'b0; -end - -// -// Instantiation of the development i/f -// -dbg_top dbg_top ( - - // JTAG pins - .tck_i ( tck2 ), - .tdi_i ( debug_tdi ), - .tdo_o ( debug_tdo ), - .rst_i ( debug_rst ), - - // TAP states - .shift_dr_i( xshift ), - .pause_dr_i( pause_dr ), - .update_dr_i( update2 ), - .capture_dr_i (xcapture), - - // Instructions - .debug_select_i( xselect ), - - // RISC signals - .cpu0_clk_i ( wb_clk ), - .cpu0_addr_o ( dbg_adr ), - .cpu0_data_i ( dbg_dat_risc ), - .cpu0_data_o ( dbg_dat_dbg ), - .cpu0_bp_i ( dbg_bp ), - .cpu0_stall_o ( dbg_stall ), - .cpu0_stb_o ( dbg_stb ), - .cpu0_we_o ( dbg_we ), - .cpu0_ack_i ( dbg_ack ), - .cpu0_rst_o ( dbg_cpu0_rst), - - // WISHBONE common - .wb_clk_i ( wb_clk ), - - // WISHBONE master interface - .wb_adr_o ( wb_dm_adr_o ), - .wb_dat_o ( wb_dm_dat_o ), - .wb_dat_i ( wb_dm_dat_i ), - .wb_cyc_o ( wb_dm_cyc_o ), - .wb_stb_o ( wb_dm_stb_o ), - .wb_sel_o ( wb_dm_sel_o ), - .wb_we_o ( wb_dm_we_o ), - .wb_ack_i ( wb_dm_ack_i ), - .wb_cab_o ( wb_dm_cab_o ), - .wb_err_i ( wb_dm_err_i ), - .wb_cti_o (), - .wb_bte_o () -); - - -// -// Instantiation of the OR1200 RISC -// -or1200_top or1200_top ( - - // Common - .rst_i ( cpu_rst ), - .clk_i ( clk ), -`ifdef OR1200_CLMODE_1TO2 - .clmode_i ( 2'b01 ), -`else -`ifdef OR1200_CLMODE_1TO4 - .clmode_i ( 2'b11 ), -`else - .clmode_i ( 2'b00 ), -`endif -`endif - - // WISHBONE Instruction Master - .iwb_clk_i ( wb_clk ), - .iwb_rst_i ( wb_rst ), - .iwb_cyc_o ( wb_rim_cyc_o ), - .iwb_adr_o ( wb_rim_adr_o ), - .iwb_dat_i ( wb_rim_dat_i ), - .iwb_dat_o ( wb_rim_dat_o ), - .iwb_sel_o ( wb_rim_sel_o ), - .iwb_ack_i ( wb_rim_ack_i ), - .iwb_err_i ( wb_rim_err_i ), - .iwb_rty_i ( wb_rim_rty_i ), - .iwb_we_o ( wb_rim_we_o ), - .iwb_stb_o ( wb_rim_stb_o ), - .iwb_cab_o ( wb_rim_cab_o ), - - // WISHBONE Data Master - .dwb_clk_i ( wb_clk ), - .dwb_rst_i ( wb_rst ), - .dwb_cyc_o ( wb_rdm_cyc_o ), - .dwb_adr_o ( wb_rdm_adr_o ), - .dwb_dat_i ( wb_rdm_dat_i ), - .dwb_dat_o ( wb_rdm_dat_o ), - .dwb_sel_o ( wb_rdm_sel_o ), - .dwb_ack_i ( wb_rdm_ack_i ), - .dwb_err_i ( wb_rdm_err_i ), - .dwb_rty_i ( wb_rdm_rty_i ), - .dwb_we_o ( wb_rdm_we_o ), - .dwb_stb_o ( wb_rdm_stb_o ), - .dwb_cab_o ( wb_rdm_cab_o ), - - // Debug - .dbg_stall_i ( dbg_stall ), // Set to 1'b0 if debug is absent / broken - .dbg_dat_i ( dbg_dat_dbg ), - .dbg_adr_i ( dbg_adr ), - .dbg_ewt_i ( 1'b0 ), - .dbg_lss_o ( ), - .dbg_is_o ( ), - .dbg_wp_o ( ), - .dbg_bp_o ( dbg_bp ), - .dbg_dat_o ( dbg_dat_risc ), - .dbg_ack_o ( dbg_ack ), - .dbg_stb_i ( dbg_stb ), - .dbg_we_i ( dbg_we ), - - // Power Management - .pm_clksd_o ( ), - .pm_cpustall_i ( 1'b0 ), - .pm_dc_gate_o ( ), - .pm_ic_gate_o ( ), - .pm_dmmu_gate_o ( ), - .pm_immu_gate_o ( ), - .pm_tt_gate_o ( ), - .pm_cpu_gate_o ( ), - .pm_wakeup_o ( ), - .pm_lvolt_o ( ), - - // Interrupts - .pic_ints_i (20'b0) -); - - -// -// Instantiation of the On-chip RAM controller -// -onchip_ram_top #( - .dwidth (32), - .size_bytes(16384) - ) onchip_ram_top ( - - // WISHBONE common - .wb_clk_i ( wb_clk ), - .wb_rst_i ( wb_rst ), - - // WISHBONE slave - .wb_dat_i ( wb_ss_dat_i ), - .wb_dat_o ( wb_ss_dat_o ), - .wb_adr_i ( wb_ss_adr_i ), - .wb_sel_i ( wb_ss_sel_i ), - .wb_we_i ( wb_ss_we_i ), - .wb_cyc_i ( wb_ss_cyc_i ), - .wb_stb_i ( wb_ss_stb_i ), - .wb_ack_o ( wb_ss_ack_o ), - .wb_err_o ( wb_ss_err_o ) -); - -// -// Instantiation of the UART16550 -// -uart_top uart_top ( - - // WISHBONE common - .wb_clk_i ( wb_clk ), - .wb_rst_i ( wb_rst ), - - // WISHBONE slave - .wb_adr_i ( wb_us_adr_i[4:0] ), - .wb_dat_i ( wb_us_dat_i ), - .wb_dat_o ( wb_us_dat_o ), - .wb_we_i ( wb_us_we_i ), - .wb_stb_i ( wb_us_stb_i ), - .wb_cyc_i ( wb_us_cyc_i ), - .wb_ack_o ( wb_us_ack_o ), - .wb_sel_i ( wb_us_sel_i ), - - // Interrupt request - .int_o ( ), - - // UART signals - // serial input/output - .stx_pad_o ( uart_stx ), - .srx_pad_i ( uart_srx ), - - // modem signals - .rts_pad_o ( ), - .cts_pad_i ( 1'b0 ), - .dtr_pad_o ( ), - .dsr_pad_i ( 1'b0 ), - .ri_pad_i ( 1'b0 ), - .dcd_pad_i ( 1'b0 ) -); - -/* -mc_wrapper mc_wrapper ( - .clk_i ( wb_clk ), - .rst_i ( wb_rst ), - .clk_mem_i ( sdram_clk_i ), - - .wb_data_i ( wb_mem_dat_i ), - .wb_data_o ( wb_mem_dat_o ), - .wb_addr_i ( wb_mem_adr_i ), - .wb_sel_i ( wb_mem_sel_i ), - .wb_we_i ( wb_mem_we_i ), - .wb_cyc_i ( wb_mem_cyc_i ), - .wb_stb_i ( wb_mem_stb_i ), - .wb_ack_o ( wb_mem_ack_o ), - .wb_err_o ( wb_mem_err_o ), - - .susp_req_i ( 1'b0 ), - .resume_req_i ( 1'b0 ), - .suspended_o (), - .poc_o ( ), // This is an output so the rest of the system can configure itself - - .sdram_addr_o ( mc_addr_o ), - .sdram_ba_o ( sdram_ba_o ), - .sdram_cas_n_o ( sdram_cas_o ), - .sdram_ras_n_o ( sdram_ras_o ), - .sdram_cke_n_o ( sdram_cke_o ), - - .mc_dqm_o ( sdram_dqm_o ), - .mc_we_n_o ( sdram_we_o ), - .mc_oe_n_o ( ), - .mc_data_io ( sdram_data_io ), - .mc_parity_io ( ), - .mc_cs_n_o ( mc_cs ) - ); - -assign sdram_cs_o = mc_cs[0]; -assign sdram_addr_o = mc_addr_o[11:0]; -*/ - -// -// Instantiation of the Traffic COP -// -wb_conbus_top #(.s0_addr_w (`APP_ADDR_DEC_W), - .s0_addr (`APP_ADDR_SDRAM), - .s1_addr_w (`APP_ADDR_DEC2_W), - .s1_addr (`APP_ADDR_OCRAM), - .s27_addr_w (`APP_ADDR_DECP_W), - .s2_addr (`APP_ADDR_VGA), - .s3_addr (`APP_ADDR_ETH), - .s4_addr (`APP_ADDR_AUDIO), - .s5_addr (`APP_ADDR_UART), - .s6_addr (`APP_ADDR_PS2), - .s7_addr (`APP_ADDR_RES1) - ) tc_top ( - - // WISHBONE common - .clk_i ( wb_clk ), - .rst_i ( wb_rst ), - - // WISHBONE Initiator 0 - .m0_cyc_i ( 1'b0 ), - .m0_stb_i ( 1'b0 ), - .m0_cab_i ( 1'b0 ), - .m0_adr_i ( 32'h0000_0000 ), - .m0_sel_i ( 4'b0000 ), - .m0_we_i ( 1'b0 ), - .m0_dat_i ( 32'h0000_0000 ), - .m0_dat_o ( ), - .m0_ack_o ( ), - .m0_err_o ( ), - - // WISHBONE Initiator 1 - .m1_cyc_i ( 1'b0 ), - .m1_stb_i ( 1'b0 ), - .m1_cab_i ( 1'b0 ), - .m1_adr_i ( 32'h0000_0000 ), - .m1_sel_i ( 4'b0000 ), - .m1_we_i ( 1'b0 ), - .m1_dat_i ( 32'h0000_0000 ), - .m1_dat_o ( ), - .m1_ack_o ( ), - .m1_err_o ( ), - - // WISHBONE Initiator 2 - .m2_cyc_i ( 1'b0 ), - .m2_stb_i ( 1'b0 ), - .m2_cab_i ( 1'b0 ), - .m2_adr_i ( 32'h0000_0000 ), - .m2_sel_i ( 4'b0000 ), - .m2_we_i ( 1'b0 ), - .m2_dat_i ( 32'h0000_0000 ), - .m2_dat_o ( ), - .m2_ack_o ( ), - .m2_err_o ( ), - - // WISHBONE Initiator 3 - .m3_cyc_i ( wb_dm_cyc_o ), - .m3_stb_i ( wb_dm_stb_o ), - .m3_cab_i ( wb_dm_cab_o ), - .m3_adr_i ( wb_dm_adr_o ), - .m3_sel_i ( wb_dm_sel_o ), - .m3_we_i ( wb_dm_we_o ), - .m3_dat_i ( wb_dm_dat_o ), - .m3_dat_o ( wb_dm_dat_i ), - .m3_ack_o ( wb_dm_ack_i ), - .m3_err_o ( wb_dm_err_i ), - - // WISHBONE Initiator 4 - .m4_cyc_i ( wb_rdm_cyc_o ), - .m4_stb_i ( wb_rdm_stb_o ), - .m4_cab_i ( wb_rdm_cab_o ), - .m4_adr_i ( wb_rdm_adr_o ), - .m4_sel_i ( wb_rdm_sel_o ), - .m4_we_i ( wb_rdm_we_o ), - .m4_dat_i ( wb_rdm_dat_o ), - .m4_dat_o ( wb_rdm_dat_i ), - .m4_ack_o ( wb_rdm_ack_i ), - .m4_err_o ( wb_rdm_err_i ), - - // WISHBONE Initiator 5 - .m5_cyc_i ( wb_rim_cyc_o ), - .m5_stb_i ( wb_rim_stb_o ), - .m5_cab_i ( wb_rim_cab_o ), - .m5_adr_i ( wb_rim_adr_o ), - .m5_sel_i ( wb_rim_sel_o ), - .m5_we_i ( wb_rim_we_o ), - .m5_dat_i ( wb_rim_dat_o ), - .m5_dat_o ( wb_rim_dat_i ), - .m5_ack_o ( wb_rim_ack_i ), - .m5_err_o ( wb_rim_err_i ), - - // WISHBONE Initiator 6 - .m6_cyc_i ( 1'b0 ), - .m6_stb_i ( 1'b0 ), - .m6_cab_i ( 1'b0 ), - .m6_adr_i ( 32'h0000_0000 ), - .m6_sel_i ( 4'b0000 ), - .m6_we_i ( 1'b0 ), - .m6_dat_i ( 32'h0000_0000 ), - .m6_dat_o ( ), - .m6_ack_o ( ), - .m6_err_o ( ), - - // WISHBONE Initiator 7 - .m7_cyc_i ( 1'b0 ), - .m7_stb_i ( 1'b0 ), - .m7_cab_i ( 1'b0 ), - .m7_adr_i ( 32'h0000_0000 ), - .m7_sel_i ( 4'b0000 ), - .m7_we_i ( 1'b0 ), - .m7_dat_i ( 32'h0000_0000 ), - .m7_dat_o ( ), - .m7_ack_o ( ), - .m7_err_o ( ), - - // WISHBONE Target 0 - .s0_cyc_o ( ), - .s0_stb_o ( ), - .s0_cab_o ( ), - .s0_adr_o ( ), - .s0_sel_o ( ), - .s0_we_o ( ), - .s0_dat_o ( ), - .s0_dat_i ( 32'h0000_0000 ), - .s0_ack_i ( 1'b0 ), - .s0_err_i ( 1'b0 ), - .s0_rty_i ( 1'b0 ), - /* - .s0_cyc_o ( wb_mem_cyc_i ), - .s0_stb_o ( wb_mem_stb_i ), - .s0_cab_o ( wb_mem_cab_i ), - .s0_adr_o ( wb_mem_adr_i ), - .s0_sel_o ( wb_mem_sel_i ), - .s0_we_o ( wb_mem_we_i ), - .s0_dat_o ( wb_mem_dat_i ), - .s0_dat_i ( wb_mem_dat_o ), - .s0_ack_i ( wb_mem_ack_o ), - .s0_err_i ( wb_mem_err_o ), - .s0_rty_i ( 1'b0), - */ - - // WISHBONE Target 1 - .s1_cyc_o ( wb_ss_cyc_i ), - .s1_stb_o ( wb_ss_stb_i ), - .s1_cab_o ( wb_ss_cab_i ), - .s1_adr_o ( wb_ss_adr_i ), - .s1_sel_o ( wb_ss_sel_i ), - .s1_we_o ( wb_ss_we_i ), - .s1_dat_o ( wb_ss_dat_i ), - .s1_dat_i ( wb_ss_dat_o ), - .s1_ack_i ( wb_ss_ack_o ), - .s1_err_i ( wb_ss_err_o ), - .s1_rty_i ( 1'b0 ), - - // WISHBONE Target 2 - .s2_cyc_o ( ), - .s2_stb_o ( ), - .s2_cab_o ( ), - .s2_adr_o ( ), - .s2_sel_o ( ), - .s2_we_o ( ), - .s2_dat_o ( ), - .s2_dat_i ( 32'h0000_0000 ), - .s2_ack_i ( 1'b0 ), - .s2_err_i ( 1'b0 ), - .s2_rty_i ( 1'b0 ), - - // WISHBONE Target 3 - .s3_cyc_o ( ), - .s3_stb_o ( ), - .s3_cab_o ( ), - .s3_adr_o ( ), - .s3_sel_o ( ), - .s3_we_o ( ), - .s3_dat_o ( ), - .s3_dat_i ( 32'h0000_0000 ), - .s3_ack_i ( 1'b0 ), - .s3_err_i ( 1'b0 ), - .s3_rty_i ( 1'b0), - - // WISHBONE Target 4 - .s4_cyc_o ( ), - .s4_stb_o ( ), - .s4_cab_o ( ), - .s4_adr_o ( ), - .s4_sel_o ( ), - .s4_we_o ( ), - .s4_dat_o ( ), - .s4_dat_i ( 32'h0000_0000 ), - .s4_ack_i ( 1'b0 ), - .s4_err_i ( 1'b0 ), - .s4_rty_i ( 1'b0), - - // WISHBONE Target 5 - .s5_cyc_o ( wb_us_cyc_i ), - .s5_stb_o ( wb_us_stb_i ), - .s5_cab_o ( wb_us_cab_i ), - .s5_adr_o ( wb_us_adr_i ), - .s5_sel_o ( wb_us_sel_i ), - .s5_we_o ( wb_us_we_i ), - .s5_dat_o ( wb_us_dat_i ), - .s5_dat_i ( wb_us_dat_o ), - .s5_ack_i ( wb_us_ack_o ), - .s5_err_i ( wb_us_err_o ), - .s5_rty_i ( 1'b0 ), - - // WISHBONE Target 6 - .s6_cyc_o ( ), - .s6_stb_o ( ), - .s6_cab_o ( ), - .s6_adr_o ( ), - .s6_sel_o ( ), - .s6_we_o ( ), - .s6_dat_o ( ), - .s6_dat_i ( 32'h0000_0000 ), - .s6_ack_i ( 1'b0 ), - .s6_err_i ( 1'b0 ), - .s6_rty_i ( 1'b0), - - // WISHBONE Target 7 - .s7_cyc_o ( ), - .s7_stb_o ( ), - .s7_cab_o ( ), - .s7_adr_o ( ), - .s7_sel_o ( ), - .s7_we_o ( ), - .s7_dat_o ( ), - .s7_dat_i ( 32'h0000_0000 ), - .s7_ack_i ( 1'b0 ), - .s7_err_i ( 1'b0 ), - .s7_rty_i ( 1'b0) - -); - -//initial begin -// $dumpvars(0); -// $dumpfile("dump.vcd"); -//end - -endmodule Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/README_testbench.txt =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/README_testbench.txt (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/README_testbench.txt (nonexistent) @@ -1,25 +0,0 @@ -1README_testbench.txt -Advanced Debug Module (adv_dbg_if) -Nathan Yawn, nathan.yawn@opencores.org - -Two testbenches are supplied with the advanced debug interface. The first -uses behavioral simulation of a wishbone bus with a memory attached, and -another behavioral simulatioin of an OR1200 CPU. This testbench performs -and tests bus / memory operations, and performs a few CPU operations, The -top-level module is in adv_dbg_tb.v. Other than the beavioral models, it -instantiates an adv_dbg_if (found in ../rtl/verilog/), and a JTAG TAP -("jtag" module, not included with this module). Note that the TAP -distributed by OpenCores will not work correctly; use the version modified -by Nathan Yawn. - -The second testbench includes an actuall wishbone/OR1200 system. Its -top-level entity is xsv_fpga_top. It instantiates a wb_conbus, an OR1200, -an onchipram, a jtag TAP, and a UART16550, along with an adv_dbg_if. The -testbench is also instantiated here, and is used to drive the inputs to -the JTAG TAP. This testbench is less polished, but includes a functional -test of the single-step capability of the CPU. - -Both testbenches were written for use in ModelSim (version 6.3). A -wave.do file is also included for each testbench, which will display a -useful collectino of signals in the ModelSim wave view. - Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/simulated_system/wb_slave_behavioral.v =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/simulated_system/wb_slave_behavioral.v (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/simulated_system/wb_slave_behavioral.v (nonexistent) @@ -1,425 +0,0 @@ -////////////////////////////////////////////////////////////////////// -//// //// -//// wb_slave_behavioral.v //// -//// //// -//// //// -//// This file is part of the SoC Debug Interface. //// -//// http://www.opencores.org/projects/DebugInterface/ //// -//// //// -//// Author(s): //// -//// Tadej Markovic, tadej@opencores.org //// -//// //// -//// //// -//// All additional information is avaliable in the README.txt //// -//// file. //// -//// //// -////////////////////////////////////////////////////////////////////// -//// //// -//// Copyright (C) 2000 - 2004 Authors //// -//// //// -//// This source file may be used and distributed without //// -//// restriction provided that this copyright statement is not //// -//// removed from the file and that any derivative work contains //// -//// the original copyright notice and the associated disclaimer. //// -//// //// -//// This source file is free software; you can redistribute it //// -//// and/or modify it under the terms of the GNU Lesser General //// -//// Public License as published by the Free Software Foundation; //// -//// either version 2.1 of the License, or (at your option) any //// -//// later version. //// -//// //// -//// This source is distributed in the hope that it will be //// -//// useful, but WITHOUT ANY WARRANTY; without even the implied //// -//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// -//// PURPOSE. See the GNU Lesser General Public License for more //// -//// details. //// -//// //// -//// You should have received a copy of the GNU Lesser General //// -//// Public License along with this source; if not, download it //// -//// from http://www.opencores.org/lgpl.shtml //// -//// //// -////////////////////////////////////////////////////////////////////// -// -// CVS Revision History -// -// $Log: wb_slave_behavioral.v,v $ -// Revision 1.1 2008/07/08 19:11:57 Nathan -// Added second testbench to simulate a complete system, including OR1200, wb_conbus, and onchipram. Renamed sim-only testbench directory from verilog to simulated_system. -// -// Revision 1.2 2008/06/26 20:54:44 Nathan -// Testbench modified to use WB behavioral model instead of an onchip_ram. Added test of WB error register. -// -// Revision 1.1 2008/06/18 18:34:49 Nathan -// Initial working version. Only Wishbone module implemented. Simple testbench included, with CPU and Wishbone behavioral models from the old dbg_interface. -// -// Revision 1.1.1.1 2008/05/14 12:07:36 Nathan -// Original from OpenCores -// -// Revision 1.3 2004/03/28 20:27:40 igorm -// New release of the debug interface (3rd. release). -// -// Revision 1.2 2004/01/15 10:47:13 mohor -// Working. -// -// Revision 1.1 2003/12/23 14:26:01 mohor -// New version of the debug interface. Not finished, yet. -// -// -// -// - -//`include "timescale.v" -`include "wb_model_defines.v" -module wb_slave_behavioral -( - CLK_I, - RST_I, - ACK_O, - ADR_I, - CYC_I, - DAT_O, - DAT_I, - ERR_O, - RTY_O, - SEL_I, - STB_I, - WE_I, - CAB_I -); - -/*------------------------------------------------------------------------------------------------------ -WISHBONE signals -------------------------------------------------------------------------------------------------------*/ -input CLK_I; -input RST_I; -output ACK_O; -input `WB_ADDR_TYPE ADR_I; -input CYC_I; -output `WB_DATA_TYPE DAT_O; -input `WB_DATA_TYPE DAT_I; -output ERR_O; -output RTY_O; -input `WB_SEL_TYPE SEL_I; -input STB_I; -input WE_I; -input CAB_I; - -reg `WB_DATA_TYPE DAT_O; - -/*------------------------------------------------------------------------------------------------------ -Asynchronous dual-port RAM signals for storing and fetching the data -------------------------------------------------------------------------------------------------------*/ -//reg `WB_DATA_TYPE wb_memory [0:16777215]; // WB memory - 24 addresses connected - 2 LSB not used -reg `WB_DATA_TYPE wb_memory [0:1048575]; // WB memory - 20 addresses connected - 2 LSB not used -reg `WB_DATA_TYPE mem_wr_data_out; -reg `WB_DATA_TYPE mem_rd_data_in; - -/*------------------------------------------------------------------------------------------------------ -Maximum values for WAIT and RETRY counters and which response !!! -------------------------------------------------------------------------------------------------------*/ -reg [2:0] a_e_r_resp; // tells with which cycle_termination_signal must wb_slave respond ! -reg [8:0] wait_cyc; -reg [7:0] max_retry; - -// assign registers to default state while in reset -// always@(RST_I) -// begin -// if (RST_I) -// begin -// a_e_r_resp <= 3'b000; // do not respond -// wait_cyc <= 8'b0; // no wait cycles -// max_retry <= 8'h0; // no retries -// end -// end //reset - -task cycle_response; - input [2:0] ack_err_rty_resp; // acknowledge, error or retry response input flags - input [8:0] wait_cycles; // if wait cycles before each data termination cycle (ack, err or rty) - input [7:0] retry_cycles; // noumber of retry cycles before acknowledge cycle -begin - // assign values - a_e_r_resp <= #1 ack_err_rty_resp; - wait_cyc <= #1 wait_cycles; - max_retry <= #1 retry_cycles; -end -endtask // cycle_response - -/*------------------------------------------------------------------------------------------------------ -Tasks for writing and reading to and from memory !!! -------------------------------------------------------------------------------------------------------*/ -reg `WB_ADDR_TYPE task_wr_adr_i; -reg `WB_ADDR_TYPE task_rd_adr_i; -reg `WB_DATA_TYPE task_dat_i; -reg `WB_DATA_TYPE task_dat_o; -reg `WB_SEL_TYPE task_sel_i; -reg task_wr_data; -reg task_data_written; -reg `WB_DATA_TYPE task_mem_wr_data; - -// write to memory -task wr_mem; - input `WB_ADDR_TYPE adr_i; - input `WB_DATA_TYPE dat_i; - input `WB_SEL_TYPE sel_i; -begin - task_data_written = 0; - task_wr_adr_i = adr_i; - task_dat_i = dat_i; - task_sel_i = sel_i; - task_wr_data = 1; - wait(task_data_written); - task_wr_data = 0; -end -endtask - -// read from memory -task rd_mem; - input `WB_ADDR_TYPE adr_i; - output `WB_DATA_TYPE dat_o; - input `WB_SEL_TYPE sel_i; -begin - task_rd_adr_i = adr_i; - task_sel_i = sel_i; - #1; - dat_o = task_dat_o; -end -endtask - -/*------------------------------------------------------------------------------------------------------ -Internal signals and logic -------------------------------------------------------------------------------------------------------*/ -reg calc_ack; -reg calc_err; -reg calc_rty; - -reg [7:0] retry_cnt; -reg [7:0] retry_num; -reg retry_expired; - -// Retry counter -always@(posedge RST_I or posedge CLK_I) -begin - if (RST_I) - retry_cnt <= #1 8'h00; - else - begin - if (calc_ack || calc_err) - retry_cnt <= #1 8'h00; - else if (calc_rty) - retry_cnt <= #1 retry_num; - end -end - -always@(retry_cnt or max_retry) -begin - if (retry_cnt < max_retry) - begin - retry_num = retry_cnt + 1'b1; - retry_expired = 1'b0; - end - else - begin - retry_num = retry_cnt; - retry_expired = 1'b1; - end -end - -reg [8:0] wait_cnt; -reg [8:0] wait_num; -reg wait_expired; - -// Wait counter -always@(posedge RST_I or posedge CLK_I) -begin - if (RST_I) - wait_cnt <= #1 9'h0; - else - begin - if (wait_expired || ~STB_I) - wait_cnt <= #1 9'h0; - else - wait_cnt <= #1 wait_num; - end -end - -always@(wait_cnt or wait_cyc or STB_I or a_e_r_resp or retry_expired) -begin - if ((wait_cyc > 0) && (STB_I)) - begin - if (wait_cnt < wait_cyc) - begin - wait_num = wait_cnt + 1'b1; - wait_expired = 1'b0; - calc_ack = 1'b0; - calc_err = 1'b0; - calc_rty = 1'b0; - end - else - begin - wait_num = wait_cnt; - wait_expired = 1'b1; - if (a_e_r_resp == 3'b100) - begin - calc_ack = 1'b1; - calc_err = 1'b0; - calc_rty = 1'b0; - end - else - if (a_e_r_resp == 3'b010) - begin - calc_ack = 1'b0; - calc_err = 1'b1; - calc_rty = 1'b0; - end - else - if (a_e_r_resp == 3'b001) - begin - calc_err = 1'b0; - if (retry_expired) - begin - calc_ack = 1'b1; - calc_rty = 1'b0; - end - else - begin - calc_ack = 1'b0; - calc_rty = 1'b1; - end - end - else - begin - calc_ack = 1'b0; - calc_err = 1'b0; - calc_rty = 1'b0; - end - end - end - else - if ((wait_cyc == 0) && (STB_I)) - begin - wait_num = 9'h0; - wait_expired = 1'b1; - if (a_e_r_resp == 3'b100) - begin - calc_ack = 1'b1; - calc_err = 1'b0; - calc_rty = 1'b0; - end - else if (a_e_r_resp == 3'b010) - begin - calc_ack = 1'b0; - calc_err = 1'b1; - calc_rty = 1'b0; - end - else if (a_e_r_resp == 3'b001) - begin - calc_err = 1'b0; - if (retry_expired) - begin - calc_ack = 1'b1; - calc_rty = 1'b0; - end - else - begin - calc_ack = 1'b0; - calc_rty = 1'b1; - end - end - else - begin - calc_ack = 1'b0; - calc_err = 1'b0; - calc_rty = 1'b0; - end - end - else - begin - wait_num = 9'h0; - wait_expired = 1'b0; - calc_ack = 1'b0; - calc_err = 1'b0; - calc_rty = 1'b0; - end -end - -wire rd_sel = (CYC_I && STB_I && ~WE_I); -wire wr_sel = (CYC_I && STB_I && WE_I); - -// Generate cycle termination signals -assign ACK_O = calc_ack && STB_I; -assign ERR_O = calc_err && STB_I; -assign RTY_O = calc_rty && STB_I; - -// Assign address to asynchronous memory -always@(RST_I or ADR_I) -begin - if (RST_I) // this is added because at start of test bench we need address change in order to get data! - begin - #1 mem_rd_data_in = `WB_DATA_WIDTH'hxxxx_xxxx; - end - else - begin -// #1 mem_rd_data_in = wb_memory[ADR_I[25:2]]; - #1 mem_rd_data_in = wb_memory[ADR_I[21:2]]; - end -end - -// Data input/output interface -always@(rd_sel or mem_rd_data_in or RST_I) -begin - if (RST_I) - DAT_O <=#1 `WB_DATA_WIDTH'hxxxx_xxxx; // assign outputs to unknown state while in reset - else if (rd_sel) - DAT_O <=#1 mem_rd_data_in; - else - DAT_O <=#1 `WB_DATA_WIDTH'hxxxx_xxxx; -end - - -always@(RST_I or task_rd_adr_i) -begin - if (RST_I) - task_dat_o = `WB_DATA_WIDTH'hxxxx_xxxx; - else - task_dat_o = wb_memory[task_rd_adr_i[21:2]]; -end -always@(CLK_I or wr_sel or task_wr_data or ADR_I or task_wr_adr_i or - mem_wr_data_out or DAT_I or task_mem_wr_data or task_dat_i or - SEL_I or task_sel_i) -begin - if (task_wr_data) - begin - task_mem_wr_data = wb_memory[task_wr_adr_i[21:2]]; - - if (task_sel_i[3]) - task_mem_wr_data[31:24] = task_dat_i[31:24]; - if (task_sel_i[2]) - task_mem_wr_data[23:16] = task_dat_i[23:16]; - if (task_sel_i[1]) - task_mem_wr_data[15: 8] = task_dat_i[15: 8]; - if (task_sel_i[0]) - task_mem_wr_data[ 7: 0] = task_dat_i[ 7: 0]; - - wb_memory[task_wr_adr_i[21:2]] = task_mem_wr_data; // write data - task_data_written = 1; - end - else if (wr_sel && CLK_I) - begin -// mem_wr_data_out = wb_memory[ADR_I[25:2]]; // if no SEL_I is active, old value will be written - mem_wr_data_out = wb_memory[ADR_I[21:2]]; // if no SEL_I is active, old value will be written - - if (SEL_I[3]) - mem_wr_data_out[31:24] = DAT_I[31:24]; - if (SEL_I[2]) - mem_wr_data_out[23:16] = DAT_I[23:16]; - if (SEL_I[1]) - mem_wr_data_out[15: 8] = DAT_I[15: 8]; - if (SEL_I[0]) - mem_wr_data_out[ 7: 0] = DAT_I[ 7: 0]; - -// wb_memory[ADR_I[25:2]] <= mem_wr_data_out; // write data - wb_memory[ADR_I[21:2]] = mem_wr_data_out; // write data - end -end - -endmodule Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/simulated_system/wave.do =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/simulated_system/wave.do (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/simulated_system/wave.do (nonexistent) @@ -1,350 +0,0 @@ -onerror {resume} -quietly WaveActivateNextPane {} 0 -add wave -noupdate -divider {JTAG top} -add wave -noupdate -format Logic /adv_debug_tb/jtag_tck_o -add wave -noupdate -format Logic /adv_debug_tb/jtag_tms_o -add wave -noupdate -format Logic /adv_debug_tb/jtag_tdo_o -add wave -noupdate -format Logic /adv_debug_tb/jtag_tdi_i -add wave -noupdate -divider {TAP signals} -add wave -noupdate -format Logic /adv_debug_tb/dbg_rst -add wave -noupdate -format Logic /adv_debug_tb/capture_dr -add wave -noupdate -format Logic /adv_debug_tb/shift_dr -add wave -noupdate -format Logic /adv_debug_tb/pause_dr -add wave -noupdate -format Logic /adv_debug_tb/update_dr -add wave -noupdate -format Logic /adv_debug_tb/dbg_sel -add wave -noupdate -format Logic /adv_debug_tb/dbg_tdi -add wave -noupdate -format Logic /adv_debug_tb/dbg_tdo -add wave -noupdate -divider {Wishbone signals} -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/wb_adr -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/wb_dat_m -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/wb_dat_s -add wave -noupdate -format Logic /adv_debug_tb/wb_cyc -add wave -noupdate -format Logic /adv_debug_tb/wb_stb -add wave -noupdate -format Literal /adv_debug_tb/wb_sel -add wave -noupdate -format Logic /adv_debug_tb/wb_we -add wave -noupdate -format Logic /adv_debug_tb/wb_ack -add wave -noupdate -format Logic /adv_debug_tb/wb_err -add wave -noupdate -format Logic /adv_debug_tb/wb_clk_i -add wave -noupdate -format Logic /adv_debug_tb/wb_rst_i -add wave -noupdate -divider {CPU0 signals} -add wave -noupdate -format Logic /adv_debug_tb/cpu0_clk -add wave -noupdate -format Logic /adv_debug_tb/cpu0_rst -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/cpu0_addr -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/cpu0_data_c -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/cpu0_data_d -add wave -noupdate -format Logic /adv_debug_tb/cpu0_we -add wave -noupdate -format Logic /adv_debug_tb/cpu0_stb -add wave -noupdate -format Logic /adv_debug_tb/cpu0_ack -add wave -noupdate -format Logic /adv_debug_tb/cpu0_bp -add wave -noupdate -format Logic /adv_debug_tb/cpu0_stall -add wave -noupdate -divider {Debug top internals} -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/tck_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/tdi_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/tdo_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/rst_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/shift_dr_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/pause_dr_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/update_dr_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/capture_dr_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/debug_select_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/wb_clk_i -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/wb_adr_o -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/wb_dat_o -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/wb_dat_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/wb_cyc_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/wb_stb_o -add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/wb_sel_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/wb_we_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/wb_ack_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/wb_cab_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/wb_err_i -add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/wb_cti_o -add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/wb_bte_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/cpu0_clk_i -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/cpu0_addr_o -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/cpu0_data_i -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/cpu0_data_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/cpu0_bp_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/cpu0_stall_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/cpu0_stb_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/cpu0_we_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/cpu0_ack_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/cpu0_rst_o -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/input_shift_reg -add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/module_id_reg -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/select_cmd -add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/module_id_in -add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/module_selects -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/tdo_wb -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/tdo_cpu0 -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/tdo_cpu1 -add wave -noupdate -divider {DBG Wishbone module internals} -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/tck_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/module_tdo_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/tdi_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/capture_dr_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/shift_dr_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/update_dr_i -add wave -noupdate -format Literal -radix binary /adv_debug_tb/i_dbg_module/i_dbg_wb/data_register_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/module_select_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/rst_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/wb_clk_i -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/wb_adr_o -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/wb_dat_o -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/wb_dat_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/wb_cyc_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/wb_stb_o -add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_wb/wb_sel_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/wb_we_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/wb_ack_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/wb_cab_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/wb_err_i -add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_wb/wb_cti_o -add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_wb/wb_bte_o -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/address_counter -add wave -noupdate -format Literal -radix decimal /adv_debug_tb/i_dbg_module/i_dbg_wb/bit_count -add wave -noupdate -format Literal -radix decimal /adv_debug_tb/i_dbg_module/i_dbg_wb/word_count -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/operation -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/data_out_shift_reg -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/internal_register_select -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/internal_reg_error -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/addr_sel -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/addr_ct_en -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/op_reg_en -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/bit_ct_en -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/bit_ct_rst -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/word_ct_sel -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/word_ct_en -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/out_reg_ld_en -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/out_reg_shift_en -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/out_reg_data_sel -add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_wb/tdo_output_sel -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu_strobe -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/crc_clr -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/crc_en -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/crc_in_sel -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/crc_shift_en -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/regsel_ld_en -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/intreg_ld_en -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/error_reg_en -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu_clr_err -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/word_count_zero -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/bit_count_max -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/module_cmd -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu_ready -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu_err -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/burst_instruction -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/intreg_instruction -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/intreg_write -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/rd_op -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/crc_match -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/bit_count_32 -add wave -noupdate -format Literal -radix decimal /adv_debug_tb/i_dbg_module/i_dbg_wb/word_size_bits -add wave -noupdate -format Literal -radix decimal /adv_debug_tb/i_dbg_module/i_dbg_wb/word_size_bytes -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/incremented_address -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/data_to_addr_counter -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/data_to_word_counter -add wave -noupdate -format Literal -radix decimal /adv_debug_tb/i_dbg_module/i_dbg_wb/decremented_word_count -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/address_data_in -add wave -noupdate -format Literal -radix decimal /adv_debug_tb/i_dbg_module/i_dbg_wb/count_data_in -add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_wb/operation_in -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/data_to_biu -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/data_from_biu -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/crc_data_out -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/crc_data_in -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/crc_serial_out -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/reg_select_data -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/out_reg_data -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/data_from_internal_reg -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu_rst -add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_wb/module_state -add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_wb/module_next_state -add wave -noupdate -divider {DBG WB module BIU internals} -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/tck_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/rst_i -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/data_i -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/data_o -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/addr_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/strobe_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/rd_wrn_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/rdy_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/err_o -add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/word_size_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/wb_clk_i -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/wb_adr_o -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/wb_dat_o -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/wb_dat_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/wb_cyc_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/wb_stb_o -add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/wb_sel_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/wb_we_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/wb_ack_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/wb_cab_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/wb_err_i -add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/wb_cti_o -add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/wb_bte_o -add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/sel_reg -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/addr_reg -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/data_in_reg -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/data_out_reg -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/wr_reg -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/str_sync -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/rdy_sync -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/err_reg -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/rdy_sync_tff1 -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/rdy_sync_tff2 -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/rdy_sync_tff2q -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/str_sync_wbff1 -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/str_sync_wbff2 -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/str_sync_wbff2q -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/data_o_en -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/rdy_sync_en -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/err_en -add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/be_dec -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/start_toggle -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/swapped_data_i -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/swapped_data_out -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/wb_fsm_state -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/next_fsm_state -add wave -noupdate -divider {DBG CPU0 module signals} -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/tck_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/module_tdo_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/tdi_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/capture_dr_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/shift_dr_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/update_dr_i -add wave -noupdate -format Literal -radix binary /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/data_register_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/module_select_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/rst_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/cpu_clk_i -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/cpu_addr_o -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/cpu_data_i -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/cpu_data_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/cpu_stb_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/cpu_we_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/cpu_ack_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/cpu_rst_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/cpu_bp_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/cpu_stall_o -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/address_counter -add wave -noupdate -format Literal -radix decimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/bit_count -add wave -noupdate -format Literal -radix decimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/word_count -add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/operation -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/data_out_shift_reg -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/internal_register_select -add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/internal_reg_status -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/addr_sel -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/addr_ct_en -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/op_reg_en -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/bit_ct_en -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/bit_ct_rst -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/word_ct_sel -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/word_ct_en -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/out_reg_ld_en -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/out_reg_shift_en -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/out_reg_data_sel -add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/tdo_output_sel -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/biu_strobe -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/crc_clr -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/crc_en -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/crc_in_sel -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/crc_shift_en -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/regsel_ld_en -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/intreg_ld_en -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/word_count_zero -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/bit_count_max -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/module_cmd -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/biu_ready -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/burst_instruction -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/intreg_instruction -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/intreg_write -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/rd_op -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/crc_match -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/bit_count_32 -add wave -noupdate -format Literal -radix decimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/word_size_bits -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/incremented_address -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/data_to_addr_counter -add wave -noupdate -format Literal -radix decimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/data_to_word_counter -add wave -noupdate -format Literal -radix decimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/decremented_word_count -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/address_data_in -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/count_data_in -add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/operation_in -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/data_to_biu -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/data_from_biu -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/crc_data_out -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/crc_data_in -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/crc_serial_out -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/reg_select_data -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/out_reg_data -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/data_from_internal_reg -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/status_reg_wr -add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/module_state -add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/module_next_state -add wave -noupdate -divider {CPU0 BIU internals} -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/tck_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/rst_i -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/data_i -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/data_o -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/addr_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/strobe_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/rd_wrn_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/rdy_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/cpu_clk_i -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/cpu_addr_o -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/cpu_data_i -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/cpu_data_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/cpu_stb_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/cpu_we_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/cpu_ack_i -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/addr_reg -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/data_in_reg -add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/data_out_reg -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/wr_reg -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/str_sync -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/rdy_sync -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/rdy_sync_tff1 -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/rdy_sync_tff2 -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/rdy_sync_tff2q -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/str_sync_wbff1 -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/str_sync_wbff2 -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/str_sync_wbff2q -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/data_o_en -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/rdy_sync_en -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/start_toggle -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/cpu_fsm_state -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/next_fsm_state -add wave -noupdate -divider {CPU0 Status register internals} -add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/data_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/we_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/tck_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/bp_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/rst_i -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/cpu_clk_i -add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/ctrl_reg_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/cpu_stall_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/cpu_rst_o -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/cpu_reset -add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/cpu_op_out -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/stall_bp -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/stall_bp_csff -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/stall_bp_tck -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/stall_reg -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/stall_reg_csff -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/stall_reg_cpu -add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/cpu_reset_csff -TreeUpdate [SetDefaultTree] -WaveRestoreCursors {{Cursor 1} {50652 ns} 0} -configure wave -namecolwidth 409 -configure wave -valuecolwidth 100 -configure wave -justifyvalue left -configure wave -signalnamewidth 0 -configure wave -snapdistance 10 -configure wave -datasetprefix 0 -configure wave -rowmargin 4 -configure wave -childrowmargin 2 -configure wave -gridoffset 0 -configure wave -gridperiod 1 -configure wave -griddelta 40 -configure wave -timeline 0 -update -WaveRestoreZoom {38962 ns} {65318 ns} Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/simulated_system/cpu_behavioral.v =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/simulated_system/cpu_behavioral.v (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/simulated_system/cpu_behavioral.v (nonexistent) @@ -1,154 +0,0 @@ -////////////////////////////////////////////////////////////////////// -//// //// -//// cpu_behavioral.v //// -//// //// -//// //// -//// This file is part of the SoC Debug Interface. //// -//// http://www.opencores.org/projects/DebugInterface/ //// -//// //// -//// Author(s): //// -//// Igor Mohor (igorm@opencores.org) //// -//// //// -//// //// -//// All additional information is avaliable in the README.txt //// -//// file. //// -//// //// -////////////////////////////////////////////////////////////////////// -//// //// -//// Copyright (C) 2000 - 2004 Authors //// -//// //// -//// This source file may be used and distributed without //// -//// restriction provided that this copyright statement is not //// -//// removed from the file and that any derivative work contains //// -//// the original copyright notice and the associated disclaimer. //// -//// //// -//// This source file is free software; you can redistribute it //// -//// and/or modify it under the terms of the GNU Lesser General //// -//// Public License as published by the Free Software Foundation; //// -//// either version 2.1 of the License, or (at your option) any //// -//// later version. //// -//// //// -//// This source is distributed in the hope that it will be //// -//// useful, but WITHOUT ANY WARRANTY; without even the implied //// -//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// -//// PURPOSE. See the GNU Lesser General Public License for more //// -//// details. //// -//// //// -//// You should have received a copy of the GNU Lesser General //// -//// Public License along with this source; if not, download it //// -//// from http://www.opencores.org/lgpl.shtml //// -//// //// -////////////////////////////////////////////////////////////////////// -// -// CVS Revision History -// -// $Log: cpu_behavioral.v,v $ -// Revision 1.1 2008/07/08 19:11:55 Nathan -// Added second testbench to simulate a complete system, including OR1200, wb_conbus, and onchipram. Renamed sim-only testbench directory from verilog to simulated_system. -// -// Revision 1.1 2008/06/18 18:34:48 Nathan -// Initial working version. Only Wishbone module implemented. Simple testbench included, with CPU and Wishbone behavioral models from the old dbg_interface. -// -// Revision 1.1.1.1 2008/05/14 12:07:35 Nathan -// Original from OpenCores -// -// Revision 1.4 2004/03/28 20:27:40 igorm -// New release of the debug interface (3rd. release). -// -// Revision 1.3 2004/01/22 11:07:28 mohor -// test stall_test added. -// -// Revision 1.2 2004/01/17 18:01:31 mohor -// New version. -// -// Revision 1.1 2004/01/17 17:01:25 mohor -// Almost finished. -// -// -// -// -// -`include "timescale.v" -`include "dbg_cpu_defines.v" - - - -module cpu_behavioral - ( - // CPU signals - cpu_rst_i, - cpu_clk_o, - cpu_addr_i, - cpu_data_o, - cpu_data_i, - cpu_bp_o, - cpu_stall_i, - cpu_stb_i, - cpu_we_i, - cpu_ack_o, - cpu_rst_o - ); - - -// CPU signals -input cpu_rst_i; -output cpu_clk_o; -input [31:0] cpu_addr_i; -output [31:0] cpu_data_o; -input [31:0] cpu_data_i; -output cpu_bp_o; -input cpu_stall_i; -input cpu_stb_i; -input cpu_we_i; -output cpu_ack_o; -output cpu_rst_o; - -reg cpu_clk_o; -reg [31:0] cpu_data_o; -reg cpu_bp_o; -reg cpu_ack_o; -reg cpu_ack_q; -wire cpu_ack; -initial -begin - cpu_clk_o = 1'b0; - forever #5 cpu_clk_o = ~cpu_clk_o; -end - - -initial -begin - cpu_bp_o = 1'b0; -end - -assign #200 cpu_ack = cpu_stall_i & cpu_stb_i; - - - -always @ (posedge cpu_clk_o or posedge cpu_rst_i) -begin - if (cpu_rst_i) - begin - cpu_ack_o <= #1 1'b0; - cpu_ack_q <= #1 1'b0; - end - else - begin - cpu_ack_o <= #1 cpu_ack; - cpu_ack_q <= #1 cpu_ack_o; - end -end - -always @ (posedge cpu_clk_o or posedge cpu_rst_i) -begin - if (cpu_rst_i) - cpu_data_o <= #1 32'h12345678; - else if (cpu_ack_o && (!cpu_ack_q)) - cpu_data_o <= #1 cpu_data_o + 32'h11111111; -end - - - - -endmodule - Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/simulated_system/wb_model_defines.v =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/simulated_system/wb_model_defines.v (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/simulated_system/wb_model_defines.v (nonexistent) @@ -1,163 +0,0 @@ -////////////////////////////////////////////////////////////////////// -//// //// -//// wb_model_defines.v //// -//// //// -//// //// -//// This file is part of the SoC Debug Interface. //// -//// http://www.opencores.org/projects/DebugInterface/ //// -//// //// -//// Author(s): //// -//// - Miha Dolenc (mihad@opencores.org) //// -//// //// -//// //// -//// All additional information is avaliable in the README.txt //// -//// file. //// -//// //// -////////////////////////////////////////////////////////////////////// -//// //// -//// Copyright (C) 2000 - 2004 Authors //// -//// //// -//// This source file may be used and distributed without //// -//// restriction provided that this copyright statement is not //// -//// removed from the file and that any derivative work contains //// -//// the original copyright notice and the associated disclaimer. //// -//// //// -//// This source file is free software; you can redistribute it //// -//// and/or modify it under the terms of the GNU Lesser General //// -//// Public License as published by the Free Software Foundation; //// -//// either version 2.1 of the License, or (at your option) any //// -//// later version. //// -//// //// -//// This source is distributed in the hope that it will be //// -//// useful, but WITHOUT ANY WARRANTY; without even the implied //// -//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// -//// PURPOSE. See the GNU Lesser General Public License for more //// -//// details. //// -//// //// -//// You should have received a copy of the GNU Lesser General //// -//// Public License along with this source; if not, download it //// -//// from http://www.opencores.org/lgpl.shtml //// -//// //// -////////////////////////////////////////////////////////////////////// -// -// CVS Revision History -// -// $Log: wb_model_defines.v,v $ -// Revision 1.1 2008/07/08 19:11:57 Nathan -// Added second testbench to simulate a complete system, including OR1200, wb_conbus, and onchipram. Renamed sim-only testbench directory from verilog to simulated_system. -// -// Revision 1.1 2008/06/18 18:34:48 Nathan -// Initial working version. Only Wishbone module implemented. Simple testbench included, with CPU and Wishbone behavioral models from the old dbg_interface. -// -// Revision 1.1.1.1 2008/05/14 12:07:36 Nathan -// Original from OpenCores -// -// Revision 1.2 2004/03/28 20:27:40 igorm -// New release of the debug interface (3rd. release). -// -// Revision 1.1 2003/12/23 14:26:01 mohor -// New version of the debug interface. Not finished, yet. -// -// -// - -// WISHBONE frequency in GHz -`define WB_FREQ 0.100 - -// memory frequency in GHz -`define MEM_FREQ 0.100 - -// setup and hold time definitions for WISHBONE - used in BFMs for signal generation -`define Tsetup 4 -`define Thold 1 - -// how many clock cycles should model wait for design's response - integer 32 bit value -`define WAIT_FOR_RESPONSE 1023 - -// maximum number of transactions allowed in single call to block or cab transfer routines -`define MAX_BLK_SIZE 1024 - -// maximum retry terminations allowed for WISHBONE master to repeat an access -`define WB_TB_MAX_RTY 0 - - -// some common types and defines -`define WB_ADDR_WIDTH 32 -`define WB_DATA_WIDTH 32 -`define WB_SEL_WIDTH `WB_DATA_WIDTH/8 -`define WB_TAG_WIDTH 5 -`define WB_ADDR_TYPE [(`WB_ADDR_WIDTH - 1):0] -`define WB_DATA_TYPE [(`WB_DATA_WIDTH - 1):0] -`define WB_SEL_TYPE [(`WB_SEL_WIDTH - 1):0] -`define WB_TAG_TYPE [(`WB_TAG_WIDTH - 1):0] - -// read cycle stimulus - consists of: -// - address field - which address read will be performed from -// - sel field - what byte select value should be -// - tag field - what tag values should be put on the bus -`define READ_STIM_TYPE [(`WB_ADDR_WIDTH + `WB_SEL_WIDTH + `WB_TAG_WIDTH - 1):0] -`define READ_STIM_LENGTH (`WB_ADDR_WIDTH + `WB_SEL_WIDTH + `WB_TAG_WIDTH) -`define READ_ADDRESS [(`WB_ADDR_WIDTH - 1):0] -`define READ_SEL [(`WB_ADDR_WIDTH + `WB_SEL_WIDTH - 1):`WB_ADDR_WIDTH] -`define READ_TAG_STIM [(`WB_ADDR_WIDTH + `WB_SEL_WIDTH + `WB_TAG_WIDTH - 1):(`WB_ADDR_WIDTH + `WB_SEL_WIDTH)] - -// read cycle return type consists of: -// - read data field -// - tag field received from WISHBONE -// - wishbone slave response fields - ACK, ERR and RTY -// - test bench error indicator (when testcase has not used wb master model properly) -// - how much data was actually transfered -`define READ_RETURN_TYPE [(32 + 4 + `WB_DATA_WIDTH + `WB_TAG_WIDTH - 1):0] -`define READ_DATA [(32 + `WB_DATA_WIDTH + 4 - 1):32 + 4] -`define READ_TAG_RET [(32 + 4 + `WB_DATA_WIDTH + `WB_TAG_WIDTH - 1):(`WB_DATA_WIDTH + 32 + 4)] -`define READ_RETURN_LENGTH (32 + 4 + `WB_DATA_WIDTH + `WB_TAG_WIDTH - 1) - -// write cycle stimulus type consists of -// - address field -// - data field -// - sel field -// - tag field -`define WRITE_STIM_TYPE [(`WB_ADDR_WIDTH + `WB_DATA_WIDTH + `WB_SEL_WIDTH + `WB_TAG_WIDTH - 1):0] -`define WRITE_ADDRESS [(`WB_ADDR_WIDTH - 1):0] -`define WRITE_DATA [(`WB_ADDR_WIDTH + `WB_DATA_WIDTH - 1):`WB_ADDR_WIDTH] -`define WRITE_SEL [(`WB_ADDR_WIDTH + `WB_DATA_WIDTH + `WB_SEL_WIDTH - 1):(`WB_ADDR_WIDTH + `WB_DATA_WIDTH)] -`define WRITE_TAG_STIM [(`WB_ADDR_WIDTH + `WB_DATA_WIDTH + `WB_SEL_WIDTH + `WB_TAG_WIDTH - 1):(`WB_ADDR_WIDTH + `WB_DATA_WIDTH + `WB_SEL_WIDTH)] - -// length of WRITE_STIMULUS -`define WRITE_STIM_LENGTH (`WB_ADDR_WIDTH + `WB_DATA_WIDTH + `WB_SEL_WIDTH + `WB_TAG_WIDTH) - -// write cycle return type consists of: -// - test bench error indicator (when testcase has not used wb master model properly) -// - wishbone slave response fields - ACK, ERR and RTY -// - tag field received from WISHBONE -// - how much data was actually transfered -`define WRITE_RETURN_TYPE [(32 + 4 + `WB_TAG_WIDTH - 1):0] -`define WRITE_TAG_RET [(32 + 4 + `WB_TAG_WIDTH - 1):32 + 4] - -// this four fields are common to both read and write routines return values -`define TB_ERROR_BIT [0] -`define CYC_ACK [1] -`define CYC_RTY [2] -`define CYC_ERR [3] -`define CYC_RESPONSE [3:1] -`define CYC_ACTUAL_TRANSFER [35:4] - -// block transfer flags -`define WB_TRANSFER_FLAGS [41:0] -// consists of: -// - number of transfer cycles to perform -// - flag that enables retry termination handling - if disabled, block transfer routines will return on any termination other than acknowledge -// - flag indicating CAB transfer is to be performed - ignored by all single transfer routines -// - number of initial wait states to insert -// - number of subsequent wait states to insert -`define WB_TRANSFER_SIZE [41:10] -`define WB_TRANSFER_AUTO_RTY [8] -`define WB_TRANSFER_CAB [9] -`define INIT_WAITS [3:0] -`define SUBSEQ_WAITS [7:4] - -// wb slave response -`define ACK_RESPONSE 3'b100 -`define ERR_RESPONSE 3'b010 -`define RTY_RESPONSE 3'b001 -`define NO_RESPONSE 3'b000 Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/simulated_system/timescale.v =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/simulated_system/timescale.v (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/simulated_system/timescale.v (nonexistent) @@ -1,68 +0,0 @@ -////////////////////////////////////////////////////////////////////// -//// //// -//// timescale.v //// -//// //// -//// //// -//// This file is part of the SoC Debug Interface. //// -//// http://www.opencores.org/projects/DebugInterface/ //// -//// //// -//// Author(s): //// -//// Igor Mohor (igorm@opencores.org) //// -//// //// -//// //// -//// All additional information is avaliable in the README.txt //// -//// file. //// -//// //// -////////////////////////////////////////////////////////////////////// -//// //// -//// Copyright (C) 2000 - 2004 Authors //// -//// //// -//// This source file may be used and distributed without //// -//// restriction provided that this copyright statement is not //// -//// removed from the file and that any derivative work contains //// -//// the original copyright notice and the associated disclaimer. //// -//// //// -//// This source file is free software; you can redistribute it //// -//// and/or modify it under the terms of the GNU Lesser General //// -//// Public License as published by the Free Software Foundation; //// -//// either version 2.1 of the License, or (at your option) any //// -//// later version. //// -//// //// -//// This source is distributed in the hope that it will be //// -//// useful, but WITHOUT ANY WARRANTY; without even the implied //// -//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// -//// PURPOSE. See the GNU Lesser General Public License for more //// -//// details. //// -//// //// -//// You should have received a copy of the GNU Lesser General //// -//// Public License along with this source; if not, download it //// -//// from http://www.opencores.org/lgpl.shtml //// -//// //// -////////////////////////////////////////////////////////////////////// -// -// CVS Revision History -// -// $Log: timescale.v,v $ -// Revision 1.1 2008/07/08 19:11:56 Nathan -// Added second testbench to simulate a complete system, including OR1200, wb_conbus, and onchipram. Renamed sim-only testbench directory from verilog to simulated_system. -// -// Revision 1.1 2008/06/18 18:34:48 Nathan -// Initial working version. Only Wishbone module implemented. Simple testbench included, with CPU and Wishbone behavioral models from the old dbg_interface. -// -// Revision 1.1.1.1 2008/05/14 12:07:36 Nathan -// Original from OpenCores -// -// Revision 1.4 2004/03/28 20:27:40 igorm -// New release of the debug interface (3rd. release). -// -// Revision 1.3 2004/01/17 17:01:25 mohor -// Almost finished. -// -// Revision 1.2 2003/12/23 14:26:01 mohor -// New version of the debug interface. Not finished, yet. -// -// -// -// -`timescale 1ns/10ps - Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/simulated_system/adv_dbg_tb.v =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/simulated_system/adv_dbg_tb.v (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/bench/simulated_system/adv_dbg_tb.v (nonexistent) @@ -1,1065 +0,0 @@ -////////////////////////////////////////////////////////////////////// -//// //// -//// adv_dbg_tb.v //// -//// //// -//// //// -//// Testbench for the SoC Advanced Debug Interface. //// -//// //// -//// Author(s): //// -//// Nathan Yawn (nathan.yawn@opencored.org) //// -//// //// -//// //// -//// //// -////////////////////////////////////////////////////////////////////// -//// //// -//// Copyright (C) 2008 Authors //// -//// //// -//// This source file may be used and distributed without //// -//// restriction provided that this copyright statement is not //// -//// removed from the file and that any derivative work contains //// -//// the original copyright notice and the associated disclaimer. //// -//// //// -//// This source file is free software; you can redistribute it //// -//// and/or modify it under the terms of the GNU Lesser General //// -//// Public License as published by the Free Software Foundation; //// -//// either version 2.1 of the License, or (at your option) any //// -//// later version. //// -//// //// -//// This source is distributed in the hope that it will be //// -//// useful, but WITHOUT ANY WARRANTY; without even the implied //// -//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// -//// PURPOSE. See the GNU Lesser General Public License for more //// -//// details. //// -//// //// -//// You should have received a copy of the GNU Lesser General //// -//// Public License along with this source; if not, download it //// -//// from http://www.opencores.org/lgpl.shtml //// -//// //// -////////////////////////////////////////////////////////////////////// -// -// CVS Revision History -// -// $Log: adv_dbg_tb.v,v $ -// Revision 1.2 2009/05/17 20:54:55 Nathan -// Changed email address to opencores.org -// -// Revision 1.1 2008/07/08 19:11:55 Nathan -// Added second testbench to simulate a complete system, including OR1200, wb_conbus, and onchipram. Renamed sim-only testbench directory from verilog to simulated_system. -// -// Revision 1.11 2008/07/08 18:53:47 Nathan -// Fixed wrong include name. -// -// Revision 1.10 2008/06/30 20:09:19 Nathan -// Removed code to select top-level module as active (it served no purpose). Re-numbered modules, requiring changes to testbench and software driver. -// - - -`include "tap_defines.v" -`include "dbg_defines.v" -`include "dbg_wb_defines.v" -`include "wb_model_defines.v" - -// Polynomial for the CRC calculation -// Yes, it's backwards. Yes, this is on purpose. -// To decrease logic + routing, we want to shift the CRC calculation -// in the same direction we use to shift the data out, LSB first. -`define DBG_CRC_POLY 32'hedb88320 - -// These are indicies into an array which hold values for the JTAG outputs -`define JTAG_TMS 0 -`define JTAG_TCK 1 -`define JTAG_TDO 2 - -`define JTAG_TMS_bit 3'h1 -`define JTAG_TCK_bit 3'h2 -`define JTAG_TDO_bit 3'h4 - -`define wait_jtag_period #50 - - -module adv_debug_tb; - -// Connections to the JTAG TAP -reg jtag_tck_o; -reg jtag_tms_o; -reg jtag_tdo_o; -wire jtag_tdi_i; - -// Connections between TAP and debug module -wire capture_dr; -wire shift_dr; -wire pause_dr; -wire update_dr; -wire dbg_rst; -wire dbg_tdi; -wire dbg_tdo; -wire dbg_sel; - -// Connections between the debug module and the wishbone -`ifdef DBG_WISHBONE_SUPPORTED -wire [31:0] wb_adr; -wire [31:0] wb_dat_m; -wire [31:0] wb_dat_s; -wire wb_cyc; -wire wb_stb; -wire [3:0] wb_sel; -wire wb_we; -wire wb_ack; -wire wb_err; -reg wb_clk_i; // the wishbone clock -reg wb_rst_i; -`endif - -`ifdef DBG_CPU0_SUPPORTED -wire cpu0_clk; -wire [31:0]cpu0_addr; -wire [31:0] cpu0_data_c; -wire [31:0] cpu0_data_d; -wire cpu0_bp; -wire cpu0_stall; -wire cpu0_stb; -wire cpu0_we; -wire cpu0_ack; -wire cpu0_rst; -`endif - -`ifdef DBG_CPU1_SUPPORTED -reg cpu1_clk; -wire [31:0]cpu1_addr; -wire [31:0] cpu1_data_c; -wire [31:0] cpu1_data_d; -wire cpu1_bp; -wire cpu1_stall; -wire cpu1_stb; -wire cpu1_we; -wire cpu1_ack; -wire cpu1_rst; -`endif // `ifdef DBG_CPU1_SUPPORTED - -reg test_enabled; - -// Data which will be written to the WB interface -reg [31:0] static_data32 [0:15]; -reg [15:0] static_data16 [0:15]; -reg [7:0] static_data8 [0:15]; - -// Arrays to hold data read back from the WB interface, for comparison -reg [31:0] input_data32 [0:15]; -reg [15:0] input_data16 [0:15]; -reg [7:0] input_data8 [0:15]; - -reg [32:0] err_data; // holds the contents of the error register from the various modules - -reg failed; -integer i; - -initial -begin - jtag_tck_o = 1'b0; - jtag_tms_o = 1'b0; - jtag_tdo_o = 1'b0; -end - -// Provide the wishbone clock -`ifdef DBG_WISHBONE_SUPPORTED -initial -begin - wb_clk_i = 1'b0; - forever #7 wb_clk_i = ~wb_clk_i; // Odd frequency ratio to test the synchronization -end -`endif - -// Provide the CPU0 clock -//`ifdef DBG_CPU0_SUPPORTED -//initial -//begin - //cpu0_clk = 1'b0; - //forever #6 cpu0_clk = ~cpu0_clk; // Odd frequency ratio to test the synchronization -//end -//`endif - -// Start the test (and reset the wishbone) -initial -begin - test_enabled = 1'b0; - wb_rst_i = 1'b0; - #100; - wb_rst_i = 1'b1; - #100; - wb_rst_i = 1'b0; - - // Init the memory - initialize_memory(32'h0,32'h16); - - // Init the WB model - i_wb.cycle_response(`ACK_RESPONSE, 2, 0); // response type, wait cycles, retry_cycles - - #1 test_enabled<=#1 1'b1; -end - -// This is the main test procedure -always @ (posedge test_enabled) -begin - - $display("Starting advanced debug test"); - - reset_jtag; - #1000; - check_idcode; - #1000; - - // Select the debug module in the IR - set_ir(`DEBUG); - #1000; - - - /////////////////////////////////////////////////////////////////// - // Test CPU0 unit - //////////////////////////////////////////////////////////////////// -`ifdef DBG_CPU0_SUPPORTED - // Select the CPU0 unit in the debug module - #1000; - $display("Selecting CPU0 module at time %t", $time); - select_debug_module(`DBG_TOP_CPU0_DEBUG_MODULE); - - // Test reset, stall bits - #1000; - $display("Testing CPU0 intreg select at time %t", $time); - select_module_internal_register(32'h1, 1); // Really just a read, with discarded data - #1000; - select_module_internal_register(32'h0, 1); // Really just a read, with discarded data - #1000; - - // Read the stall and reset bits - $display("Testing reset and stall bits at time %t", $time); - read_module_internal_register(8'd2, err_data); // We assume the register is already selected - $display("Reset and stall bits are %x", err_data); - #1000; - - // Set rst/stall bits - $display("Setting reset and stall bits at time %t", $time); - write_module_internal_register(32'h0, 8'h1, 32'h3, 8'h2); // idx, idxlen, data, datalen - #1000; - - // Read the bits again - $display("Testing reset and stall bits again at time %t", $time); - read_module_internal_register(8'd2, err_data); // We assume the register is already selected - $display("Reset and stall bits are %x", err_data); - #1000; - - // Clear the bits - $display("Clearing reset and stall bits at time %t", $time); - write_module_internal_register(32'h0, 8'h1, 32'h0, 8'h2); // idx, idxlen, data, datalen - #1000; - - // Read the bits again - $display("Testing reset and stall bits again at time %t", $time); - read_module_internal_register(8'd2, err_data); // We assume the register is already selected - $display("Reset and stall bits are %x", err_data); - #1000; - - // Behavioral CPU model must be stalled in order to do SPR access - //$display("Setting reset and stall bits at time %t", $time); - write_module_internal_register(32'h0, 8'h1, 32'h1, 8'h2); // idx, idxlen, data, datalen - #1000; - - // Test SPR bus access - $display("Testing CPU0 32-bit burst write at time %t", $time); - do_module_burst_write(3'h4, 16'd16, 32'h10); // 3-bit word size (bytes), 16-bit word count, 32-bit start address - #1000; - $display("Testing CPU0 32-bit burst read at time %t", $time); - do_module_burst_read(3'h4, 16'd16, 32'h0); - #1000; - -`endif - - - /////////////////////////////////////////////////////////////////// - // Test the Wishbone unit - //////////////////////////////////////////////////////////////////// - -`ifdef DBG_WISHBONE_SUPPORTED - // Select the WB unit in the debug module - #1000; - $display("Selecting Wishbone module at time %t", $time); - select_debug_module(`DBG_TOP_WISHBONE_DEBUG_MODULE); - - /* - // Test error conditions - #1000; - $display("Testing error (size 0 WB burst write) at time %t", $time); - do_module_burst_write(3'h1, 16'h0, 32'h0); // 0-word write = error, ignored - #1000; - $display("Testing error (size 0 WB burst read) at time %t", $time); - do_module_burst_read(3'h1, 16'h0, 32'h0); // 0-word read = error, ignored - - // Test NOP (a zero in the MSB, then a NOP opcode) - #1000; - $display("Testing NOP at time %t", $time); - write_bit(`JTAG_TMS_bit); // select_dr_scan - write_bit(3'h0); // capture_ir - write_bit(3'h0); // shift_ir - jtag_write_stream(5'h0, 8'h5, 1); // write data, exit_1 - write_bit(`JTAG_TMS_bit); // update_dr - write_bit(3'h0); // idle - #1000; - */ - - #1000; - $display("Testing WB intreg select at time %t", $time); - select_module_internal_register(32'h1, 1); // Really just a read, with discarded data - #1000; - select_module_internal_register(32'h0, 1); // Really just a read, with discarded data - #1000; - - // Reset the error bit - write_module_internal_register(32'h0, 8'h1, 32'h1, 8'h1); // idx, idxlen, data, datalen - #1000; - - // Read the error bit - read_module_internal_register(8'd33, err_data); // We assume the register is already selected - #1000; - - - ///////////////////////////////// - // Test 8-bit WB access - failed = 0; - $display("Testing WB 8-bit burst write at time %t: resetting ", $time); - do_module_burst_write(3'h1, 16'd16, 32'h0); // 3-bit word size (bytes), 16-bit word count, 32-bit start address - #1000; - $display("Testing WB 8-bit burst read at time %t", $time); - do_module_burst_read(3'h1, 16'd16, 32'h0); - #1000; - for(i = 0; i < 16; i = i+1) begin - if(static_data8[i] != input_data8[i]) begin - failed = 1; - $display("32-bit data mismatch at index %d, wrote 0x%x, read 0x%x", i, static_data8[i], input_data8[i]); - end - end - if(!failed) $display("8-bit read/write OK!"); - - /* try it unaligned - do_module_burst_write(3'h1, 16'd5, 32'h3); // 3-bit word size (bytes), 16-bit word count, 32-bit start address - #1000; - do_module_burst_read(3'h1, 16'd4, 32'h4); - #1000; - */ - - ///////////////////////////////// - // Test 16-bit WB access - failed = 0; - $display("Testing WB 16-bit burst write at time %t", $time); - do_module_burst_write(3'h2, 16'd16, 32'h0); // 3-bit word size (bytes), 16-bit word count, 32-bit start address - #1000; - $display("Testing WB 16-bit burst read at time %t", $time); - do_module_burst_read(3'h2, 16'd16, 32'h0); - #1000; - for(i = 0; i < 16; i = i+1) begin - if(static_data16[i] != input_data16[i]) begin - failed = 1; - $display("16-bit data mismatch at index %d, wrote 0x%x, read 0x%x", i, static_data16[i], input_data16[i]); - end - end - if(!failed) $display("16-bit read/write OK!"); - - /* try it unaligned - do_module_burst_write(3'h2, 16'd5, 32'h2); // 3-bit word size (bytes), 16-bit word count, 32-bit start address - #1000; - do_module_burst_read(3'h2, 16'd4, 32'h4); - #1000; - */ - - //////////////////////////////////// - // Test 32-bit WB access - failed = 0; - $display("Testing WB 32-bit burst write at time %t", $time); - do_module_burst_write(3'h4, 16'd16, 32'h0); // 3-bit word size (bytes), 16-bit word count, 32-bit start address - #1000; - $display("Testing WB 32-bit burst read at time %t", $time); - do_module_burst_read(3'h4, 16'd16, 32'h0); - #1000; - for(i = 0; i < 16; i = i+1) begin - if(static_data32[i] != input_data32[i]) begin - failed = 1; - $display("32-bit data mismatch at index %d, wrote 0x%x, read 0x%x", i, static_data32[i], input_data32[i]); - end - end - if(!failed) $display("32-bit read/write OK!"); - - /* Try another address - do_module_burst_write(3'h4, 16'd16, 32'h200); // 3-bit word size (bytes), 16-bit word count, 32-bit start address - #1000; - do_module_burst_read(3'h4, 16'd15, 32'h204); - #1000; - */ - - //////////////////////////////// - // Test error register - err_data = 33'h0; - // Select and reset the error register - write_module_internal_register(`DBG_WB_INTREG_ERROR, `DBG_WB_REGSELECT_SIZE, 64'h1, 8'h1); // regidx,idxlen,writedata, datalen; - i_wb.cycle_response(`ERR_RESPONSE, 2, 0); // response type, wait cycles, retry_cycles - do_module_burst_write(3'h4, 16'd4, 32'hdeaddead); // 3-bit word size (bytes), 16-bit word count, 32-bit start address - read_module_internal_register(8'd33, err_data); // get the error register - $display("Error bit is %d, error address is %x", err_data[0], err_data>>1); - -`endif // WB module supported - -end - -task initialize_memory; - input [31:0] start_addr; - input [31:0] length; - integer i; - reg [31:0] addr; - begin - - for (i=0; i> 1; - crc_out = crc_out ^ ((d ^ c) & `DBG_CRC_POLY); - //$display("CRC Itr %d, inbit = %d, crc = 0x%x", i, data_in[i], crc_out); - end - end -endtask - -task check_idcode; -reg [63:0] readdata; -reg[31:0] idcode; -begin - set_ir(`IDCODE); - - // Read the IDCODE in the DR - write_bit(`JTAG_TMS_bit); // select_dr_scan - write_bit(3'h0); // capture_ir - write_bit(3'h0); // shift_ir - jtag_read_write_stream(64'h0, 8'd32, 1, readdata); // write data, exit_1 - write_bit(`JTAG_TMS_bit); // update_ir - write_bit(3'h0); // idle - idcode = readdata[31:0]; - $display("Got TAP IDCODE 0x%x, expected 0x%x", idcode, `IDCODE_VALUE); -end -endtask; - -task select_debug_module; -input [1:0] moduleid; -reg validid; -begin - write_bit(`JTAG_TMS_bit); // select_dr_scan - write_bit(3'h0); // capture_ir - write_bit(3'h0); // shift_ir - jtag_write_stream({1'b1,moduleid}, 8'h3, 1); // write data, exit_1 - write_bit(`JTAG_TMS_bit); // update_dr - write_bit(3'h0); // idle - - $display("Selecting module (%0x)", moduleid); - - // Read back the status to make sure a valid chain is selected - /* Pointless, the newly selected module would respond instead... - write_bit(`JTAG_TMS_bit); // select_dr_scan - write_bit(3'h0); // capture_ir - write_bit(3'h0); // shift_ir - read_write_bit(`JTAG_TMS_bit, validid); // get data, exit_1 - write_bit(`JTAG_TMS_bit); // update_dr - write_bit(3'h0); // idle - - if(validid) $display("Selected valid module (%0x)", moduleid); - else $display("Failed to select module (%0x)", moduleid); - */ -end -endtask - - -task send_module_burst_command; -input [3:0] opcode; -input [31:0] address; -input [15:0] burstlength; -reg [63:0] streamdata; -begin - streamdata = {11'h0,1'b0,opcode,address,burstlength}; - write_bit(`JTAG_TMS_bit); // select_dr_scan - write_bit(3'h0); // capture_ir - write_bit(3'h0); // shift_ir - jtag_write_stream(streamdata, 8'd53, 1); // write data, exit_1 - write_bit(`JTAG_TMS_bit); // update_dr - write_bit(3'h0); // idle -end -endtask - -task select_module_internal_register; // Really just a read, with discarded data - input [31:0] regidx; - input [7:0] len; // the length of the register index data, we assume not more than 32 - reg[63:0] streamdata; -begin - streamdata = 64'h0; - streamdata = streamdata | regidx; - streamdata = streamdata | (`DBG_WB_CMD_IREG_SEL << len); - write_bit(`JTAG_TMS_bit); // select_dr_scan - write_bit(3'h0); // capture_ir - write_bit(3'h0); // shift_ir - jtag_write_stream(streamdata, (len+5), 1); // write data, exit_1 - write_bit(`JTAG_TMS_bit); // update_dr - write_bit(3'h0); // idle -end -endtask - - -task read_module_internal_register; // We assume the register is already selected - //input [31:0] regidx; - input [7:0] len; // the length of the data desired, we assume a max of 64 bits - output [63:0] instream; - reg [63:0] bitmask; -begin - instream = 64'h0; - // We shift out all 0's, which is a NOP to the debug unit - write_bit(`JTAG_TMS_bit); // select_dr_scan - write_bit(3'h0); // capture_ir - write_bit(3'h0); // shift_ir - // Shift at least 5 bits, as this is the min, for a valid NOP - jtag_read_write_stream(64'h0, len+4,1,instream); // exit_1 - write_bit(`JTAG_TMS_bit); // update_dr - write_bit(3'h0); // idle - bitmask = 64'hffffffffffffffff; - bitmask = bitmask << len; - bitmask = ~bitmask; - instream = instream & bitmask; // Cut off any unwanted excess bits -end -endtask - -task write_module_internal_register; - input [31:0] regidx; // the length of the register index data - input [7:0] idxlen; - input [63:0] writedata; - input [7:0] datalen; // the length of the data to write. We assume the two length combined are 59 or less. - reg[63:0] streamdata; -begin - streamdata = 64'h0; // This will 0 the toplevel/module select bit - streamdata = streamdata | writedata; - streamdata = streamdata | (regidx << datalen); - streamdata = streamdata | (`DBG_WB_CMD_IREG_WR << (idxlen+datalen)); - - write_bit(`JTAG_TMS_bit); // select_dr_scan - write_bit(3'h0); // capture_ir - write_bit(3'h0); // shift_ir - jtag_write_stream(streamdata, (idxlen+datalen+5), 1); // write data, exit_1 - write_bit(`JTAG_TMS_bit); // update_dr - write_bit(3'h0); // idle -end -endtask - -// This includes the sending of the burst command -task do_module_burst_read; -input [5:0] word_size_bytes; -input [15:0] word_count; -input [31:0] start_address; -reg [3:0] opcode; -reg status; -reg [63:0] instream; -integer i; -integer j; -reg [31:0] crc_calc_i; -reg [31:0] crc_calc_o; // temp signal... -reg [31:0] crc_read; -reg [5:0] word_size_bits; -begin - $display("Doing burst read, word size %d, word count %d, start address 0x%x", word_size_bytes, word_count, start_address); - instream = 64'h0; - word_size_bits = word_size_bytes << 3; - crc_calc_i = 32'hffffffff; - - // Send the command - case (word_size_bytes) - 3'h1: opcode = `DBG_WB_CMD_BREAD8; - 3'h2: opcode = `DBG_WB_CMD_BREAD16; - 3'h4: opcode = `DBG_WB_CMD_BREAD32; - default: - begin - $display("Tried burst read with invalid word size (%0x), defaulting to 4-byte words", word_size_bytes); - opcode = `DBG_WB_CMD_BREAD32; - end - endcase - - send_module_burst_command(opcode,start_address, word_count); // returns to state idle - - // Get us back to shift_dr mode to read a burst - write_bit(`JTAG_TMS_bit); // select_dr_scan - write_bit(3'h0); // capture_ir - write_bit(3'h0); // shift_ir - - // Now, repeat... - for(i = 0; i < word_count; i=i+1) begin - // Get 1 status bit, then word_size_bytes*8 bits - status = 1'b0; - j = 0; - while(!status) begin - read_write_bit(3'h0, status); - j = j + 1; - end - - if(j > 1) begin - $display("Took %0d tries before good status bit during burst read", j); - end - - jtag_read_write_stream(64'h0, {2'h0,(word_size_bytes<<3)},0,instream); - //$display("Read 0x%0x", instream[31:0]); - compute_crc(crc_calc_i, instream[31:0], word_size_bits, crc_calc_o); - crc_calc_i = crc_calc_o; - if(word_size_bytes == 1) input_data8[i] = instream[7:0]; - else if(word_size_bytes == 2) input_data16[i] = instream[15:0]; - else input_data32[i] = instream[31:0]; - end - - // Read the data CRC from the debug module. - jtag_read_write_stream(64'h0, 6'd32, 1, crc_read); - if(crc_calc_o != crc_read) $display("CRC ERROR! Computed 0x%x, read CRC 0x%x", crc_calc_o, crc_read); - else $display("CRC OK!"); - - // Finally, shift out 5 0's, to make the next command a NOP - // Not necessary, debug unit won't latch a new opcode at the end of a burst - //jtag_write_stream(64'h0, 8'h5, 1); - write_bit(`JTAG_TMS_bit); // update_ir - write_bit(3'h0); // idle -end -endtask - - -task do_module_burst_write; -input [5:0] word_size_bytes; -input [15:0] word_count; -input [31:0] start_address; -reg [3:0] opcode; -reg status; -reg [63:0] dataword; -integer i; -integer j; -reg [31:0] crc_calc_i; -reg [31:0] crc_calc_o; -reg crc_match; -reg [5:0] word_size_bits; -begin - $display("Doing burst write, word size %d, word count %d, start address 0x%x", word_size_bytes, word_count, start_address); - word_size_bits = word_size_bytes << 3; - crc_calc_i = 32'hffffffff; - - // Send the command - case (word_size_bytes) - 3'h1: opcode = `DBG_WB_CMD_BWRITE8; - 3'h2: opcode = `DBG_WB_CMD_BWRITE16; - 3'h4: opcode = `DBG_WB_CMD_BWRITE32; - default: - begin - $display("Tried burst write with invalid word size (%0x), defaulting to 4-byte words", word_size_bytes); - opcode = `DBG_WB_CMD_BWRITE32; - end - endcase - - send_module_burst_command(opcode, start_address, word_count); // returns to state idle - - // Get us back to shift_dr mode to write a burst - write_bit(`JTAG_TMS_bit); // select_dr_scan - write_bit(3'h0); // capture_ir - write_bit(3'h0); // shift_ir - - - // Write a start bit (a 1) so it knows when to start counting - write_bit(`JTAG_TDO_bit); - - // Now, repeat... - for(i = 0; i < word_count; i=i+1) begin - // Write word_size_bytes*8 bits, then get 1 status bit - if(word_size_bytes == 4) dataword = {32'h0, static_data32[i]}; - else if(word_size_bytes == 2) dataword = {48'h0, static_data16[i]}; - else dataword = {56'h0, static_data8[i]}; - - - jtag_write_stream(dataword, {2'h0,(word_size_bytes<<3)},0); - compute_crc(crc_calc_i, dataword[31:0], word_size_bits, crc_calc_o); - crc_calc_i = crc_calc_o; - - // Check if WB bus is ready - // *** THIS WILL NOT WORK IF THERE IS MORE THAN 1 DEVICE IN THE JTAG CHAIN!!! - status = 1'b0; - read_write_bit(3'h0, status); - - if(!status) begin - $display("Bad status bit during burst write, index %d", i); - end - - - //$display("Wrote 0x%0x", dataword); - end - - // Send the CRC we computed - jtag_write_stream(crc_calc_o, 6'd32,0); - - // Read the 'CRC match' bit, and go to exit1_dr - read_write_bit(`JTAG_TMS_bit, crc_match); - if(!crc_match) $display("CRC ERROR! match bit after write is %d (computed CRC 0x%x)", crc_match, crc_calc_o); - else $display("CRC OK!"); - - // Finally, shift out 5 0's, to make the next command a NOP - // Not necessary, module will not latch new opcode during burst - //jtag_write_stream(64'h0, 8'h5, 1); - write_bit(`JTAG_TMS_bit); // update_ir - write_bit(3'h0); // idle -end - -endtask - - -// Puts a value in the TAP IR, assuming we start in IDLE state. -// Returns to IDLE state when finished -task set_ir; -input [3:0] irval; -begin - write_bit(`JTAG_TMS_bit); // select_dr_scan - write_bit(`JTAG_TMS_bit); // select_ir_scan - write_bit(3'h0); // capture_ir - write_bit(3'h0); // shift_ir - jtag_write_stream({60'h0,irval}, 8'h4, 1); // write data, exit_1 - write_bit(`JTAG_TMS_bit); // update_ir - write_bit(3'h0); // idle -end -endtask - -// Resets the TAP and puts it into idle mode -task reset_jtag; -integer i; -begin - for(i = 0; i < 8; i=i+1) begin - write_bit(`JTAG_TMS_bit); // 5 TMS should put us in test_logic_reset mode - end - write_bit(3'h0); // idle -end -endtask - - -//////////////////////////////////////////////////////////////////////////// -// Tasks to write or read-write a string of data - -task jtag_write_stream; -input [63:0] stream; -input [7:0] len; -input set_last_bit; -integer i; -integer databit; -reg [2:0] bits; -begin - for(i = 0; i < (len-1); i=i+1) begin - databit = (stream >> i) & 1'h1; - bits = databit << `JTAG_TDO; - write_bit(bits); - end - - databit = (stream >> i) & 1'h1; - bits = databit << `JTAG_TDO; - if(set_last_bit) bits = (bits | `JTAG_TMS_bit); - write_bit(bits); - -end -endtask - - -task jtag_read_write_stream; -input [63:0] stream; -input [7:0] len; -input set_last_bit; -output [63:0] instream; -integer i; -integer databit; -reg [2:0] bits; -reg inbit; -begin - instream = 64'h0; - for(i = 0; i < (len-1); i=i+1) begin - databit = (stream >> i) & 1'h1; - bits = databit << `JTAG_TDO; - read_write_bit(bits, inbit); - instream = (instream | (inbit << i)); - end - - databit = (stream >> i) & 1'h1; - bits = databit << `JTAG_TDO; - if(set_last_bit) bits = (bits | `JTAG_TMS_bit); - read_write_bit(bits, inbit); - instream = (instream | (inbit << (len-1))); -end -endtask - -///////////////////////////////////////////////////////////////////////// -// Tasks which write or readwrite a single bit (including clocking) - -task write_bit; - input [2:0] bitvals; - begin - - // Set data - jtag_out(bitvals & ~(`JTAG_TCK_bit)); - `wait_jtag_period; - - // Raise clock - jtag_out(bitvals | `JTAG_TCK_bit); - `wait_jtag_period; - - // drop clock (making output available in the SHIFT_xR states) - jtag_out(bitvals & ~(`JTAG_TCK_bit)); - `wait_jtag_period; - end -endtask - -task read_write_bit; - input [2:0] bitvals; - output l_tdi_val; - begin - - // read bit state - l_tdi_val <= jtag_tdi_i; - - // Set data - jtag_out(bitvals & ~(`JTAG_TCK_bit)); - `wait_jtag_period; - - // Raise clock - jtag_out(bitvals | `JTAG_TCK_bit); - `wait_jtag_period; - - // drop clock (making output available in the SHIFT_xR states) - jtag_out(bitvals & ~(`JTAG_TCK_bit)); - `wait_jtag_period; - end -endtask - -///////////////////////////////////////////////////////////////// -// Basic functions to set the state of the JTAG TAP I/F bits - -task jtag_out; - input [2:0] bitvals; - begin - - jtag_tck_o <= bitvals[`JTAG_TCK]; - jtag_tms_o <= bitvals[`JTAG_TMS]; - jtag_tdo_o <= bitvals[`JTAG_TDO]; - end -endtask - - -task jtag_inout; - input [2:0] bitvals; - output l_tdi_val; - begin - - jtag_tck_o <= bitvals[`JTAG_TCK]; - jtag_tms_o <= bitvals[`JTAG_TMS]; - jtag_tdo_o <= bitvals[`JTAG_TDO]; - - l_tdi_val <= jtag_tdi_i; - end -endtask - -endmodule \ No newline at end of file Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/rtl/verilog/adbg_wb_biu.v =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/rtl/verilog/adbg_wb_biu.v (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/rtl/verilog/adbg_wb_biu.v (nonexistent) @@ -1,434 +0,0 @@ -////////////////////////////////////////////////////////////////////// -//// //// -//// adbg_wb_biu.v //// -//// //// -//// //// -//// This file is part of the SoC Debug Interface. //// -//// //// -//// Author(s): //// -//// Nathan Yawn (nathan.yawn@opencores.org) //// -//// //// -//// //// -//// //// -////////////////////////////////////////////////////////////////////// -//// //// -//// Copyright (C) 2008 Authors //// -//// //// -//// This source file may be used and distributed without //// -//// restriction provided that this copyright statement is not //// -//// removed from the file and that any derivative work contains //// -//// the original copyright notice and the associated disclaimer. //// -//// //// -//// This source file is free software; you can redistribute it //// -//// and/or modify it under the terms of the GNU Lesser General //// -//// Public License as published by the Free Software Foundation; //// -//// either version 2.1 of the License, or (at your option) any //// -//// later version. //// -//// //// -//// This source is distributed in the hope that it will be //// -//// useful, but WITHOUT ANY WARRANTY; without even the implied //// -//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// -//// PURPOSE. See the GNU Lesser General Public License for more //// -//// details. //// -//// //// -//// You should have received a copy of the GNU Lesser General //// -//// Public License along with this source; if not, download it //// -//// from http://www.opencores.org/lgpl.shtml //// -//// //// -////////////////////////////////////////////////////////////////////// -// -// CVS Revision History -// -// $Log: adbg_wb_biu.v,v $ -// Revision 1.3 2009/05/17 20:54:57 Nathan -// Changed email address to opencores.org -// -// Revision 1.2 2009/05/04 00:50:10 Nathan -// Changed the WB BIU to use big-endian byte ordering, to match the OR1000. Kept little-endian ordering as a compile-time option in case this is ever used with a little-endian CPU. -// -// Revision 1.1 2008/07/22 20:28:32 Nathan -// Changed names of all files and modules (prefixed an a, for advanced). Cleanup, indenting. No functional changes. -// -// Revision 1.4 2008/07/08 19:04:04 Nathan -// Many small changes to eliminate compiler warnings, no functional changes. -// System will now pass SRAM and CPU self-tests on Altera FPGA using -// altera_virtual_jtag TAP. -// - -`include "adbg_wb_defines.v" - -// Top module -module adbg_wb_biu - ( - // Debug interface signals - tck_i, - rst_i, - data_i, - data_o, - addr_i, - strobe_i, - rd_wrn_i, // If 0, then write op - rdy_o, - err_o, - word_size_i, // 1,2, or 4 - - // Wishbone signals - wb_clk_i, - wb_adr_o, - wb_dat_o, - wb_dat_i, - wb_cyc_o, - wb_stb_o, - wb_sel_o, - wb_we_o, - wb_ack_i, - wb_cab_o, - wb_err_i, - wb_cti_o, - wb_bte_o - ); - - // Debug interface signals - input tck_i; - input rst_i; - input [31:0] data_i; // Assume short words are in UPPER order bits! - output [31:0] data_o; - input [31:0] addr_i; - input strobe_i; - input rd_wrn_i; - output rdy_o; - output err_o; - input [2:0] word_size_i; - - // Wishbone signals - input wb_clk_i; - output [31:0] wb_adr_o; - output [31:0] wb_dat_o; - input [31:0] wb_dat_i; - output wb_cyc_o; - output wb_stb_o; - output [3:0] wb_sel_o; - output wb_we_o; - input wb_ack_i; - output wb_cab_o; - input wb_err_i; - output [2:0] wb_cti_o; - output [1:0] wb_bte_o; - - wire [31:0] data_o; - reg rdy_o; - wire err_o; - - wire [31:0] wb_adr_o; - reg wb_cyc_o; - reg wb_stb_o; - wire [31:0] wb_dat_o; - wire [3:0] wb_sel_o; - wire wb_we_o; - wire wb_cab_o; - wire [2:0] wb_cti_o; - wire [1:0] wb_bte_o; - - - // Registers - reg [3:0] sel_reg; - reg [29:0] addr_reg; // Don't need the two LSB, this info is in the SEL bits - reg [31:0] data_in_reg; // dbg->WB - reg [31:0] data_out_reg; // WB->dbg - reg wr_reg; - reg str_sync; // This is 'active-toggle' rather than -high or -low. - reg rdy_sync; // ditto, active-toggle - reg err_reg; - - // Sync registers. TFF indicates TCK domain, WBFF indicates wb_clk domain - reg rdy_sync_tff1; - reg rdy_sync_tff2; - reg rdy_sync_tff2q; // used to detect toggles - reg str_sync_wbff1; - reg str_sync_wbff2; - reg str_sync_wbff2q; // used to detect toggles - - - // Control Signals - reg data_o_en; // latch wb_data_i - reg rdy_sync_en; // toggle the rdy_sync signal, indicate ready to TCK domain - reg err_en; // latch the wb_err_i signal - - // Internal signals - reg [3:0] be_dec; // word_size and low-order address bits decoded to SEL bits - wire start_toggle; // WB domain, indicates a toggle on the start strobe - reg [31:0] swapped_data_i; - reg [31:0] swapped_data_out; - - ////////////////////////////////////////////////////// - // TCK clock domain - // There is no FSM here, just signal latching and clock - // domain synchronization - - // Create byte enable signals from word_size and address (combinatorial) - `ifdef DBG_WB_LITTLE_ENDIAN - // This uses LITTLE ENDIAN byte ordering...lowest-addressed bytes is the - // least-significant byte of the 32-bit WB bus. - always @ (word_size_i or addr_i) - begin - case (word_size_i) - 3'h1: - begin - if(addr_i[1:0] == 2'b00) be_dec <= 4'b0001; - else if(addr_i[1:0] == 2'b01) be_dec <= 4'b0010; - else if(addr_i[1:0] == 2'b10) be_dec <= 4'b0100; - else be_dec <= 4'b1000; - end - 3'h2: - begin - if(addr_i[1]) be_dec <= 4'b1100; - else be_dec <= 4'b0011; - end - 3'h4: be_dec <= 4'b1111; - default: be_dec <= 4'b1111; // default to 32-bit access - endcase - end - `else - // This is for a BIG ENDIAN CPU...lowest-addressed byte is - // the 8 most significant bits of the 32-bit WB bus. - always @ (word_size_i or addr_i) - begin - case (word_size_i) - 3'h1: - begin - if(addr_i[1:0] == 2'b00) be_dec <= 4'b1000; - else if(addr_i[1:0] == 2'b01) be_dec <= 4'b0100; - else if(addr_i[1:0] == 2'b10) be_dec <= 4'b0010; - else be_dec <= 4'b0001; - end - 3'h2: - begin - if(addr_i[1] == 1'b1) be_dec <= 4'b0011; - else be_dec <= 4'b1100; - end - 3'h4: be_dec <= 4'b1111; - default: be_dec <= 4'b1111; // default to 32-bit access - endcase - end - `endif - - - // Byte- or word-swap data as necessary. Use the non-latched be_dec signal, - // since it and the swapped data will be latched at the same time. - // Remember that since the data is shifted in LSB-first, shorter words - // will be in the high-order bits. (combinatorial) - always @ (be_dec or data_i) - begin - case (be_dec) - 4'b1111: swapped_data_i <= data_i; - 4'b0011: swapped_data_i <= {16'h0,data_i[31:16]}; - 4'b1100: swapped_data_i <= data_i; - 4'b0001: swapped_data_i <= {24'h0, data_i[31:24]}; - 4'b0010: swapped_data_i <= {16'h0, data_i[31:24], 8'h0}; - 4'b0100: swapped_data_i <= {8'h0, data_i[31:24], 16'h0}; - 4'b1000: swapped_data_i <= {data_i[31:24], 24'h0}; - default: swapped_data_i <= data_i; // Shouldn't be possible - endcase - end - - // Latch input data on 'start' strobe, if ready. - always @ (posedge tck_i or posedge rst_i) - begin - if(rst_i) begin - sel_reg <= 4'h0; - addr_reg <= 30'h0; - data_in_reg <= 32'h0; - wr_reg <= 1'b0; - end - else - if(strobe_i && rdy_o) begin - sel_reg <= be_dec; - addr_reg <= addr_i[31:2]; - if(!rd_wrn_i) data_in_reg <= swapped_data_i; - wr_reg <= ~rd_wrn_i; - end - end - - // Create toggle-active strobe signal for clock sync. This will start a transaction - // on the WB once the toggle propagates to the FSM in the WB domain. - always @ (posedge tck_i or posedge rst_i) - begin - if(rst_i) str_sync <= 1'b0; - else if(strobe_i && rdy_o) str_sync <= ~str_sync; - end - - // Create rdy_o output. Set on reset, clear on strobe (if set), set on input toggle - always @ (posedge tck_i or posedge rst_i) - begin - if(rst_i) begin - rdy_sync_tff1 <= 1'b0; - rdy_sync_tff2 <= 1'b0; - rdy_sync_tff2q <= 1'b0; - rdy_o <= 1'b1; - end - else begin - rdy_sync_tff1 <= rdy_sync; // Synchronize the ready signal across clock domains - rdy_sync_tff2 <= rdy_sync_tff1; - rdy_sync_tff2q <= rdy_sync_tff2; // used to detect toggles - - if(strobe_i && rdy_o) rdy_o <= 1'b0; - else if(rdy_sync_tff2 != rdy_sync_tff2q) rdy_o <= 1'b1; - end - - end - - ////////////////////////////////////////////////////////// - // Direct assignments, unsynchronized - - assign wb_dat_o = data_in_reg; - assign wb_we_o = wr_reg; - assign wb_adr_o = {addr_reg, 2'h0}; - assign wb_sel_o = sel_reg; - - assign data_o = data_out_reg; - assign err_o = err_reg; - - assign wb_cti_o = 3'h0; - assign wb_bte_o = 2'h0; - assign wb_cab_o = 1'b0; - - /////////////////////////////////////////////////////// - // Wishbone clock domain - - // synchronize the start strobe - always @ (posedge wb_clk_i or posedge rst_i) - begin - if(rst_i) begin - str_sync_wbff1 <= 1'b0; - str_sync_wbff2 <= 1'b0; - str_sync_wbff2q <= 1'b0; - end - else begin - str_sync_wbff1 <= str_sync; - str_sync_wbff2 <= str_sync_wbff1; - str_sync_wbff2q <= str_sync_wbff2; // used to detect toggles - end - end - - assign start_toggle = (str_sync_wbff2 != str_sync_wbff2q); - - // Error indicator register - always @ (posedge wb_clk_i or posedge rst_i) - begin - if(rst_i) err_reg <= 1'b0; - else if(err_en) err_reg <= wb_err_i; - end - - // Byte- or word-swap the WB->dbg data, as necessary (combinatorial) - // We assume bits not required by SEL are don't care. We reuse assignments - // where possible to keep the MUX smaller. (combinatorial) - always @ (sel_reg or wb_dat_i) - begin - case (sel_reg) - 4'b1111: swapped_data_out <= wb_dat_i; - 4'b0011: swapped_data_out <= wb_dat_i; - 4'b1100: swapped_data_out <= {16'h0, wb_dat_i[31:16]}; - 4'b0001: swapped_data_out <= wb_dat_i; - 4'b0010: swapped_data_out <= {24'h0, wb_dat_i[15:8]}; - 4'b0100: swapped_data_out <= {16'h0, wb_dat_i[31:16]}; - 4'b1000: swapped_data_out <= {24'h0, wb_dat_i[31:24]}; - default: swapped_data_out <= wb_dat_i; // Shouldn't be possible - endcase - end - - // WB->dbg data register - always @ (posedge wb_clk_i or posedge rst_i) - begin - if(rst_i) data_out_reg <= 32'h0; - else if(data_o_en) data_out_reg <= swapped_data_out; - end - - // Create a toggle-active ready signal to send to the TCK domain - always @ (posedge wb_clk_i or posedge rst_i) - begin - if(rst_i) rdy_sync <= 1'b0; - else if(rdy_sync_en) rdy_sync <= ~rdy_sync; - end - - ///////////////////////////////////////////////////// - // Small state machine to create WB accesses - // Not much more that an 'in_progress' bit, but easier - // to read. Deals with single-cycle and multi-cycle - // accesses. - - reg wb_fsm_state; - reg next_fsm_state; - -`define STATE_IDLE 1'h0 -`define STATE_TRANSFER 1'h1 - - // Sequential bit - always @ (posedge wb_clk_i or posedge rst_i) - begin - if(rst_i) wb_fsm_state <= `STATE_IDLE; - else wb_fsm_state <= next_fsm_state; - end - - // Determination of next state (combinatorial) - always @ (wb_fsm_state or start_toggle or wb_ack_i or wb_err_i) - begin - case (wb_fsm_state) - `STATE_IDLE: - begin - if(start_toggle && !(wb_ack_i || wb_err_i)) next_fsm_state <= `STATE_TRANSFER; // Don't go to next state for 1-cycle transfer - else next_fsm_state <= `STATE_IDLE; - end - `STATE_TRANSFER: - begin - if(wb_ack_i || wb_err_i) next_fsm_state <= `STATE_IDLE; - else next_fsm_state <= `STATE_TRANSFER; - end - endcase - end - - // Outputs of state machine (combinatorial) - always @ (wb_fsm_state or start_toggle or wb_ack_i or wb_err_i or wr_reg) - begin - rdy_sync_en <= 1'b0; - err_en <= 1'b0; - data_o_en <= 1'b0; - wb_cyc_o <= 1'b0; - wb_stb_o <= 1'b0; - - case (wb_fsm_state) - `STATE_IDLE: - begin - if(start_toggle) begin - wb_cyc_o <= 1'b1; - wb_stb_o <= 1'b1; - if(wb_ack_i || wb_err_i) begin - err_en <= 1'b1; - rdy_sync_en <= 1'b1; - end - - if (wb_ack_i && !wr_reg) begin - data_o_en <= 1'b1; - end - end - end - - `STATE_TRANSFER: - begin - wb_cyc_o <= 1'b1; - wb_stb_o <= 1'b1; - if(wb_ack_i) begin - err_en <= 1'b1; - data_o_en <= 1'b1; - rdy_sync_en <= 1'b1; - end - else if (wb_err_i) begin - err_en <= 1'b1; - rdy_sync_en <= 1'b1; - end - end - endcase - - end - -endmodule - Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/rtl/verilog/adbg_or1k_defines.v =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/rtl/verilog/adbg_or1k_defines.v (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/rtl/verilog/adbg_or1k_defines.v (nonexistent) @@ -1,86 +0,0 @@ -////////////////////////////////////////////////////////////////////// -//// //// -//// adbg_or1k_defines.v //// -//// //// -//// //// -//// This file is part of the SoC Advanced Debug Interface. //// -//// //// -//// Author(s): //// -//// Nathan Yawn (nathan.yawn@opencores.org) //// -//// //// -//// //// -//// //// -////////////////////////////////////////////////////////////////////// -//// //// -//// Copyright (C) 2008 Authors //// -//// //// -//// This source file may be used and distributed without //// -//// restriction provided that this copyright statement is not //// -//// removed from the file and that any derivative work contains //// -//// the original copyright notice and the associated disclaimer. //// -//// //// -//// This source file is free software; you can redistribute it //// -//// and/or modify it under the terms of the GNU Lesser General //// -//// Public License as published by the Free Software Foundation; //// -//// either version 2.1 of the License, or (at your option) any //// -//// later version. //// -//// //// -//// This source is distributed in the hope that it will be //// -//// useful, but WITHOUT ANY WARRANTY; without even the implied //// -//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// -//// PURPOSE. See the GNU Lesser General Public License for more //// -//// details. //// -//// //// -//// You should have received a copy of the GNU Lesser General //// -//// Public License along with this source; if not, download it //// -//// from http://www.opencores.org/lgpl.shtml //// -//// //// -////////////////////////////////////////////////////////////////////// -// -// CVS Revision History -// -// $Log: adbg_or1k_defines.v,v $ -// Revision 1.2 2009/05/17 20:54:56 Nathan -// Changed email address to opencores.org -// -// Revision 1.1 2008/07/22 20:28:31 Nathan -// Changed names of all files and modules (prefixed an a, for advanced). Cleanup, indenting. No functional changes. -// -// Revision 1.3 2008/07/06 20:02:54 Nathan -// Fixes for synthesis with Xilinx ISE (also synthesizable with -// Quartus II 7.0). Ran through dos2unix. -// -// Revision 1.2 2008/06/26 20:52:31 Nathan -// OR1K module tested and working. Added copyright / license info -// to _define files. Other cleanup. -// - - -// These relate to the number of internal registers, and how -// many bits are required in the Reg. Select register -`define DBG_OR1K_REGSELECT_SIZE 1 -`define DBG_OR1K_NUM_INTREG 1 - -// Register index definitions for module-internal registers -// Index 0 is the Status register, used for stall and reset -`define DBG_OR1K_INTREG_STATUS 1'b0 - -`define DBG_OR1K_STATUS_LEN 2 - -// Valid commands/opcodes for the or1k debug module -// 0000 NOP -// 0001 - 0010 Reserved -// 0011 Write burst, 32-bit access -// 0100 - 0110 Reserved -// 0111 Read burst, 32-bit access -// 1000 Reserved -// 1001 Internal register select/write -// 1010 - 1100 Reserved -// 1101 Internal register select -// 1110 - 1111 Reserved - - -`define DBG_OR1K_CMD_BWRITE32 4'h3 -`define DBG_OR1K_CMD_BREAD32 4'h7 -`define DBG_OR1K_CMD_IREG_WR 4'h9 -`define DBG_OR1K_CMD_IREG_SEL 4'hd Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/rtl/verilog/adbg_or1k_biu.v =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/rtl/verilog/adbg_or1k_biu.v (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/rtl/verilog/adbg_or1k_biu.v (nonexistent) @@ -1,296 +0,0 @@ -////////////////////////////////////////////////////////////////////// -//// //// -//// adbg_or1k_biu.v //// -//// //// -//// //// -//// This file is part of the SoC Advanced Debug Interface. //// -//// //// -//// Author(s): //// -//// Nathan Yawn (nathan.yawn@opencores.org) //// -//// //// -//// //// -//// //// -////////////////////////////////////////////////////////////////////// -//// //// -//// Copyright (C) 2008 Authors //// -//// //// -//// This source file may be used and distributed without //// -//// restriction provided that this copyright statement is not //// -//// removed from the file and that any derivative work contains //// -//// the original copyright notice and the associated disclaimer. //// -//// //// -//// This source file is free software; you can redistribute it //// -//// and/or modify it under the terms of the GNU Lesser General //// -//// Public License as published by the Free Software Foundation; //// -//// either version 2.1 of the License, or (at your option) any //// -//// later version. //// -//// //// -//// This source is distributed in the hope that it will be //// -//// useful, but WITHOUT ANY WARRANTY; without even the implied //// -//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// -//// PURPOSE. See the GNU Lesser General Public License for more //// -//// details. //// -//// //// -//// You should have received a copy of the GNU Lesser General //// -//// Public License along with this source; if not, download it //// -//// from http://www.opencores.org/lgpl.shtml //// -//// //// -////////////////////////////////////////////////////////////////////// -// -// CVS Revision History -// -// $Log: adbg_or1k_biu.v,v $ -// Revision 1.2 2009/05/17 20:54:56 Nathan -// Changed email address to opencores.org -// -// Revision 1.1 2008/07/22 20:28:30 Nathan -// Changed names of all files and modules (prefixed an a, for advanced). Cleanup, indenting. No functional changes. -// -// Revision 1.5 2008/07/08 19:04:03 Nathan -// Many small changes to eliminate compiler warnings, no functional -// changes. System will now pass SRAM and CPU self-tests on Altera -// FPGA using altera_virtual_jtag TAP. -// - - - -module adbg_or1k_biu - ( - // Debug interface signals - tck_i, - rst_i, - data_i, - data_o, - addr_i, - strobe_i, - rd_wrn_i, // If 0, then write op - rdy_o, - - // OR1K SPR bus signals - cpu_clk_i, - cpu_addr_o, - cpu_data_i, - cpu_data_o, - cpu_stb_o, - cpu_we_o, - cpu_ack_i - ); - - // Debug interface signals - input tck_i; - input rst_i; - input [31:0] data_i; // Assume short words are in UPPER order bits! - output [31:0] data_o; - input [31:0] addr_i; - input strobe_i; - input rd_wrn_i; - output rdy_o; - - - // OR1K SPR bus signals - input cpu_clk_i; - output [31:0] cpu_addr_o; - input [31:0] cpu_data_i; - output [31:0] cpu_data_o; - output cpu_stb_o; - output cpu_we_o; - input cpu_ack_i; - - reg rdy_o; - reg cpu_stb_o; - - - // Registers - reg [31:0] addr_reg; - reg [31:0] data_in_reg; // dbg->WB - reg [31:0] data_out_reg; // WB->dbg - reg wr_reg; - reg str_sync; // This is 'active-toggle' rather than -high or -low. - reg rdy_sync; // ditto, active-toggle - - - // Sync registers. TFF indicates TCK domain, WBFF indicates cpu_clk domain - reg rdy_sync_tff1; - reg rdy_sync_tff2; - reg rdy_sync_tff2q; // used to detect toggles - reg str_sync_wbff1; - reg str_sync_wbff2; - reg str_sync_wbff2q; // used to detect toggles - - - // Control Signals - reg data_o_en; // latch wb_data_i - reg rdy_sync_en; // toggle the rdy_sync signal, indicate ready to TCK domain - - - // Internal signals - wire start_toggle; // CPU domain, indicates a toggle on the start strobe - - - ////////////////////////////////////////////////////// - // TCK clock domain - // There is no FSM here, just signal latching and clock - // domain synchronization - - - // Latch input data on 'start' strobe, if ready. - always @ (posedge tck_i or posedge rst_i) - begin - if(rst_i) begin - addr_reg <= 32'h0; - data_in_reg <= 32'h0; - wr_reg <= 1'b0; - end - else - if(strobe_i && rdy_o) begin - addr_reg <= addr_i; - if(!rd_wrn_i) data_in_reg <= data_i; - wr_reg <= ~rd_wrn_i; - end - end - - // Create toggle-active strobe signal for clock sync. This will start a transaction - // to the CPU once the toggle propagates to the FSM in the cpu_clk domain. - always @ (posedge tck_i or posedge rst_i) - begin - if(rst_i) str_sync <= 1'b0; - else if(strobe_i && rdy_o) str_sync <= ~str_sync; - end - - // Create rdy_o output. Set on reset, clear on strobe (if set), set on input toggle - always @ (posedge tck_i or posedge rst_i) - begin - if(rst_i) begin - rdy_sync_tff1 <= 1'b0; - rdy_sync_tff2 <= 1'b0; - rdy_sync_tff2q <= 1'b0; - rdy_o <= 1'b1; - end - else begin - rdy_sync_tff1 <= rdy_sync; // Synchronize the ready signal across clock domains - rdy_sync_tff2 <= rdy_sync_tff1; - rdy_sync_tff2q <= rdy_sync_tff2; // used to detect toggles - - if(strobe_i && rdy_o) rdy_o <= 1'b0; - else if(rdy_sync_tff2 != rdy_sync_tff2q) rdy_o <= 1'b1; - end - - end - - ////////////////////////////////////////////////////////// - // Direct assignments, unsynchronized - - assign cpu_data_o = data_in_reg; - assign cpu_we_o = wr_reg; - assign cpu_addr_o = addr_reg; - - assign data_o = data_out_reg; - - - /////////////////////////////////////////////////////// - // Wishbone clock domain - - // synchronize the start strobe - always @ (posedge cpu_clk_i or posedge rst_i) - begin - if(rst_i) begin - str_sync_wbff1 <= 1'b0; - str_sync_wbff2 <= 1'b0; - str_sync_wbff2q <= 1'b0; - end - else begin - str_sync_wbff1 <= str_sync; - str_sync_wbff2 <= str_sync_wbff1; - str_sync_wbff2q <= str_sync_wbff2; // used to detect toggles - end - end - - assign start_toggle = (str_sync_wbff2 != str_sync_wbff2q); - - - // CPU->dbg data register - always @ (posedge cpu_clk_i or posedge rst_i) - begin - if(rst_i) data_out_reg <= 32'h0; - else if(data_o_en) data_out_reg <= cpu_data_i; - end - - // Create a toggle-active ready signal to send to the TCK domain - always @ (posedge cpu_clk_i or posedge rst_i) - begin - if(rst_i) rdy_sync <= 1'b0; - else if(rdy_sync_en) rdy_sync <= ~rdy_sync; - end - - ///////////////////////////////////////////////////// - // Small state machine to create OR1K SPR bus accesses - // Not much more that an 'in_progress' bit, but easier - // to read. Deals with single-cycle and multi-cycle - // accesses. - - reg cpu_fsm_state; - reg next_fsm_state; - -`define STATE_IDLE 1'h0 -`define STATE_TRANSFER 1'h1 - - // Sequential bit - always @ (posedge cpu_clk_i or posedge rst_i) - begin - if(rst_i) cpu_fsm_state <= `STATE_IDLE; - else cpu_fsm_state <= next_fsm_state; - end - - // Determination of next state (combinatorial) - always @ (cpu_fsm_state or start_toggle or cpu_ack_i) - begin - case (cpu_fsm_state) - `STATE_IDLE: - begin - if(start_toggle && !cpu_ack_i) next_fsm_state <= `STATE_TRANSFER; // Don't go to next state for 1-cycle transfer - else next_fsm_state <= `STATE_IDLE; - end - `STATE_TRANSFER: - begin - if(cpu_ack_i) next_fsm_state <= `STATE_IDLE; - else next_fsm_state <= `STATE_TRANSFER; - end - endcase - end - - // Outputs of state machine (combinatorial) - always @ (cpu_fsm_state or start_toggle or cpu_ack_i or wr_reg) - begin - rdy_sync_en <= 1'b0; - data_o_en <= 1'b0; - cpu_stb_o <= 1'b0; - - case (cpu_fsm_state) - `STATE_IDLE: - begin - if(start_toggle) begin - cpu_stb_o <= 1'b1; - if(cpu_ack_i) begin - rdy_sync_en <= 1'b1; - end - - if (cpu_ack_i && !wr_reg) begin // latch read data - data_o_en <= 1'b1; - end - end - end - - `STATE_TRANSFER: - begin - cpu_stb_o <= 1'b1; // OR1K behavioral model needs this. OR1200 should be indifferent. - if(cpu_ack_i) begin - data_o_en <= 1'b1; - rdy_sync_en <= 1'b1; - end - end - endcase - - end - -endmodule - Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/rtl/verilog/adbg_crc32.v =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/rtl/verilog/adbg_crc32.v (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/rtl/verilog/adbg_crc32.v (nonexistent) @@ -1,114 +0,0 @@ -////////////////////////////////////////////////////////////////////// -// File: CRC32.v -// Date: Thu Nov 27 13:56:49 2003 -// -// Copyright (C) 1999-2003 Easics NV. -// This source file may be used and distributed without restriction -// provided that this copyright statement is not removed from the file -// and that any derivative work contains the original copyright notice -// and the associated disclaimer. -// -// THIS SOURCE FILE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS -// OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED -// WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// -// Purpose: Verilog module containing a synthesizable CRC function -// * polynomial: (0 1 2 4 5 7 8 10 11 12 16 22 23 26 32) -// * data width: 1 -// -// Info: janz@easics.be (Jan Zegers) -// http://www.easics.com -// -// Modified by Nathan Yawn for the Advanced Debug Module -// Changes (C) 2008 Nathan Yawn -/////////////////////////////////////////////////////////////////////// -// -// CVS Revision History -// -// $Log: adbg_crc32.v,v $ -// Revision 1.1 2008/07/22 20:28:29 Nathan -// Changed names of all files and modules (prefixed an a, for advanced). Cleanup, indenting. No functional changes. -// -// Revision 1.3 2008/07/06 20:02:53 Nathan -// Fixes for synthesis with Xilinx ISE (also synthesizable with -// Quartus II 7.0). Ran through dos2unix. -// -// Revision 1.2 2008/06/20 19:22:10 Nathan -// Reversed the direction of the CRC computation shift, for a more -// hardware-efficient implementation. -// -// -// -// - - -module adbg_crc32 (clk, data, enable, shift, clr, rst, crc_out, serial_out); - -input clk; -input data; -input enable; -input shift; -input clr; -input rst; -output [31:0] crc_out; -output serial_out; - - -reg [31:0] crc; -wire [31:0] new_crc; - - -// You may notice that the 'poly' in this implementation is backwards. -// This is because the shift is also 'backwards', so that the data can -// be shifted out in the same direction, which saves on logic + routing. -assign new_crc[0] = crc[1]; -assign new_crc[1] = crc[2]; -assign new_crc[2] = crc[3]; -assign new_crc[3] = crc[4]; -assign new_crc[4] = crc[5]; -assign new_crc[5] = crc[6] ^ data ^ crc[0]; -assign new_crc[6] = crc[7]; -assign new_crc[7] = crc[8]; -assign new_crc[8] = crc[9] ^ data ^ crc[0]; -assign new_crc[9] = crc[10] ^ data ^ crc[0]; -assign new_crc[10] = crc[11]; -assign new_crc[11] = crc[12]; -assign new_crc[12] = crc[13]; -assign new_crc[13] = crc[14]; -assign new_crc[14] = crc[15]; -assign new_crc[15] = crc[16] ^ data ^ crc[0]; -assign new_crc[16] = crc[17]; -assign new_crc[17] = crc[18]; -assign new_crc[18] = crc[19]; -assign new_crc[19] = crc[20] ^ data ^ crc[0]; -assign new_crc[20] = crc[21] ^ data ^ crc[0]; -assign new_crc[21] = crc[22] ^ data ^ crc[0]; -assign new_crc[22] = crc[23]; -assign new_crc[23] = crc[24] ^ data ^ crc[0]; -assign new_crc[24] = crc[25] ^ data ^ crc[0]; -assign new_crc[25] = crc[26]; -assign new_crc[26] = crc[27] ^ data ^ crc[0]; -assign new_crc[27] = crc[28] ^ data ^ crc[0]; -assign new_crc[28] = crc[29]; -assign new_crc[29] = crc[30] ^ data ^ crc[0]; -assign new_crc[30] = crc[31] ^ data ^ crc[0]; -assign new_crc[31] = data ^ crc[0]; - -always @ (posedge clk or posedge rst) -begin - if(rst) - crc[31:0] <= #1 32'hffffffff; - else if(clr) - crc[31:0] <= #1 32'hffffffff; - else if(enable) - crc[31:0] <= #1 new_crc; - else if (shift) - crc[31:0] <= #1 {1'b0, crc[31:1]}; -end - - -//assign crc_match = (crc == 32'h0); -assign crc_out = crc; //[31]; -assign serial_out = crc[0]; - -endmodule Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/rtl/verilog/adbg_or1k_status_reg.v =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/rtl/verilog/adbg_or1k_status_reg.v (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/rtl/verilog/adbg_or1k_status_reg.v (nonexistent) @@ -1,192 +0,0 @@ -////////////////////////////////////////////////////////////////////// -//// //// -//// adbg_or1k_status_reg.v //// -//// //// -//// //// -//// This file is part of the SoC Debug Interface. //// -//// //// -//// Author(s): //// -//// Igor Mohor (igorm@opencores.org) //// -//// //// -//// //// -//// //// -////////////////////////////////////////////////////////////////////// -//// //// -//// Copyright (C) 2000 - 2008 Authors //// -//// //// -//// This source file may be used and distributed without //// -//// restriction provided that this copyright statement is not //// -//// removed from the file and that any derivative work contains //// -//// the original copyright notice and the associated disclaimer. //// -//// //// -//// This source file is free software; you can redistribute it //// -//// and/or modify it under the terms of the GNU Lesser General //// -//// Public License as published by the Free Software Foundation; //// -//// either version 2.1 of the License, or (at your option) any //// -//// later version. //// -//// //// -//// This source is distributed in the hope that it will be //// -//// useful, but WITHOUT ANY WARRANTY; without even the implied //// -//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// -//// PURPOSE. See the GNU Lesser General Public License for more //// -//// details. //// -//// //// -//// You should have received a copy of the GNU Lesser General //// -//// Public License along with this source; if not, download it //// -//// from http://www.opencores.org/lgpl.shtml //// -//// //// -////////////////////////////////////////////////////////////////////// -// -// CVS Revision History -// -// $Log: adbg_or1k_status_reg.v,v $ -// Revision 1.1 2008/07/22 20:28:31 Nathan -// Changed names of all files and modules (prefixed an a, for advanced). Cleanup, indenting. No functional changes. -// -// Revision 1.3 2008/07/06 20:02:54 Nathan -// Fixes for synthesis with Xilinx ISE (also synthesizable with -// Quartus II 7.0). Ran through dos2unix. -// -// Revision 1.2 2008/06/26 20:52:32 Nathan -// OR1K module tested and working. Added copyright / license info -// to _define files. Other cleanup. -// -// -// -// - -`include "adbg_or1k_defines.v" - -module adbg_or1k_status_reg ( - data_i, - we_i, - tck_i, - bp_i, - rst_i, - cpu_clk_i, - ctrl_reg_o, - cpu_stall_o, - cpu_rst_o - ); - - - input [`DBG_OR1K_STATUS_LEN - 1:0] data_i; - input we_i; - input tck_i; - input bp_i; - input rst_i; - input cpu_clk_i; - - output [`DBG_OR1K_STATUS_LEN - 1:0] ctrl_reg_o; - output cpu_stall_o; - output cpu_rst_o; - - reg cpu_reset; - wire [2:1] cpu_op_out; - - reg stall_bp, stall_bp_csff, stall_bp_tck; - reg stall_reg, stall_reg_csff, stall_reg_cpu; - reg cpu_reset_csff; - reg cpu_rst_o; - - - - // Breakpoint is latched and synchronized. Stall is set and latched. - // This is done in the CPU clock domain, because the JTAG clock (TCK) is - // irregular. By only allowing bp_i to set (but not reset) the stall_bp - // signal, we insure that the CPU will remain in the stalled state until - // the debug host can read the state. - always @ (posedge cpu_clk_i or posedge rst_i) - begin - if(rst_i) - stall_bp <= #1 1'b0; - else if(bp_i) - stall_bp <= #1 1'b1; - else if(stall_reg_cpu) - stall_bp <= #1 1'b0; - end - - - // Synchronizing - always @ (posedge tck_i or posedge rst_i) - begin - if (rst_i) - begin - stall_bp_csff <= #1 1'b0; - stall_bp_tck <= #1 1'b0; - end - else - begin - stall_bp_csff <= #1 stall_bp; - stall_bp_tck <= #1 stall_bp_csff; - end - end - - - always @ (posedge cpu_clk_i or posedge rst_i) - begin - if (rst_i) - begin - stall_reg_csff <= #1 1'b0; - stall_reg_cpu <= #1 1'b0; - end - else - begin - stall_reg_csff <= #1 stall_reg; - stall_reg_cpu <= #1 stall_reg_csff; - end - end - - // bp_i forces a stall immediately on a breakpoint - // stall_bp holds the stall until the debug host acts - // stall_reg_cpu allows the debug host to control a stall. - assign cpu_stall_o = bp_i | stall_bp | stall_reg_cpu; - - - // Writing data to the control registers (stall) - // This can be set either by the debug host, or by - // a CPU breakpoint. It can only be cleared by the host. - always @ (posedge tck_i or posedge rst_i) - begin - if (rst_i) - stall_reg <= #1 1'b0; - else if (stall_bp_tck) - stall_reg <= #1 1'b1; - else if (we_i) - stall_reg <= #1 data_i[0]; - end - - - // Writing data to the control registers (reset) - always @ (posedge tck_i or posedge rst_i) - begin - if (rst_i) - cpu_reset <= #1 1'b0; - else if(we_i) - cpu_reset <= #1 data_i[1]; - end - - - // Synchronizing signals from registers - always @ (posedge cpu_clk_i or posedge rst_i) - begin - if (rst_i) - begin - cpu_reset_csff <= #1 1'b0; - cpu_rst_o <= #1 1'b0; - end - else - begin - cpu_reset_csff <= #1 cpu_reset; - cpu_rst_o <= #1 cpu_reset_csff; - end - end - - - - // Value for read back - assign ctrl_reg_o = {cpu_reset, stall_reg}; - - -endmodule - Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/rtl/verilog/adbg_defines.v =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/rtl/verilog/adbg_defines.v (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/rtl/verilog/adbg_defines.v (nonexistent) @@ -1,82 +0,0 @@ -////////////////////////////////////////////////////////////////////// -//// //// -//// adbg_defines.v //// -//// //// -//// //// -//// This file is part of the Advanced Debug Interface. //// -//// //// -//// Author(s): //// -//// Nathan Yawn (nathan.yawn@opencores.org) //// -//// //// -//// //// -//// //// -////////////////////////////////////////////////////////////////////// -//// //// -//// Copyright (C) 2008 Authors //// -//// //// -//// This source file may be used and distributed without //// -//// restriction provided that this copyright statement is not //// -//// removed from the file and that any derivative work contains //// -//// the original copyright notice and the associated disclaimer. //// -//// //// -//// This source file is free software; you can redistribute it //// -//// and/or modify it under the terms of the GNU Lesser General //// -//// Public License as published by the Free Software Foundation; //// -//// either version 2.1 of the License, or (at your option) any //// -//// later version. //// -//// //// -//// This source is distributed in the hope that it will be //// -//// useful, but WITHOUT ANY WARRANTY; without even the implied //// -//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// -//// PURPOSE. See the GNU Lesser General Public License for more //// -//// details. //// -//// //// -//// You should have received a copy of the GNU Lesser General //// -//// Public License along with this source; if not, download it //// -//// from http://www.opencores.org/lgpl.shtml //// -//// //// -////////////////////////////////////////////////////////////////////// -// -// CVS Revision History -// -// $Log: adbg_defines.v,v $ -// Revision 1.2 2009/05/17 20:54:56 Nathan -// Changed email address to opencores.org -// -// Revision 1.1 2008/07/22 20:28:30 Nathan -// Changed names of all files and modules (prefixed an a, for advanced). Cleanup, indenting. No functional changes. -// -// Revision 1.5 2008/07/06 20:02:53 Nathan -// Fixes for synthesis with Xilinx ISE (also synthesizable with -// Quartus II 7.0). Ran through dos2unix. -// -// Revision 1.4 2008/06/30 20:09:20 Nathan -// Removed code to select top-level module as active (it served no -// purpose). Re-numbered modules, requiring changes to testbench and software driver. -// - -// Length of the MODULE ID register -`define DBG_TOP_MODULE_ID_LENGTH 2 - -// How many modules can be supported by the module id length -`define DBG_TOP_MAX_MODULES 4 - -// Chains -`define DBG_TOP_WISHBONE_DEBUG_MODULE 2'h0 -`define DBG_TOP_CPU0_DEBUG_MODULE 2'h1 -`define DBG_TOP_CPU1_DEBUG_MODULE 2'h2 - -// Length of data -`define DBG_TOP_MODULE_DATA_LEN 53 - - -// If WISHBONE sub-module is supported uncomment the folowing line -`define DBG_WISHBONE_SUPPORTED - -// If CPU_0 sub-module is supported uncomment the folowing line -`define DBG_CPU0_SUPPORTED - -// If CPU_1 sub-module is supported uncomment the folowing line -//`define DBG_CPU1_SUPPORTED - - Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/rtl/verilog/adbg_wb_module.v =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/rtl/verilog/adbg_wb_module.v (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/rtl/verilog/adbg_wb_module.v (nonexistent) @@ -1,736 +0,0 @@ -////////////////////////////////////////////////////////////////////// -//// //// -//// adbg_wb_module.v //// -//// //// -//// //// -//// This file is part of the SoC Advanced Debug Interface. //// -//// //// -//// Author(s): //// -//// Nathan Yawn (nathan.yawn@opencores.org) //// -//// //// -//// //// -//// //// -////////////////////////////////////////////////////////////////////// -//// //// -//// Copyright (C) 2008 Authors //// -//// //// -//// This source file may be used and distributed without //// -//// restriction provided that this copyright statement is not //// -//// removed from the file and that any derivative work contains //// -//// the original copyright notice and the associated disclaimer. //// -//// //// -//// This source file is free software; you can redistribute it //// -//// and/or modify it under the terms of the GNU Lesser General //// -//// Public License as published by the Free Software Foundation; //// -//// either version 2.1 of the License, or (at your option) any //// -//// later version. //// -//// //// -//// This source is distributed in the hope that it will be //// -//// useful, but WITHOUT ANY WARRANTY; without even the implied //// -//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// -//// PURPOSE. See the GNU Lesser General Public License for more //// -//// details. //// -//// //// -//// You should have received a copy of the GNU Lesser General //// -//// Public License along with this source; if not, download it //// -//// from http://www.opencores.org/lgpl.shtml //// -//// //// -////////////////////////////////////////////////////////////////////// -// -// CVS Revision History -// -// $Log: adbg_wb_module.v,v $ -// Revision 1.2 2009/05/17 20:54:57 Nathan -// Changed email address to opencores.org -// -// Revision 1.1 2008/07/22 20:28:33 Nathan -// Changed names of all files and modules (prefixed an a, for advanced). Cleanup, indenting. No functional changes. -// -// Revision 1.12 2008/07/11 08:13:30 Nathan -// Latch opcode on posedge, like other signals. This fixes a problem when -// the module is used with a Xilinx BSCAN TAP. Added signals to allow modules -// to inhibit latching of a new active module by the top module. This allows -// the sub-modules to force the top level module to ignore the command present -// in the input shift register after e.g. a burst read. -// - - -`include "adbg_wb_defines.v" - -// Top module -module adbg_wb_module ( - // JTAG signals - tck_i, - module_tdo_o, - tdi_i, - - // TAP states - capture_dr_i, - shift_dr_i, - update_dr_i, - - data_register_i, // the data register is at top level, shared between all modules - module_select_i, - top_inhibit_o, - rst_i, - - // WISHBONE common signals - wb_clk_i, - - // WISHBONE master interface - wb_adr_o, wb_dat_o, wb_dat_i, wb_cyc_o, wb_stb_o, wb_sel_o, - wb_we_o, wb_ack_i, wb_cab_o, wb_err_i, wb_cti_o, wb_bte_o - - ); - - // JTAG signals - input tck_i; - output module_tdo_o; - input tdi_i; // This is only used by the CRC module - data_register_i[MSB] is delayed a cycle - - // TAP states - input capture_dr_i; - input shift_dr_i; - input update_dr_i; - - input [52:0] data_register_i; - input module_select_i; - output top_inhibit_o; - input rst_i; - - // WISHBONE master interface - input wb_clk_i; - output [31:0] wb_adr_o; - output [31:0] wb_dat_o; - input [31:0] wb_dat_i; - output wb_cyc_o; - output wb_stb_o; - output [3:0] wb_sel_o; - output wb_we_o; - input wb_ack_i; - output wb_cab_o; - input wb_err_i; - output [2:0] wb_cti_o; - output [1:0] wb_bte_o; - //reg wb_cyc_o; - - // Declare inputs / outputs as wires / registers - reg module_tdo_o; - reg top_inhibit_o; - - - // Registers to hold state etc. - reg [31:0] address_counter; // Holds address for next Wishbone access - reg [5:0] bit_count; // How many bits have been shifted in/out - reg [15:0] word_count; // bytes remaining in current burst command - reg [3:0] operation; // holds the current command (rd/wr, word size) - reg [32:0] data_out_shift_reg; // 32 bits to accomodate the internal_reg_error - reg [`DBG_WB_REGSELECT_SIZE-1:0] internal_register_select; // Holds index of currently selected register - reg [32:0] internal_reg_error; // WB error module internal register. 32 bit address + error bit (LSB) - - - // Control signals for the various counters / registers / state machines - reg addr_sel; // Selects data for address_counter. 0 = data_register_i, 1 = incremented address count - reg addr_ct_en; // Enable signal for address counter register - reg op_reg_en; // Enable signal for 'operation' register - reg bit_ct_en; // enable bit counter - reg bit_ct_rst; // reset (zero) bit count register - reg word_ct_sel; // Selects data for byte counter. 0 = data_register_i, 1 = decremented byte count - reg word_ct_en; // Enable byte counter register - reg out_reg_ld_en; // Enable parallel load of data_out_shift_reg - reg out_reg_shift_en; // Enable shift of data_out_shift_reg - reg out_reg_data_sel; // 0 = BIU data, 1 = internal register data - reg [1:0] tdo_output_sel; // Selects signal to send to TDO. 0 = ready bit, 1 = output register, 2 = CRC match, 3 = CRC shift reg. - reg biu_strobe; // Indicates that the bus unit should latch data and start a transaction - reg crc_clr; // resets CRC module - reg crc_en; // does 1-bit iteration in CRC module - reg crc_in_sel; // selects incoming write data (=0) or outgoing read data (=1)as input to CRC module - reg crc_shift_en; // CRC reg is also it's own output shift register; this enables a shift - reg regsel_ld_en; // Reg. select register load enable - reg intreg_ld_en; // load enable for internal registers - reg error_reg_en; // Tells the error register to check for and latch a bus error - reg biu_clr_err; // Allows FSM to reset BIU, to clear the biu_err bit which may have been set on the last transaction of the last burst. - - // Status signals - wire word_count_zero; // true when byte counter is zero - wire bit_count_max; // true when bit counter is equal to current word size - wire module_cmd; // inverse of MSB of data_register_i. 1 means current cmd not for top level (but is for us) - wire biu_ready; // indicates that the BIU has finished the last command - wire biu_err; // indicates wishbone error during BIU transaction - wire burst_instruction; // True when the input_data_i reg has a valid burst instruction for this module - wire intreg_instruction; // True when the input_data_i reg has a valid internal register instruction - wire intreg_write; // True when the input_data_i reg has an internal register write op - reg rd_op; // True when operation in the opcode reg is a read, false when a write - wire crc_match; // indicates whether data_register_i matches computed CRC - wire bit_count_32; // true when bit count register == 32, for CRC after burst writes - - // Intermediate signals - reg [5:0] word_size_bits; // 8,16, or 32. Decoded from 'operation' - reg [2:0] word_size_bytes; // 1,2, or 4 - wire [32:0] incremented_address; // value of address counter plus 'word_size' - wire [31:0] data_to_addr_counter; // output of the mux in front of the address counter inputs - wire [15:0] data_to_word_counter; // output of the mux in front of the byte counter input - wire [15:0] decremented_word_count; - wire [31:0] address_data_in; // from data_register_i - wire [15:0] count_data_in; // from data_register_i - wire [3:0] operation_in; // from data_register_i - wire [31:0] data_to_biu; // from data_register_i - wire [31:0] data_from_biu; // to data_out_shift_register - wire [31:0] crc_data_out; // output of CRC module, to output shift register - wire crc_data_in; // input to CRC module, either data_register_i[52] or data_out_shift_reg[0] - wire crc_serial_out; - wire [`DBG_WB_REGSELECT_SIZE-1:0] reg_select_data; // from data_register_i, input to internal register select register - wire [32:0] out_reg_data; // parallel input to the output shift register - reg [32:0] data_from_internal_reg; // data from internal reg. MUX to output shift register - wire biu_rst; // logical OR of rst_i and biu_clr_err - - ///////////////////////////////////////////////// - // Combinatorial assignments - - assign module_cmd = ~(data_register_i[52]); - assign operation_in = data_register_i[51:48]; - assign address_data_in = data_register_i[47:16]; - assign count_data_in = data_register_i[15:0]; - assign data_to_biu = data_register_i[52:21]; - assign reg_select_data = data_register_i[47:(47-(`DBG_WB_REGSELECT_SIZE-1))]; - - //////////////////////////////////////////////// - // Operation decoder - - // These are only used before the operation is latched, so decode them from operation_in - assign burst_instruction = (~operation_in[3]) & (operation_in[0] | operation_in[1]); - assign intreg_instruction = ((operation_in == `DBG_WB_CMD_IREG_WR) | (operation_in == `DBG_WB_CMD_IREG_SEL)); - assign intreg_write = (operation_in == `DBG_WB_CMD_IREG_WR); - - - // This is decoded from the registered operation - always @ (operation) - begin - case(operation) - `DBG_WB_CMD_BWRITE8: - begin - word_size_bits <= 5'd7; // Bits is actually bits-1, to make the FSM easier - word_size_bytes <= 3'd1; - rd_op <= 1'b0; - end - `DBG_WB_CMD_BWRITE16: - begin - word_size_bits <= 5'd15; // Bits is actually bits-1, to make the FSM easier - word_size_bytes <= 3'd2; - rd_op <= 1'b0; - end - `DBG_WB_CMD_BWRITE32: - begin - word_size_bits <= 5'd31; // Bits is actually bits-1, to make the FSM easier - word_size_bytes <= 3'd4; - rd_op <= 1'b0; - end - `DBG_WB_CMD_BREAD8: - begin - word_size_bits <= 5'd7; // Bits is actually bits-1, to make the FSM easier - word_size_bytes <= 3'd1; - rd_op <= 1'b1; - end - `DBG_WB_CMD_BREAD16: - begin - word_size_bits <= 5'd15; // Bits is actually bits-1, to make the FSM easier - word_size_bytes <= 3'd2; - rd_op <= 1'b1; - end - `DBG_WB_CMD_BREAD32: - begin - word_size_bits <= 5'd31; // Bits is actually bits-1, to make the FSM easier - word_size_bytes <= 3'd4; - rd_op <= 1'b1; - end - default: - begin - word_size_bits <= 5'hXX; - word_size_bytes <= 3'hX; - rd_op <= 1'bX; - end - endcase - end - - - //////////////////////////////////////////////// - // Module-internal register select register (no, that's not redundant.) - // Also internal register output MUX - - always @ (posedge tck_i or posedge rst_i) - begin - if(rst_i) internal_register_select = 1'h0; - else if(regsel_ld_en) internal_register_select = reg_select_data; - end - - // This is completely unnecessary here, since the WB module has only 1 internal - // register. However, to make the module expandable, it is included anyway. - always @ (internal_register_select or internal_reg_error) - begin - case(internal_register_select) - `DBG_WB_INTREG_ERROR: data_from_internal_reg = internal_reg_error; - default: data_from_internal_reg = internal_reg_error; - endcase - end - - - - //////////////////////////////////////////////////////////////////// - // Module-internal registers - // These have generic read/write/select code, but - // individual registers may have special behavior, defined here. - - // This is the bus error register, which traps WB errors - // We latch every new BIU address in the upper 32 bits, so we always have the address for the transaction which - // generated the error (the address counter might increment, esp. for writes) - // We stop latching addresses when the error bit (bit 0) is set. Keep the error bit set until it is - // manually cleared by a module internal register write. - // Note we use reg_select_data straight from data_register_i, rather than the latched version - - // otherwise, we would write the previously selected register. - - - always @ (posedge tck_i or posedge rst_i) - begin - if(rst_i) internal_reg_error = 33'h0; - else if(intreg_ld_en && (reg_select_data == `DBG_WB_INTREG_ERROR)) // do load from data input register - begin - if(data_register_i[46]) internal_reg_error[0] = 1'b0; // if write data is 1, reset the error bit - end - else if(error_reg_en && !internal_reg_error[0]) - begin - if(biu_err) internal_reg_error[0] = 1'b1; - else if(biu_strobe) internal_reg_error[32:1] = address_counter; - end - else if(biu_strobe && !internal_reg_error[0]) internal_reg_error[32:1] = address_counter; // When no error, latch this whether error_reg_en or not - end - - /////////////////////////////////////////////// - // Address counter - - assign data_to_addr_counter = (addr_sel) ? incremented_address[31:0] : address_data_in; - assign incremented_address = address_counter + word_size_bytes; - - // Technically, since this data (sometimes) comes from the input shift reg, we should latch on - // negedge, per the JTAG spec. But that makes things difficult when incrementing. - always @ (posedge tck_i or posedge rst_i) // JTAG spec specifies latch on negative edge in UPDATE_DR state - begin - if(rst_i) - address_counter <= 32'h0; - else if(addr_ct_en) - address_counter <= data_to_addr_counter; - end - - //////////////////////////////////////// - // Opcode latch - - always @ (posedge tck_i or posedge rst_i) // JTAG spec specifies latch on negative edge in UPDATE_DR state - begin - if(rst_i) - operation <= 4'h0; - else if(op_reg_en) - operation <= operation_in; - end - - ////////////////////////////////////// - // Bit counter - - always @ (posedge tck_i or posedge rst_i) - begin - - if(rst_i) bit_count <= 6'h0; - else if(bit_ct_rst) bit_count <= 6'h0; - else if(bit_ct_en) bit_count <= bit_count + 6'h1; - - end - - assign bit_count_max = (bit_count == word_size_bits) ? 1'b1 : 1'b0 ; - assign bit_count_32 = (bit_count == 6'h20) ? 1'b1 : 1'b0; - - //////////////////////////////////////// - // Word counter - - assign data_to_word_counter = (word_ct_sel) ? decremented_word_count : count_data_in; - assign decremented_word_count = word_count - 16'h1; - - // Technically, since this data (sometimes) comes from the input shift reg, we should latch on - // negedge, per the JTAG spec. But that makes things difficult when incrementing. - always @ (posedge tck_i or posedge rst_i) // JTAG spec specifies latch on negative edge in UPDATE_DR state - begin - if(rst_i) - word_count <= 16'h0; - else if(word_ct_en) - word_count <= data_to_word_counter; - end - - assign word_count_zero = (word_count == 16'h0); - - ///////////////////////////////////////////////////// - // Output register and TDO output MUX - - assign out_reg_data = (out_reg_data_sel) ? data_from_internal_reg : {1'b0,data_from_biu}; - - always @ (posedge tck_i or posedge rst_i) - begin - if(rst_i) data_out_shift_reg <= 33'h0; - else if(out_reg_ld_en) data_out_shift_reg <= out_reg_data; - else if(out_reg_shift_en) data_out_shift_reg <= {1'b0, data_out_shift_reg[32:1]}; - end - - - always @ (tdo_output_sel or data_out_shift_reg[0] or biu_ready or crc_match or crc_serial_out) - begin - if(tdo_output_sel == 2'h0) module_tdo_o <= biu_ready; - else if(tdo_output_sel == 2'h1) module_tdo_o <= data_out_shift_reg[0]; - else if(tdo_output_sel == 2'h2) module_tdo_o <= crc_match; - else module_tdo_o <= crc_serial_out; - end - - //////////////////////////////////////// - // Bus Interface Unit - // It is assumed that the BIU has internal registers, and will - // latch address, operation, and write data on rising clock edge - // when strobe is asserted - - assign biu_rst = rst_i | biu_clr_err; - - adbg_wb_biu wb_biu_i - ( - // Debug interface signals - .tck_i (tck_i), - .rst_i (biu_rst), - .data_i (data_to_biu), - .data_o (data_from_biu), - .addr_i (address_counter), - .strobe_i (biu_strobe), - .rd_wrn_i (rd_op), // If 0, then write op - .rdy_o (biu_ready), - .err_o (biu_err), - .word_size_i (word_size_bytes), - - // Wishbone signals - .wb_clk_i (wb_clk_i), - .wb_adr_o (wb_adr_o), - .wb_dat_o (wb_dat_o), - .wb_dat_i (wb_dat_i), - .wb_cyc_o (wb_cyc_o), - .wb_stb_o (wb_stb_o), - .wb_sel_o (wb_sel_o), - .wb_we_o (wb_we_o), - .wb_ack_i (wb_ack_i), - .wb_cab_o (wb_cab_o), - .wb_err_i (wb_err_i), - .wb_cti_o (wb_cti_o), - .wb_bte_o (wb_bte_o) - ); - - ///////////////////////////////////// - // CRC module - - assign crc_data_in = (crc_in_sel) ? tdi_i : data_out_shift_reg[0]; // MUX, write or read data - - adbg_crc32 wb_crc_i - ( - .clk(tck_i), - .data(crc_data_in), - .enable(crc_en), - .shift(crc_shift_en), - .clr(crc_clr), - .rst(rst_i), - .crc_out(crc_data_out), - .serial_out(crc_serial_out) - ); - - assign crc_match = (data_register_i[52:21] == crc_data_out) ? 1'b1 : 1'b0; - - //////////////////////////////////////// - // Control FSM - - // Definition of machine state values. - // Don't worry too much about the state encoding, the synthesis tool - // will probably re-encode it anyway. - -`define STATE_idle 4'h0 -`define STATE_Rbegin 4'h1 -`define STATE_Rready 4'h2 -`define STATE_Rstatus 4'h3 -`define STATE_Rburst 4'h4 -`define STATE_Wready 4'h5 -`define STATE_Wwait 4'h6 -`define STATE_Wburst 4'h7 -`define STATE_Wstatus 4'h8 -`define STATE_Rcrc 4'h9 -`define STATE_Wcrc 4'ha -`define STATE_Wmatch 4'hb - - reg [3:0] module_state; // FSM state - reg [3:0] module_next_state; // combinatorial signal, not actually a register - - - - // sequential part of the FSM - always @ (posedge tck_i or posedge rst_i) - begin - if(rst_i) - module_state <= `STATE_idle; - else - module_state <= module_next_state; - end - - - // Determination of next state; purely combinatorial - always @ (module_state or module_select_i or module_cmd or update_dr_i or capture_dr_i or operation_in[2] - or word_count_zero or bit_count_max or data_register_i[52] or bit_count_32 or biu_ready or burst_instruction) - begin - case(module_state) - `STATE_idle: - begin - if(module_cmd && module_select_i && update_dr_i && burst_instruction && operation_in[2]) module_next_state <= `STATE_Rbegin; - else if(module_cmd && module_select_i && update_dr_i && burst_instruction) module_next_state <= `STATE_Wready; - else module_next_state <= `STATE_idle; - end - - `STATE_Rbegin: - begin - if(word_count_zero) module_next_state <= `STATE_idle; // set up a burst of size 0, illegal. - else module_next_state <= `STATE_Rready; - end - `STATE_Rready: - begin - if(module_select_i && capture_dr_i) module_next_state <= `STATE_Rstatus; - else module_next_state <= `STATE_Rready; - end - `STATE_Rstatus: - begin - if(update_dr_i) module_next_state <= `STATE_idle; - else if (biu_ready) module_next_state <= `STATE_Rburst; - else module_next_state <= `STATE_Rstatus; - end - `STATE_Rburst: - begin - if(update_dr_i) module_next_state <= `STATE_idle; - else if(bit_count_max && word_count_zero) module_next_state <= `STATE_Rcrc; - else if(bit_count_max) module_next_state <= `STATE_Rstatus; - else module_next_state <= `STATE_Rburst; - end - `STATE_Rcrc: - begin - if(update_dr_i) module_next_state <= `STATE_idle; - // This doubles as the 'recovery' state, so stay here until update_dr_i. - else module_next_state <= `STATE_Rcrc; - end - - `STATE_Wready: - begin - if(word_count_zero) module_next_state <= `STATE_idle; - else if(module_select_i && capture_dr_i) module_next_state <= `STATE_Wwait; - else module_next_state <= `STATE_Wready; - end - `STATE_Wwait: - begin - if(update_dr_i) module_next_state <= `STATE_idle; // client terminated early - else if(module_select_i && data_register_i[52]) module_next_state <= `STATE_Wburst; // Got a start bit - else module_next_state <= `STATE_Wwait; - end - `STATE_Wburst: - begin - if(update_dr_i) module_next_state <= `STATE_idle; // client terminated early - else if(bit_count_max) module_next_state <= `STATE_Wstatus; - else module_next_state <= `STATE_Wburst; - end - `STATE_Wstatus: - begin - if(update_dr_i) module_next_state <= `STATE_idle; // client terminated early - else if(word_count_zero) module_next_state <= `STATE_Wcrc; - // can't wait until bus ready if multiple devices in chain... - // Would have to read postfix_bits, then send another start bit and push it through - // prefix_bits...potentially very inefficient. - else module_next_state <= `STATE_Wburst; - end - - `STATE_Wcrc: - begin - if(update_dr_i) module_next_state <= `STATE_idle; // client terminated early - else if(bit_count_32) module_next_state <= `STATE_Wmatch; - else module_next_state <= `STATE_Wcrc; - end - - `STATE_Wmatch: - begin - if(update_dr_i) module_next_state <= `STATE_idle; - // This doubles as our recovery state, stay here until update_dr_i - else module_next_state <= `STATE_Wmatch; - end - - default: module_next_state <= `STATE_idle; // shouldn't actually happen... - endcase - end - - - // Outputs of state machine, pure combinatorial - always @ (module_state or module_next_state or module_select_i or update_dr_i or capture_dr_i or shift_dr_i or operation_in[2] - or word_count_zero or bit_count_max or data_register_i[52] or biu_ready or intreg_instruction or module_cmd - or intreg_write or decremented_word_count) - begin - // Default everything to 0, keeps the case statement simple - addr_sel <= 1'b1; // Selects data for address_counter. 0 = data_register_i, 1 = incremented address count - addr_ct_en <= 1'b0; // Enable signal for address counter register - op_reg_en <= 1'b0; // Enable signal for 'operation' register - bit_ct_en <= 1'b0; // enable bit counter - bit_ct_rst <= 1'b0; // reset (zero) bit count register - word_ct_sel <= 1'b1; // Selects data for byte counter. 0 = data_register_i, 1 = decremented byte count - word_ct_en <= 1'b0; // Enable byte counter register - out_reg_ld_en <= 1'b0; // Enable parallel load of data_out_shift_reg - out_reg_shift_en <= 1'b0; // Enable shift of data_out_shift_reg - tdo_output_sel <= 2'b1; // 1 = data reg, 0 = biu_ready, 2 = crc_match, 3 = CRC data - biu_strobe <= 1'b0; - crc_clr <= 1'b0; - crc_en <= 1'b0; // add the input bit to the CRC calculation - crc_in_sel <= 1'b0; // 0 = tdo, 1 = tdi - crc_shift_en <= 1'b0; - out_reg_data_sel <= 1'b1; // 0 = BIU data, 1 = internal register data - regsel_ld_en <= 1'b0; - intreg_ld_en <= 1'b0; - error_reg_en <= 1'b0; - biu_clr_err <= 1'b0; // Set this to reset the BIU, clearing the biu_err bit - top_inhibit_o <= 1'b0; // Don't disable the top-level module in the default case - - case(module_state) - `STATE_idle: - begin - addr_sel <= 1'b0; - word_ct_sel <= 1'b0; - - // Operations for internal registers - stay in idle state - if(module_select_i & shift_dr_i) out_reg_shift_en <= 1'b1; // For module regs - if(module_select_i & capture_dr_i) - begin - out_reg_data_sel <= 1'b1; // select internal register data - out_reg_ld_en <= 1'b1; // For module regs - end - if(module_select_i & module_cmd & update_dr_i) begin - if(intreg_instruction) regsel_ld_en <= 1'b1; // For module regs - if(intreg_write) intreg_ld_en <= 1'b1; // For module regs - end - - // Burst operations - if(module_next_state != `STATE_idle) begin // Do the same to receive read or write opcode - addr_ct_en <= 1'b1; - op_reg_en <= 1'b1; - bit_ct_rst <= 1'b1; - word_ct_en <= 1'b1; - crc_clr <= 1'b1; - end - end - - `STATE_Rbegin: - begin - if(!word_count_zero) begin // Start a biu read transaction - biu_strobe <= 1'b1; - addr_sel <= 1'b1; - addr_ct_en <= 1'b1; - end - end - - `STATE_Rready: - ; // Just a wait state - - `STATE_Rstatus: - begin - tdo_output_sel <= 2'h0; - top_inhibit_o <= 1'b1; // in case of early termination - - if (module_next_state == `STATE_Rburst) begin - error_reg_en <= 1'b1; // Check the wb_error bit - out_reg_data_sel <= 1'b0; // select BIU data - out_reg_ld_en <= 1'b1; - bit_ct_rst <= 1'b1; - word_ct_sel <= 1'b1; - word_ct_en <= 1'b1; - if(!(decremented_word_count == 0) && !word_count_zero) begin // Start a biu read transaction - biu_strobe <= 1'b1; - addr_sel <= 1'b1; - addr_ct_en <= 1'b1; - end - end - end - - `STATE_Rburst: - begin - tdo_output_sel <= 2'h1; - out_reg_shift_en <= 1'b1; - bit_ct_en <= 1'b1; - crc_en <= 1'b1; - crc_in_sel <= 1'b0; // read data in output shift register LSB (tdo) - top_inhibit_o <= 1'b1; // in case of early termination - end - - `STATE_Rcrc: - begin - // Just shift out the data, don't bother counting, we don't move on until update_dr_i - tdo_output_sel <= 2'h3; - crc_shift_en <= 1'b1; - top_inhibit_o <= 1'b1; - end - - `STATE_Wready: - ; // Just a wait state - - `STATE_Wwait: - begin - tdo_output_sel <= 2'h1; - top_inhibit_o <= 1'b1; // in case of early termination - if(module_next_state == `STATE_Wburst) begin - biu_clr_err <= 1'b1; // If error occurred on last transaction of last burst, biu_err is still set. Clear it. - bit_ct_en <= 1'b1; - word_ct_sel <= 1'b1; // Pre-decrement the byte count - word_ct_en <= 1'b1; - crc_en <= 1'b1; // CRC gets tdi_i, which is 1 cycle ahead of data_register_i, so we need the bit there now in the CRC - crc_in_sel <= 1'b1; // read data from tdi_i - end - end - - `STATE_Wburst: - begin - bit_ct_en <= 1'b1; - tdo_output_sel <= 2'h1; - crc_en <= 1'b1; - crc_in_sel <= 1'b1; // read data from tdi_i - top_inhibit_o <= 1'b1; // in case of early termination - end - - `STATE_Wstatus: - begin - tdo_output_sel <= 2'h0; // Send the status bit to TDO - error_reg_en <= 1'b1; // Check the wb_error bit - // start transaction - biu_strobe <= 1'b1; // Start a BIU transaction - word_ct_sel <= 1'b1; // Decrement the byte count - word_ct_en <= 1'b1; - bit_ct_rst <= 1'b1; // Zero the bit count - addr_ct_en <= 1'b1; // Increment thte address counter - top_inhibit_o <= 1'b1; // in case of early termination - end - - `STATE_Wcrc: - begin - bit_ct_en <= 1'b1; - top_inhibit_o <= 1'b1; // in case of early termination - if(module_next_state == `STATE_Wmatch) tdo_output_sel <= 2'h2; // This is when the 'match' bit is actually read - end - - `STATE_Wmatch: - begin - tdo_output_sel <= 2'h2; - top_inhibit_o <= 1'b1; - // Bit of a hack here...an error on the final write won't be detected in STATE_Wstatus like the rest, - // so we assume the bus transaction is done and check it / latch it into the error register here. - if(module_next_state == `STATE_idle) error_reg_en <= 1'b1; - end - - default: ; - endcase - end - - -endmodule - Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/rtl/verilog/adbg_or1k_module.v =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/rtl/verilog/adbg_or1k_module.v (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/rtl/verilog/adbg_or1k_module.v (nonexistent) @@ -1,672 +0,0 @@ -////////////////////////////////////////////////////////////////////// -//// //// -//// adbg_or1k_module.v //// -//// //// -//// //// -//// This file is part of the SoC Advanced Debug Interface. //// -//// //// -//// Author(s): //// -//// Nathan Yawn (nathan.yawn@opencores.org) //// -//// //// -//// //// -//// //// -////////////////////////////////////////////////////////////////////// -//// //// -//// Copyright (C) 2008 Authors //// -//// //// -//// This source file may be used and distributed without //// -//// restriction provided that this copyright statement is not //// -//// removed from the file and that any derivative work contains //// -//// the original copyright notice and the associated disclaimer. //// -//// //// -//// This source file is free software; you can redistribute it //// -//// and/or modify it under the terms of the GNU Lesser General //// -//// Public License as published by the Free Software Foundation; //// -//// either version 2.1 of the License, or (at your option) any //// -//// later version. //// -//// //// -//// This source is distributed in the hope that it will be //// -//// useful, but WITHOUT ANY WARRANTY; without even the implied //// -//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// -//// PURPOSE. See the GNU Lesser General Public License for more //// -//// details. //// -//// //// -//// You should have received a copy of the GNU Lesser General //// -//// Public License along with this source; if not, download it //// -//// from http://www.opencores.org/lgpl.shtml //// -//// //// -////////////////////////////////////////////////////////////////////// -// -// CVS Revision History -// -// $Log: adbg_or1k_module.v,v $ -// Revision 1.2 2009/05/17 20:54:56 Nathan -// Changed email address to opencores.org -// -// Revision 1.1 2008/07/22 20:28:31 Nathan -// Changed names of all files and modules (prefixed an a, for advanced). Cleanup, indenting. No functional changes. -// -// Revision 1.7 2008/07/11 08:13:29 Nathan -// Latch opcode on posedge, like other signals. This fixes a problem -// when the module is used with a Xilinx BSCAN TAP. Added signals to -// allow modules to inhibit latching of a new active module by the top -// module. This allows the sub-modules to force the top level module -// to ignore the command present in the input shift register after e.g. -// a burst read. -// - - -`include "adbg_or1k_defines.v" - -// Module interface -module adbg_or1k_module ( - // JTAG signals - tck_i, - module_tdo_o, - tdi_i, - - // TAP states - capture_dr_i, - shift_dr_i, - update_dr_i, - - data_register_i, // the data register is at top level, shared between all modules - module_select_i, - top_inhibit_o, - rst_i, - - // Interfate to the OR1K debug unit - cpu_clk_i, - cpu_addr_o, - cpu_data_i, - cpu_data_o, - cpu_bp_i, - cpu_stall_o, - cpu_stb_o, - cpu_we_o, - cpu_ack_i, - cpu_rst_o - ); - - // JTAG signals - input tck_i; - output module_tdo_o; - input tdi_i; // This is only used by the CRC module - data_register_i[MSB] is delayed a cycle - - // TAP states - input capture_dr_i; - input shift_dr_i; - input update_dr_i; - - input [52:0] data_register_i; - input module_select_i; - output top_inhibit_o; - input rst_i; - - // WISHBONE master interface - input cpu_clk_i; // 'bus' style interface to SPRs - output [31:0] cpu_addr_o; - input [31:0] cpu_data_i; - output [31:0] cpu_data_o; - output cpu_stb_o; - output cpu_we_o; - input cpu_ack_i; - output cpu_rst_o; // control lines - input cpu_bp_i; - output cpu_stall_o; - - // Declare inputs / outputs as wires / registers - reg module_tdo_o; - reg top_inhibit_o; - - - // Registers to hold state etc. - reg [31:0] address_counter; // Holds address for next Wishbone access - reg [5:0] bit_count; // How many bits have been shifted in/out - reg [15:0] word_count; // bytes remaining in current burst command - reg [3:0] operation; // holds the current command (rd/wr, word size) - reg [31:0] data_out_shift_reg; // parallel-load output shift register - reg [`DBG_OR1K_REGSELECT_SIZE-1:0] internal_register_select; // Holds index of currently selected register - wire [1:0] internal_reg_status; // Holds CPU stall and reset status - signal is output of separate module - - - // Control signals for the various counters / registers / state machines - reg addr_sel; // Selects data for address_counter. 0 = data_register_i, 1 = incremented address count - reg addr_ct_en; // Enable signal for address counter register - reg op_reg_en; // Enable signal for 'operation' register - reg bit_ct_en; // enable bit counter - reg bit_ct_rst; // reset (zero) bit count register - reg word_ct_sel; // Selects data for byte counter. 0 = data_register_i, 1 = decremented byte count - reg word_ct_en; // Enable byte counter register - reg out_reg_ld_en; // Enable parallel load of data_out_shift_reg - reg out_reg_shift_en; // Enable shift of data_out_shift_reg - reg out_reg_data_sel; // 0 = BIU data, 1 = internal register data - reg [1:0] tdo_output_sel; // Selects signal to send to TDO. 0 = ready bit, 1 = output register, 2 = CRC match, 3 = CRC shift reg. - reg biu_strobe; // Indicates that the bus unit should latch data and start a transaction - reg crc_clr; // resets CRC module - reg crc_en; // does 1-bit iteration in CRC module - reg crc_in_sel; // selects incoming write data (=0) or outgoing read data (=1)as input to CRC module - reg crc_shift_en; // CRC reg is also it's own output shift register; this enables a shift - reg regsel_ld_en; // Reg. select register load enable - reg intreg_ld_en; // load enable for internal registers - - - // Status signals - wire word_count_zero; // true when byte counter is zero - wire bit_count_max; // true when bit counter is equal to current word size - wire module_cmd; // inverse of MSB of data_register_i. 1 means current cmd not for top level (but is for us) - wire biu_ready; // indicates that the BIU has finished the last command - wire burst_instruction; // True when the input_data_i reg has a valid burst instruction for this module - wire intreg_instruction; // True when the input_data_i reg has a valid internal register instruction - wire intreg_write; // True when the input_data_i reg has an internal register write op - wire rd_op; // True when operation in the opcode reg is a read, false when a write - wire crc_match; // indicates whether data_register_i matches computed CRC - wire bit_count_32; // true when bit count register == 32, for CRC after burst writes - - // Intermediate signals - wire [5:0] word_size_bits; // 8,16, or 32. Decoded from 'operation' - wire [2:0] address_increment; // How much to add to the address counter each iteration - wire [32:0] incremented_address; // value of address counter plus 'word_size' - wire [31:0] data_to_addr_counter; // output of the mux in front of the address counter inputs - wire [15:0] data_to_word_counter; // output of the mux in front of the byte counter input - wire [15:0] decremented_word_count; - wire [31:0] address_data_in; // from data_register_i - wire [15:0] count_data_in; // from data_register_i - wire [3:0] operation_in; // from data_register_i - wire [31:0] data_to_biu; // from data_register_i - wire [31:0] data_from_biu; // to data_out_shift_register - wire [31:0] crc_data_out; // output of CRC module, to output shift register - wire crc_data_in; // input to CRC module, either data_register_i[52] or data_out_shift_reg[0] - wire crc_serial_out; - wire [`DBG_OR1K_REGSELECT_SIZE-1:0] reg_select_data; // from data_register_i, input to internal register select register - wire [31:0] out_reg_data; // parallel input to the output shift register - reg [31:0] data_from_internal_reg; // data from internal reg. MUX to output shift register - wire status_reg_wr; - - - ///////////////////////////////////////////////// - // Combinatorial assignments - - assign module_cmd = ~(data_register_i[52]); - assign operation_in = data_register_i[51:48]; - assign address_data_in = data_register_i[47:16]; - assign count_data_in = data_register_i[15:0]; - assign data_to_biu = data_register_i[52:21]; - assign reg_select_data = data_register_i[47:(47-(`DBG_OR1K_REGSELECT_SIZE-1))]; - - //////////////////////////////////////////////// - // Operation decoder - - // These are only used before the operation is latched, so decode them from operation_in - assign burst_instruction = (operation_in == `DBG_OR1K_CMD_BWRITE32) | (operation_in == `DBG_OR1K_CMD_BREAD32); - assign intreg_instruction = ((operation_in == `DBG_OR1K_CMD_IREG_WR) | (operation_in == `DBG_OR1K_CMD_IREG_SEL)); - assign intreg_write = (operation_in == `DBG_OR1K_CMD_IREG_WR); - - // These are constant, the CPU module only does 32-bit accesses - assign word_size_bits = 5'd31; // Bits is actually bits-1, to make the FSM easier - assign address_increment = 3'd1; // This is only used to increment the address. SPRs are word-addressed. - - // This is the only thing that actually needs to be saved and 'decoded' from the latched opcode - // It goes to the BIU each time a transaction is started. - assign rd_op = operation[2]; - - - //////////////////////////////////////////////// - // Module-internal register select register (no, that's not redundant.) - // Also internal register output MUX - - always @ (posedge tck_i or posedge rst_i) - begin - if(rst_i) internal_register_select = 1'h0; - else if(regsel_ld_en) internal_register_select = reg_select_data; - end - - // This is completely unnecessary here, since the module has only 1 internal - // register. However, to make the module expandable, it is included anyway. - always @ (internal_register_select or internal_reg_status) - begin - case(internal_register_select) - `DBG_OR1K_INTREG_STATUS: data_from_internal_reg = {30'h0, internal_reg_status}; - default: data_from_internal_reg = {30'h0, internal_reg_status}; - endcase - end - - - - //////////////////////////////////////////////////////////////////// - // Module-internal registers - // These have generic read/write/select code, but - // individual registers may have special behavior, defined here. - - // This is the status register, which holds the reset and stall states. - - assign status_reg_wr = (intreg_ld_en & (reg_select_data == `DBG_OR1K_INTREG_STATUS)); - - adbg_or1k_status_reg or1k_statusreg_i ( - .data_i(data_register_i[(47-`DBG_OR1K_REGSELECT_SIZE):(47-(`DBG_OR1K_REGSELECT_SIZE+1))]), - .we_i(status_reg_wr), - .tck_i(tck_i), - .bp_i(cpu_bp_i), - .rst_i(rst_i), - .cpu_clk_i(cpu_clk_i), - .ctrl_reg_o(internal_reg_status), - .cpu_stall_o(cpu_stall_o), - .cpu_rst_o(cpu_rst_o) - ); - - - /////////////////////////////////////////////// - // Address counter - - assign data_to_addr_counter = (addr_sel) ? incremented_address[31:0] : address_data_in; - assign incremented_address = address_counter + address_increment; - - // Technically, since this data (sometimes) comes from the input shift reg, we should latch on - // negedge, per the JTAG spec. But that makes things difficult when incrementing. - always @ (posedge tck_i or posedge rst_i) // JTAG spec specifies latch on negative edge in UPDATE_DR state - begin - if(rst_i) - address_counter <= 32'h0; - else if(addr_ct_en) - address_counter <= data_to_addr_counter; - end - - //////////////////////////////////////// - // Opcode latch - - always @ (posedge tck_i or posedge rst_i) // JTAG spec specifies latch on negative edge in UPDATE_DR state - begin - if(rst_i) - operation <= 4'h0; - else if(op_reg_en) - operation <= operation_in; - end - - ////////////////////////////////////// - // Bit counter - - always @ (posedge tck_i or posedge rst_i) - begin - - if(rst_i) bit_count <= 6'h0; - else if(bit_ct_rst) bit_count <= 6'h0; - else if(bit_ct_en) bit_count <= bit_count + 6'h1; - - end - - assign bit_count_max = (bit_count == word_size_bits) ? 1'b1 : 1'b0 ; - assign bit_count_32 = (bit_count == 6'h20) ? 1'b1 : 1'b0; - - //////////////////////////////////////// - // Word counter - - assign data_to_word_counter = (word_ct_sel) ? decremented_word_count : count_data_in; - assign decremented_word_count = word_count - 16'h1; - - // Technically, since this data (sometimes) comes from the input shift reg, we should latch on - // negedge, per the JTAG spec. But that makes things difficult when incrementing. - always @ (posedge tck_i or posedge rst_i) // JTAG spec specifies latch on negative edge in UPDATE_DR state - begin - if(rst_i) - word_count <= 16'h0; - else if(word_ct_en) - word_count <= data_to_word_counter; - end - - assign word_count_zero = (word_count == 16'h0); - - ///////////////////////////////////////////////////// - // Output register and TDO output MUX - - assign out_reg_data = (out_reg_data_sel) ? data_from_internal_reg : data_from_biu; - - always @ (posedge tck_i or posedge rst_i) - begin - if(rst_i) data_out_shift_reg <= 32'h0; - else if(out_reg_ld_en) data_out_shift_reg <= out_reg_data; - else if(out_reg_shift_en) data_out_shift_reg <= {1'b0, data_out_shift_reg[31:1]}; - end - - - always @ (tdo_output_sel or data_out_shift_reg[0] or biu_ready or crc_match or crc_serial_out) - begin - if(tdo_output_sel == 2'h0) module_tdo_o <= biu_ready; - else if(tdo_output_sel == 2'h1) module_tdo_o <= data_out_shift_reg[0]; - else if(tdo_output_sel == 2'h2) module_tdo_o <= crc_match; - else module_tdo_o <= crc_serial_out; - end - - //////////////////////////////////////// - // Bus Interface Unit (to OR1K SPR bus) - // It is assumed that the BIU has internal registers, and will - // latch address, operation, and write data on rising clock edge - // when strobe is asserted - - adbg_or1k_biu or1k_biu_i ( - // Debug interface signals - .tck_i (tck_i), - .rst_i (rst_i), - .data_i (data_to_biu), - .data_o (data_from_biu), - .addr_i (address_counter), - .strobe_i (biu_strobe), - .rd_wrn_i (rd_op), // If 0, then write op - .rdy_o (biu_ready), - // This bus has no error signal - - // OR1K SPR bus signals - .cpu_clk_i(cpu_clk_i), - .cpu_addr_o(cpu_addr_o), - .cpu_data_i(cpu_data_i), - .cpu_data_o(cpu_data_o), - .cpu_stb_o(cpu_stb_o), - .cpu_we_o(cpu_we_o), - .cpu_ack_i(cpu_ack_i) - ); - - - - ///////////////////////////////////// - // CRC module - - assign crc_data_in = (crc_in_sel) ? tdi_i : data_out_shift_reg[0]; // MUX, write or read data - - adbg_crc32 or1k_crc_i - ( - .clk(tck_i), - .data(crc_data_in), - .enable(crc_en), - .shift(crc_shift_en), - .clr(crc_clr), - .rst(rst_i), - .crc_out(crc_data_out), - .serial_out(crc_serial_out) - ); - - assign crc_match = (data_register_i[52:21] == crc_data_out) ? 1'b1 : 1'b0; - - //////////////////////////////////////// - // Control FSM - - // Definition of machine state values. - // Don't worry too much about the state encoding, the synthesis tool - // will probably re-encode it anyway. - -`define STATE_idle 4'h0 -`define STATE_Rbegin 4'h1 -`define STATE_Rready 4'h2 -`define STATE_Rstatus 4'h3 -`define STATE_Rburst 4'h4 -`define STATE_Wready 4'h5 -`define STATE_Wwait 4'h6 -`define STATE_Wburst 4'h7 -`define STATE_Wstatus 4'h8 -`define STATE_Rcrc 4'h9 -`define STATE_Wcrc 4'ha -`define STATE_Wmatch 4'hb - - reg [3:0] module_state; // FSM state - reg [3:0] module_next_state; // combinatorial signal, not actually a register - - - - // sequential part of the FSM - always @ (posedge tck_i or posedge rst_i) - begin - if(rst_i) - module_state <= `STATE_idle; - else - module_state <= module_next_state; - end - - - // Determination of next state; purely combinatorial - always @ (module_state or module_select_i or update_dr_i or capture_dr_i or shift_dr_i or operation_in[2] - or word_count_zero or bit_count_max or data_register_i[52] or bit_count_32 or biu_ready - or module_cmd or intreg_write or decremented_word_count or burst_instruction) - begin - case(module_state) - `STATE_idle: - begin - if(module_cmd && module_select_i && update_dr_i && burst_instruction && operation_in[2]) module_next_state <= `STATE_Rbegin; - else if(module_cmd && module_select_i && update_dr_i && burst_instruction) module_next_state <= `STATE_Wready; - else module_next_state <= `STATE_idle; - end - - `STATE_Rbegin: - begin - if(word_count_zero) module_next_state <= `STATE_idle; // set up a burst of size 0, illegal. - else module_next_state <= `STATE_Rready; - end - `STATE_Rready: - begin - if(module_select_i && capture_dr_i) module_next_state <= `STATE_Rstatus; - else module_next_state <= `STATE_Rready; - end - `STATE_Rstatus: - begin - if(update_dr_i) module_next_state <= `STATE_idle; - else if (biu_ready) module_next_state <= `STATE_Rburst; - else module_next_state <= `STATE_Rstatus; - end - `STATE_Rburst: - begin - if(update_dr_i) module_next_state <= `STATE_idle; - else if(bit_count_max && word_count_zero) module_next_state <= `STATE_Rcrc; - else if(bit_count_max) module_next_state <= `STATE_Rstatus; - else module_next_state <= `STATE_Rburst; - end - `STATE_Rcrc: - begin - if(update_dr_i) module_next_state <= `STATE_idle; - // This doubles as the 'recovery' state, so stay here until update_dr_i. - else module_next_state <= `STATE_Rcrc; - end - - `STATE_Wready: - begin - if(word_count_zero) module_next_state <= `STATE_idle; - else if(module_select_i && capture_dr_i) module_next_state <= `STATE_Wwait; - else module_next_state <= `STATE_Wready; - end - `STATE_Wwait: - begin - if(update_dr_i) module_next_state <= `STATE_idle; // client terminated early - else if(module_select_i && data_register_i[52]) module_next_state <= `STATE_Wburst; // Got a start bit - else module_next_state <= `STATE_Wwait; - end - `STATE_Wburst: - begin - if(update_dr_i) module_next_state <= `STATE_idle; // client terminated early - else if(bit_count_max) module_next_state <= `STATE_Wstatus; - else module_next_state <= `STATE_Wburst; - end - `STATE_Wstatus: - begin - if(update_dr_i) module_next_state <= `STATE_idle; // client terminated early - else if(word_count_zero) module_next_state <= `STATE_Wcrc; - // can't wait until bus ready if multiple devices in chain... - // Would have to read postfix_bits, then send another start bit and push it through - // prefix_bits...potentially very inefficient. - else module_next_state <= `STATE_Wburst; - end - - `STATE_Wcrc: - begin - if(update_dr_i) module_next_state <= `STATE_idle; // client terminated early - else if(bit_count_32) module_next_state <= `STATE_Wmatch; - else module_next_state <= `STATE_Wcrc; - end - - `STATE_Wmatch: - begin - if(update_dr_i) module_next_state <= `STATE_idle; - // This doubles as our recovery state, stay here until update_dr_i - else module_next_state <= `STATE_Wmatch; - end - - default: module_next_state <= `STATE_idle; // shouldn't actually happen... - endcase - end - - - // Outputs of state machine, pure combinatorial - always @ (module_state or module_next_state or module_select_i or update_dr_i or capture_dr_i or shift_dr_i or operation_in[2] - or word_count_zero or bit_count_max or data_register_i[52] or biu_ready or intreg_instruction - or module_cmd or intreg_write or decremented_word_count) - begin - // Default everything to 0, keeps the case statement simple - addr_sel <= 1'b1; // Selects data for address_counter. 0 = data_register_i, 1 = incremented address count - addr_ct_en <= 1'b0; // Enable signal for address counter register - op_reg_en <= 1'b0; // Enable signal for 'operation' register - bit_ct_en <= 1'b0; // enable bit counter - bit_ct_rst <= 1'b0; // reset (zero) bit count register - word_ct_sel <= 1'b1; // Selects data for byte counter. 0 = data_register_i, 1 = decremented byte count - word_ct_en <= 1'b0; // Enable byte counter register - out_reg_ld_en <= 1'b0; // Enable parallel load of data_out_shift_reg - out_reg_shift_en <= 1'b0; // Enable shift of data_out_shift_reg - tdo_output_sel <= 2'b1; // 1 = data reg, 0 = biu_ready, 2 = crc_match, 3 = CRC data - biu_strobe <= 1'b0; - crc_clr <= 1'b0; - crc_en <= 1'b0; // add the input bit to the CRC calculation - crc_in_sel <= 1'b0; // 0 = tdo, 1 = tdi - crc_shift_en <= 1'b0; - out_reg_data_sel <= 1'b1; // 0 = BIU data, 1 = internal register data - regsel_ld_en <= 1'b0; - intreg_ld_en <= 1'b0; - top_inhibit_o <= 1'b0; // Don't disable the top-level module in the default case - - case(module_state) - `STATE_idle: - begin - addr_sel <= 1'b0; - word_ct_sel <= 1'b0; - - // Operations for internal registers - stay in idle state - if(module_select_i & shift_dr_i) out_reg_shift_en <= 1'b1; // For module regs - if(module_select_i & capture_dr_i) - begin - out_reg_data_sel <= 1'b1; // select internal register data - out_reg_ld_en <= 1'b1; // For module regs - end - if(module_select_i & module_cmd & update_dr_i) begin - if(intreg_instruction) regsel_ld_en <= 1'b1; // For module regs - if(intreg_write) intreg_ld_en <= 1'b1; // For module regs - end - - // Burst operations - if(module_next_state != `STATE_idle) begin // Do the same to receive read or write opcode - addr_ct_en <= 1'b1; - op_reg_en <= 1'b1; - bit_ct_rst <= 1'b1; - word_ct_en <= 1'b1; - crc_clr <= 1'b1; - end - end - - `STATE_Rbegin: - begin - if(!word_count_zero) begin // Start a biu read transaction - biu_strobe <= 1'b1; - addr_sel <= 1'b1; - addr_ct_en <= 1'b1; - end - end - - `STATE_Rready: - ; // Just a wait state - - `STATE_Rstatus: - begin - tdo_output_sel <= 2'h0; - top_inhibit_o <= 1'b1; // in case of early termination - - if (module_next_state == `STATE_Rburst) begin - out_reg_data_sel <= 1'b0; // select BIU data - out_reg_ld_en <= 1'b1; - bit_ct_rst <= 1'b1; - word_ct_sel <= 1'b1; - word_ct_en <= 1'b1; - if(!(decremented_word_count == 0) && !word_count_zero) begin // Start a biu read transaction - biu_strobe <= 1'b1; - addr_sel <= 1'b1; - addr_ct_en <= 1'b1; - end - end - end - - `STATE_Rburst: - begin - tdo_output_sel <= 2'h1; - out_reg_shift_en <= 1'b1; - bit_ct_en <= 1'b1; - crc_en <= 1'b1; - crc_in_sel <= 1'b0; // read data in output shift register LSB (tdo) - top_inhibit_o <= 1'b1; // in case of early termination - end - - `STATE_Rcrc: - begin - // Just shift out the data, don't bother counting, we don't move on until update_dr_i - tdo_output_sel <= 2'h3; - crc_shift_en <= 1'b1; - top_inhibit_o <= 1'b1; - end - - `STATE_Wready: - ; // Just a wait state - - `STATE_Wwait: - begin - tdo_output_sel <= 2'h1; - top_inhibit_o <= 1'b1; // in case of early termination - if(module_next_state == `STATE_Wburst) begin - bit_ct_en <= 1'b1; - word_ct_sel <= 1'b1; // Pre-decrement the byte count - word_ct_en <= 1'b1; - crc_en <= 1'b1; // CRC gets tdi_i, which is 1 cycle ahead of data_register_i, so we need the bit there now in the CRC - crc_in_sel <= 1'b1; // read data from tdi_i - end - end - - `STATE_Wburst: - begin - bit_ct_en <= 1'b1; - tdo_output_sel <= 2'h1; - crc_en <= 1'b1; - crc_in_sel <= 1'b1; // read data from tdi_i - top_inhibit_o <= 1'b1; // in case of early termination - end - - `STATE_Wstatus: - begin - tdo_output_sel <= 2'h0; // Send the status bit to TDO - // start transaction - biu_strobe <= 1'b1; // Start a BIU transaction - word_ct_sel <= 1'b1; // Decrement the byte count - word_ct_en <= 1'b1; - bit_ct_rst <= 1'b1; // Zero the bit count - addr_ct_en <= 1'b1; // Increment thte address counter - top_inhibit_o <= 1'b1; // in case of early termination - end - - `STATE_Wcrc: - begin - bit_ct_en <= 1'b1; - top_inhibit_o <= 1'b1; // in case of early termination - if(module_next_state == `STATE_Wmatch) tdo_output_sel <= 2'h2; // This is when the 'match' bit is actually read - end - - `STATE_Wmatch: - begin - tdo_output_sel <= 2'h2; - top_inhibit_o <= 1'b1; // in case of early termination - end - - default: ; - endcase - end - - -endmodule - Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/rtl/verilog/adbg_top.v =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/rtl/verilog/adbg_top.v (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/rtl/verilog/adbg_top.v (nonexistent) @@ -1,386 +0,0 @@ -////////////////////////////////////////////////////////////////////// -//// //// -//// adbg_top.v //// -//// //// -//// //// -//// This file is part of the SoC Advanced Debug Interface. //// -//// //// -//// Author(s): //// -//// Nathan Yawn (nathan.yawn@opencores.org) //// -//// //// -//// //// -//// //// -////////////////////////////////////////////////////////////////////// -//// //// -//// Copyright (C) 2008 Authors //// -//// //// -//// This source file may be used and distributed without //// -//// restriction provided that this copyright statement is not //// -//// removed from the file and that any derivative work contains //// -//// the original copyright notice and the associated disclaimer. //// -//// //// -//// This source file is free software; you can redistribute it //// -//// and/or modify it under the terms of the GNU Lesser General //// -//// Public License as published by the Free Software Foundation; //// -//// either version 2.1 of the License, or (at your option) any //// -//// later version. //// -//// //// -//// This source is distributed in the hope that it will be //// -//// useful, but WITHOUT ANY WARRANTY; without even the implied //// -//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// -//// PURPOSE. See the GNU Lesser General Public License for more //// -//// details. //// -//// //// -//// You should have received a copy of the GNU Lesser General //// -//// Public License along with this source; if not, download it //// -//// from http://www.opencores.org/lgpl.shtml //// -//// //// -////////////////////////////////////////////////////////////////////// -// -// CVS Revision History -// -// $Log: adbg_top.v,v $ -// Revision 1.2 2009/05/17 20:54:56 Nathan -// Changed email address to opencores.org -// -// Revision 1.1 2008/07/22 20:28:32 Nathan -// Changed names of all files and modules (prefixed an a, for advanced). Cleanup, indenting. No functional changes. -// -// Revision 1.10 2008/07/11 08:13:29 Nathan -// Latch opcode on posedge, like other signals. This fixes a problem -// when the module is used with a Xilinx BSCAN TAP. Added signals to -// allow modules to inhibit latching of a new active module by the top -// module. This allows the sub-modules to force the top level module -// to ignore the command present in the input shift register after e.g. -// a burst read. -// -// Revision 1.7 2008/06/30 20:09:20 Nathan -// Removed code to select top-level module as active (it served no -// purpose). Re-numbered modules, requiring changes to testbench and -// software driver. -// - - -`include "adbg_defines.v" - - -// Top module -module adbg_top( - // JTAG signals - tck_i, - tdi_i, - tdo_o, - rst_i, - - - // TAP states - shift_dr_i, - pause_dr_i, - update_dr_i, - capture_dr_i, - - // Instructions - debug_select_i - - - `ifdef DBG_WISHBONE_SUPPORTED - // WISHBONE common signals - , - wb_clk_i, - - // WISHBONE master interface - wb_adr_o, - wb_dat_o, - wb_dat_i, - wb_cyc_o, - wb_stb_o, - wb_sel_o, - wb_we_o, - wb_ack_i, - wb_cab_o, - wb_err_i, - wb_cti_o, - wb_bte_o - `endif - - `ifdef DBG_CPU0_SUPPORTED - // CPU signals - , - cpu0_clk_i, - cpu0_addr_o, - cpu0_data_i, - cpu0_data_o, - cpu0_bp_i, - cpu0_stall_o, - cpu0_stb_o, - cpu0_we_o, - cpu0_ack_i, - cpu0_rst_o - `endif - - `ifdef DBG_CPU1_SUPPORTED - // CPU signals - , - cpu1_clk_i, - cpu1_addr_o, - cpu1_data_i, - cpu1_data_o, - cpu1_bp_i, - cpu1_stall_o, - cpu1_stb_o, - cpu1_we_o, - cpu1_ack_i, - cpu1_rst_o - `endif - - ); - - - // JTAG signals - input tck_i; - input tdi_i; - output tdo_o; - input rst_i; - - // TAP states - input shift_dr_i; - input pause_dr_i; - input update_dr_i; - input capture_dr_i; - - // Module select from TAP - input debug_select_i; - - `ifdef DBG_WISHBONE_SUPPORTED - input wb_clk_i; - output [31:0] wb_adr_o; - output [31:0] wb_dat_o; - input [31:0] wb_dat_i; - output wb_cyc_o; - output wb_stb_o; - output [3:0] wb_sel_o; - output wb_we_o; - input wb_ack_i; - output wb_cab_o; - input wb_err_i; - output [2:0] wb_cti_o; - output [1:0] wb_bte_o; - `endif - - `ifdef DBG_CPU0_SUPPORTED - // CPU signals - input cpu0_clk_i; - output [31:0] cpu0_addr_o; - input [31:0] cpu0_data_i; - output [31:0] cpu0_data_o; - input cpu0_bp_i; - output cpu0_stall_o; - output cpu0_stb_o; - output cpu0_we_o; - input cpu0_ack_i; - output cpu0_rst_o; - `endif - - `ifdef DBG_CPU1_SUPPORTED - input cpu1_clk_i; - output [31:0] cpu1_addr_o; - input [31:0] cpu1_data_i; - output [31:0] cpu1_data_o; - input cpu1_bp_i; - output cpu1_stall_o; - output cpu1_stb_o; - output cpu1_we_o; - input cpu1_ack_i; - output cpu1_rst_o; - `endif - - - reg tdo_o; - wire tdo_wb; - wire tdo_cpu0; - wire tdo_cpu1; - - - // Registers - reg [`DBG_TOP_MODULE_DATA_LEN-1:0] input_shift_reg; // 1 bit sel/cmd, 4 bit opcode, 32 bit address, 16 bit length = 53 bits - //reg output_shift_reg; // Just 1 bit for status (valid module selected) - reg [`DBG_TOP_MODULE_ID_LENGTH -1:0] module_id_reg; // Module selection register - - - // Control signals - wire select_cmd; // True when the command (registered at Update_DR) is for top level/module selection - wire [(`DBG_TOP_MODULE_ID_LENGTH - 1) : 0] module_id_in; // The part of the input_shift_register to be used as the module select data - reg [(`DBG_TOP_MAX_MODULES - 1) : 0] module_selects; // Select signals for the individual modules - wire select_inhibit; // OR of inhibit signals from sub-modules, prevents latching of a new module ID - wire [2:0] module_inhibit; // signals to allow submodules to prevent top level from latching new module ID - - /////////////////////////////////////// - // Combinatorial assignments - -assign select_cmd = input_shift_reg[52]; -assign module_id_in = input_shift_reg[51:50]; - -////////////////////////////////////////////////////////// -// Module select register and select signals - -always @ (posedge tck_i or posedge rst_i) -begin - if (rst_i) - module_id_reg <= 2'b0; - else if(debug_select_i && select_cmd && update_dr_i && !select_inhibit) // Chain select - module_id_reg <= module_id_in; -end - - -always @ (module_id_reg) -begin - module_selects <= `DBG_TOP_MODULE_ID_LENGTH'h0; - module_selects[module_id_reg] <= 1'b1; -end - -/////////////////////////////////////////////// -// Data input shift register - -always @ (posedge tck_i or posedge rst_i) -begin - if (rst_i) - input_shift_reg <= 53'h0; - else if(debug_select_i && shift_dr_i) - input_shift_reg <= {tdi_i, input_shift_reg[52:1]}; -end - - -////////////////////////////////////////////// -// Debug module instantiations - -`ifdef DBG_WISHBONE_SUPPORTED -// Connecting wishbone module -adbg_wb_module i_dbg_wb ( - // JTAG signals - .tck_i (tck_i), - .module_tdo_o (tdo_wb), - .tdi_i (tdi_i), - - // TAP states - .capture_dr_i (capture_dr_i), - .shift_dr_i (shift_dr_i), - .update_dr_i (update_dr_i), - - .data_register_i (input_shift_reg), - .module_select_i (module_selects[`DBG_TOP_WISHBONE_DEBUG_MODULE]), - .top_inhibit_o (module_inhibit[`DBG_TOP_WISHBONE_DEBUG_MODULE]), - .rst_i (rst_i), - - // WISHBONE common signals - .wb_clk_i (wb_clk_i), - - // WISHBONE master interface - .wb_adr_o (wb_adr_o), - .wb_dat_o (wb_dat_o), - .wb_dat_i (wb_dat_i), - .wb_cyc_o (wb_cyc_o), - .wb_stb_o (wb_stb_o), - .wb_sel_o (wb_sel_o), - .wb_we_o (wb_we_o), - .wb_ack_i (wb_ack_i), - .wb_cab_o (wb_cab_o), - .wb_err_i (wb_err_i), - .wb_cti_o (wb_cti_o), - .wb_bte_o (wb_bte_o) - ); -`else -assign tdo_wb = 1'b0; -assign module_inhibit[`DBG_TOP_WISHBONE_DEBUG_MODULE] = 1'b0; -`endif - - - -`ifdef DBG_CPU0_SUPPORTED -adbg_or1k_module i_dbg_cpu_or1k ( - // JTAG signals - .tck_i (tck_i), - .module_tdo_o (tdo_cpu0), - .tdi_i (tdi_i), - - // TAP states - .capture_dr_i (capture_dr_i), - .shift_dr_i (shift_dr_i), - .update_dr_i (update_dr_i), - - .data_register_i (input_shift_reg), - .module_select_i (module_selects[`DBG_TOP_CPU0_DEBUG_MODULE]), - .top_inhibit_o (module_inhibit[`DBG_TOP_CPU0_DEBUG_MODULE]), - .rst_i (rst_i), - - // CPU signals - .cpu_clk_i (cpu0_clk_i), - .cpu_addr_o (cpu0_addr_o), - .cpu_data_i (cpu0_data_i), - .cpu_data_o (cpu0_data_o), - .cpu_bp_i (cpu0_bp_i), - .cpu_stall_o (cpu0_stall_o), - .cpu_stb_o (cpu0_stb_o), - .cpu_we_o (cpu0_we_o), - .cpu_ack_i (cpu0_ack_i), - .cpu_rst_o (cpu0_rst_o) - ); -`else -assign tdo_cpu0 = 1'b0; -assign module_inhibit[`DBG_TOP_CPU0_DEBUG_MODULE] = 1'b0; -`endif // DBG_CPU0_SUPPORTED - - - -`ifdef DBG_CPU1_SUPPORTED -// Connecting cpu module -adbg_or1k_module i_dbg_cpu_8051 ( - // JTAG signals - .tck_i (tck_i), - .module_tdo_o (tdo_cpu1), - .tdi_i (tdi_i), - - // TAP states - .capture_dr_i (capture_dr_i), - .shift_dr_i (shift_dr_i), - .update_dr_i (update_dr_i), - - .data_register_i (input_shift_reg), - .module_select_i (module_selects[`DBG_TOP_CPU1_DEBUG_MODULE]), - .top_inhibit_o (module_inhibit[`DBG_TOP_CPU1_DEBUG_MODULE]), - .rst_i (rst_i), - - // CPU signals - .cpu_clk_i (cpu1_clk_i), - .cpu_addr_o (cpu1_addr_o), - .cpu_data_i (cpu1_data_i), - .cpu_data_o (cpu1_data_o), - .cpu_bp_i (cpu1_bp_i), - .cpu_stall_o (cpu1_stall_o), - .cpu_stb_o (cpu1_stb_o), - .cpu_we_o (cpu1_we_o), - .cpu_ack_i (cpu1_ack_i), - .cpu_rst_o (cpu1_rst_o) - ); -`else -assign tdo_cpu1 = 1'b0; -assign module_inhibit[`DBG_TOP_CPU1_DEBUG_MODULE] = 1'b0; -`endif - -assign select_inhibit = |module_inhibit; - -///////////////////////////////////////////////// -// TDO output MUX - -always @ (module_id_reg or tdo_wb or tdo_cpu0 or tdo_cpu1) -begin - case (module_id_reg) - `DBG_TOP_WISHBONE_DEBUG_MODULE: tdo_o <= tdo_wb; - `DBG_TOP_CPU0_DEBUG_MODULE: tdo_o <= tdo_cpu0; - `DBG_TOP_CPU1_DEBUG_MODULE: tdo_o <= tdo_cpu1; - default: tdo_o <= 1'b0; - endcase - -end - - -endmodule Index: ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/rtl/verilog/adbg_wb_defines.v =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/rtl/verilog/adbg_wb_defines.v (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/adv_dbg_if/rtl/verilog/adbg_wb_defines.v (nonexistent) @@ -1,89 +0,0 @@ -////////////////////////////////////////////////////////////////////// -//// //// -//// adbg_wb_defines.v //// -//// //// -//// //// -//// This file is part of the SoC Advanced Debug Interface. //// -//// //// -//// Author(s): //// -//// Nathan Yawn (nathan.yawn@opencores.org) //// -//// //// -//// //// -//// //// -////////////////////////////////////////////////////////////////////// -//// //// -//// Copyright (C) 2008 Authors //// -//// //// -//// This source file may be used and distributed without //// -//// restriction provided that this copyright statement is not //// -//// removed from the file and that any derivative work contains //// -//// the original copyright notice and the associated disclaimer. //// -//// //// -//// This source file is free software; you can redistribute it //// -//// and/or modify it under the terms of the GNU Lesser General //// -//// Public License as published by the Free Software Foundation; //// -//// either version 2.1 of the License, or (at your option) any //// -//// later version. //// -//// //// -//// This source is distributed in the hope that it will be //// -//// useful, but WITHOUT ANY WARRANTY; without even the implied //// -//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// -//// PURPOSE. See the GNU Lesser General Public License for more //// -//// details. //// -//// //// -//// You should have received a copy of the GNU Lesser General //// -//// Public License along with this source; if not, download it //// -//// from http://www.opencores.org/lgpl.shtml //// -//// //// -////////////////////////////////////////////////////////////////////// -// -// CVS Revision History -// -// $Log: adbg_wb_defines.v,v $ -// Revision 1.3 2009/05/17 20:54:57 Nathan -// Changed email address to opencores.org -// -// Revision 1.2 2009/05/04 00:50:11 Nathan -// Changed the WB BIU to use big-endian byte ordering, to match the OR1000. Kept little-endian ordering as a compile-time option in case this is ever used with a little-endian CPU. -// -// Revision 1.1 2008/07/22 20:28:32 Nathan -// Changed names of all files and modules (prefixed an a, for advanced). Cleanup, indenting. No functional changes. -// - -// Endian-ness of the Wishbone interface. -// Default is BIG endian, to match the OR1200. -// If using a LITTLE endian CPU, e.g. an x86, un-comment this line. -//`define DBG_WB_LITTLE_ENDIAN - -// These relate to the number of internal registers, and how -// many bits are required in the Reg. Select register -`define DBG_WB_REGSELECT_SIZE 1 -`define DBG_WB_NUM_INTREG 1 - -// Register index definitions for module-internal registers -// The WB module has just 1, the error register -`define DBG_WB_INTREG_ERROR 1'b0 - -// Valid commands/opcodes for the wishbone debug module -// 0000 NOP -// 0001 Write burst, 8-bit access -// 0010 Write burst, 16-bit access -// 0011 Write burst, 32-bit access -// 0100 Reserved -// 0101 Read burst, 8-bit access -// 0110 Read burst, 16-bit access -// 0111 Read burst, 32-bit access -// 1000 Reserved -// 1001 Internal register select/write -// 1010 - 1100 Reserved -// 1101 Internal register select -// 1110 - 1111 Reserved - -`define DBG_WB_CMD_BWRITE8 4'h1 -`define DBG_WB_CMD_BWRITE16 4'h2 -`define DBG_WB_CMD_BWRITE32 4'h3 -`define DBG_WB_CMD_BREAD8 4'h5 -`define DBG_WB_CMD_BREAD16 4'h6 -`define DBG_WB_CMD_BREAD32 4'h7 -`define DBG_WB_CMD_IREG_WR 4'h9 -`define DBG_WB_CMD_IREG_SEL 4'hd Index: ADS_RELEASE_1_2_0/trunk/Hardware/jtag/cells/rtl/verilog/BiDirectionalCell.v =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/jtag/cells/rtl/verilog/BiDirectionalCell.v (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/jtag/cells/rtl/verilog/BiDirectionalCell.v (nonexistent) @@ -1,66 +0,0 @@ -/********************************************************************************** -* * -* BiDirectional Cell: * -* * -* FromCore: Value that comes from on-chip logic and goes to pin * -* ToCore: Value that is read-in from the pin and goes to core * -* FromPreviousBSCell: Value from previous boundary scan cell * -* ToNextBSCell: Value for next boundary scan cell * -* CaptureDR, ShiftDR, UpdateDR: TAP states * -* extest: Instruction Register Command * -* TCK: Test Clock * -* BiDirPin: Bidirectional pin connected to this BS cell * -* FromOutputEnable: This pin comes from core or ControlCell * -* * -* Signal that is connected to BiDirPin comes from core or BS chain. Tristate * -* control is generated in core or BS chain (ControlCell). * -* * -**********************************************************************************/ - -module BiDirectionalCell( FromCore, ToCore, FromPreviousBSCell, CaptureDR, ShiftDR, UpdateDR, extest, TCK, ToNextBSCell, FromOutputEnable, BiDirPin); -input FromCore; -input FromPreviousBSCell; -input CaptureDR; -input ShiftDR; -input UpdateDR; -input extest; -input TCK; -input FromOutputEnable; - -reg Latch; - -output ToNextBSCell; -reg ToNextBSCell; - -output BiDirPin; -output ToCore; - -reg ShiftedControl; - -wire SelectedInput = CaptureDR? BiDirPin : FromPreviousBSCell; - -always @ (posedge TCK) -begin - if(CaptureDR | ShiftDR) - Latch<=SelectedInput; -end - -always @ (negedge TCK) -begin - ToNextBSCell<=Latch; -end - -always @ (negedge TCK) -begin - if(UpdateDR) - ShiftedControl<=ToNextBSCell; -end - -wire MuxedSignal = extest? ShiftedControl : FromCore; -assign BiDirPin = FromOutputEnable? MuxedSignal : 1'bz; - -//BUF Buffer (.I(BiDirPin), .O(ToCore)); -assign ToCore = BiDirPin; - - -endmodule // TristateCell \ No newline at end of file Index: ADS_RELEASE_1_2_0/trunk/Hardware/jtag/cells/rtl/verilog/InputCell.v =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/jtag/cells/rtl/verilog/InputCell.v (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/jtag/cells/rtl/verilog/InputCell.v (nonexistent) @@ -1,62 +0,0 @@ -/********************************************************************************** -* * -* This verilog file is a part of the Boundary Scan Implementation and comes in * -* a pack with several other files. It is fully IEEE 1149.1 compliant. * -* For details check www.opencores.org (pdf files, bsdl file, etc.) * -* * -* Copyright (C) 2000 Igor Mohor (igorm@opencores.org) and OPENCORES.ORG * -* * -* This program is free software; you can redistribute it and/or modify * -* it under the terms of the GNU General Public License as published by * -* the Free Software Foundation; either version 2 of the License, or * -* (at your option) any later version. * -* * -* See the file COPYING for the full details of the license. * -* * -* OPENCORES.ORG is looking for new open source IP cores and developers that * -* would like to help in our mission. * -* * -**********************************************************************************/ - - - -/********************************************************************************** -* * -* Input Cell: * -* * -* InputPin: Value that comes from on-chip logic and goes to pin * -* FromPreviousBSCell: Value from previous boundary scan cell * -* ToNextBSCell: Value for next boundary scan cell * -* CaptureDR, ShiftDR: TAP states * -* TCK: Test Clock * -* * -**********************************************************************************/ - -// This is not a top module -module InputCell( InputPin, FromPreviousBSCell, CaptureDR, ShiftDR, TCK, ToNextBSCell); -input InputPin; -input FromPreviousBSCell; -input CaptureDR; -input ShiftDR; -input TCK; - -reg Latch; - -output ToNextBSCell; -reg ToNextBSCell; - -wire SelectedInput = CaptureDR? InputPin : FromPreviousBSCell; - -always @ (posedge TCK) -begin - if(CaptureDR | ShiftDR) - Latch<=SelectedInput; -end - -always @ (negedge TCK) -begin - ToNextBSCell<=Latch; -end - - -endmodule // InputCell \ No newline at end of file Index: ADS_RELEASE_1_2_0/trunk/Hardware/jtag/cells/rtl/verilog/OutputCell.v =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/jtag/cells/rtl/verilog/OutputCell.v (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/jtag/cells/rtl/verilog/OutputCell.v (nonexistent) @@ -1,83 +0,0 @@ -/********************************************************************************** -* * -* This verilog file is a part of the Boundary Scan Implementation and comes in * -* a pack with several other files. It is fully IEEE 1149.1 compliant. * -* For details check www.opencores.org (pdf files, bsdl file, etc.) * -* * -* Copyright (C) 2000 Igor Mohor (igorm@opencores.org) and OPENCORES.ORG * -* * -* This program is free software; you can redistribute it and/or modify * -* it under the terms of the GNU General Public License as published by * -* the Free Software Foundation; either version 2 of the License, or * -* (at your option) any later version. * -* * -* See the file COPYING for the full details of the license. * -* * -* OPENCORES.ORG is looking for new open source IP cores and developers that * -* would like to help in our mission. * -* * -**********************************************************************************/ - - - -/********************************************************************************** -* * -* Output Cell: * -* * -* FromCore: Value that comes from on-chip logic and goes to pin * -* FromPreviousBSCell: Value from previous boundary scan cell * -* ToNextBSCell: Value for next boundary scan cell * -* CaptureDR, ShiftDR, UpdateDR: TAP states * -* extest: Instruction Register Command * -* TCK: Test Clock * -* TristatedPin: Signal from core is connected to this output pin via BS * -* FromOutputEnable: This pin comes from core or ControlCell * -* * -* Signal that is connected to TristatedPin comes from core or BS chain. * -* Tristate control is generated in core or BS chain (ControlCell). * -* * -**********************************************************************************/ - -// This is not a top module -module OutputCell( FromCore, FromPreviousBSCell, CaptureDR, ShiftDR, UpdateDR, extest, TCK, ToNextBSCell, FromOutputEnable, TristatedPin); -input FromCore; -input FromPreviousBSCell; -input CaptureDR; -input ShiftDR; -input UpdateDR; -input extest; -input TCK; -input FromOutputEnable; - -reg Latch; - -output ToNextBSCell; -reg ToNextBSCell; - -output TristatedPin; - -reg ShiftedControl; - -wire SelectedInput = CaptureDR? FromCore : FromPreviousBSCell; - -always @ (posedge TCK) -begin - if(CaptureDR | ShiftDR) - Latch<=SelectedInput; -end - -always @ (negedge TCK) -begin - ToNextBSCell<=Latch; -end - -always @ (negedge TCK) -begin - if(UpdateDR) - ShiftedControl<=ToNextBSCell; -end - -wire MuxedSignal = extest? ShiftedControl : FromCore; -assign TristatedPin = FromOutputEnable? MuxedSignal : 1'bz; - -endmodule // OutputCell \ No newline at end of file Index: ADS_RELEASE_1_2_0/trunk/Hardware/jtag/cells/rtl/verilog/ControlCell.v =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/jtag/cells/rtl/verilog/ControlCell.v (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/jtag/cells/rtl/verilog/ControlCell.v (nonexistent) @@ -1,77 +0,0 @@ -/********************************************************************************** -* * -* This verilog file is a part of the Boundary Scan Implementation and comes in * -* a pack with several other files. It is fully IEEE 1149.1 compliant. * -* For details check www.opencores.org (pdf files, bsdl file, etc.) * -* * -* Copyright (C) 2000 Igor Mohor (igorm@opencores.org) and OPENCORES.ORG * -* * -* This program is free software; you can redistribute it and/or modify * -* it under the terms of the GNU General Public License as published by * -* the Free Software Foundation; either version 2 of the License, or * -* (at your option) any later version. * -* * -* See the file COPYING for the full details of the license. * -* * -* OPENCORES.ORG is looking for new open source IP cores and developers that * -* would like to help in our mission. * -* * -**********************************************************************************/ - - -/********************************************************************************** -* * -* I/O Control Cell: * -* * -* OutputControl: Output Control from on-chip logic * -* FromPreviousBSCell: Value from previous boundary scan cell * -* ToNextBSCell: Value for next boundary scan cell * -* CaptureDR, ShiftDR, UpdateDR: TAP states * -* extest: Instruction Register Command * -* TCK: Test Clock * -* * -* Output Enable can be generated by running CaptureDR-UpdateDR sequence or * -* shifting data for the exact number of time * -* * -**********************************************************************************/ - -// This is not a top module -module ControlCell( OutputControl, FromPreviousBSCell, CaptureDR, ShiftDR, UpdateDR, extest, TCK, ToNextBSCell, ToOutputEnable); -input OutputControl; -input FromPreviousBSCell; -input CaptureDR; -input ShiftDR; -input UpdateDR; -input extest; -input TCK; - -reg Latch; - -output ToNextBSCell; -output ToOutputEnable; - -reg ToNextBSCell; -reg ShiftedControl; - -wire SelectedInput = CaptureDR? OutputControl : FromPreviousBSCell; - -always @ (posedge TCK) -begin - if(CaptureDR | ShiftDR) - Latch<=SelectedInput; -end - -always @ (negedge TCK) -begin - ToNextBSCell<=Latch; -end - -always @ (negedge TCK) -begin - if(UpdateDR) - ShiftedControl<=ToNextBSCell; -end - -assign ToOutputEnable = extest? ShiftedControl : OutputControl; - -endmodule // ControlCell \ No newline at end of file Index: ADS_RELEASE_1_2_0/trunk/Hardware/jtag/BSDL/opencores_tap.bsd =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/jtag/BSDL/opencores_tap.bsd (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/jtag/BSDL/opencores_tap.bsd (nonexistent) @@ -1,35 +0,0 @@ --- This is a minimal BSDL file describing the particulars --- of the OpenCores standard / native TAP. It is designed --- only to be used by the adv_jtag_bridge program. This --- file almost certainly lacks key entries and attributes --- required by other JTAG / BSDL systems. --- --- by Nathan Yawn (nathan.yawn@opencores.org) --- Copyright: This file is released into the public domain. --- - - -entity OC_TAP is - - -attribute INSTRUCTION_LENGTH of OC_TAP : entity is 4; - - -attribute INSTRUCTION_OPCODE of OC_TAP : entity is - "EXTEST (0000)," & - "SAMPLE_PRELOAD (0001)," & - "IDCODE (0010)," & - "MBIST (1001)," & - "DEBUG (1000)," & - "BYPASS (1111),"; - - -attribute IDCODE_REGISTER of OC_TAP : entity is - "0001" & -- version - "0100100101010001" & -- part number - "00011100001" & -- manufacturer (flextronics) - "1"; -- required by 1149.1 - - -end OC_TAP; - Index: ADS_RELEASE_1_2_0/trunk/Hardware/jtag/tap/rtl/verilog/tap_defines.v =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/jtag/tap/rtl/verilog/tap_defines.v (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/jtag/tap/rtl/verilog/tap_defines.v (nonexistent) @@ -1,79 +0,0 @@ -////////////////////////////////////////////////////////////////////// -//// //// -//// tap_defines.v //// -//// //// -//// //// -//// This file is part of the JTAG Test Access Port (TAP) //// -//// http://www.opencores.org/projects/jtag/ //// -//// //// -//// Author(s): //// -//// Igor Mohor (igorm@opencores.org) //// -//// //// -//// //// -//// All additional information is avaliable in the README.txt //// -//// file. //// -//// //// -////////////////////////////////////////////////////////////////////// -//// //// -//// Copyright (C) 2000 - 2003 Authors //// -//// //// -//// This source file may be used and distributed without //// -//// restriction provided that this copyright statement is not //// -//// removed from the file and that any derivative work contains //// -//// the original copyright notice and the associated disclaimer. //// -//// //// -//// This source file is free software; you can redistribute it //// -//// and/or modify it under the terms of the GNU Lesser General //// -//// Public License as published by the Free Software Foundation; //// -//// either version 2.1 of the License, or (at your option) any //// -//// later version. //// -//// //// -//// This source is distributed in the hope that it will be //// -//// useful, but WITHOUT ANY WARRANTY; without even the implied //// -//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// -//// PURPOSE. See the GNU Lesser General Public License for more //// -//// details. //// -//// //// -//// You should have received a copy of the GNU Lesser General //// -//// Public License along with this source; if not, download it //// -//// from http://www.opencores.org/lgpl.shtml //// -//// //// -////////////////////////////////////////////////////////////////////// -// -// CVS Revision History -// -// $Log: tap_defines.v,v $ -// Revision 1.1.1.1 2008/05/14 12:07:33 Nathan -// Original from OpenCores -// -// Revision 1.3 2004/03/02 17:39:45 mohor -// IDCODE_VALUE changed to Flextronics ID. -// -// Revision 1.2 2004/01/27 10:00:33 mohor -// Unused registers removed. -// -// Revision 1.1 2003/12/23 14:52:14 mohor -// Directory structure changed. New version of TAP. -// -// -// - - -// Define IDCODE Value -`define IDCODE_VALUE 32'h149511c3 -// 0001 version -// 0100100101010001 part number (IQ) -// 00011100001 manufacturer id (flextronics) -// 1 required by standard - -// Length of the Instruction register -`define IR_LENGTH 4 - -// Supported Instructions -`define EXTEST 4'b0000 -`define SAMPLE_PRELOAD 4'b0001 -`define IDCODE 4'b0010 -`define DEBUG 4'b1000 -`define MBIST 4'b1001 -`define BYPASS 4'b1111 - Index: ADS_RELEASE_1_2_0/trunk/Hardware/jtag/tap/rtl/verilog/tap_top.v =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/jtag/tap/rtl/verilog/tap_top.v (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/jtag/tap/rtl/verilog/tap_top.v (nonexistent) @@ -1,526 +0,0 @@ -////////////////////////////////////////////////////////////////////// -//// //// -//// tap_top.v //// -//// //// -//// //// -//// This file is part of the JTAG Test Access Port (TAP) //// -//// //// -//// Author(s): //// -//// Igor Mohor (igorm@opencores.org) //// -//// Nathan Yawn (nathan.yawn@opencores.org) //// -//// //// -//// //// -//// All additional information is avaliable in the jtag.pdf //// -//// file. //// -//// //// -////////////////////////////////////////////////////////////////////// -//// //// -//// Copyright (C) 2000 - 2008 Authors //// -//// //// -//// This source file may be used and distributed without //// -//// restriction provided that this copyright statement is not //// -//// removed from the file and that any derivative work contains //// -//// the original copyright notice and the associated disclaimer. //// -//// //// -//// This source file is free software; you can redistribute it //// -//// and/or modify it under the terms of the GNU Lesser General //// -//// Public License as published by the Free Software Foundation; //// -//// either version 2.1 of the License, or (at your option) any //// -//// later version. //// -//// //// -//// This source is distributed in the hope that it will be //// -//// useful, but WITHOUT ANY WARRANTY; without even the implied //// -//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// -//// PURPOSE. See the GNU Lesser General Public License for more //// -//// details. //// -//// //// -//// You should have received a copy of the GNU Lesser General //// -//// Public License along with this source; if not, download it //// -//// from http://www.opencores.org/lgpl.shtml //// -//// //// -////////////////////////////////////////////////////////////////////// -// -// CVS Revision History -// -// $Log: tap_top.v,v $ -// Revision 1.5 2009/06/16 02:53:58 Nathan -// Changed some signal names for better consistency between different hardware modules. Removed stale CVS log/comments. -// -// Revision 1.4 2009/05/17 20:54:38 Nathan -// Changed email address to opencores.org -// -// Revision 1.3 2008/06/18 18:45:07 Nathan -// Improved reset slightly. Cleanup. -// -// -// Revision 1.2 2008/05/14 13:13:24 Nathan -// Rewrote TAP FSM in canonical form, for readability. Switched -// from one-hot to binary encoding. Made reset signal active- -// low, per JTAG spec. Removed FF chain for 5 TMS reset - reset -// done in Test Logic Reset mode. Added test_logic_reset_o and -// run_test_idle_o signals. Removed double registers from IR data -// path. Unified the registers at the output of each data register -// to a single shared FF. -// - -`include "tap_defines.v" - -// Top module -module tap_top( - // JTAG pads - tms_pad_i, - tck_pad_i, - trstn_pad_i, - tdi_pad_i, - tdo_pad_o, - tdo_padoe_o, - - // TAP states - test_logic_reset_o, - run_test_idle_o, - shift_dr_o, - pause_dr_o, - update_dr_o, - capture_dr_o, - - // Select signals for boundary scan or mbist - extest_select_o, - sample_preload_select_o, - mbist_select_o, - debug_select_o, - - // TDO signal that is connected to TDI of sub-modules. - tdi_o, - - // TDI signals from sub-modules - debug_tdo_i, // from debug module - bs_chain_tdo_i, // from Boundary Scan Chain - mbist_tdo_i // from Mbist Chain - ); - - -// JTAG pins -input tms_pad_i; // JTAG test mode select pad -input tck_pad_i; // JTAG test clock pad -input trstn_pad_i; // JTAG test reset pad -input tdi_pad_i; // JTAG test data input pad -output tdo_pad_o; // JTAG test data output pad -output tdo_padoe_o; // Output enable for JTAG test data output pad - -// TAP states -output test_logic_reset_o; -output run_test_idle_o; -output shift_dr_o; -output pause_dr_o; -output update_dr_o; -output capture_dr_o; - -// Select signals for boundary scan or mbist -output extest_select_o; -output sample_preload_select_o; -output mbist_select_o; -output debug_select_o; - -// TDO signal that is connected to TDI of sub-modules. -output tdi_o; - -// TDI signals from sub-modules -input debug_tdo_i; // from debug module -input bs_chain_tdo_i; // from Boundary Scan Chain -input mbist_tdo_i; // from Mbist Chain - -// Wires which depend on the state of the TAP FSM -reg test_logic_reset; -reg run_test_idle; -reg select_dr_scan; -reg capture_dr; -reg shift_dr; -reg exit1_dr; -reg pause_dr; -reg exit2_dr; -reg update_dr; -reg select_ir_scan; -reg capture_ir; -reg shift_ir; -reg exit1_ir; -reg pause_ir; -reg exit2_ir; -reg update_ir; - -// Wires which depend on the current value in the IR -reg extest_select; -reg sample_preload_select; -reg idcode_select; -reg mbist_select; -reg debug_select; -reg bypass_select; - -// TDO and enable -reg tdo_pad_o; -reg tdo_padoe_o; - -assign tdi_o = tdi_pad_i; - -assign test_logic_reset_o = test_logic_reset; -assign run_test_idle_o = run_test_idle; -assign shift_dr_o = shift_dr; -assign pause_dr_o = pause_dr; -assign update_dr_o = update_dr; -assign capture_dr_o = capture_dr; - -assign extest_select_o = extest_select; -assign sample_preload_select_o = sample_preload_select; -assign mbist_select_o = mbist_select; -assign debug_select_o = debug_select; - - -/********************************************************************************** -* * -* TAP State Machine: Fully JTAG compliant * -* * -**********************************************************************************/ -// Definition of machine state values. We could one-hot encode this, and use 16 -// registers, but this uses binary encoding for the minimum of 4 DFF's instead. -`define STATE_test_logic_reset 4'hF -`define STATE_run_test_idle 4'hC -`define STATE_select_dr_scan 4'h7 -`define STATE_capture_dr 4'h6 -`define STATE_shift_dr 4'h2 -`define STATE_exit1_dr 4'h1 -`define STATE_pause_dr 4'h3 -`define STATE_exit2_dr 4'h0 -`define STATE_update_dr 4'h5 -`define STATE_select_ir_scan 4'h4 -`define STATE_capture_ir 4'hE -`define STATE_shift_ir 4'hA -`define STATE_exit1_ir 4'h9 -`define STATE_pause_ir 4'hB -`define STATE_exit2_ir 4'h8 -`define STATE_update_ir 4'hD - -reg [3:0] TAP_state = `STATE_test_logic_reset; // current state of the TAP controller -reg [3:0] next_TAP_state; // state TAP will take at next rising TCK, combinational signal - -// sequential part of the FSM -always @ (posedge tck_pad_i or negedge trstn_pad_i) -begin - if(trstn_pad_i == 0) - TAP_state = `STATE_test_logic_reset; - else - TAP_state = next_TAP_state; -end - - -// Determination of next state; purely combinatorial -always @ (TAP_state or tms_pad_i) -begin - case(TAP_state) - `STATE_test_logic_reset: - begin - if(tms_pad_i) next_TAP_state = `STATE_test_logic_reset; - else next_TAP_state = `STATE_run_test_idle; - end - `STATE_run_test_idle: - begin - if(tms_pad_i) next_TAP_state = `STATE_select_dr_scan; - else next_TAP_state = `STATE_run_test_idle; - end - `STATE_select_dr_scan: - begin - if(tms_pad_i) next_TAP_state = `STATE_select_ir_scan; - else next_TAP_state = `STATE_capture_dr; - end - `STATE_capture_dr: - begin - if(tms_pad_i) next_TAP_state = `STATE_exit1_dr; - else next_TAP_state = `STATE_shift_dr; - end - `STATE_shift_dr: - begin - if(tms_pad_i) next_TAP_state = `STATE_exit1_dr; - else next_TAP_state = `STATE_shift_dr; - end - `STATE_exit1_dr: - begin - if(tms_pad_i) next_TAP_state = `STATE_update_dr; - else next_TAP_state = `STATE_pause_dr; - end - `STATE_pause_dr: - begin - if(tms_pad_i) next_TAP_state = `STATE_exit2_dr; - else next_TAP_state = `STATE_pause_dr; - end - `STATE_exit2_dr: - begin - if(tms_pad_i) next_TAP_state = `STATE_update_dr; - else next_TAP_state = `STATE_shift_dr; - end - `STATE_update_dr: - begin - if(tms_pad_i) next_TAP_state = `STATE_select_dr_scan; - else next_TAP_state = `STATE_run_test_idle; - end - `STATE_select_ir_scan: - begin - if(tms_pad_i) next_TAP_state = `STATE_test_logic_reset; - else next_TAP_state = `STATE_capture_ir; - end - `STATE_capture_ir: - begin - if(tms_pad_i) next_TAP_state = `STATE_exit1_ir; - else next_TAP_state = `STATE_shift_ir; - end - `STATE_shift_ir: - begin - if(tms_pad_i) next_TAP_state = `STATE_exit1_ir; - else next_TAP_state = `STATE_shift_ir; - end - `STATE_exit1_ir: - begin - if(tms_pad_i) next_TAP_state = `STATE_update_ir; - else next_TAP_state = `STATE_pause_ir; - end - `STATE_pause_ir: - begin - if(tms_pad_i) next_TAP_state = `STATE_exit2_ir; - else next_TAP_state = `STATE_pause_ir; - end - `STATE_exit2_ir: - begin - if(tms_pad_i) next_TAP_state = `STATE_update_ir; - else next_TAP_state = `STATE_shift_ir; - end - `STATE_update_ir: - begin - if(tms_pad_i) next_TAP_state = `STATE_select_dr_scan; - else next_TAP_state = `STATE_run_test_idle; - end - default: next_TAP_state = `STATE_test_logic_reset; // can't actually happen - endcase -end - - -// Outputs of state machine, pure combinatorial -always @ (TAP_state) -begin - // Default everything to 0, keeps the case statement simple - test_logic_reset = 1'b0; - run_test_idle = 1'b0; - select_dr_scan = 1'b0; - capture_dr = 1'b0; - shift_dr = 1'b0; - exit1_dr = 1'b0; - pause_dr = 1'b0; - exit2_dr = 1'b0; - update_dr = 1'b0; - select_ir_scan = 1'b0; - capture_ir = 1'b0; - shift_ir = 1'b0; - exit1_ir = 1'b0; - pause_ir = 1'b0; - exit2_ir = 1'b0; - update_ir = 1'b0; - - case(TAP_state) - `STATE_test_logic_reset: test_logic_reset = 1'b1; - `STATE_run_test_idle: run_test_idle = 1'b1; - `STATE_select_dr_scan: select_dr_scan = 1'b1; - `STATE_capture_dr: capture_dr = 1'b1; - `STATE_shift_dr: shift_dr = 1'b1; - `STATE_exit1_dr: exit1_dr = 1'b1; - `STATE_pause_dr: pause_dr = 1'b1; - `STATE_exit2_dr: exit2_dr = 1'b1; - `STATE_update_dr: update_dr = 1'b1; - `STATE_select_ir_scan: select_ir_scan = 1'b1; - `STATE_capture_ir: capture_ir = 1'b1; - `STATE_shift_ir: shift_ir = 1'b1; - `STATE_exit1_ir: exit1_ir = 1'b1; - `STATE_pause_ir: pause_ir = 1'b1; - `STATE_exit2_ir: exit2_ir = 1'b1; - `STATE_update_ir: update_ir = 1'b1; - default: ; - endcase -end - -/********************************************************************************** -* * -* End: TAP State Machine * -* * -**********************************************************************************/ - - - -/********************************************************************************** -* * -* jtag_ir: JTAG Instruction Register * -* * -**********************************************************************************/ -reg [`IR_LENGTH-1:0] jtag_ir; // Instruction register -reg [`IR_LENGTH-1:0] latched_jtag_ir; //, latched_jtag_ir_neg; -wire instruction_tdo; - -always @ (posedge tck_pad_i or negedge trstn_pad_i) -begin - if(trstn_pad_i == 0) - jtag_ir[`IR_LENGTH-1:0] <= #1 `IR_LENGTH'b0; - else if (test_logic_reset == 1) - jtag_ir[`IR_LENGTH-1:0] <= #1 `IR_LENGTH'b0; - else if(capture_ir) - jtag_ir <= #1 4'b0101; // This value is fixed for easier fault detection - else if(shift_ir) - jtag_ir[`IR_LENGTH-1:0] <= #1 {tdi_pad_i, jtag_ir[`IR_LENGTH-1:1]}; -end - -assign instruction_tdo = jtag_ir[0]; // This is latched on a negative TCK edge after the output MUX - -// Updating jtag_ir (Instruction Register) -// jtag_ir should be latched on FALLING EDGE of TCK when capture_ir == 1 -always @ (negedge tck_pad_i or negedge trstn_pad_i) -begin - if(trstn_pad_i == 0) - latched_jtag_ir <=#1 `IDCODE; // IDCODE selected after reset - else if (test_logic_reset) - latched_jtag_ir <=#1 `IDCODE; // IDCODE selected after reset - else if(update_ir) - latched_jtag_ir <=#1 jtag_ir; -end - -/********************************************************************************** -* * -* End: jtag_ir * -* * -**********************************************************************************/ - - - -/********************************************************************************** -* * -* idcode logic * -* * -**********************************************************************************/ -reg [31:0] idcode_reg; -wire idcode_tdo; - -always @ (posedge tck_pad_i or negedge trstn_pad_i) -begin - if(trstn_pad_i == 0) - idcode_reg <=#1 `IDCODE_VALUE; // IDCODE selected after reset - else if (test_logic_reset) - idcode_reg <=#1 `IDCODE_VALUE; // IDCODE selected after reset - else if(idcode_select & capture_dr) - idcode_reg <= #1 `IDCODE_VALUE; - else if(idcode_select & shift_dr) - idcode_reg <= #1 {tdi_pad_i, idcode_reg[31:1]}; - -end - -assign idcode_tdo = idcode_reg[0]; // This is latched on a negative TCK edge after the output MUX - -/********************************************************************************** -* * -* End: idcode logic * -* * -**********************************************************************************/ - - -/********************************************************************************** -* * -* Bypass logic * -* * -**********************************************************************************/ -wire bypassed_tdo; -reg bypass_reg; // This is a 1-bit register - -always @ (posedge tck_pad_i or negedge trstn_pad_i) -begin - if (trstn_pad_i == 0) - bypass_reg <= #1 1'b0; - else if (test_logic_reset == 1) - bypass_reg <= #1 1'b0; - else if (bypass_select & capture_dr) - bypass_reg<=#1 1'b0; - else if(bypass_select & shift_dr) - bypass_reg<=#1 tdi_pad_i; -end - -assign bypassed_tdo = bypass_reg; // This is latched on a negative TCK edge after the output MUX - -/********************************************************************************** -* * -* End: Bypass logic * -* * -**********************************************************************************/ - - -/********************************************************************************** -* * -* Selecting active data register * -* * -**********************************************************************************/ -always @ (latched_jtag_ir) -begin - extest_select = 1'b0; - sample_preload_select = 1'b0; - idcode_select = 1'b0; - mbist_select = 1'b0; - debug_select = 1'b0; - bypass_select = 1'b0; - - case(latched_jtag_ir) /* synthesis parallel_case */ - `EXTEST: extest_select = 1'b1; // External test - `SAMPLE_PRELOAD: sample_preload_select = 1'b1; // Sample preload - `IDCODE: idcode_select = 1'b1; // ID Code - `MBIST: mbist_select = 1'b1; // Mbist test - `DEBUG: debug_select = 1'b1; // Debug - `BYPASS: bypass_select = 1'b1; // BYPASS - default: bypass_select = 1'b1; // BYPASS - endcase -end - - -/********************************************************************************** -* * -* Multiplexing TDO data * -* * -**********************************************************************************/ -reg tdo_mux_out; // really just a wire - -always @ (shift_ir or instruction_tdo or latched_jtag_ir or idcode_tdo or - debug_tdo_i or bs_chain_tdo_i or mbist_tdo_i or bypassed_tdo or - bs_chain_tdo_i) -begin - if(shift_ir) - tdo_mux_out = instruction_tdo; - else - begin - case(latched_jtag_ir) // synthesis parallel_case - `IDCODE: tdo_mux_out = idcode_tdo; // Reading ID code - `DEBUG: tdo_mux_out = debug_tdo_i; // Debug - `SAMPLE_PRELOAD: tdo_mux_out = bs_chain_tdo_i; // Sampling/Preloading - `EXTEST: tdo_mux_out = bs_chain_tdo_i; // External test - `MBIST: tdo_mux_out = mbist_tdo_i; // Mbist test - default: tdo_mux_out = bypassed_tdo; // BYPASS instruction - endcase - end -end - - -// TDO changes state at negative edge of TCK -always @ (negedge tck_pad_i) -begin - tdo_pad_o = tdo_mux_out; -end - - -// Tristate control for tdo_pad_o pin -always @ (posedge tck_pad_i) -begin - tdo_padoe_o <= #1 shift_ir | shift_dr; -end -/********************************************************************************** -* * -* End: Multiplexing TDO data * -* * -**********************************************************************************/ - -endmodule Index: ADS_RELEASE_1_2_0/trunk/Hardware/jtag/tap/doc/src/system_block_diagram.odg =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: ADS_RELEASE_1_2_0/trunk/Hardware/jtag/tap/doc/src/system_block_diagram.odg =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/jtag/tap/doc/src/system_block_diagram.odg (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/jtag/tap/doc/src/system_block_diagram.odg (nonexistent)
ADS_RELEASE_1_2_0/trunk/Hardware/jtag/tap/doc/src/system_block_diagram.odg Property changes : Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: ADS_RELEASE_1_2_0/trunk/Hardware/jtag/tap/doc/src/jtag.odt =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: ADS_RELEASE_1_2_0/trunk/Hardware/jtag/tap/doc/src/jtag.odt =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/jtag/tap/doc/src/jtag.odt (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/jtag/tap/doc/src/jtag.odt (nonexistent)
ADS_RELEASE_1_2_0/trunk/Hardware/jtag/tap/doc/src/jtag.odt Property changes : Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: ADS_RELEASE_1_2_0/trunk/Hardware/jtag/tap/doc/src/oc_jtag_sys_diag.odg =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: ADS_RELEASE_1_2_0/trunk/Hardware/jtag/tap/doc/src/oc_jtag_sys_diag.odg =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/jtag/tap/doc/src/oc_jtag_sys_diag.odg (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/jtag/tap/doc/src/oc_jtag_sys_diag.odg (nonexistent)
ADS_RELEASE_1_2_0/trunk/Hardware/jtag/tap/doc/src/oc_jtag_sys_diag.odg Property changes : Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: ADS_RELEASE_1_2_0/trunk/Hardware/jtag/tap/doc/gpl-2.0.txt =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/jtag/tap/doc/gpl-2.0.txt (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/jtag/tap/doc/gpl-2.0.txt (nonexistent) @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. Index: ADS_RELEASE_1_2_0/trunk/Hardware/jtag/tap/doc/jtag.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: ADS_RELEASE_1_2_0/trunk/Hardware/jtag/tap/doc/jtag.pdf =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/jtag/tap/doc/jtag.pdf (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/jtag/tap/doc/jtag.pdf (nonexistent)
ADS_RELEASE_1_2_0/trunk/Hardware/jtag/tap/doc/jtag.pdf Property changes : Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: ADS_RELEASE_1_2_0/trunk/Hardware/xilinx_internal_jtag/rtl/verilog/xilinx_internal_jtag_options.v =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/xilinx_internal_jtag/rtl/verilog/xilinx_internal_jtag_options.v (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/xilinx_internal_jtag/rtl/verilog/xilinx_internal_jtag_options.v (nonexistent) @@ -1,12 +0,0 @@ - - -// Xilinx has a different HDL entity for the internal JTAG in each of these. -// How thoughtful. - -//`define SPARTAN2 -//`define SPARTAN3 // This is also used for SPARTAN 3E devices -//`define SPARTAN3A -//`define VIRTEX -//`define VIRTEX2 // Also used for the VIRTEX 2P -`define VIRTEX4 -//`define VIRTEX5 \ No newline at end of file Index: ADS_RELEASE_1_2_0/trunk/Hardware/xilinx_internal_jtag/rtl/verilog/xilinx_internal_jtag.v =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/xilinx_internal_jtag/rtl/verilog/xilinx_internal_jtag.v (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/xilinx_internal_jtag/rtl/verilog/xilinx_internal_jtag.v (nonexistent) @@ -1,436 +0,0 @@ -/////////////////////////////////////////////////////////////////////// -//// //// -//// xilinx_internal_jtag.v //// -//// //// -//// //// -//// //// -//// Author(s): //// -//// Nathan Yawn (nathan.yawn@opencores.org) //// -//// //// -//// //// -//// //// -////////////////////////////////////////////////////////////////////// -//// //// -//// Copyright (C) 2008 Authors //// -//// //// -//// This source file may be used and distributed without //// -//// restriction provided that this copyright statement is not //// -//// removed from the file and that any derivative work contains //// -//// the original copyright notice and the associated disclaimer. //// -//// //// -//// This source file is free software; you can redistribute it //// -//// and/or modify it under the terms of the GNU Lesser General //// -//// Public License as published by the Free Software Foundation; //// -//// either version 2.1 of the License, or (at your option) any //// -//// later version. //// -//// //// -//// This source is distributed in the hope that it will be //// -//// useful, but WITHOUT ANY WARRANTY; without even the implied //// -//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// -//// PURPOSE. See the GNU Lesser General Public License for more //// -//// details. //// -//// //// -//// You should have received a copy of the GNU Lesser General //// -//// Public License along with this source; if not, download it //// -//// from http://www.opencores.org/lgpl.shtml //// -//// //// -////////////////////////////////////////////////////////////////////// -// // -// This file is a wrapper for the various Xilinx internal BSCAN // -// TAP devices. It is designed to take the place of a separate TAP // -// controller in Xilinx systems, to allow a user to access a CPU // -// debug module (such as that of the OR1200) through the FPGA's // -// dedicated JTAG / configuration port. // -// // -////////////////////////////////////////////////////////////////////// -// -// CVS Revision History -// -// $Log: xilinx_internal_jtag.v,v $ -// Revision 1.3 2009/06/16 02:54:23 Nathan -// Changed some signal names for better consistency between different hardware modules. -// -// Revision 1.2 2009/05/17 20:54:16 Nathan -// Changed email address to opencores.org -// -// Revision 1.1 2008/07/18 20:07:32 Nathan -// Changed the directory structure to match existing projects. -// -// Revision 1.4 2008/07/11 08:26:10 Nathan -// Ran through dos2unix -// -// Revision 1.3 2008/07/11 08:25:52 Nathan -// Added logic to provide CAPTURE_DR signal when necessary, and to provide a TCK while UPDATE_DR is asserted. Note that there is no TCK event between SHIFT_DR and UPDATE_DR, and no TCK event between UPDATE_DR and the next CAPTURE_DR; the Xilinx BSCAN devices do not provide it. Tested successfully with the adv_dbg_if on Virtex-4. -// -// Revision 1.2 2008/06/09 19:34:14 Nathan -// Syntax and functional fixes made after compiling each type of BSCAN module using Xilinx tools. -// -// Revision 1.1 2008/05/22 19:54:07 Nathan -// Initial version -// - - -`include "xilinx_internal_jtag_options.v" - -// Note that the SPARTAN BSCAN controllers have more than one channel. -// This implementation always uses channel 1, this is not configurable. -// If you want to use another channel, then it is probably because you -// want to attach multiple devices to the BSCAN device, which means -// you'll be making changes to this file anyway. -// Virtex BSCAN devices are instantiated separately for each channel. -// To select something other than the default (1), change the parameter -// "virtex_jtag_chain". - - -module xilinx_internal_jtag ( - tck_o, - debug_tdo_i, - tdi_o, - test_logic_reset_o, - run_test_idle_o, - shift_dr_o, - capture_dr_o, - pause_dr_o, - update_dr_o, - debug_select_o -); - -// May be 1, 2, 3, or 4 -// Only used for Virtex 4/5 devices -parameter virtex_jtag_chain = 1; - -input debug_tdo_i; -output tck_o; -output tdi_o; -output test_logic_reset_o; -output run_test_idle_o; -output shift_dr_o; -output capture_dr_o; -output pause_dr_o; -output update_dr_o; -output debug_select_o; - -wire debug_tdo_i; -wire tck_o; -wire drck; -wire tdi_o; -wire test_logic_reset_o; -wire run_test_idle_o; -wire shift_dr_o; -wire pause_dr_o; -wire update_dr_o; -wire debug_select_o; - - - -`ifdef SPARTAN2 - -// Note that this version is missing three outputs. -// It also does not have a real TCK...DRCK1 is only active when USER1 is selected -// AND the TAP is in SHIFT_DR or CAPTURE_DR states...except there's no -// capture_dr output. - -reg capture_dr_o; -wire update_bscan; -reg update_out; - -BSCAN_SPARTAN2 BSCAN_SPARTAN2_inst ( -.DRCK1(drck), // Data register output for USER1 functions -.DRCK2(), // Data register output for USER2 functions -.RESET(test_logic_reset_o), // Reset output from TAP controller -.SEL1(debug_select_o), // USER1 active output -.SEL2(), // USER2 active output -.SHIFT(shift_dr_o), // SHIFT output from TAP controller -.TDI(tdi_o), // TDI output from TAP controller -.UPDATE(update_bscan), // UPDATE output from TAP controller -.TDO1(debug_tdo_i), // Data input for USER1 function -.TDO2( 1'b0 ) // Data input for USER2 function -); - -assign pause_dr_o = 1'b0; -assign run_test_idle_o = 1'b0; -assign capture_dr_o = 1'b0; - -// We get one TCK during capture_dr state (low,high,SHIFT goes high on next DRCK high) -// On that negative edge, set capture_dr, and it will get registered on the rising -// edge. -always @ (negedge tck_o) -begin - if(debug_select_o && !shift_dr_o) - capture_dr_o <= 1'b1; - else - capture_dr_o <= 1'b0; -end - -// The & !update_bscan tern will provide a clock edge so update_dr_o can be registered -// The &debug_select term will drop TCK when the module is un-selected (does not happen in the BSCAN block). -// This allows a user to kludge clock ticks in the IDLE state, which is needed by the advanced debug module. -assign tck_o = (drck & debug_select_o & !update_bscan); - -// This will hold the update_dr output so it can be registered on the rising edge -// of the clock created above. -always @(posedge update_bscan or posedge capture_dr_o or negedge debug_select_o) -begin - if(update_bscan) update_out <= 1'b1; - else if(capture_dr_o) update_out <= 1'b0; - else if(!debug_select_o) update_out <= 1'b0; -end - -assign update_dr_o = update_out; - -`else -`ifdef SPARTAN3 -// Note that this version is missing two outputs. -// It also does not have a real TCK...DRCK1 is only active when USER1 is selected. - -wire capture_dr_o; -wire update_bscan; -reg update_out; - -BSCAN_SPARTAN3 BSCAN_SPARTAN3_inst ( -.CAPTURE(capture_dr_o), // CAPTURE output from TAP controller -.DRCK1(drck), // Data register output for USER1 functions -.DRCK2(), // Data register output for USER2 functions -.RESET(test_logic_reset_o), // Reset output from TAP controller -.SEL1(debug_select_o), // USER1 active output -.SEL2(), // USER2 active output -.SHIFT(shift_dr_o), // SHIFT output from TAP controller -.TDI(tdi_o), // TDI output from TAP controller -.UPDATE(update_bscan), // UPDATE output from TAP controller -.TDO1(debug_tdo_i), // Data input for USER1 function -.TDO2(1'b0) // Data input for USER2 function -); - -assign pause_dr_o = 1'b0; -assign run_test_idle_o = 1'b0; - -// The & !update_bscan tern will provide a clock edge so update_dr_o can be registered -// The &debug_select term will drop TCK when the module is un-selected (does not happen in the BSCAN block). -// This allows a user to kludge clock ticks in the IDLE state, which is needed by the advanced debug module. -assign tck_o = (drck & debug_select_o & !update_bscan); - -// This will hold the update_dr output so it can be registered on the rising edge -// of the clock created above. -always @(posedge update_bscan or posedge capture_dr_o or negedge debug_select_o) -begin - if(update_bscan) update_out <= 1'b1; - else if(capture_dr_o) update_out <= 1'b0; - else if(!debug_select_o) update_out <= 1'b0; -end - -assign update_dr_o = update_out; - -`else -`ifdef SPARTAN3A -// Note that this version is missing two outputs. -// At least it has a real TCK. - -wire capture_dr_o; - -BSCAN_SPARTAN3A BSCAN_SPARTAN3A_inst ( -.CAPTURE(capture_dr_o), // CAPTURE output from TAP controller -.DRCK1(), // Data register output for USER1 functions -.DRCK2(), // Data register output for USER2 functions -.RESET(test_logic_reset_o), // Reset output from TAP controller -.SEL1(debug_select_o), // USER1 active output -.SEL2(), // USER2 active output -.SHIFT(shift_dr_o), // SHIFT output from TAP controller -.TCK(tck_o), // TCK output from TAP controller -.TDI(tdi_o), // TDI output from TAP controller -.TMS(), // TMS output from TAP controller -.UPDATE(update_dr_o), // UPDATE output from TAP controller -.TDO1(debug_tdo_i), // Data input for USER1 function -.TDO2( 1'b0) // Data input for USER2 function -); - -assign pause_dr_o = 1'b0; -assign run_test_idle_o = 1'b0; - -`else -`ifdef VIRTEX - -// Note that this version is missing three outputs. -// It also does not have a real TCK...DRCK1 is only active when USER1 is selected. - -reg capture_dr_o; -wire update_bscan; -reg update_out; - -BSCAN_VIRTEX BSCAN_VIRTEX_inst ( -.DRCK1(drck), // Data register output for USER1 functions -.DRCK2(), // Data register output for USER2 functions -.RESET(test_logic_reset_o), // Reset output from TAP controller -.SEL1(debug_select_o), // USER1 active output -.SEL2(), // USER2 active output -.SHIFT(shift_dr_o), // SHIFT output from TAP controller -.TDI(tdi_o), // TDI output from TAP controller -.UPDATE(update_bscan), // UPDATE output from TAP controller -.TDO1(debug_tdo_i), // Data input for USER1 function -.TDO2( 1'b0) // Data input for USER2 function -); - -assign pause_dr_o = 1'b0; -assign run_test_idle_o = 1'b0; - -// We get one TCK during capture_dr state (low,high,SHIFT goes high on next DRCK low) -// On that negative edge, set capture_dr, and it will get registered on the rising -// edge, then de-asserted on the same edge that SHIFT goes high. -always @ (negedge tck_o) -begin - if(debug_select_o && !shift_dr_o) - capture_dr_o <= 1'b1; - else - capture_dr_o <= 1'b0; -end - -// The & !update_bscan tern will provide a clock edge so update_dr_o can be registered -// The &debug_select term will drop TCK when the module is un-selected (does not happen in the BSCAN block). -// This allows a user to kludge clock ticks in the IDLE state, which is needed by the advanced debug module. -assign tck_o = (drck & debug_select_o & !update_bscan); - -// This will hold the update_dr output so it can be registered on the rising edge -// of the clock created above. -always @(posedge update_bscan or posedge capture_dr_o or negedge debug_select_o) -begin - if(update_bscan) update_out <= 1'b1; - else if(capture_dr_o) update_out <= 1'b0; - else if(!debug_select_o) update_out <= 1'b0; -end - -assign update_dr_o = update_out; - -`else -`ifdef VIRTEX2 - -// Note that this version is missing two outputs. -// It also does not have a real TCK...DRCK1 is only active when USER1 is selected. - -wire capture_dr_o; -wire update_bscan; -reg update_out; - -BSCAN_VIRTEX2 BSCAN_VIRTEX2_inst ( -.CAPTURE(capture_dr_o), // CAPTURE output from TAP controller -.DRCK1(drck), // Data register output for USER1 functions -.DRCK2(), // Data register output for USER2 functions -.RESET(test_logic_reset_o), // Reset output from TAP controller -.SEL1(debug_select_o), // USER1 active output -.SEL2(), // USER2 active output -.SHIFT(shift_dr_o), // SHIFT output from TAP controller -.TDI(tdi_o), // TDI output from TAP controller -.UPDATE(update_bscan), // UPDATE output from TAP controller -.TDO1(debug_tdo_i), // Data input for USER1 function -.TDO2( 1'b0 ) // Data input for USER2 function -); - -assign pause_dr_o = 1'b0; -assign run_test_idle_o = 1'b0; - -// The & !update_bscan tern will provide a clock edge so update_dr_o can be registered -// The &debug_select term will drop TCK when the module is un-selected (does not happen in the BSCAN block). -// This allows a user to kludge clock ticks in the IDLE state, which is needed by the advanced debug module. -assign tck_o = (drck & debug_select_o & !update_bscan); - -// This will hold the update_dr output so it can be registered on the rising edge -// of the clock created above. -always @(posedge update_bscan or posedge capture_dr_o or negedge debug_select_o) -begin - if(update_bscan) update_out <= 1'b1; - else if(capture_dr_o) update_out <= 1'b0; - else if(!debug_select_o) update_out <= 1'b0; -end - -assign update_dr_o = update_out; - -`else -`ifdef VIRTEX4 -// Note that this version is missing two outputs. -// It also does not have a real TCK...DRCK is only active when USERn is selected. - -wire capture_dr_o; -wire update_bscan; -reg update_out; - -BSCAN_VIRTEX4 #( -.JTAG_CHAIN(virtex_jtag_chain) -) BSCAN_VIRTEX4_inst ( -.CAPTURE(capture_dr_o), // CAPTURE output from TAP controller -.DRCK(drck), // Data register output for USER function -.RESET(test_logic_reset_o), // Reset output from TAP controller -.SEL(debug_select_o), // USER active output -.SHIFT(shift_dr_o), // SHIFT output from TAP controller -.TDI(tdi_o), // TDI output from TAP controller -.UPDATE(update_bscan), // UPDATE output from TAP controller -.TDO( debug_tdo_i ) // Data input for USER function -); - -assign pause_dr_o = 1'b0; -assign run_test_idle_o = 1'b0; - -// The & !update_bscan tern will provide a clock edge so update_dr_o can be registered -// The &debug_select term will drop TCK when the module is un-selected (does not happen in the BSCAN block). -// This allows a user to kludge clock ticks in the IDLE state, which is needed by the advanced debug module. -assign tck_o = (drck & debug_select_o & !update_bscan); - -// This will hold the update_dr output so it can be registered on the rising edge -// of the clock created above. -always @(posedge update_bscan or posedge capture_dr_o or negedge debug_select_o) -begin - if(update_bscan) update_out <= 1'b1; - else if(capture_dr_o) update_out <= 1'b0; - else if(!debug_select_o) update_out <= 1'b0; -end - -assign update_dr_o = update_out; - -`else -`ifdef VIRTEX5 -// Note that this version is missing two outputs. -// It also does not have a real TCK...DRCK is only active when USERn is selected. - -wire capture_dr_o; -wire update_bscan; -reg update_out; - -BSCAN_VIRTEX5 #( -.JTAG_CHAIN(virtex_jtag_chain) -) BSCAN_VIRTEX5_inst ( -.CAPTURE(capture_dr_o), // CAPTURE output from TAP controller -.DRCK(drck), // Data register output for USER function -.RESET(test_logic_reset), // Reset output from TAP controller -.SEL(debug_select_o), // USER active output -.SHIFT(shift_dr_o), // SHIFT output from TAP controller -.TDI(tdi_o), // TDI output from TAP controller -.UPDATE(update_bscan), // UPDATE output from TAP controller -.TDO(debug_tdo_i) // Data input for USER function -); - -assign pause_dr_o = 1'b0; -assign run_test_idle_o = 1'b0; - -// The & !update_bscan tern will provide a clock edge so update_dr_o can be registered -// The &debug_select term will drop TCK when the module is un-selected (does not happen in the BSCAN block). -// This allows a user to kludge clock ticks in the IDLE state, which is needed by the advanced debug module. -assign tck_o = (drck & debug_select_o & !update_bscan); - -// This will hold the update_dr output so it can be registered on the rising edge -// of the clock created above. -always @(posedge update_bscan or posedge capture_dr_o or negedge debug_select_o) -begin - if(update_bscan) update_out <= 1'b1; - else if(capture_dr_o) update_out <= 1'b0; - else if(!debug_select_o) update_out <= 1'b0; -end - -assign update_dr_o = update_out; - - -`endif -`endif -`endif -`endif -`endif -`endif -`endif - -endmodule \ No newline at end of file Index: ADS_RELEASE_1_2_0/trunk/Hardware/xilinx_internal_jtag/doc/License_FDL-1.2.txt =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/xilinx_internal_jtag/doc/License_FDL-1.2.txt (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/xilinx_internal_jtag/doc/License_FDL-1.2.txt (nonexistent) @@ -1,397 +0,0 @@ - GNU Free Documentation License - Version 1.2, November 2002 - - - Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. - 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - -0. PREAMBLE - -The purpose of this License is to make a manual, textbook, or other -functional and useful document "free" in the sense of freedom: to -assure everyone the effective freedom to copy and redistribute it, -with or without modifying it, either commercially or noncommercially. -Secondarily, this License preserves for the author and publisher a way -to get credit for their work, while not being considered responsible -for modifications made by others. - -This License is a kind of "copyleft", which means that derivative -works of the document must themselves be free in the same sense. It -complements the GNU General Public License, which is a copyleft -license designed for free software. - -We have designed this License in order to use it for manuals for free -software, because free software needs free documentation: a free -program should come with manuals providing the same freedoms that the -software does. But this License is not limited to software manuals; -it can be used for any textual work, regardless of subject matter or -whether it is published as a printed book. We recommend this License -principally for works whose purpose is instruction or reference. - - -1. APPLICABILITY AND DEFINITIONS - -This License applies to any manual or other work, in any medium, that -contains a notice placed by the copyright holder saying it can be -distributed under the terms of this License. Such a notice grants a -world-wide, royalty-free license, unlimited in duration, to use that -work under the conditions stated herein. The "Document", below, -refers to any such manual or work. Any member of the public is a -licensee, and is addressed as "you". You accept the license if you -copy, modify or distribute the work in a way requiring permission -under copyright law. - -A "Modified Version" of the Document means any work containing the -Document or a portion of it, either copied verbatim, or with -modifications and/or translated into another language. - -A "Secondary Section" is a named appendix or a front-matter section of -the Document that deals exclusively with the relationship of the -publishers or authors of the Document to the Document's overall subject -(or to related matters) and contains nothing that could fall directly -within that overall subject. (Thus, if the Document is in part a -textbook of mathematics, a Secondary Section may not explain any -mathematics.) The relationship could be a matter of historical -connection with the subject or with related matters, or of legal, -commercial, philosophical, ethical or political position regarding -them. - -The "Invariant Sections" are certain Secondary Sections whose titles -are designated, as being those of Invariant Sections, in the notice -that says that the Document is released under this License. If a -section does not fit the above definition of Secondary then it is not -allowed to be designated as Invariant. The Document may contain zero -Invariant Sections. If the Document does not identify any Invariant -Sections then there are none. - -The "Cover Texts" are certain short passages of text that are listed, -as Front-Cover Texts or Back-Cover Texts, in the notice that says that -the Document is released under this License. A Front-Cover Text may -be at most 5 words, and a Back-Cover Text may be at most 25 words. - -A "Transparent" copy of the Document means a machine-readable copy, -represented in a format whose specification is available to the -general public, that is suitable for revising the document -straightforwardly with generic text editors or (for images composed of -pixels) generic paint programs or (for drawings) some widely available -drawing editor, and that is suitable for input to text formatters or -for automatic translation to a variety of formats suitable for input -to text formatters. A copy made in an otherwise Transparent file -format whose markup, or absence of markup, has been arranged to thwart -or discourage subsequent modification by readers is not Transparent. -An image format is not Transparent if used for any substantial amount -of text. A copy that is not "Transparent" is called "Opaque". - -Examples of suitable formats for Transparent copies include plain -ASCII without markup, Texinfo input format, LaTeX input format, SGML -or XML using a publicly available DTD, and standard-conforming simple -HTML, PostScript or PDF designed for human modification. Examples of -transparent image formats include PNG, XCF and JPG. Opaque formats -include proprietary formats that can be read and edited only by -proprietary word processors, SGML or XML for which the DTD and/or -processing tools are not generally available, and the -machine-generated HTML, PostScript or PDF produced by some word -processors for output purposes only. - -The "Title Page" means, for a printed book, the title page itself, -plus such following pages as are needed to hold, legibly, the material -this License requires to appear in the title page. For works in -formats which do not have any title page as such, "Title Page" means -the text near the most prominent appearance of the work's title, -preceding the beginning of the body of the text. - -A section "Entitled XYZ" means a named subunit of the Document whose -title either is precisely XYZ or contains XYZ in parentheses following -text that translates XYZ in another language. (Here XYZ stands for a -specific section name mentioned below, such as "Acknowledgements", -"Dedications", "Endorsements", or "History".) To "Preserve the Title" -of such a section when you modify the Document means that it remains a -section "Entitled XYZ" according to this definition. - -The Document may include Warranty Disclaimers next to the notice which -states that this License applies to the Document. These Warranty -Disclaimers are considered to be included by reference in this -License, but only as regards disclaiming warranties: any other -implication that these Warranty Disclaimers may have is void and has -no effect on the meaning of this License. - - -2. VERBATIM COPYING - -You may copy and distribute the Document in any medium, either -commercially or noncommercially, provided that this License, the -copyright notices, and the license notice saying this License applies -to the Document are reproduced in all copies, and that you add no other -conditions whatsoever to those of this License. You may not use -technical measures to obstruct or control the reading or further -copying of the copies you make or distribute. However, you may accept -compensation in exchange for copies. If you distribute a large enough -number of copies you must also follow the conditions in section 3. - -You may also lend copies, under the same conditions stated above, and -you may publicly display copies. - - -3. COPYING IN QUANTITY - -If you publish printed copies (or copies in media that commonly have -printed covers) of the Document, numbering more than 100, and the -Document's license notice requires Cover Texts, you must enclose the -copies in covers that carry, clearly and legibly, all these Cover -Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on -the back cover. Both covers must also clearly and legibly identify -you as the publisher of these copies. The front cover must present -the full title with all words of the title equally prominent and -visible. You may add other material on the covers in addition. -Copying with changes limited to the covers, as long as they preserve -the title of the Document and satisfy these conditions, can be treated -as verbatim copying in other respects. - -If the required texts for either cover are too voluminous to fit -legibly, you should put the first ones listed (as many as fit -reasonably) on the actual cover, and continue the rest onto adjacent -pages. - -If you publish or distribute Opaque copies of the Document numbering -more than 100, you must either include a machine-readable Transparent -copy along with each Opaque copy, or state in or with each Opaque copy -a computer-network location from which the general network-using -public has access to download using public-standard network protocols -a complete Transparent copy of the Document, free of added material. -If you use the latter option, you must take reasonably prudent steps, -when you begin distribution of Opaque copies in quantity, to ensure -that this Transparent copy will remain thus accessible at the stated -location until at least one year after the last time you distribute an -Opaque copy (directly or through your agents or retailers) of that -edition to the public. - -It is requested, but not required, that you contact the authors of the -Document well before redistributing any large number of copies, to give -them a chance to provide you with an updated version of the Document. - - -4. MODIFICATIONS - -You may copy and distribute a Modified Version of the Document under -the conditions of sections 2 and 3 above, provided that you release -the Modified Version under precisely this License, with the Modified -Version filling the role of the Document, thus licensing distribution -and modification of the Modified Version to whoever possesses a copy -of it. In addition, you must do these things in the Modified Version: - -A. Use in the Title Page (and on the covers, if any) a title distinct - from that of the Document, and from those of previous versions - (which should, if there were any, be listed in the History section - of the Document). You may use the same title as a previous version - if the original publisher of that version gives permission. -B. List on the Title Page, as authors, one or more persons or entities - responsible for authorship of the modifications in the Modified - Version, together with at least five of the principal authors of the - Document (all of its principal authors, if it has fewer than five), - unless they release you from this requirement. -C. State on the Title page the name of the publisher of the - Modified Version, as the publisher. -D. Preserve all the copyright notices of the Document. -E. Add an appropriate copyright notice for your modifications - adjacent to the other copyright notices. -F. Include, immediately after the copyright notices, a license notice - giving the public permission to use the Modified Version under the - terms of this License, in the form shown in the Addendum below. -G. Preserve in that license notice the full lists of Invariant Sections - and required Cover Texts given in the Document's license notice. -H. Include an unaltered copy of this License. -I. Preserve the section Entitled "History", Preserve its Title, and add - to it an item stating at least the title, year, new authors, and - publisher of the Modified Version as given on the Title Page. If - there is no section Entitled "History" in the Document, create one - stating the title, year, authors, and publisher of the Document as - given on its Title Page, then add an item describing the Modified - Version as stated in the previous sentence. -J. Preserve the network location, if any, given in the Document for - public access to a Transparent copy of the Document, and likewise - the network locations given in the Document for previous versions - it was based on. These may be placed in the "History" section. - You may omit a network location for a work that was published at - least four years before the Document itself, or if the original - publisher of the version it refers to gives permission. -K. For any section Entitled "Acknowledgements" or "Dedications", - Preserve the Title of the section, and preserve in the section all - the substance and tone of each of the contributor acknowledgements - and/or dedications given therein. -L. Preserve all the Invariant Sections of the Document, - unaltered in their text and in their titles. Section numbers - or the equivalent are not considered part of the section titles. -M. Delete any section Entitled "Endorsements". Such a section - may not be included in the Modified Version. -N. Do not retitle any existing section to be Entitled "Endorsements" - or to conflict in title with any Invariant Section. -O. Preserve any Warranty Disclaimers. - -If the Modified Version includes new front-matter sections or -appendices that qualify as Secondary Sections and contain no material -copied from the Document, you may at your option designate some or all -of these sections as invariant. To do this, add their titles to the -list of Invariant Sections in the Modified Version's license notice. -These titles must be distinct from any other section titles. - -You may add a section Entitled "Endorsements", provided it contains -nothing but endorsements of your Modified Version by various -parties--for example, statements of peer review or that the text has -been approved by an organization as the authoritative definition of a -standard. - -You may add a passage of up to five words as a Front-Cover Text, and a -passage of up to 25 words as a Back-Cover Text, to the end of the list -of Cover Texts in the Modified Version. Only one passage of -Front-Cover Text and one of Back-Cover Text may be added by (or -through arrangements made by) any one entity. If the Document already -includes a cover text for the same cover, previously added by you or -by arrangement made by the same entity you are acting on behalf of, -you may not add another; but you may replace the old one, on explicit -permission from the previous publisher that added the old one. - -The author(s) and publisher(s) of the Document do not by this License -give permission to use their names for publicity for or to assert or -imply endorsement of any Modified Version. - - -5. COMBINING DOCUMENTS - -You may combine the Document with other documents released under this -License, under the terms defined in section 4 above for modified -versions, provided that you include in the combination all of the -Invariant Sections of all of the original documents, unmodified, and -list them all as Invariant Sections of your combined work in its -license notice, and that you preserve all their Warranty Disclaimers. - -The combined work need only contain one copy of this License, and -multiple identical Invariant Sections may be replaced with a single -copy. If there are multiple Invariant Sections with the same name but -different contents, make the title of each such section unique by -adding at the end of it, in parentheses, the name of the original -author or publisher of that section if known, or else a unique number. -Make the same adjustment to the section titles in the list of -Invariant Sections in the license notice of the combined work. - -In the combination, you must combine any sections Entitled "History" -in the various original documents, forming one section Entitled -"History"; likewise combine any sections Entitled "Acknowledgements", -and any sections Entitled "Dedications". You must delete all sections -Entitled "Endorsements". - - -6. COLLECTIONS OF DOCUMENTS - -You may make a collection consisting of the Document and other documents -released under this License, and replace the individual copies of this -License in the various documents with a single copy that is included in -the collection, provided that you follow the rules of this License for -verbatim copying of each of the documents in all other respects. - -You may extract a single document from such a collection, and distribute -it individually under this License, provided you insert a copy of this -License into the extracted document, and follow this License in all -other respects regarding verbatim copying of that document. - - -7. AGGREGATION WITH INDEPENDENT WORKS - -A compilation of the Document or its derivatives with other separate -and independent documents or works, in or on a volume of a storage or -distribution medium, is called an "aggregate" if the copyright -resulting from the compilation is not used to limit the legal rights -of the compilation's users beyond what the individual works permit. -When the Document is included in an aggregate, this License does not -apply to the other works in the aggregate which are not themselves -derivative works of the Document. - -If the Cover Text requirement of section 3 is applicable to these -copies of the Document, then if the Document is less than one half of -the entire aggregate, the Document's Cover Texts may be placed on -covers that bracket the Document within the aggregate, or the -electronic equivalent of covers if the Document is in electronic form. -Otherwise they must appear on printed covers that bracket the whole -aggregate. - - -8. TRANSLATION - -Translation is considered a kind of modification, so you may -distribute translations of the Document under the terms of section 4. -Replacing Invariant Sections with translations requires special -permission from their copyright holders, but you may include -translations of some or all Invariant Sections in addition to the -original versions of these Invariant Sections. You may include a -translation of this License, and all the license notices in the -Document, and any Warranty Disclaimers, provided that you also include -the original English version of this License and the original versions -of those notices and disclaimers. In case of a disagreement between -the translation and the original version of this License or a notice -or disclaimer, the original version will prevail. - -If a section in the Document is Entitled "Acknowledgements", -"Dedications", or "History", the requirement (section 4) to Preserve -its Title (section 1) will typically require changing the actual -title. - - -9. TERMINATION - -You may not copy, modify, sublicense, or distribute the Document except -as expressly provided for under this License. Any other attempt to -copy, modify, sublicense or distribute the Document is void, and will -automatically terminate your rights under this License. However, -parties who have received copies, or rights, from you under this -License will not have their licenses terminated so long as such -parties remain in full compliance. - - -10. FUTURE REVISIONS OF THIS LICENSE - -The Free Software Foundation may publish new, revised versions -of the GNU Free Documentation License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. See -http://www.gnu.org/copyleft/. - -Each version of the License is given a distinguishing version number. -If the Document specifies that a particular numbered version of this -License "or any later version" applies to it, you have the option of -following the terms and conditions either of that specified version or -of any later version that has been published (not as a draft) by the -Free Software Foundation. If the Document does not specify a version -number of this License, you may choose any version ever published (not -as a draft) by the Free Software Foundation. - - -ADDENDUM: How to use this License for your documents - -To use this License in a document you have written, include a copy of -the License in the document and put the following copyright and -license notices just after the title page: - - Copyright (c) YEAR YOUR NAME. - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.2 - or any later version published by the Free Software Foundation; - with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. - A copy of the license is included in the section entitled "GNU - Free Documentation License". - -If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, -replace the "with...Texts." line with this: - - with the Invariant Sections being LIST THEIR TITLES, with the - Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. - -If you have Invariant Sections without Cover Texts, or some other -combination of the three, merge those two alternatives to suit the -situation. - -If your document contains nontrivial examples of program code, we -recommend releasing these examples in parallel under your choice of -free software license, such as the GNU General Public License, -to permit their use in free software. Index: ADS_RELEASE_1_2_0/trunk/Hardware/xilinx_internal_jtag/doc/xilinx_internal_jtag.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: ADS_RELEASE_1_2_0/trunk/Hardware/xilinx_internal_jtag/doc/xilinx_internal_jtag.pdf =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/xilinx_internal_jtag/doc/xilinx_internal_jtag.pdf (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/xilinx_internal_jtag/doc/xilinx_internal_jtag.pdf (nonexistent)
ADS_RELEASE_1_2_0/trunk/Hardware/xilinx_internal_jtag/doc/xilinx_internal_jtag.pdf Property changes : Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: ADS_RELEASE_1_2_0/trunk/Hardware/xilinx_internal_jtag/doc/src/xilinx_bscan_waveform.odg =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: ADS_RELEASE_1_2_0/trunk/Hardware/xilinx_internal_jtag/doc/src/xilinx_bscan_waveform.odg =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/xilinx_internal_jtag/doc/src/xilinx_bscan_waveform.odg (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/xilinx_internal_jtag/doc/src/xilinx_bscan_waveform.odg (nonexistent)
ADS_RELEASE_1_2_0/trunk/Hardware/xilinx_internal_jtag/doc/src/xilinx_bscan_waveform.odg Property changes : Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: ADS_RELEASE_1_2_0/trunk/Hardware/xilinx_internal_jtag/doc/src/xilinx_internal_jtag.odt =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: ADS_RELEASE_1_2_0/trunk/Hardware/xilinx_internal_jtag/doc/src/xilinx_internal_jtag.odt =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/xilinx_internal_jtag/doc/src/xilinx_internal_jtag.odt (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/xilinx_internal_jtag/doc/src/xilinx_internal_jtag.odt (nonexistent)
ADS_RELEASE_1_2_0/trunk/Hardware/xilinx_internal_jtag/doc/src/xilinx_internal_jtag.odt Property changes : Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: ADS_RELEASE_1_2_0/trunk/Hardware/xilinx_internal_jtag/doc/gpl-2.0.txt =================================================================== --- ADS_RELEASE_1_2_0/trunk/Hardware/xilinx_internal_jtag/doc/gpl-2.0.txt (revision 25) +++ ADS_RELEASE_1_2_0/trunk/Hardware/xilinx_internal_jtag/doc/gpl-2.0.txt (nonexistent) @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. Index: ADS_RELEASE_1_2_0/Hardware/altera_virtual_jtag/rtl/vhdl/altera_virtual_jtag.vhd =================================================================== --- ADS_RELEASE_1_2_0/Hardware/altera_virtual_jtag/rtl/vhdl/altera_virtual_jtag.vhd (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/altera_virtual_jtag/rtl/vhdl/altera_virtual_jtag.vhd (revision 26) @@ -0,0 +1,175 @@ +////////////////////////////////////////////////////////////////////// +//// //// +//// altera_virtual_jtag.vhd //// +//// //// +//// //// +//// //// +//// Author(s): //// +//// Nathan Yawn (nathan.yawn@opencores.org) //// +//// //// +//// //// +//// //// +////////////////////////////////////////////////////////////////////// +//// //// +//// Copyright (C) 2003-2008 Authors //// +//// //// +//// This source file may be used and distributed without //// +//// restriction provided that this copyright statement is not //// +//// removed from the file and that any derivative work contains //// +//// the original copyright notice and the associated disclaimer. //// +//// //// +//// This source file is free software; you can redistribute it //// +//// and/or modify it under the terms of the GNU Lesser General //// +//// Public License as published by the Free Software Foundation; //// +//// either version 2.1 of the License, or (at your option) any //// +//// later version. //// +//// //// +//// This source is distributed in the hope that it will be //// +//// useful, but WITHOUT ANY WARRANTY; without even the implied //// +//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// +//// PURPOSE. See the GNU Lesser General Public License for more //// +//// details. //// +//// //// +//// You should have received a copy of the GNU Lesser General //// +//// Public License along with this source; if not, download it //// +//// from http://www.opencores.org/lgpl.shtml //// +//// //// +////////////////////////////////////////////////////////////////////// +// // +// This file is a wrapper for the Altera Virtual JTAG device. // +// It is designed to take the place of a separate TAP // +// controller in Altera systems, to allow a user to access a CPU // +// debug module (such as that of the OR1200) through the FPGA's // +// dedicated JTAG / configuration port. // +// // +////////////////////////////////////////////////////////////////////// +// +// CVS Revision History +// +// $Log: altera_virtual_jtag.vhd,v $ +// Revision 1.3 2009/06/16 02:53:19 Nathan +// Changed some signal names for better consistency between different hardware modules. +// +// Revision 1.2 2009/05/17 20:54:47 Nathan +// Changed email address to opencores.org +// +// Revision 1.1 2008/07/18 20:09:31 Nathan +// Changed directory structure to match existing projects. +// +// Revision 1.2 2008/05/22 19:55:20 Nathan +// Added added copyright, CVS log, and brief description. +// + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.all; + +ENTITY altera_virtual_jtag IS + PORT + ( + tck_o : OUT STD_LOGIC; + debug_tdo_o : IN STD_LOGIC; + tdi_o : OUT STD_LOGIC; + test_logic_reset_o : OUT STD_LOGIC; + run_test_idle_o : OUT STD_LOGIC; + shift_dr_o : OUT STD_LOGIC; + capture_dr_o : OUT STD_LOGIC; + pause_dr_o : OUT STD_LOGIC; + update_dr_o : OUT STD_LOGIC; + debug_select_o : OUT STD_LOGIC + ); +END altera_virtual_jtag; + + +ARCHITECTURE OC OF altera_virtual_jtag IS + + CONSTANT CMD_DEBUG : STD_LOGIC_VECTOR (3 downto 0) := "1000"; + + SIGNAL ir_value : STD_LOGIC_VECTOR (3 DOWNTO 0); + SIGNAL exit1_dr : STD_LOGIC; + SIGNAL exit2_dr : STD_LOGIC; + SIGNAL capture_ir : STD_LOGIC; + SIGNAL update_ir : STD_LOGIC; + + COMPONENT sld_virtual_jtag + GENERIC ( + sld_auto_instance_index : STRING; + sld_instance_index : NATURAL; + sld_ir_width : NATURAL; + sld_sim_action : STRING; + sld_sim_n_scan : NATURAL; + sld_sim_total_length : NATURAL; + lpm_type : STRING + ); + PORT ( + tdi : OUT STD_LOGIC ; + jtag_state_rti : OUT STD_LOGIC ; + jtag_state_e1dr : OUT STD_LOGIC ; + jtag_state_e2dr : OUT STD_LOGIC ; + tms : OUT STD_LOGIC ; + jtag_state_pir : OUT STD_LOGIC ; + jtag_state_tlr : OUT STD_LOGIC ; + tck : OUT STD_LOGIC ; + jtag_state_sir : OUT STD_LOGIC ; + ir_in : OUT STD_LOGIC_VECTOR (3 DOWNTO 0); + virtual_state_cir : OUT STD_LOGIC ; + virtual_state_pdr : OUT STD_LOGIC ; + ir_out : IN STD_LOGIC_VECTOR (3 DOWNTO 0); + virtual_state_uir : OUT STD_LOGIC ; + jtag_state_cir : OUT STD_LOGIC ; + jtag_state_uir : OUT STD_LOGIC ; + jtag_state_pdr : OUT STD_LOGIC ; + tdo : IN STD_LOGIC ; + jtag_state_sdrs : OUT STD_LOGIC ; + virtual_state_sdr : OUT STD_LOGIC ; + virtual_state_cdr : OUT STD_LOGIC ; + jtag_state_sdr : OUT STD_LOGIC ; + jtag_state_cdr : OUT STD_LOGIC ; + virtual_state_udr : OUT STD_LOGIC ; + jtag_state_udr : OUT STD_LOGIC ; + jtag_state_sirs : OUT STD_LOGIC ; + jtag_state_e1ir : OUT STD_LOGIC ; + jtag_state_e2ir : OUT STD_LOGIC ; + virtual_state_e1dr : OUT STD_LOGIC ; + virtual_state_e2dr : OUT STD_LOGIC + ); + END COMPONENT; + +BEGIN + + + + sld_virtual_jtag_component : sld_virtual_jtag + GENERIC MAP ( + sld_auto_instance_index => "YES", + sld_instance_index => 0, + sld_ir_width => 4, + sld_sim_action => "", + sld_sim_n_scan => 0, + sld_sim_total_length => 0, + lpm_type => "sld_virtual_jtag" + ) + PORT MAP ( + ir_out => ir_value, + tdo => debug_tdo_o, + tdi => tdi_o, + jtag_state_rti => run_test_idle_o, + tck => tck_o, + ir_in => ir_value, + jtag_state_tlr => test_logic_reset_o, + virtual_state_cir => capture_ir, + virtual_state_pdr => pause_dr_o, + virtual_state_uir => update_ir, + virtual_state_sdr => shift_dr_o, + virtual_state_cdr => capture_dr_o, + virtual_state_udr => update_dr_o, + virtual_state_e1dr => exit1_dr, + virtual_state_e2dr => exit2_dr + ); + + debug_select_o <= '1' when (ir_value = CMD_DEBUG) else '0'; + +END OC; Index: ADS_RELEASE_1_2_0/Hardware/altera_virtual_jtag/doc/src/altera_virtual_jtag.odt =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: ADS_RELEASE_1_2_0/Hardware/altera_virtual_jtag/doc/src/altera_virtual_jtag.odt =================================================================== --- ADS_RELEASE_1_2_0/Hardware/altera_virtual_jtag/doc/src/altera_virtual_jtag.odt (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/altera_virtual_jtag/doc/src/altera_virtual_jtag.odt (revision 26)
ADS_RELEASE_1_2_0/Hardware/altera_virtual_jtag/doc/src/altera_virtual_jtag.odt Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: ADS_RELEASE_1_2_0/Hardware/altera_virtual_jtag/doc/altera_virtual_jtag.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: ADS_RELEASE_1_2_0/Hardware/altera_virtual_jtag/doc/altera_virtual_jtag.pdf =================================================================== --- ADS_RELEASE_1_2_0/Hardware/altera_virtual_jtag/doc/altera_virtual_jtag.pdf (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/altera_virtual_jtag/doc/altera_virtual_jtag.pdf (revision 26)
ADS_RELEASE_1_2_0/Hardware/altera_virtual_jtag/doc/altera_virtual_jtag.pdf Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: ADS_RELEASE_1_2_0/Hardware/altera_virtual_jtag/doc/License_FDL-1.2.txt =================================================================== --- ADS_RELEASE_1_2_0/Hardware/altera_virtual_jtag/doc/License_FDL-1.2.txt (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/altera_virtual_jtag/doc/License_FDL-1.2.txt (revision 26) @@ -0,0 +1,397 @@ + GNU Free Documentation License + Version 1.2, November 2002 + + + Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + +0. PREAMBLE + +The purpose of this License is to make a manual, textbook, or other +functional and useful document "free" in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. + +This License is a kind of "copyleft", which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. + +We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. + + +1. APPLICABILITY AND DEFINITIONS + +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The "Document", below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as "you". You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. + +A "Modified Version" of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. + +A "Secondary Section" is a named appendix or a front-matter section of +the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall subject +(or to related matters) and contains nothing that could fall directly +within that overall subject. (Thus, if the Document is in part a +textbook of mathematics, a Secondary Section may not explain any +mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. + +The "Invariant Sections" are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. + +The "Cover Texts" are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. + +A "Transparent" copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not "Transparent" is called "Opaque". + +Examples of suitable formats for Transparent copies include plain +ASCII without markup, Texinfo input format, LaTeX input format, SGML +or XML using a publicly available DTD, and standard-conforming simple +HTML, PostScript or PDF designed for human modification. Examples of +transparent image formats include PNG, XCF and JPG. Opaque formats +include proprietary formats that can be read and edited only by +proprietary word processors, SGML or XML for which the DTD and/or +processing tools are not generally available, and the +machine-generated HTML, PostScript or PDF produced by some word +processors for output purposes only. + +The "Title Page" means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, "Title Page" means +the text near the most prominent appearance of the work's title, +preceding the beginning of the body of the text. + +A section "Entitled XYZ" means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as "Acknowledgements", +"Dedications", "Endorsements", or "History".) To "Preserve the Title" +of such a section when you modify the Document means that it remains a +section "Entitled XYZ" according to this definition. + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. + + +2. VERBATIM COPYING + +You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no other +conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3. + +You may also lend copies, under the same conditions stated above, and +you may publicly display copies. + + +3. COPYING IN QUANTITY + +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects. + +If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages. + +If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. + +It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to give +them a chance to provide you with an updated version of the Document. + + +4. MODIFICATIONS + +You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version: + +A. Use in the Title Page (and on the covers, if any) a title distinct + from that of the Document, and from those of previous versions + (which should, if there were any, be listed in the History section + of the Document). You may use the same title as a previous version + if the original publisher of that version gives permission. +B. List on the Title Page, as authors, one or more persons or entities + responsible for authorship of the modifications in the Modified + Version, together with at least five of the principal authors of the + Document (all of its principal authors, if it has fewer than five), + unless they release you from this requirement. +C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. +D. Preserve all the copyright notices of the Document. +E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. +F. Include, immediately after the copyright notices, a license notice + giving the public permission to use the Modified Version under the + terms of this License, in the form shown in the Addendum below. +G. Preserve in that license notice the full lists of Invariant Sections + and required Cover Texts given in the Document's license notice. +H. Include an unaltered copy of this License. +I. Preserve the section Entitled "History", Preserve its Title, and add + to it an item stating at least the title, year, new authors, and + publisher of the Modified Version as given on the Title Page. If + there is no section Entitled "History" in the Document, create one + stating the title, year, authors, and publisher of the Document as + given on its Title Page, then add an item describing the Modified + Version as stated in the previous sentence. +J. Preserve the network location, if any, given in the Document for + public access to a Transparent copy of the Document, and likewise + the network locations given in the Document for previous versions + it was based on. These may be placed in the "History" section. + You may omit a network location for a work that was published at + least four years before the Document itself, or if the original + publisher of the version it refers to gives permission. +K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the section all + the substance and tone of each of the contributor acknowledgements + and/or dedications given therein. +L. Preserve all the Invariant Sections of the Document, + unaltered in their text and in their titles. Section numbers + or the equivalent are not considered part of the section titles. +M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. +N. Do not retitle any existing section to be Entitled "Endorsements" + or to conflict in title with any Invariant Section. +O. Preserve any Warranty Disclaimers. + +If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version's license notice. +These titles must be distinct from any other section titles. + +You may add a section Entitled "Endorsements", provided it contains +nothing but endorsements of your Modified Version by various +parties--for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. + +You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. + +The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. + + +5. COMBINING DOCUMENTS + +You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice, and that you preserve all their Warranty Disclaimers. + +The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work. + +In the combination, you must combine any sections Entitled "History" +in the various original documents, forming one section Entitled +"History"; likewise combine any sections Entitled "Acknowledgements", +and any sections Entitled "Dedications". You must delete all sections +Entitled "Endorsements". + + +6. COLLECTIONS OF DOCUMENTS + +You may make a collection consisting of the Document and other documents +released under this License, and replace the individual copies of this +License in the various documents with a single copy that is included in +the collection, provided that you follow the rules of this License for +verbatim copying of each of the documents in all other respects. + +You may extract a single document from such a collection, and distribute +it individually under this License, provided you insert a copy of this +License into the extracted document, and follow this License in all +other respects regarding verbatim copying of that document. + + +7. AGGREGATION WITH INDEPENDENT WORKS + +A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, is called an "aggregate" if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. + +If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. + + +8. TRANSLATION + +Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. + +If a section in the Document is Entitled "Acknowledgements", +"Dedications", or "History", the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. + + +9. TERMINATION + +You may not copy, modify, sublicense, or distribute the Document except +as expressly provided for under this License. Any other attempt to +copy, modify, sublicense or distribute the Document is void, and will +automatically terminate your rights under this License. However, +parties who have received copies, or rights, from you under this +License will not have their licenses terminated so long as such +parties remain in full compliance. + + +10. FUTURE REVISIONS OF THIS LICENSE + +The Free Software Foundation may publish new, revised versions +of the GNU Free Documentation License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. See +http://www.gnu.org/copyleft/. + +Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License "or any later version" applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. + + +ADDENDUM: How to use this License for your documents + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: + + Copyright (c) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.2 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. + A copy of the license is included in the section entitled "GNU + Free Documentation License". + +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with the + Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. + +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + +If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. Index: ADS_RELEASE_1_2_0/Hardware/altera_virtual_jtag/doc/gpl-2.0.txt =================================================================== --- ADS_RELEASE_1_2_0/Hardware/altera_virtual_jtag/doc/gpl-2.0.txt (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/altera_virtual_jtag/doc/gpl-2.0.txt (revision 26) @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/doc/AdvancedDebugInterface.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/doc/AdvancedDebugInterface.pdf =================================================================== --- ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/doc/AdvancedDebugInterface.pdf (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/doc/AdvancedDebugInterface.pdf (revision 26)
ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/doc/AdvancedDebugInterface.pdf Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/doc/src/AdvancedDebugInterface.odt =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/doc/src/AdvancedDebugInterface.odt =================================================================== --- ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/doc/src/AdvancedDebugInterface.odt (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/doc/src/AdvancedDebugInterface.odt (revision 26)
ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/doc/src/AdvancedDebugInterface.odt Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/doc/src/generic_submodule.odg =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/doc/src/generic_submodule.odg =================================================================== --- ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/doc/src/generic_submodule.odg (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/doc/src/generic_submodule.odg (revision 26)
ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/doc/src/generic_submodule.odg Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/doc/src/top_level_module.odg =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/doc/src/top_level_module.odg =================================================================== --- ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/doc/src/top_level_module.odg (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/doc/src/top_level_module.odg (revision 26)
ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/doc/src/top_level_module.odg Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/doc/src/system_block_diagram.odg =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/doc/src/system_block_diagram.odg =================================================================== --- ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/doc/src/system_block_diagram.odg (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/doc/src/system_block_diagram.odg (revision 26)
ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/doc/src/system_block_diagram.odg Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/doc/License_FDL-1.2.txt =================================================================== --- ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/doc/License_FDL-1.2.txt (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/doc/License_FDL-1.2.txt (revision 26) @@ -0,0 +1,397 @@ + GNU Free Documentation License + Version 1.2, November 2002 + + + Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + +0. PREAMBLE + +The purpose of this License is to make a manual, textbook, or other +functional and useful document "free" in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. + +This License is a kind of "copyleft", which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. + +We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. + + +1. APPLICABILITY AND DEFINITIONS + +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The "Document", below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as "you". You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. + +A "Modified Version" of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. + +A "Secondary Section" is a named appendix or a front-matter section of +the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall subject +(or to related matters) and contains nothing that could fall directly +within that overall subject. (Thus, if the Document is in part a +textbook of mathematics, a Secondary Section may not explain any +mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. + +The "Invariant Sections" are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. + +The "Cover Texts" are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. + +A "Transparent" copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not "Transparent" is called "Opaque". + +Examples of suitable formats for Transparent copies include plain +ASCII without markup, Texinfo input format, LaTeX input format, SGML +or XML using a publicly available DTD, and standard-conforming simple +HTML, PostScript or PDF designed for human modification. Examples of +transparent image formats include PNG, XCF and JPG. Opaque formats +include proprietary formats that can be read and edited only by +proprietary word processors, SGML or XML for which the DTD and/or +processing tools are not generally available, and the +machine-generated HTML, PostScript or PDF produced by some word +processors for output purposes only. + +The "Title Page" means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, "Title Page" means +the text near the most prominent appearance of the work's title, +preceding the beginning of the body of the text. + +A section "Entitled XYZ" means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as "Acknowledgements", +"Dedications", "Endorsements", or "History".) To "Preserve the Title" +of such a section when you modify the Document means that it remains a +section "Entitled XYZ" according to this definition. + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. + + +2. VERBATIM COPYING + +You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no other +conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3. + +You may also lend copies, under the same conditions stated above, and +you may publicly display copies. + + +3. COPYING IN QUANTITY + +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects. + +If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages. + +If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. + +It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to give +them a chance to provide you with an updated version of the Document. + + +4. MODIFICATIONS + +You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version: + +A. Use in the Title Page (and on the covers, if any) a title distinct + from that of the Document, and from those of previous versions + (which should, if there were any, be listed in the History section + of the Document). You may use the same title as a previous version + if the original publisher of that version gives permission. +B. List on the Title Page, as authors, one or more persons or entities + responsible for authorship of the modifications in the Modified + Version, together with at least five of the principal authors of the + Document (all of its principal authors, if it has fewer than five), + unless they release you from this requirement. +C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. +D. Preserve all the copyright notices of the Document. +E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. +F. Include, immediately after the copyright notices, a license notice + giving the public permission to use the Modified Version under the + terms of this License, in the form shown in the Addendum below. +G. Preserve in that license notice the full lists of Invariant Sections + and required Cover Texts given in the Document's license notice. +H. Include an unaltered copy of this License. +I. Preserve the section Entitled "History", Preserve its Title, and add + to it an item stating at least the title, year, new authors, and + publisher of the Modified Version as given on the Title Page. If + there is no section Entitled "History" in the Document, create one + stating the title, year, authors, and publisher of the Document as + given on its Title Page, then add an item describing the Modified + Version as stated in the previous sentence. +J. Preserve the network location, if any, given in the Document for + public access to a Transparent copy of the Document, and likewise + the network locations given in the Document for previous versions + it was based on. These may be placed in the "History" section. + You may omit a network location for a work that was published at + least four years before the Document itself, or if the original + publisher of the version it refers to gives permission. +K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the section all + the substance and tone of each of the contributor acknowledgements + and/or dedications given therein. +L. Preserve all the Invariant Sections of the Document, + unaltered in their text and in their titles. Section numbers + or the equivalent are not considered part of the section titles. +M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. +N. Do not retitle any existing section to be Entitled "Endorsements" + or to conflict in title with any Invariant Section. +O. Preserve any Warranty Disclaimers. + +If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version's license notice. +These titles must be distinct from any other section titles. + +You may add a section Entitled "Endorsements", provided it contains +nothing but endorsements of your Modified Version by various +parties--for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. + +You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. + +The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. + + +5. COMBINING DOCUMENTS + +You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice, and that you preserve all their Warranty Disclaimers. + +The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work. + +In the combination, you must combine any sections Entitled "History" +in the various original documents, forming one section Entitled +"History"; likewise combine any sections Entitled "Acknowledgements", +and any sections Entitled "Dedications". You must delete all sections +Entitled "Endorsements". + + +6. COLLECTIONS OF DOCUMENTS + +You may make a collection consisting of the Document and other documents +released under this License, and replace the individual copies of this +License in the various documents with a single copy that is included in +the collection, provided that you follow the rules of this License for +verbatim copying of each of the documents in all other respects. + +You may extract a single document from such a collection, and distribute +it individually under this License, provided you insert a copy of this +License into the extracted document, and follow this License in all +other respects regarding verbatim copying of that document. + + +7. AGGREGATION WITH INDEPENDENT WORKS + +A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, is called an "aggregate" if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. + +If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. + + +8. TRANSLATION + +Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. + +If a section in the Document is Entitled "Acknowledgements", +"Dedications", or "History", the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. + + +9. TERMINATION + +You may not copy, modify, sublicense, or distribute the Document except +as expressly provided for under this License. Any other attempt to +copy, modify, sublicense or distribute the Document is void, and will +automatically terminate your rights under this License. However, +parties who have received copies, or rights, from you under this +License will not have their licenses terminated so long as such +parties remain in full compliance. + + +10. FUTURE REVISIONS OF THIS LICENSE + +The Free Software Foundation may publish new, revised versions +of the GNU Free Documentation License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. See +http://www.gnu.org/copyleft/. + +Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License "or any later version" applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. + + +ADDENDUM: How to use this License for your documents + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: + + Copyright (c) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.2 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. + A copy of the license is included in the section entitled "GNU + Free Documentation License". + +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with the + Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. + +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + +If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/doc/gpl-2.0.txt =================================================================== --- ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/doc/gpl-2.0.txt (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/doc/gpl-2.0.txt (revision 26) @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/full_system/adv_dbg_tb.v =================================================================== --- ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/full_system/adv_dbg_tb.v (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/full_system/adv_dbg_tb.v (revision 26) @@ -0,0 +1,892 @@ +////////////////////////////////////////////////////////////////////// +//// //// +//// adv_dbg_tb.v //// +//// //// +//// //// +//// Testbench for the SoC Advanced Debug Interface. //// +//// //// +//// Author(s): //// +//// Nathan Yawn (nathan.yawn@opencores.org) //// +//// //// +//// //// +//// //// +////////////////////////////////////////////////////////////////////// +//// //// +//// Copyright (C) 2008 Authors //// +//// //// +//// This source file may be used and distributed without //// +//// restriction provided that this copyright statement is not //// +//// removed from the file and that any derivative work contains //// +//// the original copyright notice and the associated disclaimer. //// +//// //// +//// This source file is free software; you can redistribute it //// +//// and/or modify it under the terms of the GNU Lesser General //// +//// Public License as published by the Free Software Foundation; //// +//// either version 2.1 of the License, or (at your option) any //// +//// later version. //// +//// //// +//// This source is distributed in the hope that it will be //// +//// useful, but WITHOUT ANY WARRANTY; without even the implied //// +//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// +//// PURPOSE. See the GNU Lesser General Public License for more //// +//// details. //// +//// //// +//// You should have received a copy of the GNU Lesser General //// +//// Public License along with this source; if not, download it //// +//// from http://www.opencores.org/lgpl.shtml //// +//// //// +////////////////////////////////////////////////////////////////////// +// +// CVS Revision History +// +// $Log: adv_dbg_tb.v,v $ +// Revision 1.4 2009/05/17 20:54:55 Nathan +// Changed email address to opencores.org +// +// Revision 1.3 2008/07/11 08:18:47 Nathan +// Added a bit to the CPU test. Added the hack that allows the driver to work with a Xilinx BSCAN device. +// + + +`include "tap_defines.v" +`include "dbg_defines.v" +`include "dbg_wb_defines.v" + + +// Polynomial for the CRC calculation +// Yes, it's backwards. Yes, this is on purpose. +// To decrease logic + routing, we want to shift the CRC calculation +// in the same direction we use to shift the data out, LSB first. +`define DBG_CRC_POLY 32'hedb88320 + +// These are indicies into an array which hold values for the JTAG outputs +`define JTAG_TMS 0 +`define JTAG_TCK 1 +`define JTAG_TDO 2 + +`define JTAG_TMS_bit 3'h1 +`define JTAG_TCK_bit 3'h2 +`define JTAG_TDO_bit 3'h4 + +`define wait_jtag_period #50 + + +module adv_debug_tb ( + +jtag_tck_o, +jtag_tms_o, +jtag_tdo_o, +jtag_tdi_i, + +wb_clk_o, +sys_rstn_o + + +); + +output jtag_tck_o; +output jtag_tms_o; +output jtag_tdo_o; +input jtag_tdi_i; +output wb_clk_o; +output sys_rstn_o; + +// Connections to the JTAG TAP +reg jtag_tck_o; +reg jtag_tms_o; +reg jtag_tdo_o; +wire jtag_tdi_i; + +reg wb_clk_o; +reg sys_rst_o; +reg sys_rstn_o; + +reg test_enabled; + +// Data which will be written to the WB interface +reg [31:0] static_data32 [0:15]; +reg [15:0] static_data16 [0:15]; +reg [7:0] static_data8 [0:15]; + +// Arrays to hold data read back from the WB interface, for comparison +reg [31:0] input_data32 [0:15]; +reg [15:0] input_data16 [0:15]; +reg [7:0] input_data8 [0:15]; + +reg [32:0] err_data; // holds the contents of the error register from the various modules + +reg failed; +integer i; + +initial +begin + jtag_tck_o = 1'b0; + jtag_tms_o = 1'b0; + jtag_tdo_o = 1'b0; +end + +// Provide the wishbone / CPU / system clock +initial +begin + wb_clk_o = 1'b0; + forever #5 wb_clk_o = ~wb_clk_o; +end + +initial +begin + sys_rstn_o = 1'b1; + #200 sys_rstn_o = 1'b0; + #5000 sys_rstn_o = 1'b1; +end + + +// Start the test (and reset the wishbone) +initial +begin + test_enabled = 1'b0; + + // Init the memory + initialize_memory(32'h0,32'h16); + + #5 test_enabled<= 1'b1; +end + +// This is the main test procedure +always @ (posedge test_enabled) +begin + + $display("Starting advanced debug test"); + + reset_jtag; + #6000; + check_idcode; + #1000; + + // Select the debug module in the IR + set_ir(`DEBUG); + #1000; + + + `ifdef DBG_CPU0_SUPPORTED + // STALL the CPU, so it won't interfere with WB tests + // Select the CPU0 unit in the debug module + #1000; + $display("Selecting CPU0 module at time %t", $time); + select_debug_module(`DBG_TOP_CPU0_DEBUG_MODULE); + + + // Set the stall bit...holding the CPU in reset prevents WB access (?) + $display("Setting reset and stall bits at time %t", $time); + write_module_internal_register(32'h0, 8'h1, 32'h1, 8'h2); // idx, idxlen, data, datalen + #1000; + `endif + + + /////////////////////////////////////////////////////////////////// + // Test the Wishbone unit + //////////////////////////////////////////////////////////////////// + +`ifdef DBG_WISHBONE_SUPPORTED + // Select the WB unit in the debug module + #1000; + $display("Selecting Wishbone module at time %t", $time); + select_debug_module(`DBG_TOP_WISHBONE_DEBUG_MODULE); + + // Reset the error bit + write_module_internal_register(32'h0, 8'h1, 32'h1, 8'h1); // idx, idxlen, data, datalen + #1000; + + ///////////////////////////////// + // Test 8-bit WB access + failed = 0; + $display("Testing WB 8-bit burst write at time %t: resetting ", $time); + do_module_burst_write(3'h1, 16'd16, 32'h87); // 3-bit word size (bytes), 16-bit word count, 32-bit start address + #1000; + $display("Testing WB 8-bit burst read at time %t", $time); + do_module_burst_read(3'h1, 16'd16, 32'h87); + #1000; + for(i = 0; i < 16; i = i+1) begin + if(static_data8[i] != input_data8[i]) begin + failed = 1; + $display("32-bit data mismatch at index %d, wrote 0x%x, read 0x%x", i, static_data8[i], input_data8[i]); + end + end + if(!failed) $display("8-bit read/write OK!"); + + + ///////////////////////////////// + // Test 16-bit WB access + failed = 0; + $display("Testing WB 16-bit burst write at time %t", $time); + do_module_burst_write(3'h2, 16'd16, 32'h22); // 3-bit word size (bytes), 16-bit word count, 32-bit start address + #1000; + $display("Testing WB 16-bit burst read at time %t", $time); + do_module_burst_read(3'h2, 16'd16, 32'h22); + #1000; + for(i = 0; i < 16; i = i+1) begin + if(static_data16[i] != input_data16[i]) begin + failed = 1; + $display("16-bit data mismatch at index %d, wrote 0x%x, read 0x%x", i, static_data16[i], input_data16[i]); + end + end + if(!failed) $display("16-bit read/write OK!"); + + + //////////////////////////////////// + // Test 32-bit WB access + failed = 0; + $display("Testing WB 32-bit burst write at time %t", $time); + do_module_burst_write(3'h4, 16'd16, 32'h100); // 3-bit word size (bytes), 16-bit word count, 32-bit start address + #1000; + $display("Testing WB 32-bit burst read at time %t", $time); + do_module_burst_read(3'h4, 16'd16, 32'h100); + #1000; + for(i = 0; i < 16; i = i+1) begin + if(static_data32[i] != input_data32[i]) begin + failed = 1; + $display("32-bit data mismatch at index %d, wrote 0x%x, read 0x%x", i, static_data32[i], input_data32[i]); + end + end + if(!failed) $display("32-bit read/write OK!"); + + + //////////////////////////////// + // Test error register + err_data = 33'h0; + // Select and reset the error register + write_module_internal_register(`DBG_WB_INTREG_ERROR, `DBG_WB_REGSELECT_SIZE, 64'h1, 8'h1); // regidx,idxlen,writedata, datalen; + //i_wb.cycle_response(`ERR_RESPONSE, 2, 0); // response type, wait cycles, retry_cycles + do_module_burst_write(3'h4, 16'd4, 32'hdeaddead); // 3-bit word size (bytes), 16-bit word count, 32-bit start address + read_module_internal_register(8'd33, err_data); // get the error register + $display("Error bit is %d, error address is %x", err_data[0], err_data>>1); + +`endif // WB module supported + + + /////////////////////////////////////////////////////////////////// + // Test CPU0 unit + //////////////////////////////////////////////////////////////////// +`ifdef DBG_CPU0_SUPPORTED + // Select the CPU0 unit in the debug module + #1000; + $display("Selecting CPU0 module at time %t", $time); + select_debug_module(`DBG_TOP_CPU0_DEBUG_MODULE); + + + // Set the stall bit (clear the reset bit) + $display("Setting reset and stall bits at time %t", $time); + write_module_internal_register(32'h0, 8'h1, 32'h1, 8'h2); // idx, idxlen, data, datalen + #1000; + + // Make sure CPU stalled + $display("Testing reset and stall bits at time %t", $time); + read_module_internal_register(8'd2, err_data); // We assume the register is already selected + $display("Reset and stall bits are %x", err_data); + #1000; + + +// Write some opcodes into the memory +select_debug_module(`DBG_TOP_WISHBONE_DEBUG_MODULE); + +static_data32[0] = 32'hE0000005;/* l.xor r0,r0,r0 */ +static_data32[1] = 32'h9C200000; /* l.addi r1,r0,0x0 */ +static_data32[2] = 32'h18400000;/* l.movhi r2,0x4000 */ +static_data32[3] = 32'hA8420030;/* l.ori r2,r2,0x30 */ +static_data32[4] = 32'h9C210001;/* l.addi r1,r1,1 */ +static_data32[5] = 32'h9C210001; /* l.addi r1,r1,1 */ +static_data32[6] = 32'hD4020800;/* l.sw 0(r2),r1 */ +static_data32[7] = 32'h9C210001;/* l.addi r1,r1,1 */ +static_data32[8] = 32'h84620000;/* l.lwz r3,0(r2) */ +static_data32[9] = 32'h03FFFFFB;/* l.j loop2 */ +static_data32[10] = 32'hE0211800;/* l.add r1,r1,r3 */ + +do_module_burst_write(3'h4, 16'd11, 32'h0); // 3-bit word size (bytes), 16-bit word count, 32-bit start address + + #1000; +select_debug_module(`DBG_TOP_CPU0_DEBUG_MODULE); + +#1000; +$display("Enabling CPU exceptions at time %t", $time); +static_data32[0] = 32'h1; // enable exceptions +do_module_burst_write(3'h4, 16'd1, 32'd17); // 3-bit word size (bytes), 16-bit word count, 32-bit start address + +#1000; +$display("Set \'trap causes stall\' at time %t", $time); +static_data32[0] = 32'h00002000; // Trap causes stall +do_module_burst_write(3'h4, 16'd1, (6 << 11)+20); // 3-bit word size (bytes), 16-bit word count, 32-bit start address + +#1000; +$display("Set PC at time %t", $time); +static_data32[0] = 32'h0; // Set PC +do_module_burst_write(3'h4, 16'd1, 32'd16); // 3-bit word size (bytes), 16-bit word count, 32-bit start address + +#1000; +$display("Set step bit at time %t", $time); +static_data32[0] = (1 << 22); // set step bit +do_module_burst_write(3'h4, 16'd1, (6<<11) + 16); // 3-bit word size (bytes), 16-bit word count, 32-bit start address + +// Unstall x11 +for(i = 0; i < 11; i = i + 1) +begin + #1000; + $display("Unstall (%d/11) at time %t", i, $time); + write_module_internal_register(32'h0, 8'h1, 32'h0, 8'h2); // idx, idxlen, data, datalen +end + +#1000; +#1000; +#1000; + + $display("Getting NPC at time %t", $time); + do_module_burst_read(3'h4, 16'd1, 32'd16); + + $display("NPC = %x, expected 0x00000010", input_data32[0]); + + $display("Getting PPC at time %t", $time); + do_module_burst_read(3'h4, 16'd1, 32'd18); + $display("PPC = %x, expected 0x00000028", input_data32[0]); + + #1000; + $display("Getting R1 at time %t", $time); + do_module_burst_read(3'h4, 16'd1, 32'h401); // Word size, count, addr; save old instr + $display("R1 = %d, expected 5", input_data32[0]); + + #1000; +$display("Un-set step bit at %t", $time); +static_data32[0] = 32'h0; // Trap causes stall +do_module_burst_write(3'h4, 16'd1, (6 << 11)+16); + +// Put a trap instr at 0x20 +#1000; +$display("Select WB at %t", $time); +select_debug_module(`DBG_TOP_WISHBONE_DEBUG_MODULE); +#1000; +$display("Save old instr at %t", $time); +do_module_burst_read(3'h4, 16'd1, 32'h20); // Save old instr +#1000; +$display("Put trap instr at %t", $time); +static_data32[0] = 32'h21000001; /* l.trap */ +do_module_burst_write(3'h4, 16'd1, 32'h20); // put new instr +#1000; +$display("Select CPU0 at %t", $time); +select_debug_module(`DBG_TOP_CPU0_DEBUG_MODULE); +#1000; +$display("Set PC to 0x24 at %t", $time); +static_data32[0] = 32'h24; +do_module_burst_write(3'h4, 16'd1, 32'd16); // Set PC to 0x24 +#1000; +$display("Unstall at time %t", $time); +write_module_internal_register(32'h0, 8'h1, 32'h0, 8'h2); // idx, idxlen, data, datalen + +// We assume it stalls again here... +#1000; + +err_data = 1; +while(err_data != 0) +begin + $display("Testing for stall at %t", $time); + read_module_internal_register(8'd2, err_data); // We assume the register is already selected + #1000; +end + + +// *** The software self-test does 2 separate reads here... + $display("Getting NPC at time %t", $time); + do_module_burst_read(3'h4, 16'd3, 32'd16); + + $display("NPC = %x, expected 0x00000024", input_data32[0]); + $display("PPC = %x, expected 0x00000020", input_data32[2]); + + + +`endif + + +end + +task initialize_memory; + input [31:0] start_addr; + input [31:0] length; + integer i; + reg [31:0] addr; + begin + + for (i=0; i> 1; + crc_out = crc_out ^ ((d ^ c) & `DBG_CRC_POLY); + //$display("CRC Itr %d, inbit = %d, crc = 0x%x", i, data_in[i], crc_out); + end + end +endtask + +task check_idcode; +reg [63:0] readdata; +reg[31:0] idcode; +begin + set_ir(`IDCODE); + + // Read the IDCODE in the DR + write_bit(`JTAG_TMS_bit); // select_dr_scan + write_bit(3'h0); // capture_ir + write_bit(3'h0); // shift_ir + jtag_read_write_stream(64'h0, 8'd32, 1, readdata); // write data, exit_1 + write_bit(`JTAG_TMS_bit); // update_ir + write_bit(3'h0); // idle + idcode = readdata[31:0]; + $display("Got TAP IDCODE 0x%x, expected 0x%x", idcode, `IDCODE_VALUE); +end +endtask; + +task select_debug_module; +input [1:0] moduleid; +reg validid; +begin + write_bit(`JTAG_TMS_bit); // select_dr_scan + write_bit(3'h0); // capture_ir + write_bit(3'h0); // shift_ir + jtag_write_stream({1'b1,moduleid}, 8'h3, 1); // write data, exit_1 + write_bit(`JTAG_TMS_bit); // update_dr + write_bit(3'h0); // idle + + $display("Selecting module (%0x)", moduleid); + + // Read back the status to make sure a valid chain is selected + /* Pointless, the newly selected module would respond instead... + write_bit(`JTAG_TMS_bit); // select_dr_scan + write_bit(3'h0); // capture_ir + write_bit(3'h0); // shift_ir + read_write_bit(`JTAG_TMS_bit, validid); // get data, exit_1 + write_bit(`JTAG_TMS_bit); // update_dr + write_bit(3'h0); // idle + + if(validid) $display("Selected valid module (%0x)", moduleid); + else $display("Failed to select module (%0x)", moduleid); + */ +end +endtask + + +task send_module_burst_command; +input [3:0] opcode; +input [31:0] address; +input [15:0] burstlength; +reg [63:0] streamdata; +begin + streamdata = {11'h0,1'b0,opcode,address,burstlength}; + write_bit(`JTAG_TMS_bit); // select_dr_scan + write_bit(3'h0); // capture_ir + write_bit(3'h0); // shift_ir + jtag_write_stream(streamdata, 8'd53, 1); // write data, exit_1 + write_bit(`JTAG_TMS_bit); // update_dr + write_bit(3'h0); // idle +end +endtask + +task select_module_internal_register; // Really just a read, with discarded data + input [31:0] regidx; + input [7:0] len; // the length of the register index data, we assume not more than 32 + reg[63:0] streamdata; +begin + streamdata = 64'h0; + streamdata = streamdata | regidx; + streamdata = streamdata | (`DBG_WB_CMD_IREG_SEL << len); + write_bit(`JTAG_TMS_bit); // select_dr_scan + write_bit(3'h0); // capture_ir + write_bit(3'h0); // shift_ir + jtag_write_stream(streamdata, (len+5), 1); // write data, exit_1 + write_bit(`JTAG_TMS_bit); // update_dr + write_bit(3'h0); // idle +end +endtask + + +task read_module_internal_register; // We assume the register is already selected + //input [31:0] regidx; + input [7:0] len; // the length of the data desired, we assume a max of 64 bits + output [63:0] instream; + reg [63:0] bitmask; +begin + instream = 64'h0; + // We shift out all 0's, which is a NOP to the debug unit + write_bit(`JTAG_TMS_bit); // select_dr_scan + write_bit(3'h0); // capture_ir + write_bit(3'h0); // shift_ir + // Shift at least 5 bits, as this is the min, for a valid NOP + jtag_read_write_stream(64'h0, len+4,1,instream); // exit_1 + write_bit(`JTAG_TMS_bit); // update_dr + write_bit(3'h0); // idle + bitmask = 64'hffffffffffffffff; + bitmask = bitmask << len; + bitmask = ~bitmask; + instream = instream & bitmask; // Cut off any unwanted excess bits +end +endtask + +task write_module_internal_register; + input [31:0] regidx; // the length of the register index data + input [7:0] idxlen; + input [63:0] writedata; + input [7:0] datalen; // the length of the data to write. We assume the two length combined are 59 or less. + reg[63:0] streamdata; +begin + streamdata = 64'h0; // This will 0 the toplevel/module select bit + streamdata = streamdata | writedata; + streamdata = streamdata | (regidx << datalen); + streamdata = streamdata | (`DBG_WB_CMD_IREG_WR << (idxlen+datalen)); + + write_bit(`JTAG_TMS_bit); // select_dr_scan + write_bit(3'h0); // capture_ir + write_bit(3'h0); // shift_ir + jtag_write_stream(streamdata, (idxlen+datalen+5), 1); // write data, exit_1 + write_bit(`JTAG_TMS_bit); // update_dr + write_bit(3'h0); // idle +end +endtask + +// This includes the sending of the burst command +task do_module_burst_read; +input [5:0] word_size_bytes; +input [15:0] word_count; +input [31:0] start_address; +reg [3:0] opcode; +reg status; +reg [63:0] instream; +integer i; +integer j; +reg [31:0] crc_calc_i; +reg [31:0] crc_calc_o; // temp signal... +reg [31:0] crc_read; +reg [5:0] word_size_bits; +begin + $display("Doing burst read, word size %d, word count %d, start address 0x%x", word_size_bytes, word_count, start_address); + instream = 64'h0; + word_size_bits = word_size_bytes << 3; + crc_calc_i = 32'hffffffff; + + // Send the command + case (word_size_bytes) + 3'h1: opcode = `DBG_WB_CMD_BREAD8; + 3'h2: opcode = `DBG_WB_CMD_BREAD16; + 3'h4: opcode = `DBG_WB_CMD_BREAD32; + default: + begin + $display("Tried burst read with invalid word size (%0x), defaulting to 4-byte words", word_size_bytes); + opcode = `DBG_WB_CMD_BREAD32; + end + endcase + + send_module_burst_command(opcode,start_address, word_count); // returns to state idle + + // This charming kludge provides ONE TCK, in case a xilinx BSCAN TAP is used, + // because the FSM needs it between the read burst command and the actual + // read burst. Blech. + #500; + set_ir(`IDCODE); + #500; + set_ir(`DEBUG); + #500; + + // Get us back to shift_dr mode to read a burst + write_bit(`JTAG_TMS_bit); // select_dr_scan + write_bit(3'h0); // capture_ir + write_bit(3'h0); // shift_ir + + // Now, repeat... + for(i = 0; i < word_count; i=i+1) begin + // Get 1 status bit, then word_size_bytes*8 bits + status = 1'b0; + j = 0; + while(!status) begin + read_write_bit(3'h0, status); + j = j + 1; + end + + if(j > 1) begin + $display("Took %0d tries before good status bit during burst read", j); + end + + jtag_read_write_stream(64'h0, {2'h0,(word_size_bytes<<3)},0,instream); + //$display("Read 0x%0x", instream[31:0]); + compute_crc(crc_calc_i, instream[31:0], word_size_bits, crc_calc_o); + crc_calc_i = crc_calc_o; + if(word_size_bytes == 1) input_data8[i] = instream[7:0]; + else if(word_size_bytes == 2) input_data16[i] = instream[15:0]; + else input_data32[i] = instream[31:0]; + end + + // Read the data CRC from the debug module. + jtag_read_write_stream(64'h0, 6'd32, 1, crc_read); + if(crc_calc_o != crc_read) $display("CRC ERROR! Computed 0x%x, read CRC 0x%x", crc_calc_o, crc_read); + else $display("CRC OK!"); + + // Finally, shift out 5 0's, to make the next command a NOP + // Not necessary, debug unit won't latch a new opcode at the end of a burst + //jtag_write_stream(64'h0, 8'h5, 1); + write_bit(`JTAG_TMS_bit); // update_ir + write_bit(3'h0); // idle +end +endtask + + +task do_module_burst_write; +input [5:0] word_size_bytes; +input [15:0] word_count; +input [31:0] start_address; +reg [3:0] opcode; +reg status; +reg [63:0] dataword; +integer i; +integer j; +reg [31:0] crc_calc_i; +reg [31:0] crc_calc_o; +reg crc_match; +reg [5:0] word_size_bits; +begin + $display("Doing burst write, word size %d, word count %d, start address 0x%x", word_size_bytes, word_count, start_address); + word_size_bits = word_size_bytes << 3; + crc_calc_i = 32'hffffffff; + + // Send the command + case (word_size_bytes) + 3'h1: opcode = `DBG_WB_CMD_BWRITE8; + 3'h2: opcode = `DBG_WB_CMD_BWRITE16; + 3'h4: opcode = `DBG_WB_CMD_BWRITE32; + default: + begin + $display("Tried burst write with invalid word size (%0x), defaulting to 4-byte words", word_size_bytes); + opcode = `DBG_WB_CMD_BWRITE32; + end + endcase + + send_module_burst_command(opcode, start_address, word_count); // returns to state idle + + // Get us back to shift_dr mode to write a burst + write_bit(`JTAG_TMS_bit); // select_dr_scan + write_bit(3'h0); // capture_ir + write_bit(3'h0); // shift_ir + + + // Write a start bit (a 1) so it knows when to start counting + write_bit(`JTAG_TDO_bit); + + // Now, repeat... + for(i = 0; i < word_count; i=i+1) begin + // Write word_size_bytes*8 bits, then get 1 status bit + if(word_size_bytes == 4) dataword = {32'h0, static_data32[i]}; + else if(word_size_bytes == 2) dataword = {48'h0, static_data16[i]}; + else dataword = {56'h0, static_data8[i]}; + + + jtag_write_stream(dataword, {2'h0,(word_size_bytes<<3)},0); + compute_crc(crc_calc_i, dataword[31:0], word_size_bits, crc_calc_o); + crc_calc_i = crc_calc_o; + + // Check if WB bus is ready + // *** THIS WILL NOT WORK IF THERE IS MORE THAN 1 DEVICE IN THE JTAG CHAIN!!! + status = 1'b0; + read_write_bit(3'h0, status); + + if(!status) begin + $display("Bad status bit during burst write, index %d", i); + end + + + //$display("Wrote 0x%0x", dataword); + end + + // Send the CRC we computed + jtag_write_stream(crc_calc_o, 6'd32,0); + + // Read the 'CRC match' bit, and go to exit1_dr + read_write_bit(`JTAG_TMS_bit, crc_match); + if(!crc_match) $display("CRC ERROR! match bit after write is %d (computed CRC 0x%x)", crc_match, crc_calc_o); + else $display("CRC OK!"); + + // Finally, shift out 5 0's, to make the next command a NOP + // Not necessary, module will not latch new opcode during burst + //jtag_write_stream(64'h0, 8'h5, 1); + write_bit(`JTAG_TMS_bit); // update_ir + write_bit(3'h0); // idle +end + +endtask + + +// Puts a value in the TAP IR, assuming we start in IDLE state. +// Returns to IDLE state when finished +task set_ir; +input [3:0] irval; +begin + write_bit(`JTAG_TMS_bit); // select_dr_scan + write_bit(`JTAG_TMS_bit); // select_ir_scan + write_bit(3'h0); // capture_ir + write_bit(3'h0); // shift_ir + jtag_write_stream({60'h0,irval}, 8'h4, 1); // write data, exit_1 + write_bit(`JTAG_TMS_bit); // update_ir + write_bit(3'h0); // idle +end +endtask + +// Resets the TAP and puts it into idle mode +task reset_jtag; +integer i; +begin + for(i = 0; i < 8; i=i+1) begin + write_bit(`JTAG_TMS_bit); // 5 TMS should put us in test_logic_reset mode + end + write_bit(3'h0); // idle +end +endtask + + +//////////////////////////////////////////////////////////////////////////// +// Tasks to write or read-write a string of data + +task jtag_write_stream; +input [63:0] stream; +input [7:0] len; +input set_last_bit; +integer i; +integer databit; +reg [2:0] bits; +begin + for(i = 0; i < (len-1); i=i+1) begin + databit = (stream >> i) & 1'h1; + bits = databit << `JTAG_TDO; + write_bit(bits); + end + + databit = (stream >> i) & 1'h1; + bits = databit << `JTAG_TDO; + if(set_last_bit) bits = (bits | `JTAG_TMS_bit); + write_bit(bits); + +end +endtask + + +task jtag_read_write_stream; +input [63:0] stream; +input [7:0] len; +input set_last_bit; +output [63:0] instream; +integer i; +integer databit; +reg [2:0] bits; +reg inbit; +begin + instream = 64'h0; + for(i = 0; i < (len-1); i=i+1) begin + databit = (stream >> i) & 1'h1; + bits = databit << `JTAG_TDO; + read_write_bit(bits, inbit); + instream = (instream | (inbit << i)); + end + + databit = (stream >> i) & 1'h1; + bits = databit << `JTAG_TDO; + if(set_last_bit) bits = (bits | `JTAG_TMS_bit); + read_write_bit(bits, inbit); + instream = (instream | (inbit << (len-1))); +end +endtask + +///////////////////////////////////////////////////////////////////////// +// Tasks which write or readwrite a single bit (including clocking) + +task write_bit; + input [2:0] bitvals; + begin + + // Set data + jtag_out(bitvals & ~(`JTAG_TCK_bit)); + `wait_jtag_period; + + // Raise clock + jtag_out(bitvals | `JTAG_TCK_bit); + `wait_jtag_period; + + // drop clock (making output available in the SHIFT_xR states) + jtag_out(bitvals & ~(`JTAG_TCK_bit)); + `wait_jtag_period; + end +endtask + +task read_write_bit; + input [2:0] bitvals; + output l_tdi_val; + begin + + // read bit state + l_tdi_val <= jtag_tdi_i; + + // Set data + jtag_out(bitvals & ~(`JTAG_TCK_bit)); + `wait_jtag_period; + + // Raise clock + jtag_out(bitvals | `JTAG_TCK_bit); + `wait_jtag_period; + + // drop clock (making output available in the SHIFT_xR states) + jtag_out(bitvals & ~(`JTAG_TCK_bit)); + `wait_jtag_period; + end +endtask + +///////////////////////////////////////////////////////////////// +// Basic functions to set the state of the JTAG TAP I/F bits + +task jtag_out; + input [2:0] bitvals; + begin + + jtag_tck_o <= bitvals[`JTAG_TCK]; + jtag_tms_o <= bitvals[`JTAG_TMS]; + jtag_tdo_o <= bitvals[`JTAG_TDO]; + end +endtask + + +task jtag_inout; + input [2:0] bitvals; + output l_tdi_val; + begin + + jtag_tck_o <= bitvals[`JTAG_TCK]; + jtag_tms_o <= bitvals[`JTAG_TMS]; + jtag_tdo_o <= bitvals[`JTAG_TDO]; + + l_tdi_val <= jtag_tdi_i; + end +endtask + +endmodule \ No newline at end of file Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/full_system/wave.do =================================================================== --- ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/full_system/wave.do (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/full_system/wave.do (revision 26) @@ -0,0 +1,499 @@ +onerror {resume} +quietly WaveActivateNextPane {} 0 +add wave -noupdate -format Logic /xsv_fpga_top/jtag_tdi +add wave -noupdate -format Logic /xsv_fpga_top/jtag_tms +add wave -noupdate -format Logic /xsv_fpga_top/jtag_tck +add wave -noupdate -format Logic /xsv_fpga_top/jtag_tdo +add wave -noupdate -format Logic /xsv_fpga_top/debug_select +add wave -noupdate -divider {Top level signals} +add wave -noupdate -format Logic /xsv_fpga_top/clk +add wave -noupdate -format Logic /xsv_fpga_top/rstn +add wave -noupdate -format Logic /xsv_fpga_top/rst_r +add wave -noupdate -format Logic /xsv_fpga_top/wb_rst +add wave -noupdate -format Logic /xsv_fpga_top/cpu_rst +add wave -noupdate -divider {Top-level CPU dbg} +add wave -noupdate -format Literal /xsv_fpga_top/dbg_lss +add wave -noupdate -format Literal /xsv_fpga_top/dbg_is +add wave -noupdate -format Literal /xsv_fpga_top/dbg_wp +add wave -noupdate -format Logic /xsv_fpga_top/dbg_bp +add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_dat_dbg +add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_dat_risc +add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_adr +add wave -noupdate -format Logic /xsv_fpga_top/dbg_ewt +add wave -noupdate -format Logic /xsv_fpga_top/dbg_stall +add wave -noupdate -format Logic /xsv_fpga_top/dbg_we +add wave -noupdate -format Logic /xsv_fpga_top/dbg_stb +add wave -noupdate -format Logic /xsv_fpga_top/dbg_ack +add wave -noupdate -divider {CPU IWB} +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/iwb_clk_i +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/iwb_rst_i +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/iwb_ack_i +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/iwb_err_i +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/iwb_rty_i +add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/or1200_top/iwb_dat_i +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/iwb_cyc_o +add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/or1200_top/iwb_adr_o +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/iwb_stb_o +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/iwb_we_o +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/iwb_sel_o +add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/or1200_top/iwb_dat_o +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/iwb_cab_o +add wave -noupdate -divider {DBG WB signals} +add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/wb_dm_adr_o +add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/wb_dm_dat_i +add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/wb_dm_dat_o +add wave -noupdate -format Literal /xsv_fpga_top/wb_dm_sel_o +add wave -noupdate -format Logic /xsv_fpga_top/wb_dm_we_o +add wave -noupdate -format Logic /xsv_fpga_top/wb_dm_stb_o +add wave -noupdate -format Logic /xsv_fpga_top/wb_dm_cyc_o +add wave -noupdate -format Logic /xsv_fpga_top/wb_dm_cab_o +add wave -noupdate -format Logic /xsv_fpga_top/wb_dm_ack_i +add wave -noupdate -format Logic /xsv_fpga_top/wb_dm_err_i +add wave -noupdate -divider {DBG WB BIU} +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/tck_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/rst_i +add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/data_i +add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/data_o +add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/addr_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/strobe_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/rd_wrn_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/rdy_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/err_o +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/word_size_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/wb_clk_i +add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/wb_adr_o +add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/wb_dat_o +add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/wb_dat_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/wb_cyc_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/wb_stb_o +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/wb_sel_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/wb_we_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/wb_ack_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/wb_cab_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/wb_err_i +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/wb_cti_o +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/wb_bte_o +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/sel_reg +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/addr_reg +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/data_in_reg +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/data_out_reg +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/wr_reg +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/str_sync +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/rdy_sync +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/err_reg +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/rdy_sync_tff1 +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/rdy_sync_tff2 +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/rdy_sync_tff2q +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/str_sync_wbff1 +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/str_sync_wbff2 +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/str_sync_wbff2q +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/data_o_en +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/rdy_sync_en +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/err_en +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/be_dec +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/start_toggle +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/swapped_data_i +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/biu/swapped_data_out +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/wb_fsm_state +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu/next_fsm_state +add wave -noupdate -divider {DBG WB Module} +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/tck_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/module_tdo_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/tdi_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/capture_dr_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/shift_dr_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/update_dr_i +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/data_register_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/module_select_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/top_inhibit_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/rst_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/wb_clk_i +add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_top/i_dbg_wb/wb_adr_o +add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_top/i_dbg_wb/wb_dat_o +add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_top/i_dbg_wb/wb_dat_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/wb_cyc_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/wb_stb_o +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/wb_sel_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/wb_we_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/wb_ack_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/wb_cab_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/wb_err_i +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/wb_cti_o +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/wb_bte_o +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/address_counter +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/bit_count +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/word_count +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/operation +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/data_out_shift_reg +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/internal_register_select +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/internal_reg_error +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/addr_sel +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/addr_ct_en +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/op_reg_en +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/bit_ct_en +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/bit_ct_rst +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/word_ct_sel +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/word_ct_en +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/out_reg_ld_en +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/out_reg_shift_en +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/out_reg_data_sel +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/tdo_output_sel +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu_strobe +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/crc_clr +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/crc_en +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/crc_in_sel +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/crc_shift_en +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/regsel_ld_en +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/intreg_ld_en +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/error_reg_en +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu_clr_err +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/word_count_zero +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/bit_count_max +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/module_cmd +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu_ready +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu_err +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/burst_instruction +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/intreg_instruction +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/intreg_write +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/rd_op +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/crc_match +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/bit_count_32 +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/word_size_bits +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/word_size_bytes +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/incremented_address +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/data_to_addr_counter +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/data_to_word_counter +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/decremented_word_count +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/address_data_in +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/count_data_in +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/operation_in +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/data_to_biu +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/data_from_biu +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/crc_data_out +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/crc_data_in +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/crc_serial_out +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/reg_select_data +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/out_reg_data +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/data_from_internal_reg +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_wb/biu_rst +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/module_state +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_wb/module_next_state +add wave -noupdate -divider {DBG Top} +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/tck_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/tdi_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/tdo_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/rst_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/shift_dr_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/pause_dr_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/update_dr_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/capture_dr_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/debug_select_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/wb_clk_i +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/wb_adr_o +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/wb_dat_o +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/wb_dat_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/wb_cyc_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/wb_stb_o +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/wb_sel_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/wb_we_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/wb_ack_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/wb_cab_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/wb_err_i +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/wb_cti_o +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/wb_bte_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/cpu0_clk_i +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/cpu0_addr_o +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/cpu0_data_i +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/cpu0_data_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/cpu0_bp_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/cpu0_stall_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/cpu0_stb_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/cpu0_we_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/cpu0_ack_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/cpu0_rst_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/tdo_wb +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/tdo_cpu0 +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/tdo_cpu1 +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/input_shift_reg +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/module_id_reg +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/select_inhibit +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/module_inhibit +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/select_cmd +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/module_id_in +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/module_selects +add wave -noupdate -divider {DBG CPU0 Module} +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/tck_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/module_tdo_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/tdi_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/capture_dr_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/shift_dr_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/update_dr_i +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/data_register_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/module_select_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/top_inhibit_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/rst_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/cpu_clk_i +add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/cpu_addr_o +add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/cpu_data_i +add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/cpu_data_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/cpu_stb_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/cpu_we_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/cpu_ack_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/cpu_rst_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/cpu_bp_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/cpu_stall_o +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/address_counter +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/bit_count +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/word_count +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/operation +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/data_out_shift_reg +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/internal_register_select +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/internal_reg_status +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/addr_sel +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/addr_ct_en +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/op_reg_en +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/bit_ct_en +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/bit_ct_rst +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/word_ct_sel +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/word_ct_en +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/out_reg_ld_en +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/out_reg_shift_en +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/out_reg_data_sel +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/tdo_output_sel +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/biu_strobe +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/crc_clr +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/crc_en +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/crc_in_sel +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/crc_shift_en +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/regsel_ld_en +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/intreg_ld_en +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/word_count_zero +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/bit_count_max +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/module_cmd +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/biu_ready +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/burst_instruction +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/intreg_instruction +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/intreg_write +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/rd_op +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/crc_match +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/bit_count_32 +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/word_size_bits +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/address_increment +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/incremented_address +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/data_to_addr_counter +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/data_to_word_counter +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/decremented_word_count +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/address_data_in +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/count_data_in +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/operation_in +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/data_to_biu +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/data_from_biu +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/crc_data_out +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/crc_data_in +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/crc_serial_out +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/reg_select_data +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/out_reg_data +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/data_from_internal_reg +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/status_reg_wr +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/module_state +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/module_next_state +add wave -noupdate -divider {DBG CPU0 BIU} +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/tck_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/rst_i +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/data_i +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/data_o +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/addr_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/strobe_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/rd_wrn_i +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/rdy_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/cpu_clk_i +add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/cpu_addr_o +add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/cpu_data_i +add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/cpu_data_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/cpu_stb_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/cpu_we_o +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/cpu_ack_i +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/addr_reg +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/data_in_reg +add wave -noupdate -format Literal /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/data_out_reg +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/wr_reg +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/str_sync +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/rdy_sync +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/rdy_sync_tff1 +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/rdy_sync_tff2 +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/rdy_sync_tff2q +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/str_sync_wbff1 +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/str_sync_wbff2 +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/str_sync_wbff2q +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/data_o_en +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/rdy_sync_en +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/start_toggle +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/cpu_fsm_state +add wave -noupdate -format Logic /xsv_fpga_top/dbg_top/i_dbg_cpu_or1k/or1k_biu_i/next_fsm_state +add wave -noupdate -divider {CPU debug unit} +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/clk +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/rst +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dcpu_cycstb_i +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dcpu_we_i +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dcpu_adr_i +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dcpu_dat_lsu +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dcpu_dat_dc +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/icpu_cycstb_i +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/ex_freeze +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/branch_op +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/ex_insn +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/id_pc +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/spr_dat_npc +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/rf_dataw +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/du_dsr +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/du_stall +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/du_addr +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/du_dat_i +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/du_dat_o +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/du_read +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/du_write +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/du_except +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/du_hwbkpt +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/spr_cs +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/spr_write +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/spr_addr +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/spr_dat_i +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/spr_dat_o +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dbg_stall_i +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dbg_ewt_i +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dbg_lss_o +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dbg_is_o +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dbg_wp_o +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dbg_bp_o +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dbg_stb_i +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dbg_we_i +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dbg_adr_i +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dbg_dat_i +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dbg_dat_o +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dbg_ack_o +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dmr1 +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dmr2 +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dsr +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/drr +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dvr0 +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dvr1 +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dvr2 +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dvr3 +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dvr4 +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dvr5 +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dvr6 +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dvr7 +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dcr0 +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dcr1 +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dcr2 +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dcr3 +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dcr4 +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dcr5 +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dcr6 +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dcr7 +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dwcr0 +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/dwcr1 +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dmr1_sel +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dmr2_sel +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dsr_sel +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/drr_sel +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dvr0_sel +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dvr1_sel +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dvr2_sel +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dvr3_sel +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dvr4_sel +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dvr5_sel +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dvr6_sel +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dvr7_sel +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dcr0_sel +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dcr1_sel +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dcr2_sel +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dcr3_sel +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dcr4_sel +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dcr5_sel +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dcr6_sel +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dcr7_sel +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dwcr0_sel +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dwcr1_sel +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_du/dbg_bp_r +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/except_stop +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/tbia_dat_o +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/tbim_dat_o +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/tbar_dat_o +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_du/tbts_dat_o +add wave -noupdate -divider {CPU SPRs} +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/clk +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/rst +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/flagforw +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/flag_we +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/flag +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/cyforw +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/cy_we +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/carry +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/addrbase +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/addrofs +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/dat_i +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/alu_op +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/branch_op +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/epcr +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/eear +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/esr +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/except_started +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/to_wbmux +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/epcr_we +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/eear_we +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/esr_we +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/pc_we +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/sr_we +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/to_sr +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/sr +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/spr_dat_cfgr +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/spr_dat_rf +add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/spr_dat_npc +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/spr_dat_ppc +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/spr_dat_mac +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/spr_dat_pic +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/spr_dat_tt +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/spr_dat_pm +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/spr_dat_dmmu +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/spr_dat_immu +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/spr_dat_du +add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/spr_addr +add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/spr_dat_o +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/spr_cs +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/spr_we +add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/du_addr +add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/du_dat_du +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/du_read +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/du_write +add wave -noupdate -format Literal -radix hexadecimal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/du_dat_cpu +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/write_spr +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/read_spr +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/cfgr_sel +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/rf_sel +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/npc_sel +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/ppc_sel +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/sr_sel +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/epcr_sel +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/eear_sel +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/esr_sel +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/sys_data +add wave -noupdate -format Logic /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/du_access +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/sprs_op +add wave -noupdate -format Literal /xsv_fpga_top/or1200_top/or1200_cpu/or1200_sprs/unqualified_cs +TreeUpdate [SetDefaultTree] +WaveRestoreCursors {{Cursor 1} {6180 ps} 0} +configure wave -namecolwidth 391 +configure wave -valuecolwidth 100 +configure wave -justifyvalue left +configure wave -signalnamewidth 0 +configure wave -snapdistance 10 +configure wave -datasetprefix 0 +configure wave -rowmargin 4 +configure wave -childrowmargin 2 +configure wave -gridoffset 0 +configure wave -gridperiod 1 +configure wave -griddelta 40 +configure wave -timeline 0 +update +WaveRestoreZoom {0 ps} {6180 ps} Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/full_system/xsv_fpga_top.v =================================================================== --- ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/full_system/xsv_fpga_top.v (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/full_system/xsv_fpga_top.v (revision 26) @@ -0,0 +1,911 @@ +////////////////////////////////////////////////////////////////////// +//// //// +//// OR1K test application for XESS XSV board, Top Level //// +//// //// +//// This file is part of the OR1K test application //// +//// http://www.opencores.org/cores/or1k/ //// +//// //// +//// Description //// +//// Top level instantiating all the blocks. //// +//// //// +//// To Do: //// +//// - nothing really //// +//// //// +//// Author(s): //// +//// - Damjan Lampret, lampret@opencores.org //// +//// //// +////////////////////////////////////////////////////////////////////// +//// //// +//// Copyright (C) 2001 Authors //// +//// //// +//// This source file may be used and distributed without //// +//// restriction provided that this copyright statement is not //// +//// removed from the file and that any derivative work contains //// +//// the original copyright notice and the associated disclaimer. //// +//// //// +//// This source file is free software; you can redistribute it //// +//// and/or modify it under the terms of the GNU Lesser General //// +//// Public License as published by the Free Software Foundation; //// +//// either version 2.1 of the License, or (at your option) any //// +//// later version. //// +//// //// +//// This source is distributed in the hope that it will be //// +//// useful, but WITHOUT ANY WARRANTY; without even the implied //// +//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// +//// PURPOSE. See the GNU Lesser General Public License for more //// +//// details. //// +//// //// +//// You should have received a copy of the GNU Lesser General //// +//// Public License along with this source; if not, download it //// +//// from http://www.opencores.org/lgpl.shtml //// +//// //// +////////////////////////////////////////////////////////////////////// +// +// CVS Revision History +// +// $Log: xsv_fpga_top.v,v $ +// Revision 1.3 2008/07/11 08:22:17 Nathan +// Added code to make the native TAP simulate a Xilinx BSCAN device, and code to simulate the behavior of the xilinx_internal_jtag module. The adv_dbg_module should get inputs that emulate the xilinx_internal_jtag device outputs. +// +// Revision 1.10 2004/04/05 08:44:35 lampret +// Merged branch_qmem into main tree. +// +// Revision 1.8 2003/04/07 21:05:58 lampret +// WB = 1/2 RISC clock test code enabled. +// +// Revision 1.7 2003/04/07 01:28:17 lampret +// Adding OR1200_CLMODE_1TO2 test code. +// +// Revision 1.6 2002/08/12 05:35:12 lampret +// rty_i are unused - tied to zero. +// +// Revision 1.5 2002/03/29 20:58:51 lampret +// Changed hardcoded address for fake MC to use a define. +// +// Revision 1.4 2002/03/29 16:30:47 lampret +// Fixed port names that changed. +// +// Revision 1.3 2002/03/29 15:50:03 lampret +// Added response from memory controller (addr 0x60000000) +// +// Revision 1.2 2002/03/21 17:39:16 lampret +// Fixed some typos +// +// + +`include "xsv_fpga_defines.v" +//`include "bench_defines.v" + +module xsv_fpga_top ( + + // + // Global signals + // + //clk, + //rstn, + + // UART signals + uart_stx, uart_srx + + // SDRAM signals + /* + sdram_clk_i, sdram_addr_o, sdram_ba_o, sdram_dqm_o, + sdram_we_o, sdram_cas_o, sdram_ras_o, + sdram_cke_o, sdram_cs_o, sdram_data_io + */ +); + +// +// I/O Ports +// + +// +// Global +// +//input clk; +//input rstn; + +// UART +input uart_srx; +output uart_stx; + +// SDRAM +/* +input sdram_clk_i; +output [11:0] sdram_addr_o; +output [1:0] sdram_ba_o; +output [3:0] sdram_dqm_o; +output sdram_we_o; +output sdram_cas_o; +output sdram_ras_o; +output sdram_cke_o; +output sdram_cs_o; +inout [31:0] sdram_data_io; +*/ + +// +// Internal wires +// + +wire clk; +wire rstn; + +// +// Debug core master i/f wires +// +wire [31:0] wb_dm_adr_o; +wire [31:0] wb_dm_dat_i; +wire [31:0] wb_dm_dat_o; +wire [3:0] wb_dm_sel_o; +wire wb_dm_we_o; +wire wb_dm_stb_o; +wire wb_dm_cyc_o; +wire wb_dm_cab_o; +wire wb_dm_ack_i; +wire wb_dm_err_i; + +// +// Debug <-> RISC wires +// +wire [3:0] dbg_lss; +wire [1:0] dbg_is; +wire [10:0] dbg_wp; +wire dbg_bp; +wire [31:0] dbg_dat_dbg; +wire [31:0] dbg_dat_risc; +wire [31:0] dbg_adr; +wire dbg_ewt; +wire dbg_stall; +wire dbg_we; +wire dbg_stb; +wire dbg_ack; +wire dbg_cpu0_rst; + +// +// TAP<->dbg_interface +// +wire debug_rst; +wire debug_select; +wire debug_tdi; +wire debug_tdo; +wire shift_dr; +wire pause_dr; +wire update_dr; +wire capture_dr; +wire drck; // To emulate the BSCAN_VIRTEX/SPARTAN devices + +// +// RISC instruction master i/f wires +// +wire [31:0] wb_rim_adr_o; +wire wb_rim_cyc_o; +wire [31:0] wb_rim_dat_i; +wire [31:0] wb_rim_dat_o; +wire [3:0] wb_rim_sel_o; +wire wb_rim_ack_i; +wire wb_rim_err_i; +wire wb_rim_rty_i = 1'b0; +wire wb_rim_we_o; +wire wb_rim_stb_o; +wire wb_rim_cab_o; +//wire [31:0] wb_rif_adr; +//reg prefix_flash; + +// +// RISC data master i/f wires +// +wire [31:0] wb_rdm_adr_o; +wire wb_rdm_cyc_o; +wire [31:0] wb_rdm_dat_i; +wire [31:0] wb_rdm_dat_o; +wire [3:0] wb_rdm_sel_o; +wire wb_rdm_ack_i; +wire wb_rdm_err_i; +wire wb_rdm_rty_i = 1'b0; +wire wb_rdm_we_o; +wire wb_rdm_stb_o; +wire wb_rdm_cab_o; + +// +// RISC misc +// +//wire [19:0] pic_ints; + +// +// SRAM controller slave i/f wires +// +wire [31:0] wb_ss_dat_i; +wire [31:0] wb_ss_dat_o; +wire [31:0] wb_ss_adr_i; +wire [3:0] wb_ss_sel_i; +wire wb_ss_we_i; +wire wb_ss_cyc_i; +wire wb_ss_stb_i; +wire wb_ss_ack_o; +wire wb_ss_err_o; + + +// +// UART16550 core slave i/f wires +// +wire [31:0] wb_us_dat_i; +wire [31:0] wb_us_dat_o; +wire [31:0] wb_us_adr_i; +wire [3:0] wb_us_sel_i; +wire wb_us_we_i; +wire wb_us_cyc_i; +wire wb_us_stb_i; +wire wb_us_ack_o; +wire wb_us_err_o; + +// +// UART external i/f wires +// +wire uart_stx; +wire uart_srx; + + +// +// Memory controller core slave i/f wires +// +/* +wire [31:0] wb_mem_dat_i; +wire [31:0] wb_mem_dat_o; +wire [31:0] wb_mem_adr_i; +wire [3:0] wb_mem_sel_i; +wire wb_mem_we_i; +wire wb_mem_cyc_i; +wire wb_mem_stb_i; +wire wb_mem_ack_o; +wire wb_mem_err_o; + +// Internal mem control wires +wire [7:0] mc_cs; +wire [12:0] mc_addr_o; + + +// Memory control external wires +wire sdram_clk_i; +wire [11:0] sdram_addr_o; +wire [1:0] sdram_ba_o; +wire [3:0] sdram_dqm_o; +wire sdram_we_o; +wire sdram_cas_o; +wire sdram_ras_o; +wire sdram_cke_o; +wire sdram_cs_o; +wire [31:0] sdram_data_io; +*/ + +// +// JTAG wires +// +wire jtag_tdi; +wire jtag_tms; +wire jtag_tck; +wire jtag_trst; +wire jtag_tdo; + + +// +// Reset debounce +// +reg rstn_debounce; +wire rst_r; +reg wb_rst; +reg cpu_rst; + +// +// Global clock +// +`ifdef OR1200_CLMODE_1TO2 +reg wb_clk; +`else +wire wb_clk; +`endif + +// +// Reset debounce +// +always @(posedge wb_clk or negedge rstn) + if (~rstn) + rstn_debounce <= 1'b0; + else + rstn_debounce <= #1 1'b1; + +assign rst_r = ~rstn_debounce; +//assign dbg_trst = rstn_debounce & jtag_trst; + +// +// Reset debounce +// +always @(posedge wb_clk) + wb_rst <= #1 rst_r; + +always @ (posedge wb_clk) + cpu_rst <= dbg_cpu0_rst | rst_r; + +// +// This is purely for testing 1/2 WB clock +// This should never be used when implementing in +// an FPGA. It is used only for simulation regressions. +// +`ifdef OR1200_CLMODE_1TO2 +initial wb_clk = 0; +always @(posedge clk) + wb_clk = ~wb_clk; +`else +// +// Some Xilinx P&R tools need this +// +`ifdef TARGET_VIRTEX +IBUFG IBUFG1 ( + .O ( wb_clk ), + .I ( clk ) +); +`else +assign wb_clk = clk; +`endif +`endif // OR1200_CLMODE_1TO2 + +// +// Unused WISHBONE signals +// +assign wb_us_err_o = 1'b0; + + +assign jtag_tvref = 1'b1; +assign jtag_tgnd = 1'b0; + +// JTAG / adv. debug control testbench +adv_debug_tb tb ( + +.jtag_tck_o(jtag_tck), +.jtag_tms_o(jtag_tms), +.jtag_tdo_o(jtag_tdi), +.jtag_tdi_i(jtag_tdo), + +.wb_clk_o(clk), +.sys_rstn_o(rstn) +); + +// +// JTAG TAP controller instantiation +// +tap_top tap ( + // JTAG pads + .tms_pad_i(jtag_tms), + .tck_pad_i(jtag_tck), + .trstn_pad_i(1'b1), + .tdi_pad_i(jtag_tdi), + .tdo_pad_o(jtag_tdo), + .tdo_padoe_o(), + + // TAP states + .test_logic_reset_o(debug_rst), + .run_test_idle_o(), + .shift_dr_o(shift_dr), + .pause_dr_o(), + .update_dr_o(update_dr), + .capture_dr_o(capture_dr), + + // Select signals for boundary scan or mbist + .extest_select_o(), + .sample_preload_select_o(), + .mbist_select_o(), + .debug_select_o(debug_select), + + // TDO signal that is connected to TDI of sub-modules. + .tdo_o(debug_tdi), + + // TDI signals from sub-modules + .debug_tdi_i(debug_tdo), // from debug module + .bs_chain_tdi_i(1'b0), // from Boundary Scan Chain + .mbist_tdi_i(1'b0) // from Mbist Chain + ); + +// This is taken from the xilinx bscan_virtex4.v module +// It simulates the DRCK output of a BSCAN_* block +assign drck = ((debug_select & !shift_dr & !capture_dr) || + (debug_select & shift_dr & jtag_tck) || + (debug_select & capture_dr & jtag_tck)); + +reg xshift; +reg xcapture; +reg xupdate; +reg xselect; + +// TAP state outputs are also delayed half a cycle. +always @(negedge jtag_tck) +begin + xshift = shift_dr; + xcapture = capture_dr; + xupdate = update_dr; + xselect = debug_select; +end + +////////////////////////////////////////// + + +wire tck2; +assign tck2 = (drck & !xupdate); + +reg update2; + +always @ (posedge xupdate or posedge xcapture or negedge xselect) +begin + if(xupdate) update2 <= 1'b1; + else if(xcapture) update2 <= 1'b0; + else if(!xselect) update2 <= 1'b0; +end + +// +// Instantiation of the development i/f +// +dbg_top dbg_top ( + + // JTAG pins + .tck_i ( tck2 ), + .tdi_i ( debug_tdi ), + .tdo_o ( debug_tdo ), + .rst_i ( debug_rst ), + + // TAP states + .shift_dr_i( xshift ), + .pause_dr_i( pause_dr ), + .update_dr_i( update2 ), + .capture_dr_i (xcapture), + + // Instructions + .debug_select_i( xselect ), + + // RISC signals + .cpu0_clk_i ( wb_clk ), + .cpu0_addr_o ( dbg_adr ), + .cpu0_data_i ( dbg_dat_risc ), + .cpu0_data_o ( dbg_dat_dbg ), + .cpu0_bp_i ( dbg_bp ), + .cpu0_stall_o ( dbg_stall ), + .cpu0_stb_o ( dbg_stb ), + .cpu0_we_o ( dbg_we ), + .cpu0_ack_i ( dbg_ack ), + .cpu0_rst_o ( dbg_cpu0_rst), + + // WISHBONE common + .wb_clk_i ( wb_clk ), + + // WISHBONE master interface + .wb_adr_o ( wb_dm_adr_o ), + .wb_dat_o ( wb_dm_dat_o ), + .wb_dat_i ( wb_dm_dat_i ), + .wb_cyc_o ( wb_dm_cyc_o ), + .wb_stb_o ( wb_dm_stb_o ), + .wb_sel_o ( wb_dm_sel_o ), + .wb_we_o ( wb_dm_we_o ), + .wb_ack_i ( wb_dm_ack_i ), + .wb_cab_o ( wb_dm_cab_o ), + .wb_err_i ( wb_dm_err_i ), + .wb_cti_o (), + .wb_bte_o () +); + + +// +// Instantiation of the OR1200 RISC +// +or1200_top or1200_top ( + + // Common + .rst_i ( cpu_rst ), + .clk_i ( clk ), +`ifdef OR1200_CLMODE_1TO2 + .clmode_i ( 2'b01 ), +`else +`ifdef OR1200_CLMODE_1TO4 + .clmode_i ( 2'b11 ), +`else + .clmode_i ( 2'b00 ), +`endif +`endif + + // WISHBONE Instruction Master + .iwb_clk_i ( wb_clk ), + .iwb_rst_i ( wb_rst ), + .iwb_cyc_o ( wb_rim_cyc_o ), + .iwb_adr_o ( wb_rim_adr_o ), + .iwb_dat_i ( wb_rim_dat_i ), + .iwb_dat_o ( wb_rim_dat_o ), + .iwb_sel_o ( wb_rim_sel_o ), + .iwb_ack_i ( wb_rim_ack_i ), + .iwb_err_i ( wb_rim_err_i ), + .iwb_rty_i ( wb_rim_rty_i ), + .iwb_we_o ( wb_rim_we_o ), + .iwb_stb_o ( wb_rim_stb_o ), + .iwb_cab_o ( wb_rim_cab_o ), + + // WISHBONE Data Master + .dwb_clk_i ( wb_clk ), + .dwb_rst_i ( wb_rst ), + .dwb_cyc_o ( wb_rdm_cyc_o ), + .dwb_adr_o ( wb_rdm_adr_o ), + .dwb_dat_i ( wb_rdm_dat_i ), + .dwb_dat_o ( wb_rdm_dat_o ), + .dwb_sel_o ( wb_rdm_sel_o ), + .dwb_ack_i ( wb_rdm_ack_i ), + .dwb_err_i ( wb_rdm_err_i ), + .dwb_rty_i ( wb_rdm_rty_i ), + .dwb_we_o ( wb_rdm_we_o ), + .dwb_stb_o ( wb_rdm_stb_o ), + .dwb_cab_o ( wb_rdm_cab_o ), + + // Debug + .dbg_stall_i ( dbg_stall ), // Set to 1'b0 if debug is absent / broken + .dbg_dat_i ( dbg_dat_dbg ), + .dbg_adr_i ( dbg_adr ), + .dbg_ewt_i ( 1'b0 ), + .dbg_lss_o ( ), + .dbg_is_o ( ), + .dbg_wp_o ( ), + .dbg_bp_o ( dbg_bp ), + .dbg_dat_o ( dbg_dat_risc ), + .dbg_ack_o ( dbg_ack ), + .dbg_stb_i ( dbg_stb ), + .dbg_we_i ( dbg_we ), + + // Power Management + .pm_clksd_o ( ), + .pm_cpustall_i ( 1'b0 ), + .pm_dc_gate_o ( ), + .pm_ic_gate_o ( ), + .pm_dmmu_gate_o ( ), + .pm_immu_gate_o ( ), + .pm_tt_gate_o ( ), + .pm_cpu_gate_o ( ), + .pm_wakeup_o ( ), + .pm_lvolt_o ( ), + + // Interrupts + .pic_ints_i (20'b0) +); + + +// +// Instantiation of the On-chip RAM controller +// +onchip_ram_top #( + .dwidth (32), + .size_bytes(16384) + ) onchip_ram_top ( + + // WISHBONE common + .wb_clk_i ( wb_clk ), + .wb_rst_i ( wb_rst ), + + // WISHBONE slave + .wb_dat_i ( wb_ss_dat_i ), + .wb_dat_o ( wb_ss_dat_o ), + .wb_adr_i ( wb_ss_adr_i ), + .wb_sel_i ( wb_ss_sel_i ), + .wb_we_i ( wb_ss_we_i ), + .wb_cyc_i ( wb_ss_cyc_i ), + .wb_stb_i ( wb_ss_stb_i ), + .wb_ack_o ( wb_ss_ack_o ), + .wb_err_o ( wb_ss_err_o ) +); + +// +// Instantiation of the UART16550 +// +uart_top uart_top ( + + // WISHBONE common + .wb_clk_i ( wb_clk ), + .wb_rst_i ( wb_rst ), + + // WISHBONE slave + .wb_adr_i ( wb_us_adr_i[4:0] ), + .wb_dat_i ( wb_us_dat_i ), + .wb_dat_o ( wb_us_dat_o ), + .wb_we_i ( wb_us_we_i ), + .wb_stb_i ( wb_us_stb_i ), + .wb_cyc_i ( wb_us_cyc_i ), + .wb_ack_o ( wb_us_ack_o ), + .wb_sel_i ( wb_us_sel_i ), + + // Interrupt request + .int_o ( ), + + // UART signals + // serial input/output + .stx_pad_o ( uart_stx ), + .srx_pad_i ( uart_srx ), + + // modem signals + .rts_pad_o ( ), + .cts_pad_i ( 1'b0 ), + .dtr_pad_o ( ), + .dsr_pad_i ( 1'b0 ), + .ri_pad_i ( 1'b0 ), + .dcd_pad_i ( 1'b0 ) +); + +/* +mc_wrapper mc_wrapper ( + .clk_i ( wb_clk ), + .rst_i ( wb_rst ), + .clk_mem_i ( sdram_clk_i ), + + .wb_data_i ( wb_mem_dat_i ), + .wb_data_o ( wb_mem_dat_o ), + .wb_addr_i ( wb_mem_adr_i ), + .wb_sel_i ( wb_mem_sel_i ), + .wb_we_i ( wb_mem_we_i ), + .wb_cyc_i ( wb_mem_cyc_i ), + .wb_stb_i ( wb_mem_stb_i ), + .wb_ack_o ( wb_mem_ack_o ), + .wb_err_o ( wb_mem_err_o ), + + .susp_req_i ( 1'b0 ), + .resume_req_i ( 1'b0 ), + .suspended_o (), + .poc_o ( ), // This is an output so the rest of the system can configure itself + + .sdram_addr_o ( mc_addr_o ), + .sdram_ba_o ( sdram_ba_o ), + .sdram_cas_n_o ( sdram_cas_o ), + .sdram_ras_n_o ( sdram_ras_o ), + .sdram_cke_n_o ( sdram_cke_o ), + + .mc_dqm_o ( sdram_dqm_o ), + .mc_we_n_o ( sdram_we_o ), + .mc_oe_n_o ( ), + .mc_data_io ( sdram_data_io ), + .mc_parity_io ( ), + .mc_cs_n_o ( mc_cs ) + ); + +assign sdram_cs_o = mc_cs[0]; +assign sdram_addr_o = mc_addr_o[11:0]; +*/ + +// +// Instantiation of the Traffic COP +// +wb_conbus_top #(.s0_addr_w (`APP_ADDR_DEC_W), + .s0_addr (`APP_ADDR_SDRAM), + .s1_addr_w (`APP_ADDR_DEC2_W), + .s1_addr (`APP_ADDR_OCRAM), + .s27_addr_w (`APP_ADDR_DECP_W), + .s2_addr (`APP_ADDR_VGA), + .s3_addr (`APP_ADDR_ETH), + .s4_addr (`APP_ADDR_AUDIO), + .s5_addr (`APP_ADDR_UART), + .s6_addr (`APP_ADDR_PS2), + .s7_addr (`APP_ADDR_RES1) + ) tc_top ( + + // WISHBONE common + .clk_i ( wb_clk ), + .rst_i ( wb_rst ), + + // WISHBONE Initiator 0 + .m0_cyc_i ( 1'b0 ), + .m0_stb_i ( 1'b0 ), + .m0_cab_i ( 1'b0 ), + .m0_adr_i ( 32'h0000_0000 ), + .m0_sel_i ( 4'b0000 ), + .m0_we_i ( 1'b0 ), + .m0_dat_i ( 32'h0000_0000 ), + .m0_dat_o ( ), + .m0_ack_o ( ), + .m0_err_o ( ), + + // WISHBONE Initiator 1 + .m1_cyc_i ( 1'b0 ), + .m1_stb_i ( 1'b0 ), + .m1_cab_i ( 1'b0 ), + .m1_adr_i ( 32'h0000_0000 ), + .m1_sel_i ( 4'b0000 ), + .m1_we_i ( 1'b0 ), + .m1_dat_i ( 32'h0000_0000 ), + .m1_dat_o ( ), + .m1_ack_o ( ), + .m1_err_o ( ), + + // WISHBONE Initiator 2 + .m2_cyc_i ( 1'b0 ), + .m2_stb_i ( 1'b0 ), + .m2_cab_i ( 1'b0 ), + .m2_adr_i ( 32'h0000_0000 ), + .m2_sel_i ( 4'b0000 ), + .m2_we_i ( 1'b0 ), + .m2_dat_i ( 32'h0000_0000 ), + .m2_dat_o ( ), + .m2_ack_o ( ), + .m2_err_o ( ), + + // WISHBONE Initiator 3 + .m3_cyc_i ( wb_dm_cyc_o ), + .m3_stb_i ( wb_dm_stb_o ), + .m3_cab_i ( wb_dm_cab_o ), + .m3_adr_i ( wb_dm_adr_o ), + .m3_sel_i ( wb_dm_sel_o ), + .m3_we_i ( wb_dm_we_o ), + .m3_dat_i ( wb_dm_dat_o ), + .m3_dat_o ( wb_dm_dat_i ), + .m3_ack_o ( wb_dm_ack_i ), + .m3_err_o ( wb_dm_err_i ), + + // WISHBONE Initiator 4 + .m4_cyc_i ( wb_rdm_cyc_o ), + .m4_stb_i ( wb_rdm_stb_o ), + .m4_cab_i ( wb_rdm_cab_o ), + .m4_adr_i ( wb_rdm_adr_o ), + .m4_sel_i ( wb_rdm_sel_o ), + .m4_we_i ( wb_rdm_we_o ), + .m4_dat_i ( wb_rdm_dat_o ), + .m4_dat_o ( wb_rdm_dat_i ), + .m4_ack_o ( wb_rdm_ack_i ), + .m4_err_o ( wb_rdm_err_i ), + + // WISHBONE Initiator 5 + .m5_cyc_i ( wb_rim_cyc_o ), + .m5_stb_i ( wb_rim_stb_o ), + .m5_cab_i ( wb_rim_cab_o ), + .m5_adr_i ( wb_rim_adr_o ), + .m5_sel_i ( wb_rim_sel_o ), + .m5_we_i ( wb_rim_we_o ), + .m5_dat_i ( wb_rim_dat_o ), + .m5_dat_o ( wb_rim_dat_i ), + .m5_ack_o ( wb_rim_ack_i ), + .m5_err_o ( wb_rim_err_i ), + + // WISHBONE Initiator 6 + .m6_cyc_i ( 1'b0 ), + .m6_stb_i ( 1'b0 ), + .m6_cab_i ( 1'b0 ), + .m6_adr_i ( 32'h0000_0000 ), + .m6_sel_i ( 4'b0000 ), + .m6_we_i ( 1'b0 ), + .m6_dat_i ( 32'h0000_0000 ), + .m6_dat_o ( ), + .m6_ack_o ( ), + .m6_err_o ( ), + + // WISHBONE Initiator 7 + .m7_cyc_i ( 1'b0 ), + .m7_stb_i ( 1'b0 ), + .m7_cab_i ( 1'b0 ), + .m7_adr_i ( 32'h0000_0000 ), + .m7_sel_i ( 4'b0000 ), + .m7_we_i ( 1'b0 ), + .m7_dat_i ( 32'h0000_0000 ), + .m7_dat_o ( ), + .m7_ack_o ( ), + .m7_err_o ( ), + + // WISHBONE Target 0 + .s0_cyc_o ( ), + .s0_stb_o ( ), + .s0_cab_o ( ), + .s0_adr_o ( ), + .s0_sel_o ( ), + .s0_we_o ( ), + .s0_dat_o ( ), + .s0_dat_i ( 32'h0000_0000 ), + .s0_ack_i ( 1'b0 ), + .s0_err_i ( 1'b0 ), + .s0_rty_i ( 1'b0 ), + /* + .s0_cyc_o ( wb_mem_cyc_i ), + .s0_stb_o ( wb_mem_stb_i ), + .s0_cab_o ( wb_mem_cab_i ), + .s0_adr_o ( wb_mem_adr_i ), + .s0_sel_o ( wb_mem_sel_i ), + .s0_we_o ( wb_mem_we_i ), + .s0_dat_o ( wb_mem_dat_i ), + .s0_dat_i ( wb_mem_dat_o ), + .s0_ack_i ( wb_mem_ack_o ), + .s0_err_i ( wb_mem_err_o ), + .s0_rty_i ( 1'b0), + */ + + // WISHBONE Target 1 + .s1_cyc_o ( wb_ss_cyc_i ), + .s1_stb_o ( wb_ss_stb_i ), + .s1_cab_o ( wb_ss_cab_i ), + .s1_adr_o ( wb_ss_adr_i ), + .s1_sel_o ( wb_ss_sel_i ), + .s1_we_o ( wb_ss_we_i ), + .s1_dat_o ( wb_ss_dat_i ), + .s1_dat_i ( wb_ss_dat_o ), + .s1_ack_i ( wb_ss_ack_o ), + .s1_err_i ( wb_ss_err_o ), + .s1_rty_i ( 1'b0 ), + + // WISHBONE Target 2 + .s2_cyc_o ( ), + .s2_stb_o ( ), + .s2_cab_o ( ), + .s2_adr_o ( ), + .s2_sel_o ( ), + .s2_we_o ( ), + .s2_dat_o ( ), + .s2_dat_i ( 32'h0000_0000 ), + .s2_ack_i ( 1'b0 ), + .s2_err_i ( 1'b0 ), + .s2_rty_i ( 1'b0 ), + + // WISHBONE Target 3 + .s3_cyc_o ( ), + .s3_stb_o ( ), + .s3_cab_o ( ), + .s3_adr_o ( ), + .s3_sel_o ( ), + .s3_we_o ( ), + .s3_dat_o ( ), + .s3_dat_i ( 32'h0000_0000 ), + .s3_ack_i ( 1'b0 ), + .s3_err_i ( 1'b0 ), + .s3_rty_i ( 1'b0), + + // WISHBONE Target 4 + .s4_cyc_o ( ), + .s4_stb_o ( ), + .s4_cab_o ( ), + .s4_adr_o ( ), + .s4_sel_o ( ), + .s4_we_o ( ), + .s4_dat_o ( ), + .s4_dat_i ( 32'h0000_0000 ), + .s4_ack_i ( 1'b0 ), + .s4_err_i ( 1'b0 ), + .s4_rty_i ( 1'b0), + + // WISHBONE Target 5 + .s5_cyc_o ( wb_us_cyc_i ), + .s5_stb_o ( wb_us_stb_i ), + .s5_cab_o ( wb_us_cab_i ), + .s5_adr_o ( wb_us_adr_i ), + .s5_sel_o ( wb_us_sel_i ), + .s5_we_o ( wb_us_we_i ), + .s5_dat_o ( wb_us_dat_i ), + .s5_dat_i ( wb_us_dat_o ), + .s5_ack_i ( wb_us_ack_o ), + .s5_err_i ( wb_us_err_o ), + .s5_rty_i ( 1'b0 ), + + // WISHBONE Target 6 + .s6_cyc_o ( ), + .s6_stb_o ( ), + .s6_cab_o ( ), + .s6_adr_o ( ), + .s6_sel_o ( ), + .s6_we_o ( ), + .s6_dat_o ( ), + .s6_dat_i ( 32'h0000_0000 ), + .s6_ack_i ( 1'b0 ), + .s6_err_i ( 1'b0 ), + .s6_rty_i ( 1'b0), + + // WISHBONE Target 7 + .s7_cyc_o ( ), + .s7_stb_o ( ), + .s7_cab_o ( ), + .s7_adr_o ( ), + .s7_sel_o ( ), + .s7_we_o ( ), + .s7_dat_o ( ), + .s7_dat_i ( 32'h0000_0000 ), + .s7_ack_i ( 1'b0 ), + .s7_err_i ( 1'b0 ), + .s7_rty_i ( 1'b0) + +); + +//initial begin +// $dumpvars(0); +// $dumpfile("dump.vcd"); +//end + +endmodule Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/full_system/xsv_fpga_defines.v =================================================================== --- ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/full_system/xsv_fpga_defines.v (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/full_system/xsv_fpga_defines.v (revision 26) @@ -0,0 +1,100 @@ +////////////////////////////////////////////////////////////////////// +//// //// +//// OR1K test app definitions //// +//// //// +//// This file is part of the OR1K test application //// +//// http://www.opencores.org/cores/or1k/xess/ //// +//// //// +//// Description //// +//// DEfine target technology etc. Right now FIFOs are available //// +//// only for Xilinx Virtex FPGAs. (TARGET_VIRTEX) //// +//// //// +//// To Do: //// +//// - nothing really //// +//// //// +//// Author(s): //// +//// - Damjan Lampret, damjan.lampret@opencores.org //// +//// //// +////////////////////////////////////////////////////////////////////// +//// //// +//// Copyright (C) 2001 Authors //// +//// //// +//// This source file may be used and distributed without //// +//// restriction provided that this copyright statement is not //// +//// removed from the file and that any derivative work contains //// +//// the original copyright notice and the associated disclaimer. //// +//// //// +//// This source file is free software; you can redistribute it //// +//// and/or modify it under the terms of the GNU Lesser General //// +//// Public License as published by the Free Software Foundation; //// +//// either version 2.1 of the License, or (at your option) any //// +//// later version. //// +//// //// +//// This source is distributed in the hope that it will be //// +//// useful, but WITHOUT ANY WARRANTY; without even the implied //// +//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// +//// PURPOSE. See the GNU Lesser General Public License for more //// +//// details. //// +//// //// +//// You should have received a copy of the GNU Lesser General //// +//// Public License along with this source; if not, download it //// +//// from http://www.opencores.org/lgpl.shtml //// +//// //// +////////////////////////////////////////////////////////////////////// +// +// CVS Revision History +// +// $Log: xsv_fpga_defines.v,v $ +// Revision 1.2 2008/07/11 08:16:01 Nathan +// Ran through dos2unix +// +// Revision 1.1 2008/07/08 19:11:54 Nathan +// Added second testbench to simulate a complete system, including OR1200, wb_conbus, and onchipram. Renamed sim-only testbench directory from verilog to simulated_system. +// +// Revision 1.4 2004/04/05 08:44:35 lampret +// Merged branch_qmem into main tree. +// +// Revision 1.2 2002/03/29 20:58:51 lampret +// Changed hardcoded address for fake MC to use a define. +// +// Revision 1.1.1.1 2002/03/21 16:55:44 lampret +// First import of the "new" XESS XSV environment. +// +// +// + +// +// Define to target to Xilinx Virtex +// +//`define TARGET_VIRTEX + +// +// Interrupts +// +`define APP_INT_RES1 1:0 +`define APP_INT_UART 2 +`define APP_INT_RES2 3 +`define APP_INT_ETH 4 +`define APP_INT_PS2 5 +`define APP_INT_RES3 19:6 + +// +// Address map +// +`define APP_ADDR_DEC_W 3 +`define APP_ADDR_SDRAM `APP_ADDR_DEC_W'b001 +`define APP_ADDR_DEC2_W 8 +`define APP_ADDR_OCRAM `APP_ADDR_DEC2_W'h00 +`define APP_ADDR_DECP_W 8 +//`define APP_ADDR_PERIP `APP_ADDR_DECP_W'h99 +`define APP_ADDR_VGA `APP_ADDR_DECP_W'h97 +`define APP_ADDR_ETH `APP_ADDR_DECP_W'h92 +`define APP_ADDR_AUDIO `APP_ADDR_DECP_W'h9d +`define APP_ADDR_UART `APP_ADDR_DECP_W'h90 +`define APP_ADDR_PS2 `APP_ADDR_DECP_W'h94 +`define APP_ADDR_RES1 `APP_ADDR_DECP_W'h9e +//`define APP_ADDR_RES2 `APP_ADDR_DECP_W'h9f +//`define APP_ADDR_FAKEMC 4'h6 + +// For simulation... +// `define DBG_IF_MODEL 1 Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/README_testbench.txt =================================================================== --- ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/README_testbench.txt (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/README_testbench.txt (revision 26) @@ -0,0 +1,25 @@ +1README_testbench.txt +Advanced Debug Module (adv_dbg_if) +Nathan Yawn, nathan.yawn@opencores.org + +Two testbenches are supplied with the advanced debug interface. The first +uses behavioral simulation of a wishbone bus with a memory attached, and +another behavioral simulatioin of an OR1200 CPU. This testbench performs +and tests bus / memory operations, and performs a few CPU operations, The +top-level module is in adv_dbg_tb.v. Other than the beavioral models, it +instantiates an adv_dbg_if (found in ../rtl/verilog/), and a JTAG TAP +("jtag" module, not included with this module). Note that the TAP +distributed by OpenCores will not work correctly; use the version modified +by Nathan Yawn. + +The second testbench includes an actuall wishbone/OR1200 system. Its +top-level entity is xsv_fpga_top. It instantiates a wb_conbus, an OR1200, +an onchipram, a jtag TAP, and a UART16550, along with an adv_dbg_if. The +testbench is also instantiated here, and is used to drive the inputs to +the JTAG TAP. This testbench is less polished, but includes a functional +test of the single-step capability of the CPU. + +Both testbenches were written for use in ModelSim (version 6.3). A +wave.do file is also included for each testbench, which will display a +useful collectino of signals in the ModelSim wave view. + Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/simulated_system/adv_dbg_tb.v =================================================================== --- ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/simulated_system/adv_dbg_tb.v (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/simulated_system/adv_dbg_tb.v (revision 26) @@ -0,0 +1,1065 @@ +////////////////////////////////////////////////////////////////////// +//// //// +//// adv_dbg_tb.v //// +//// //// +//// //// +//// Testbench for the SoC Advanced Debug Interface. //// +//// //// +//// Author(s): //// +//// Nathan Yawn (nathan.yawn@opencored.org) //// +//// //// +//// //// +//// //// +////////////////////////////////////////////////////////////////////// +//// //// +//// Copyright (C) 2008 Authors //// +//// //// +//// This source file may be used and distributed without //// +//// restriction provided that this copyright statement is not //// +//// removed from the file and that any derivative work contains //// +//// the original copyright notice and the associated disclaimer. //// +//// //// +//// This source file is free software; you can redistribute it //// +//// and/or modify it under the terms of the GNU Lesser General //// +//// Public License as published by the Free Software Foundation; //// +//// either version 2.1 of the License, or (at your option) any //// +//// later version. //// +//// //// +//// This source is distributed in the hope that it will be //// +//// useful, but WITHOUT ANY WARRANTY; without even the implied //// +//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// +//// PURPOSE. See the GNU Lesser General Public License for more //// +//// details. //// +//// //// +//// You should have received a copy of the GNU Lesser General //// +//// Public License along with this source; if not, download it //// +//// from http://www.opencores.org/lgpl.shtml //// +//// //// +////////////////////////////////////////////////////////////////////// +// +// CVS Revision History +// +// $Log: adv_dbg_tb.v,v $ +// Revision 1.2 2009/05/17 20:54:55 Nathan +// Changed email address to opencores.org +// +// Revision 1.1 2008/07/08 19:11:55 Nathan +// Added second testbench to simulate a complete system, including OR1200, wb_conbus, and onchipram. Renamed sim-only testbench directory from verilog to simulated_system. +// +// Revision 1.11 2008/07/08 18:53:47 Nathan +// Fixed wrong include name. +// +// Revision 1.10 2008/06/30 20:09:19 Nathan +// Removed code to select top-level module as active (it served no purpose). Re-numbered modules, requiring changes to testbench and software driver. +// + + +`include "tap_defines.v" +`include "dbg_defines.v" +`include "dbg_wb_defines.v" +`include "wb_model_defines.v" + +// Polynomial for the CRC calculation +// Yes, it's backwards. Yes, this is on purpose. +// To decrease logic + routing, we want to shift the CRC calculation +// in the same direction we use to shift the data out, LSB first. +`define DBG_CRC_POLY 32'hedb88320 + +// These are indicies into an array which hold values for the JTAG outputs +`define JTAG_TMS 0 +`define JTAG_TCK 1 +`define JTAG_TDO 2 + +`define JTAG_TMS_bit 3'h1 +`define JTAG_TCK_bit 3'h2 +`define JTAG_TDO_bit 3'h4 + +`define wait_jtag_period #50 + + +module adv_debug_tb; + +// Connections to the JTAG TAP +reg jtag_tck_o; +reg jtag_tms_o; +reg jtag_tdo_o; +wire jtag_tdi_i; + +// Connections between TAP and debug module +wire capture_dr; +wire shift_dr; +wire pause_dr; +wire update_dr; +wire dbg_rst; +wire dbg_tdi; +wire dbg_tdo; +wire dbg_sel; + +// Connections between the debug module and the wishbone +`ifdef DBG_WISHBONE_SUPPORTED +wire [31:0] wb_adr; +wire [31:0] wb_dat_m; +wire [31:0] wb_dat_s; +wire wb_cyc; +wire wb_stb; +wire [3:0] wb_sel; +wire wb_we; +wire wb_ack; +wire wb_err; +reg wb_clk_i; // the wishbone clock +reg wb_rst_i; +`endif + +`ifdef DBG_CPU0_SUPPORTED +wire cpu0_clk; +wire [31:0]cpu0_addr; +wire [31:0] cpu0_data_c; +wire [31:0] cpu0_data_d; +wire cpu0_bp; +wire cpu0_stall; +wire cpu0_stb; +wire cpu0_we; +wire cpu0_ack; +wire cpu0_rst; +`endif + +`ifdef DBG_CPU1_SUPPORTED +reg cpu1_clk; +wire [31:0]cpu1_addr; +wire [31:0] cpu1_data_c; +wire [31:0] cpu1_data_d; +wire cpu1_bp; +wire cpu1_stall; +wire cpu1_stb; +wire cpu1_we; +wire cpu1_ack; +wire cpu1_rst; +`endif // `ifdef DBG_CPU1_SUPPORTED + +reg test_enabled; + +// Data which will be written to the WB interface +reg [31:0] static_data32 [0:15]; +reg [15:0] static_data16 [0:15]; +reg [7:0] static_data8 [0:15]; + +// Arrays to hold data read back from the WB interface, for comparison +reg [31:0] input_data32 [0:15]; +reg [15:0] input_data16 [0:15]; +reg [7:0] input_data8 [0:15]; + +reg [32:0] err_data; // holds the contents of the error register from the various modules + +reg failed; +integer i; + +initial +begin + jtag_tck_o = 1'b0; + jtag_tms_o = 1'b0; + jtag_tdo_o = 1'b0; +end + +// Provide the wishbone clock +`ifdef DBG_WISHBONE_SUPPORTED +initial +begin + wb_clk_i = 1'b0; + forever #7 wb_clk_i = ~wb_clk_i; // Odd frequency ratio to test the synchronization +end +`endif + +// Provide the CPU0 clock +//`ifdef DBG_CPU0_SUPPORTED +//initial +//begin + //cpu0_clk = 1'b0; + //forever #6 cpu0_clk = ~cpu0_clk; // Odd frequency ratio to test the synchronization +//end +//`endif + +// Start the test (and reset the wishbone) +initial +begin + test_enabled = 1'b0; + wb_rst_i = 1'b0; + #100; + wb_rst_i = 1'b1; + #100; + wb_rst_i = 1'b0; + + // Init the memory + initialize_memory(32'h0,32'h16); + + // Init the WB model + i_wb.cycle_response(`ACK_RESPONSE, 2, 0); // response type, wait cycles, retry_cycles + + #1 test_enabled<=#1 1'b1; +end + +// This is the main test procedure +always @ (posedge test_enabled) +begin + + $display("Starting advanced debug test"); + + reset_jtag; + #1000; + check_idcode; + #1000; + + // Select the debug module in the IR + set_ir(`DEBUG); + #1000; + + + /////////////////////////////////////////////////////////////////// + // Test CPU0 unit + //////////////////////////////////////////////////////////////////// +`ifdef DBG_CPU0_SUPPORTED + // Select the CPU0 unit in the debug module + #1000; + $display("Selecting CPU0 module at time %t", $time); + select_debug_module(`DBG_TOP_CPU0_DEBUG_MODULE); + + // Test reset, stall bits + #1000; + $display("Testing CPU0 intreg select at time %t", $time); + select_module_internal_register(32'h1, 1); // Really just a read, with discarded data + #1000; + select_module_internal_register(32'h0, 1); // Really just a read, with discarded data + #1000; + + // Read the stall and reset bits + $display("Testing reset and stall bits at time %t", $time); + read_module_internal_register(8'd2, err_data); // We assume the register is already selected + $display("Reset and stall bits are %x", err_data); + #1000; + + // Set rst/stall bits + $display("Setting reset and stall bits at time %t", $time); + write_module_internal_register(32'h0, 8'h1, 32'h3, 8'h2); // idx, idxlen, data, datalen + #1000; + + // Read the bits again + $display("Testing reset and stall bits again at time %t", $time); + read_module_internal_register(8'd2, err_data); // We assume the register is already selected + $display("Reset and stall bits are %x", err_data); + #1000; + + // Clear the bits + $display("Clearing reset and stall bits at time %t", $time); + write_module_internal_register(32'h0, 8'h1, 32'h0, 8'h2); // idx, idxlen, data, datalen + #1000; + + // Read the bits again + $display("Testing reset and stall bits again at time %t", $time); + read_module_internal_register(8'd2, err_data); // We assume the register is already selected + $display("Reset and stall bits are %x", err_data); + #1000; + + // Behavioral CPU model must be stalled in order to do SPR access + //$display("Setting reset and stall bits at time %t", $time); + write_module_internal_register(32'h0, 8'h1, 32'h1, 8'h2); // idx, idxlen, data, datalen + #1000; + + // Test SPR bus access + $display("Testing CPU0 32-bit burst write at time %t", $time); + do_module_burst_write(3'h4, 16'd16, 32'h10); // 3-bit word size (bytes), 16-bit word count, 32-bit start address + #1000; + $display("Testing CPU0 32-bit burst read at time %t", $time); + do_module_burst_read(3'h4, 16'd16, 32'h0); + #1000; + +`endif + + + /////////////////////////////////////////////////////////////////// + // Test the Wishbone unit + //////////////////////////////////////////////////////////////////// + +`ifdef DBG_WISHBONE_SUPPORTED + // Select the WB unit in the debug module + #1000; + $display("Selecting Wishbone module at time %t", $time); + select_debug_module(`DBG_TOP_WISHBONE_DEBUG_MODULE); + + /* + // Test error conditions + #1000; + $display("Testing error (size 0 WB burst write) at time %t", $time); + do_module_burst_write(3'h1, 16'h0, 32'h0); // 0-word write = error, ignored + #1000; + $display("Testing error (size 0 WB burst read) at time %t", $time); + do_module_burst_read(3'h1, 16'h0, 32'h0); // 0-word read = error, ignored + + // Test NOP (a zero in the MSB, then a NOP opcode) + #1000; + $display("Testing NOP at time %t", $time); + write_bit(`JTAG_TMS_bit); // select_dr_scan + write_bit(3'h0); // capture_ir + write_bit(3'h0); // shift_ir + jtag_write_stream(5'h0, 8'h5, 1); // write data, exit_1 + write_bit(`JTAG_TMS_bit); // update_dr + write_bit(3'h0); // idle + #1000; + */ + + #1000; + $display("Testing WB intreg select at time %t", $time); + select_module_internal_register(32'h1, 1); // Really just a read, with discarded data + #1000; + select_module_internal_register(32'h0, 1); // Really just a read, with discarded data + #1000; + + // Reset the error bit + write_module_internal_register(32'h0, 8'h1, 32'h1, 8'h1); // idx, idxlen, data, datalen + #1000; + + // Read the error bit + read_module_internal_register(8'd33, err_data); // We assume the register is already selected + #1000; + + + ///////////////////////////////// + // Test 8-bit WB access + failed = 0; + $display("Testing WB 8-bit burst write at time %t: resetting ", $time); + do_module_burst_write(3'h1, 16'd16, 32'h0); // 3-bit word size (bytes), 16-bit word count, 32-bit start address + #1000; + $display("Testing WB 8-bit burst read at time %t", $time); + do_module_burst_read(3'h1, 16'd16, 32'h0); + #1000; + for(i = 0; i < 16; i = i+1) begin + if(static_data8[i] != input_data8[i]) begin + failed = 1; + $display("32-bit data mismatch at index %d, wrote 0x%x, read 0x%x", i, static_data8[i], input_data8[i]); + end + end + if(!failed) $display("8-bit read/write OK!"); + + /* try it unaligned + do_module_burst_write(3'h1, 16'd5, 32'h3); // 3-bit word size (bytes), 16-bit word count, 32-bit start address + #1000; + do_module_burst_read(3'h1, 16'd4, 32'h4); + #1000; + */ + + ///////////////////////////////// + // Test 16-bit WB access + failed = 0; + $display("Testing WB 16-bit burst write at time %t", $time); + do_module_burst_write(3'h2, 16'd16, 32'h0); // 3-bit word size (bytes), 16-bit word count, 32-bit start address + #1000; + $display("Testing WB 16-bit burst read at time %t", $time); + do_module_burst_read(3'h2, 16'd16, 32'h0); + #1000; + for(i = 0; i < 16; i = i+1) begin + if(static_data16[i] != input_data16[i]) begin + failed = 1; + $display("16-bit data mismatch at index %d, wrote 0x%x, read 0x%x", i, static_data16[i], input_data16[i]); + end + end + if(!failed) $display("16-bit read/write OK!"); + + /* try it unaligned + do_module_burst_write(3'h2, 16'd5, 32'h2); // 3-bit word size (bytes), 16-bit word count, 32-bit start address + #1000; + do_module_burst_read(3'h2, 16'd4, 32'h4); + #1000; + */ + + //////////////////////////////////// + // Test 32-bit WB access + failed = 0; + $display("Testing WB 32-bit burst write at time %t", $time); + do_module_burst_write(3'h4, 16'd16, 32'h0); // 3-bit word size (bytes), 16-bit word count, 32-bit start address + #1000; + $display("Testing WB 32-bit burst read at time %t", $time); + do_module_burst_read(3'h4, 16'd16, 32'h0); + #1000; + for(i = 0; i < 16; i = i+1) begin + if(static_data32[i] != input_data32[i]) begin + failed = 1; + $display("32-bit data mismatch at index %d, wrote 0x%x, read 0x%x", i, static_data32[i], input_data32[i]); + end + end + if(!failed) $display("32-bit read/write OK!"); + + /* Try another address + do_module_burst_write(3'h4, 16'd16, 32'h200); // 3-bit word size (bytes), 16-bit word count, 32-bit start address + #1000; + do_module_burst_read(3'h4, 16'd15, 32'h204); + #1000; + */ + + //////////////////////////////// + // Test error register + err_data = 33'h0; + // Select and reset the error register + write_module_internal_register(`DBG_WB_INTREG_ERROR, `DBG_WB_REGSELECT_SIZE, 64'h1, 8'h1); // regidx,idxlen,writedata, datalen; + i_wb.cycle_response(`ERR_RESPONSE, 2, 0); // response type, wait cycles, retry_cycles + do_module_burst_write(3'h4, 16'd4, 32'hdeaddead); // 3-bit word size (bytes), 16-bit word count, 32-bit start address + read_module_internal_register(8'd33, err_data); // get the error register + $display("Error bit is %d, error address is %x", err_data[0], err_data>>1); + +`endif // WB module supported + +end + +task initialize_memory; + input [31:0] start_addr; + input [31:0] length; + integer i; + reg [31:0] addr; + begin + + for (i=0; i> 1; + crc_out = crc_out ^ ((d ^ c) & `DBG_CRC_POLY); + //$display("CRC Itr %d, inbit = %d, crc = 0x%x", i, data_in[i], crc_out); + end + end +endtask + +task check_idcode; +reg [63:0] readdata; +reg[31:0] idcode; +begin + set_ir(`IDCODE); + + // Read the IDCODE in the DR + write_bit(`JTAG_TMS_bit); // select_dr_scan + write_bit(3'h0); // capture_ir + write_bit(3'h0); // shift_ir + jtag_read_write_stream(64'h0, 8'd32, 1, readdata); // write data, exit_1 + write_bit(`JTAG_TMS_bit); // update_ir + write_bit(3'h0); // idle + idcode = readdata[31:0]; + $display("Got TAP IDCODE 0x%x, expected 0x%x", idcode, `IDCODE_VALUE); +end +endtask; + +task select_debug_module; +input [1:0] moduleid; +reg validid; +begin + write_bit(`JTAG_TMS_bit); // select_dr_scan + write_bit(3'h0); // capture_ir + write_bit(3'h0); // shift_ir + jtag_write_stream({1'b1,moduleid}, 8'h3, 1); // write data, exit_1 + write_bit(`JTAG_TMS_bit); // update_dr + write_bit(3'h0); // idle + + $display("Selecting module (%0x)", moduleid); + + // Read back the status to make sure a valid chain is selected + /* Pointless, the newly selected module would respond instead... + write_bit(`JTAG_TMS_bit); // select_dr_scan + write_bit(3'h0); // capture_ir + write_bit(3'h0); // shift_ir + read_write_bit(`JTAG_TMS_bit, validid); // get data, exit_1 + write_bit(`JTAG_TMS_bit); // update_dr + write_bit(3'h0); // idle + + if(validid) $display("Selected valid module (%0x)", moduleid); + else $display("Failed to select module (%0x)", moduleid); + */ +end +endtask + + +task send_module_burst_command; +input [3:0] opcode; +input [31:0] address; +input [15:0] burstlength; +reg [63:0] streamdata; +begin + streamdata = {11'h0,1'b0,opcode,address,burstlength}; + write_bit(`JTAG_TMS_bit); // select_dr_scan + write_bit(3'h0); // capture_ir + write_bit(3'h0); // shift_ir + jtag_write_stream(streamdata, 8'd53, 1); // write data, exit_1 + write_bit(`JTAG_TMS_bit); // update_dr + write_bit(3'h0); // idle +end +endtask + +task select_module_internal_register; // Really just a read, with discarded data + input [31:0] regidx; + input [7:0] len; // the length of the register index data, we assume not more than 32 + reg[63:0] streamdata; +begin + streamdata = 64'h0; + streamdata = streamdata | regidx; + streamdata = streamdata | (`DBG_WB_CMD_IREG_SEL << len); + write_bit(`JTAG_TMS_bit); // select_dr_scan + write_bit(3'h0); // capture_ir + write_bit(3'h0); // shift_ir + jtag_write_stream(streamdata, (len+5), 1); // write data, exit_1 + write_bit(`JTAG_TMS_bit); // update_dr + write_bit(3'h0); // idle +end +endtask + + +task read_module_internal_register; // We assume the register is already selected + //input [31:0] regidx; + input [7:0] len; // the length of the data desired, we assume a max of 64 bits + output [63:0] instream; + reg [63:0] bitmask; +begin + instream = 64'h0; + // We shift out all 0's, which is a NOP to the debug unit + write_bit(`JTAG_TMS_bit); // select_dr_scan + write_bit(3'h0); // capture_ir + write_bit(3'h0); // shift_ir + // Shift at least 5 bits, as this is the min, for a valid NOP + jtag_read_write_stream(64'h0, len+4,1,instream); // exit_1 + write_bit(`JTAG_TMS_bit); // update_dr + write_bit(3'h0); // idle + bitmask = 64'hffffffffffffffff; + bitmask = bitmask << len; + bitmask = ~bitmask; + instream = instream & bitmask; // Cut off any unwanted excess bits +end +endtask + +task write_module_internal_register; + input [31:0] regidx; // the length of the register index data + input [7:0] idxlen; + input [63:0] writedata; + input [7:0] datalen; // the length of the data to write. We assume the two length combined are 59 or less. + reg[63:0] streamdata; +begin + streamdata = 64'h0; // This will 0 the toplevel/module select bit + streamdata = streamdata | writedata; + streamdata = streamdata | (regidx << datalen); + streamdata = streamdata | (`DBG_WB_CMD_IREG_WR << (idxlen+datalen)); + + write_bit(`JTAG_TMS_bit); // select_dr_scan + write_bit(3'h0); // capture_ir + write_bit(3'h0); // shift_ir + jtag_write_stream(streamdata, (idxlen+datalen+5), 1); // write data, exit_1 + write_bit(`JTAG_TMS_bit); // update_dr + write_bit(3'h0); // idle +end +endtask + +// This includes the sending of the burst command +task do_module_burst_read; +input [5:0] word_size_bytes; +input [15:0] word_count; +input [31:0] start_address; +reg [3:0] opcode; +reg status; +reg [63:0] instream; +integer i; +integer j; +reg [31:0] crc_calc_i; +reg [31:0] crc_calc_o; // temp signal... +reg [31:0] crc_read; +reg [5:0] word_size_bits; +begin + $display("Doing burst read, word size %d, word count %d, start address 0x%x", word_size_bytes, word_count, start_address); + instream = 64'h0; + word_size_bits = word_size_bytes << 3; + crc_calc_i = 32'hffffffff; + + // Send the command + case (word_size_bytes) + 3'h1: opcode = `DBG_WB_CMD_BREAD8; + 3'h2: opcode = `DBG_WB_CMD_BREAD16; + 3'h4: opcode = `DBG_WB_CMD_BREAD32; + default: + begin + $display("Tried burst read with invalid word size (%0x), defaulting to 4-byte words", word_size_bytes); + opcode = `DBG_WB_CMD_BREAD32; + end + endcase + + send_module_burst_command(opcode,start_address, word_count); // returns to state idle + + // Get us back to shift_dr mode to read a burst + write_bit(`JTAG_TMS_bit); // select_dr_scan + write_bit(3'h0); // capture_ir + write_bit(3'h0); // shift_ir + + // Now, repeat... + for(i = 0; i < word_count; i=i+1) begin + // Get 1 status bit, then word_size_bytes*8 bits + status = 1'b0; + j = 0; + while(!status) begin + read_write_bit(3'h0, status); + j = j + 1; + end + + if(j > 1) begin + $display("Took %0d tries before good status bit during burst read", j); + end + + jtag_read_write_stream(64'h0, {2'h0,(word_size_bytes<<3)},0,instream); + //$display("Read 0x%0x", instream[31:0]); + compute_crc(crc_calc_i, instream[31:0], word_size_bits, crc_calc_o); + crc_calc_i = crc_calc_o; + if(word_size_bytes == 1) input_data8[i] = instream[7:0]; + else if(word_size_bytes == 2) input_data16[i] = instream[15:0]; + else input_data32[i] = instream[31:0]; + end + + // Read the data CRC from the debug module. + jtag_read_write_stream(64'h0, 6'd32, 1, crc_read); + if(crc_calc_o != crc_read) $display("CRC ERROR! Computed 0x%x, read CRC 0x%x", crc_calc_o, crc_read); + else $display("CRC OK!"); + + // Finally, shift out 5 0's, to make the next command a NOP + // Not necessary, debug unit won't latch a new opcode at the end of a burst + //jtag_write_stream(64'h0, 8'h5, 1); + write_bit(`JTAG_TMS_bit); // update_ir + write_bit(3'h0); // idle +end +endtask + + +task do_module_burst_write; +input [5:0] word_size_bytes; +input [15:0] word_count; +input [31:0] start_address; +reg [3:0] opcode; +reg status; +reg [63:0] dataword; +integer i; +integer j; +reg [31:0] crc_calc_i; +reg [31:0] crc_calc_o; +reg crc_match; +reg [5:0] word_size_bits; +begin + $display("Doing burst write, word size %d, word count %d, start address 0x%x", word_size_bytes, word_count, start_address); + word_size_bits = word_size_bytes << 3; + crc_calc_i = 32'hffffffff; + + // Send the command + case (word_size_bytes) + 3'h1: opcode = `DBG_WB_CMD_BWRITE8; + 3'h2: opcode = `DBG_WB_CMD_BWRITE16; + 3'h4: opcode = `DBG_WB_CMD_BWRITE32; + default: + begin + $display("Tried burst write with invalid word size (%0x), defaulting to 4-byte words", word_size_bytes); + opcode = `DBG_WB_CMD_BWRITE32; + end + endcase + + send_module_burst_command(opcode, start_address, word_count); // returns to state idle + + // Get us back to shift_dr mode to write a burst + write_bit(`JTAG_TMS_bit); // select_dr_scan + write_bit(3'h0); // capture_ir + write_bit(3'h0); // shift_ir + + + // Write a start bit (a 1) so it knows when to start counting + write_bit(`JTAG_TDO_bit); + + // Now, repeat... + for(i = 0; i < word_count; i=i+1) begin + // Write word_size_bytes*8 bits, then get 1 status bit + if(word_size_bytes == 4) dataword = {32'h0, static_data32[i]}; + else if(word_size_bytes == 2) dataword = {48'h0, static_data16[i]}; + else dataword = {56'h0, static_data8[i]}; + + + jtag_write_stream(dataword, {2'h0,(word_size_bytes<<3)},0); + compute_crc(crc_calc_i, dataword[31:0], word_size_bits, crc_calc_o); + crc_calc_i = crc_calc_o; + + // Check if WB bus is ready + // *** THIS WILL NOT WORK IF THERE IS MORE THAN 1 DEVICE IN THE JTAG CHAIN!!! + status = 1'b0; + read_write_bit(3'h0, status); + + if(!status) begin + $display("Bad status bit during burst write, index %d", i); + end + + + //$display("Wrote 0x%0x", dataword); + end + + // Send the CRC we computed + jtag_write_stream(crc_calc_o, 6'd32,0); + + // Read the 'CRC match' bit, and go to exit1_dr + read_write_bit(`JTAG_TMS_bit, crc_match); + if(!crc_match) $display("CRC ERROR! match bit after write is %d (computed CRC 0x%x)", crc_match, crc_calc_o); + else $display("CRC OK!"); + + // Finally, shift out 5 0's, to make the next command a NOP + // Not necessary, module will not latch new opcode during burst + //jtag_write_stream(64'h0, 8'h5, 1); + write_bit(`JTAG_TMS_bit); // update_ir + write_bit(3'h0); // idle +end + +endtask + + +// Puts a value in the TAP IR, assuming we start in IDLE state. +// Returns to IDLE state when finished +task set_ir; +input [3:0] irval; +begin + write_bit(`JTAG_TMS_bit); // select_dr_scan + write_bit(`JTAG_TMS_bit); // select_ir_scan + write_bit(3'h0); // capture_ir + write_bit(3'h0); // shift_ir + jtag_write_stream({60'h0,irval}, 8'h4, 1); // write data, exit_1 + write_bit(`JTAG_TMS_bit); // update_ir + write_bit(3'h0); // idle +end +endtask + +// Resets the TAP and puts it into idle mode +task reset_jtag; +integer i; +begin + for(i = 0; i < 8; i=i+1) begin + write_bit(`JTAG_TMS_bit); // 5 TMS should put us in test_logic_reset mode + end + write_bit(3'h0); // idle +end +endtask + + +//////////////////////////////////////////////////////////////////////////// +// Tasks to write or read-write a string of data + +task jtag_write_stream; +input [63:0] stream; +input [7:0] len; +input set_last_bit; +integer i; +integer databit; +reg [2:0] bits; +begin + for(i = 0; i < (len-1); i=i+1) begin + databit = (stream >> i) & 1'h1; + bits = databit << `JTAG_TDO; + write_bit(bits); + end + + databit = (stream >> i) & 1'h1; + bits = databit << `JTAG_TDO; + if(set_last_bit) bits = (bits | `JTAG_TMS_bit); + write_bit(bits); + +end +endtask + + +task jtag_read_write_stream; +input [63:0] stream; +input [7:0] len; +input set_last_bit; +output [63:0] instream; +integer i; +integer databit; +reg [2:0] bits; +reg inbit; +begin + instream = 64'h0; + for(i = 0; i < (len-1); i=i+1) begin + databit = (stream >> i) & 1'h1; + bits = databit << `JTAG_TDO; + read_write_bit(bits, inbit); + instream = (instream | (inbit << i)); + end + + databit = (stream >> i) & 1'h1; + bits = databit << `JTAG_TDO; + if(set_last_bit) bits = (bits | `JTAG_TMS_bit); + read_write_bit(bits, inbit); + instream = (instream | (inbit << (len-1))); +end +endtask + +///////////////////////////////////////////////////////////////////////// +// Tasks which write or readwrite a single bit (including clocking) + +task write_bit; + input [2:0] bitvals; + begin + + // Set data + jtag_out(bitvals & ~(`JTAG_TCK_bit)); + `wait_jtag_period; + + // Raise clock + jtag_out(bitvals | `JTAG_TCK_bit); + `wait_jtag_period; + + // drop clock (making output available in the SHIFT_xR states) + jtag_out(bitvals & ~(`JTAG_TCK_bit)); + `wait_jtag_period; + end +endtask + +task read_write_bit; + input [2:0] bitvals; + output l_tdi_val; + begin + + // read bit state + l_tdi_val <= jtag_tdi_i; + + // Set data + jtag_out(bitvals & ~(`JTAG_TCK_bit)); + `wait_jtag_period; + + // Raise clock + jtag_out(bitvals | `JTAG_TCK_bit); + `wait_jtag_period; + + // drop clock (making output available in the SHIFT_xR states) + jtag_out(bitvals & ~(`JTAG_TCK_bit)); + `wait_jtag_period; + end +endtask + +///////////////////////////////////////////////////////////////// +// Basic functions to set the state of the JTAG TAP I/F bits + +task jtag_out; + input [2:0] bitvals; + begin + + jtag_tck_o <= bitvals[`JTAG_TCK]; + jtag_tms_o <= bitvals[`JTAG_TMS]; + jtag_tdo_o <= bitvals[`JTAG_TDO]; + end +endtask + + +task jtag_inout; + input [2:0] bitvals; + output l_tdi_val; + begin + + jtag_tck_o <= bitvals[`JTAG_TCK]; + jtag_tms_o <= bitvals[`JTAG_TMS]; + jtag_tdo_o <= bitvals[`JTAG_TDO]; + + l_tdi_val <= jtag_tdi_i; + end +endtask + +endmodule \ No newline at end of file Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/simulated_system/wb_slave_behavioral.v =================================================================== --- ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/simulated_system/wb_slave_behavioral.v (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/simulated_system/wb_slave_behavioral.v (revision 26) @@ -0,0 +1,425 @@ +////////////////////////////////////////////////////////////////////// +//// //// +//// wb_slave_behavioral.v //// +//// //// +//// //// +//// This file is part of the SoC Debug Interface. //// +//// http://www.opencores.org/projects/DebugInterface/ //// +//// //// +//// Author(s): //// +//// Tadej Markovic, tadej@opencores.org //// +//// //// +//// //// +//// All additional information is avaliable in the README.txt //// +//// file. //// +//// //// +////////////////////////////////////////////////////////////////////// +//// //// +//// Copyright (C) 2000 - 2004 Authors //// +//// //// +//// This source file may be used and distributed without //// +//// restriction provided that this copyright statement is not //// +//// removed from the file and that any derivative work contains //// +//// the original copyright notice and the associated disclaimer. //// +//// //// +//// This source file is free software; you can redistribute it //// +//// and/or modify it under the terms of the GNU Lesser General //// +//// Public License as published by the Free Software Foundation; //// +//// either version 2.1 of the License, or (at your option) any //// +//// later version. //// +//// //// +//// This source is distributed in the hope that it will be //// +//// useful, but WITHOUT ANY WARRANTY; without even the implied //// +//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// +//// PURPOSE. See the GNU Lesser General Public License for more //// +//// details. //// +//// //// +//// You should have received a copy of the GNU Lesser General //// +//// Public License along with this source; if not, download it //// +//// from http://www.opencores.org/lgpl.shtml //// +//// //// +////////////////////////////////////////////////////////////////////// +// +// CVS Revision History +// +// $Log: wb_slave_behavioral.v,v $ +// Revision 1.1 2008/07/08 19:11:57 Nathan +// Added second testbench to simulate a complete system, including OR1200, wb_conbus, and onchipram. Renamed sim-only testbench directory from verilog to simulated_system. +// +// Revision 1.2 2008/06/26 20:54:44 Nathan +// Testbench modified to use WB behavioral model instead of an onchip_ram. Added test of WB error register. +// +// Revision 1.1 2008/06/18 18:34:49 Nathan +// Initial working version. Only Wishbone module implemented. Simple testbench included, with CPU and Wishbone behavioral models from the old dbg_interface. +// +// Revision 1.1.1.1 2008/05/14 12:07:36 Nathan +// Original from OpenCores +// +// Revision 1.3 2004/03/28 20:27:40 igorm +// New release of the debug interface (3rd. release). +// +// Revision 1.2 2004/01/15 10:47:13 mohor +// Working. +// +// Revision 1.1 2003/12/23 14:26:01 mohor +// New version of the debug interface. Not finished, yet. +// +// +// +// + +//`include "timescale.v" +`include "wb_model_defines.v" +module wb_slave_behavioral +( + CLK_I, + RST_I, + ACK_O, + ADR_I, + CYC_I, + DAT_O, + DAT_I, + ERR_O, + RTY_O, + SEL_I, + STB_I, + WE_I, + CAB_I +); + +/*------------------------------------------------------------------------------------------------------ +WISHBONE signals +------------------------------------------------------------------------------------------------------*/ +input CLK_I; +input RST_I; +output ACK_O; +input `WB_ADDR_TYPE ADR_I; +input CYC_I; +output `WB_DATA_TYPE DAT_O; +input `WB_DATA_TYPE DAT_I; +output ERR_O; +output RTY_O; +input `WB_SEL_TYPE SEL_I; +input STB_I; +input WE_I; +input CAB_I; + +reg `WB_DATA_TYPE DAT_O; + +/*------------------------------------------------------------------------------------------------------ +Asynchronous dual-port RAM signals for storing and fetching the data +------------------------------------------------------------------------------------------------------*/ +//reg `WB_DATA_TYPE wb_memory [0:16777215]; // WB memory - 24 addresses connected - 2 LSB not used +reg `WB_DATA_TYPE wb_memory [0:1048575]; // WB memory - 20 addresses connected - 2 LSB not used +reg `WB_DATA_TYPE mem_wr_data_out; +reg `WB_DATA_TYPE mem_rd_data_in; + +/*------------------------------------------------------------------------------------------------------ +Maximum values for WAIT and RETRY counters and which response !!! +------------------------------------------------------------------------------------------------------*/ +reg [2:0] a_e_r_resp; // tells with which cycle_termination_signal must wb_slave respond ! +reg [8:0] wait_cyc; +reg [7:0] max_retry; + +// assign registers to default state while in reset +// always@(RST_I) +// begin +// if (RST_I) +// begin +// a_e_r_resp <= 3'b000; // do not respond +// wait_cyc <= 8'b0; // no wait cycles +// max_retry <= 8'h0; // no retries +// end +// end //reset + +task cycle_response; + input [2:0] ack_err_rty_resp; // acknowledge, error or retry response input flags + input [8:0] wait_cycles; // if wait cycles before each data termination cycle (ack, err or rty) + input [7:0] retry_cycles; // noumber of retry cycles before acknowledge cycle +begin + // assign values + a_e_r_resp <= #1 ack_err_rty_resp; + wait_cyc <= #1 wait_cycles; + max_retry <= #1 retry_cycles; +end +endtask // cycle_response + +/*------------------------------------------------------------------------------------------------------ +Tasks for writing and reading to and from memory !!! +------------------------------------------------------------------------------------------------------*/ +reg `WB_ADDR_TYPE task_wr_adr_i; +reg `WB_ADDR_TYPE task_rd_adr_i; +reg `WB_DATA_TYPE task_dat_i; +reg `WB_DATA_TYPE task_dat_o; +reg `WB_SEL_TYPE task_sel_i; +reg task_wr_data; +reg task_data_written; +reg `WB_DATA_TYPE task_mem_wr_data; + +// write to memory +task wr_mem; + input `WB_ADDR_TYPE adr_i; + input `WB_DATA_TYPE dat_i; + input `WB_SEL_TYPE sel_i; +begin + task_data_written = 0; + task_wr_adr_i = adr_i; + task_dat_i = dat_i; + task_sel_i = sel_i; + task_wr_data = 1; + wait(task_data_written); + task_wr_data = 0; +end +endtask + +// read from memory +task rd_mem; + input `WB_ADDR_TYPE adr_i; + output `WB_DATA_TYPE dat_o; + input `WB_SEL_TYPE sel_i; +begin + task_rd_adr_i = adr_i; + task_sel_i = sel_i; + #1; + dat_o = task_dat_o; +end +endtask + +/*------------------------------------------------------------------------------------------------------ +Internal signals and logic +------------------------------------------------------------------------------------------------------*/ +reg calc_ack; +reg calc_err; +reg calc_rty; + +reg [7:0] retry_cnt; +reg [7:0] retry_num; +reg retry_expired; + +// Retry counter +always@(posedge RST_I or posedge CLK_I) +begin + if (RST_I) + retry_cnt <= #1 8'h00; + else + begin + if (calc_ack || calc_err) + retry_cnt <= #1 8'h00; + else if (calc_rty) + retry_cnt <= #1 retry_num; + end +end + +always@(retry_cnt or max_retry) +begin + if (retry_cnt < max_retry) + begin + retry_num = retry_cnt + 1'b1; + retry_expired = 1'b0; + end + else + begin + retry_num = retry_cnt; + retry_expired = 1'b1; + end +end + +reg [8:0] wait_cnt; +reg [8:0] wait_num; +reg wait_expired; + +// Wait counter +always@(posedge RST_I or posedge CLK_I) +begin + if (RST_I) + wait_cnt <= #1 9'h0; + else + begin + if (wait_expired || ~STB_I) + wait_cnt <= #1 9'h0; + else + wait_cnt <= #1 wait_num; + end +end + +always@(wait_cnt or wait_cyc or STB_I or a_e_r_resp or retry_expired) +begin + if ((wait_cyc > 0) && (STB_I)) + begin + if (wait_cnt < wait_cyc) + begin + wait_num = wait_cnt + 1'b1; + wait_expired = 1'b0; + calc_ack = 1'b0; + calc_err = 1'b0; + calc_rty = 1'b0; + end + else + begin + wait_num = wait_cnt; + wait_expired = 1'b1; + if (a_e_r_resp == 3'b100) + begin + calc_ack = 1'b1; + calc_err = 1'b0; + calc_rty = 1'b0; + end + else + if (a_e_r_resp == 3'b010) + begin + calc_ack = 1'b0; + calc_err = 1'b1; + calc_rty = 1'b0; + end + else + if (a_e_r_resp == 3'b001) + begin + calc_err = 1'b0; + if (retry_expired) + begin + calc_ack = 1'b1; + calc_rty = 1'b0; + end + else + begin + calc_ack = 1'b0; + calc_rty = 1'b1; + end + end + else + begin + calc_ack = 1'b0; + calc_err = 1'b0; + calc_rty = 1'b0; + end + end + end + else + if ((wait_cyc == 0) && (STB_I)) + begin + wait_num = 9'h0; + wait_expired = 1'b1; + if (a_e_r_resp == 3'b100) + begin + calc_ack = 1'b1; + calc_err = 1'b0; + calc_rty = 1'b0; + end + else if (a_e_r_resp == 3'b010) + begin + calc_ack = 1'b0; + calc_err = 1'b1; + calc_rty = 1'b0; + end + else if (a_e_r_resp == 3'b001) + begin + calc_err = 1'b0; + if (retry_expired) + begin + calc_ack = 1'b1; + calc_rty = 1'b0; + end + else + begin + calc_ack = 1'b0; + calc_rty = 1'b1; + end + end + else + begin + calc_ack = 1'b0; + calc_err = 1'b0; + calc_rty = 1'b0; + end + end + else + begin + wait_num = 9'h0; + wait_expired = 1'b0; + calc_ack = 1'b0; + calc_err = 1'b0; + calc_rty = 1'b0; + end +end + +wire rd_sel = (CYC_I && STB_I && ~WE_I); +wire wr_sel = (CYC_I && STB_I && WE_I); + +// Generate cycle termination signals +assign ACK_O = calc_ack && STB_I; +assign ERR_O = calc_err && STB_I; +assign RTY_O = calc_rty && STB_I; + +// Assign address to asynchronous memory +always@(RST_I or ADR_I) +begin + if (RST_I) // this is added because at start of test bench we need address change in order to get data! + begin + #1 mem_rd_data_in = `WB_DATA_WIDTH'hxxxx_xxxx; + end + else + begin +// #1 mem_rd_data_in = wb_memory[ADR_I[25:2]]; + #1 mem_rd_data_in = wb_memory[ADR_I[21:2]]; + end +end + +// Data input/output interface +always@(rd_sel or mem_rd_data_in or RST_I) +begin + if (RST_I) + DAT_O <=#1 `WB_DATA_WIDTH'hxxxx_xxxx; // assign outputs to unknown state while in reset + else if (rd_sel) + DAT_O <=#1 mem_rd_data_in; + else + DAT_O <=#1 `WB_DATA_WIDTH'hxxxx_xxxx; +end + + +always@(RST_I or task_rd_adr_i) +begin + if (RST_I) + task_dat_o = `WB_DATA_WIDTH'hxxxx_xxxx; + else + task_dat_o = wb_memory[task_rd_adr_i[21:2]]; +end +always@(CLK_I or wr_sel or task_wr_data or ADR_I or task_wr_adr_i or + mem_wr_data_out or DAT_I or task_mem_wr_data or task_dat_i or + SEL_I or task_sel_i) +begin + if (task_wr_data) + begin + task_mem_wr_data = wb_memory[task_wr_adr_i[21:2]]; + + if (task_sel_i[3]) + task_mem_wr_data[31:24] = task_dat_i[31:24]; + if (task_sel_i[2]) + task_mem_wr_data[23:16] = task_dat_i[23:16]; + if (task_sel_i[1]) + task_mem_wr_data[15: 8] = task_dat_i[15: 8]; + if (task_sel_i[0]) + task_mem_wr_data[ 7: 0] = task_dat_i[ 7: 0]; + + wb_memory[task_wr_adr_i[21:2]] = task_mem_wr_data; // write data + task_data_written = 1; + end + else if (wr_sel && CLK_I) + begin +// mem_wr_data_out = wb_memory[ADR_I[25:2]]; // if no SEL_I is active, old value will be written + mem_wr_data_out = wb_memory[ADR_I[21:2]]; // if no SEL_I is active, old value will be written + + if (SEL_I[3]) + mem_wr_data_out[31:24] = DAT_I[31:24]; + if (SEL_I[2]) + mem_wr_data_out[23:16] = DAT_I[23:16]; + if (SEL_I[1]) + mem_wr_data_out[15: 8] = DAT_I[15: 8]; + if (SEL_I[0]) + mem_wr_data_out[ 7: 0] = DAT_I[ 7: 0]; + +// wb_memory[ADR_I[25:2]] <= mem_wr_data_out; // write data + wb_memory[ADR_I[21:2]] = mem_wr_data_out; // write data + end +end + +endmodule Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/simulated_system/wave.do =================================================================== --- ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/simulated_system/wave.do (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/simulated_system/wave.do (revision 26) @@ -0,0 +1,350 @@ +onerror {resume} +quietly WaveActivateNextPane {} 0 +add wave -noupdate -divider {JTAG top} +add wave -noupdate -format Logic /adv_debug_tb/jtag_tck_o +add wave -noupdate -format Logic /adv_debug_tb/jtag_tms_o +add wave -noupdate -format Logic /adv_debug_tb/jtag_tdo_o +add wave -noupdate -format Logic /adv_debug_tb/jtag_tdi_i +add wave -noupdate -divider {TAP signals} +add wave -noupdate -format Logic /adv_debug_tb/dbg_rst +add wave -noupdate -format Logic /adv_debug_tb/capture_dr +add wave -noupdate -format Logic /adv_debug_tb/shift_dr +add wave -noupdate -format Logic /adv_debug_tb/pause_dr +add wave -noupdate -format Logic /adv_debug_tb/update_dr +add wave -noupdate -format Logic /adv_debug_tb/dbg_sel +add wave -noupdate -format Logic /adv_debug_tb/dbg_tdi +add wave -noupdate -format Logic /adv_debug_tb/dbg_tdo +add wave -noupdate -divider {Wishbone signals} +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/wb_adr +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/wb_dat_m +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/wb_dat_s +add wave -noupdate -format Logic /adv_debug_tb/wb_cyc +add wave -noupdate -format Logic /adv_debug_tb/wb_stb +add wave -noupdate -format Literal /adv_debug_tb/wb_sel +add wave -noupdate -format Logic /adv_debug_tb/wb_we +add wave -noupdate -format Logic /adv_debug_tb/wb_ack +add wave -noupdate -format Logic /adv_debug_tb/wb_err +add wave -noupdate -format Logic /adv_debug_tb/wb_clk_i +add wave -noupdate -format Logic /adv_debug_tb/wb_rst_i +add wave -noupdate -divider {CPU0 signals} +add wave -noupdate -format Logic /adv_debug_tb/cpu0_clk +add wave -noupdate -format Logic /adv_debug_tb/cpu0_rst +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/cpu0_addr +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/cpu0_data_c +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/cpu0_data_d +add wave -noupdate -format Logic /adv_debug_tb/cpu0_we +add wave -noupdate -format Logic /adv_debug_tb/cpu0_stb +add wave -noupdate -format Logic /adv_debug_tb/cpu0_ack +add wave -noupdate -format Logic /adv_debug_tb/cpu0_bp +add wave -noupdate -format Logic /adv_debug_tb/cpu0_stall +add wave -noupdate -divider {Debug top internals} +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/tck_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/tdi_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/tdo_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/rst_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/shift_dr_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/pause_dr_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/update_dr_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/capture_dr_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/debug_select_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/wb_clk_i +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/wb_adr_o +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/wb_dat_o +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/wb_dat_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/wb_cyc_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/wb_stb_o +add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/wb_sel_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/wb_we_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/wb_ack_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/wb_cab_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/wb_err_i +add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/wb_cti_o +add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/wb_bte_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/cpu0_clk_i +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/cpu0_addr_o +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/cpu0_data_i +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/cpu0_data_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/cpu0_bp_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/cpu0_stall_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/cpu0_stb_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/cpu0_we_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/cpu0_ack_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/cpu0_rst_o +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/input_shift_reg +add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/module_id_reg +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/select_cmd +add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/module_id_in +add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/module_selects +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/tdo_wb +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/tdo_cpu0 +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/tdo_cpu1 +add wave -noupdate -divider {DBG Wishbone module internals} +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/tck_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/module_tdo_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/tdi_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/capture_dr_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/shift_dr_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/update_dr_i +add wave -noupdate -format Literal -radix binary /adv_debug_tb/i_dbg_module/i_dbg_wb/data_register_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/module_select_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/rst_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/wb_clk_i +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/wb_adr_o +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/wb_dat_o +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/wb_dat_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/wb_cyc_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/wb_stb_o +add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_wb/wb_sel_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/wb_we_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/wb_ack_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/wb_cab_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/wb_err_i +add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_wb/wb_cti_o +add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_wb/wb_bte_o +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/address_counter +add wave -noupdate -format Literal -radix decimal /adv_debug_tb/i_dbg_module/i_dbg_wb/bit_count +add wave -noupdate -format Literal -radix decimal /adv_debug_tb/i_dbg_module/i_dbg_wb/word_count +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/operation +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/data_out_shift_reg +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/internal_register_select +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/internal_reg_error +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/addr_sel +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/addr_ct_en +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/op_reg_en +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/bit_ct_en +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/bit_ct_rst +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/word_ct_sel +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/word_ct_en +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/out_reg_ld_en +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/out_reg_shift_en +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/out_reg_data_sel +add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_wb/tdo_output_sel +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu_strobe +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/crc_clr +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/crc_en +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/crc_in_sel +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/crc_shift_en +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/regsel_ld_en +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/intreg_ld_en +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/error_reg_en +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu_clr_err +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/word_count_zero +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/bit_count_max +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/module_cmd +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu_ready +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu_err +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/burst_instruction +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/intreg_instruction +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/intreg_write +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/rd_op +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/crc_match +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/bit_count_32 +add wave -noupdate -format Literal -radix decimal /adv_debug_tb/i_dbg_module/i_dbg_wb/word_size_bits +add wave -noupdate -format Literal -radix decimal /adv_debug_tb/i_dbg_module/i_dbg_wb/word_size_bytes +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/incremented_address +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/data_to_addr_counter +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/data_to_word_counter +add wave -noupdate -format Literal -radix decimal /adv_debug_tb/i_dbg_module/i_dbg_wb/decremented_word_count +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/address_data_in +add wave -noupdate -format Literal -radix decimal /adv_debug_tb/i_dbg_module/i_dbg_wb/count_data_in +add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_wb/operation_in +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/data_to_biu +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/data_from_biu +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/crc_data_out +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/crc_data_in +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/crc_serial_out +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/reg_select_data +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/out_reg_data +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/data_from_internal_reg +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu_rst +add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_wb/module_state +add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_wb/module_next_state +add wave -noupdate -divider {DBG WB module BIU internals} +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/tck_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/rst_i +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/data_i +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/data_o +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/addr_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/strobe_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/rd_wrn_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/rdy_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/err_o +add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/word_size_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/wb_clk_i +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/wb_adr_o +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/wb_dat_o +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/wb_dat_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/wb_cyc_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/wb_stb_o +add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/wb_sel_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/wb_we_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/wb_ack_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/wb_cab_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/wb_err_i +add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/wb_cti_o +add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/wb_bte_o +add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/sel_reg +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/addr_reg +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/data_in_reg +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/data_out_reg +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/wr_reg +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/str_sync +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/rdy_sync +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/err_reg +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/rdy_sync_tff1 +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/rdy_sync_tff2 +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/rdy_sync_tff2q +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/str_sync_wbff1 +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/str_sync_wbff2 +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/str_sync_wbff2q +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/data_o_en +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/rdy_sync_en +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/err_en +add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/be_dec +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/start_toggle +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/swapped_data_i +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/swapped_data_out +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/wb_fsm_state +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_wb/biu/next_fsm_state +add wave -noupdate -divider {DBG CPU0 module signals} +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/tck_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/module_tdo_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/tdi_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/capture_dr_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/shift_dr_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/update_dr_i +add wave -noupdate -format Literal -radix binary /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/data_register_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/module_select_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/rst_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/cpu_clk_i +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/cpu_addr_o +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/cpu_data_i +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/cpu_data_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/cpu_stb_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/cpu_we_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/cpu_ack_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/cpu_rst_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/cpu_bp_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/cpu_stall_o +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/address_counter +add wave -noupdate -format Literal -radix decimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/bit_count +add wave -noupdate -format Literal -radix decimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/word_count +add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/operation +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/data_out_shift_reg +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/internal_register_select +add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/internal_reg_status +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/addr_sel +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/addr_ct_en +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/op_reg_en +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/bit_ct_en +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/bit_ct_rst +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/word_ct_sel +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/word_ct_en +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/out_reg_ld_en +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/out_reg_shift_en +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/out_reg_data_sel +add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/tdo_output_sel +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/biu_strobe +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/crc_clr +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/crc_en +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/crc_in_sel +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/crc_shift_en +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/regsel_ld_en +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/intreg_ld_en +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/word_count_zero +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/bit_count_max +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/module_cmd +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/biu_ready +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/burst_instruction +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/intreg_instruction +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/intreg_write +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/rd_op +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/crc_match +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/bit_count_32 +add wave -noupdate -format Literal -radix decimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/word_size_bits +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/incremented_address +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/data_to_addr_counter +add wave -noupdate -format Literal -radix decimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/data_to_word_counter +add wave -noupdate -format Literal -radix decimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/decremented_word_count +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/address_data_in +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/count_data_in +add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/operation_in +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/data_to_biu +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/data_from_biu +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/crc_data_out +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/crc_data_in +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/crc_serial_out +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/reg_select_data +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/out_reg_data +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/data_from_internal_reg +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/status_reg_wr +add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/module_state +add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/module_next_state +add wave -noupdate -divider {CPU0 BIU internals} +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/tck_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/rst_i +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/data_i +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/data_o +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/addr_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/strobe_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/rd_wrn_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/rdy_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/cpu_clk_i +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/cpu_addr_o +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/cpu_data_i +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/cpu_data_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/cpu_stb_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/cpu_we_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/cpu_ack_i +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/addr_reg +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/data_in_reg +add wave -noupdate -format Literal -radix hexadecimal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/data_out_reg +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/wr_reg +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/str_sync +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/rdy_sync +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/rdy_sync_tff1 +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/rdy_sync_tff2 +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/rdy_sync_tff2q +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/str_sync_wbff1 +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/str_sync_wbff2 +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/str_sync_wbff2q +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/data_o_en +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/rdy_sync_en +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/start_toggle +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/cpu_fsm_state +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/or1k_biu_i/next_fsm_state +add wave -noupdate -divider {CPU0 Status register internals} +add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/data_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/we_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/tck_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/bp_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/rst_i +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/cpu_clk_i +add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/ctrl_reg_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/cpu_stall_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/cpu_rst_o +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/cpu_reset +add wave -noupdate -format Literal /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/cpu_op_out +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/stall_bp +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/stall_bp_csff +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/stall_bp_tck +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/stall_reg +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/stall_reg_csff +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/stall_reg_cpu +add wave -noupdate -format Logic /adv_debug_tb/i_dbg_module/i_dbg_cpu_or1k/statusreg_i/cpu_reset_csff +TreeUpdate [SetDefaultTree] +WaveRestoreCursors {{Cursor 1} {50652 ns} 0} +configure wave -namecolwidth 409 +configure wave -valuecolwidth 100 +configure wave -justifyvalue left +configure wave -signalnamewidth 0 +configure wave -snapdistance 10 +configure wave -datasetprefix 0 +configure wave -rowmargin 4 +configure wave -childrowmargin 2 +configure wave -gridoffset 0 +configure wave -gridperiod 1 +configure wave -griddelta 40 +configure wave -timeline 0 +update +WaveRestoreZoom {38962 ns} {65318 ns} Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/simulated_system/cpu_behavioral.v =================================================================== --- ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/simulated_system/cpu_behavioral.v (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/simulated_system/cpu_behavioral.v (revision 26) @@ -0,0 +1,154 @@ +////////////////////////////////////////////////////////////////////// +//// //// +//// cpu_behavioral.v //// +//// //// +//// //// +//// This file is part of the SoC Debug Interface. //// +//// http://www.opencores.org/projects/DebugInterface/ //// +//// //// +//// Author(s): //// +//// Igor Mohor (igorm@opencores.org) //// +//// //// +//// //// +//// All additional information is avaliable in the README.txt //// +//// file. //// +//// //// +////////////////////////////////////////////////////////////////////// +//// //// +//// Copyright (C) 2000 - 2004 Authors //// +//// //// +//// This source file may be used and distributed without //// +//// restriction provided that this copyright statement is not //// +//// removed from the file and that any derivative work contains //// +//// the original copyright notice and the associated disclaimer. //// +//// //// +//// This source file is free software; you can redistribute it //// +//// and/or modify it under the terms of the GNU Lesser General //// +//// Public License as published by the Free Software Foundation; //// +//// either version 2.1 of the License, or (at your option) any //// +//// later version. //// +//// //// +//// This source is distributed in the hope that it will be //// +//// useful, but WITHOUT ANY WARRANTY; without even the implied //// +//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// +//// PURPOSE. See the GNU Lesser General Public License for more //// +//// details. //// +//// //// +//// You should have received a copy of the GNU Lesser General //// +//// Public License along with this source; if not, download it //// +//// from http://www.opencores.org/lgpl.shtml //// +//// //// +////////////////////////////////////////////////////////////////////// +// +// CVS Revision History +// +// $Log: cpu_behavioral.v,v $ +// Revision 1.1 2008/07/08 19:11:55 Nathan +// Added second testbench to simulate a complete system, including OR1200, wb_conbus, and onchipram. Renamed sim-only testbench directory from verilog to simulated_system. +// +// Revision 1.1 2008/06/18 18:34:48 Nathan +// Initial working version. Only Wishbone module implemented. Simple testbench included, with CPU and Wishbone behavioral models from the old dbg_interface. +// +// Revision 1.1.1.1 2008/05/14 12:07:35 Nathan +// Original from OpenCores +// +// Revision 1.4 2004/03/28 20:27:40 igorm +// New release of the debug interface (3rd. release). +// +// Revision 1.3 2004/01/22 11:07:28 mohor +// test stall_test added. +// +// Revision 1.2 2004/01/17 18:01:31 mohor +// New version. +// +// Revision 1.1 2004/01/17 17:01:25 mohor +// Almost finished. +// +// +// +// +// +`include "timescale.v" +`include "dbg_cpu_defines.v" + + + +module cpu_behavioral + ( + // CPU signals + cpu_rst_i, + cpu_clk_o, + cpu_addr_i, + cpu_data_o, + cpu_data_i, + cpu_bp_o, + cpu_stall_i, + cpu_stb_i, + cpu_we_i, + cpu_ack_o, + cpu_rst_o + ); + + +// CPU signals +input cpu_rst_i; +output cpu_clk_o; +input [31:0] cpu_addr_i; +output [31:0] cpu_data_o; +input [31:0] cpu_data_i; +output cpu_bp_o; +input cpu_stall_i; +input cpu_stb_i; +input cpu_we_i; +output cpu_ack_o; +output cpu_rst_o; + +reg cpu_clk_o; +reg [31:0] cpu_data_o; +reg cpu_bp_o; +reg cpu_ack_o; +reg cpu_ack_q; +wire cpu_ack; +initial +begin + cpu_clk_o = 1'b0; + forever #5 cpu_clk_o = ~cpu_clk_o; +end + + +initial +begin + cpu_bp_o = 1'b0; +end + +assign #200 cpu_ack = cpu_stall_i & cpu_stb_i; + + + +always @ (posedge cpu_clk_o or posedge cpu_rst_i) +begin + if (cpu_rst_i) + begin + cpu_ack_o <= #1 1'b0; + cpu_ack_q <= #1 1'b0; + end + else + begin + cpu_ack_o <= #1 cpu_ack; + cpu_ack_q <= #1 cpu_ack_o; + end +end + +always @ (posedge cpu_clk_o or posedge cpu_rst_i) +begin + if (cpu_rst_i) + cpu_data_o <= #1 32'h12345678; + else if (cpu_ack_o && (!cpu_ack_q)) + cpu_data_o <= #1 cpu_data_o + 32'h11111111; +end + + + + +endmodule + Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/simulated_system/wb_model_defines.v =================================================================== --- ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/simulated_system/wb_model_defines.v (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/simulated_system/wb_model_defines.v (revision 26) @@ -0,0 +1,163 @@ +////////////////////////////////////////////////////////////////////// +//// //// +//// wb_model_defines.v //// +//// //// +//// //// +//// This file is part of the SoC Debug Interface. //// +//// http://www.opencores.org/projects/DebugInterface/ //// +//// //// +//// Author(s): //// +//// - Miha Dolenc (mihad@opencores.org) //// +//// //// +//// //// +//// All additional information is avaliable in the README.txt //// +//// file. //// +//// //// +////////////////////////////////////////////////////////////////////// +//// //// +//// Copyright (C) 2000 - 2004 Authors //// +//// //// +//// This source file may be used and distributed without //// +//// restriction provided that this copyright statement is not //// +//// removed from the file and that any derivative work contains //// +//// the original copyright notice and the associated disclaimer. //// +//// //// +//// This source file is free software; you can redistribute it //// +//// and/or modify it under the terms of the GNU Lesser General //// +//// Public License as published by the Free Software Foundation; //// +//// either version 2.1 of the License, or (at your option) any //// +//// later version. //// +//// //// +//// This source is distributed in the hope that it will be //// +//// useful, but WITHOUT ANY WARRANTY; without even the implied //// +//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// +//// PURPOSE. See the GNU Lesser General Public License for more //// +//// details. //// +//// //// +//// You should have received a copy of the GNU Lesser General //// +//// Public License along with this source; if not, download it //// +//// from http://www.opencores.org/lgpl.shtml //// +//// //// +////////////////////////////////////////////////////////////////////// +// +// CVS Revision History +// +// $Log: wb_model_defines.v,v $ +// Revision 1.1 2008/07/08 19:11:57 Nathan +// Added second testbench to simulate a complete system, including OR1200, wb_conbus, and onchipram. Renamed sim-only testbench directory from verilog to simulated_system. +// +// Revision 1.1 2008/06/18 18:34:48 Nathan +// Initial working version. Only Wishbone module implemented. Simple testbench included, with CPU and Wishbone behavioral models from the old dbg_interface. +// +// Revision 1.1.1.1 2008/05/14 12:07:36 Nathan +// Original from OpenCores +// +// Revision 1.2 2004/03/28 20:27:40 igorm +// New release of the debug interface (3rd. release). +// +// Revision 1.1 2003/12/23 14:26:01 mohor +// New version of the debug interface. Not finished, yet. +// +// +// + +// WISHBONE frequency in GHz +`define WB_FREQ 0.100 + +// memory frequency in GHz +`define MEM_FREQ 0.100 + +// setup and hold time definitions for WISHBONE - used in BFMs for signal generation +`define Tsetup 4 +`define Thold 1 + +// how many clock cycles should model wait for design's response - integer 32 bit value +`define WAIT_FOR_RESPONSE 1023 + +// maximum number of transactions allowed in single call to block or cab transfer routines +`define MAX_BLK_SIZE 1024 + +// maximum retry terminations allowed for WISHBONE master to repeat an access +`define WB_TB_MAX_RTY 0 + + +// some common types and defines +`define WB_ADDR_WIDTH 32 +`define WB_DATA_WIDTH 32 +`define WB_SEL_WIDTH `WB_DATA_WIDTH/8 +`define WB_TAG_WIDTH 5 +`define WB_ADDR_TYPE [(`WB_ADDR_WIDTH - 1):0] +`define WB_DATA_TYPE [(`WB_DATA_WIDTH - 1):0] +`define WB_SEL_TYPE [(`WB_SEL_WIDTH - 1):0] +`define WB_TAG_TYPE [(`WB_TAG_WIDTH - 1):0] + +// read cycle stimulus - consists of: +// - address field - which address read will be performed from +// - sel field - what byte select value should be +// - tag field - what tag values should be put on the bus +`define READ_STIM_TYPE [(`WB_ADDR_WIDTH + `WB_SEL_WIDTH + `WB_TAG_WIDTH - 1):0] +`define READ_STIM_LENGTH (`WB_ADDR_WIDTH + `WB_SEL_WIDTH + `WB_TAG_WIDTH) +`define READ_ADDRESS [(`WB_ADDR_WIDTH - 1):0] +`define READ_SEL [(`WB_ADDR_WIDTH + `WB_SEL_WIDTH - 1):`WB_ADDR_WIDTH] +`define READ_TAG_STIM [(`WB_ADDR_WIDTH + `WB_SEL_WIDTH + `WB_TAG_WIDTH - 1):(`WB_ADDR_WIDTH + `WB_SEL_WIDTH)] + +// read cycle return type consists of: +// - read data field +// - tag field received from WISHBONE +// - wishbone slave response fields - ACK, ERR and RTY +// - test bench error indicator (when testcase has not used wb master model properly) +// - how much data was actually transfered +`define READ_RETURN_TYPE [(32 + 4 + `WB_DATA_WIDTH + `WB_TAG_WIDTH - 1):0] +`define READ_DATA [(32 + `WB_DATA_WIDTH + 4 - 1):32 + 4] +`define READ_TAG_RET [(32 + 4 + `WB_DATA_WIDTH + `WB_TAG_WIDTH - 1):(`WB_DATA_WIDTH + 32 + 4)] +`define READ_RETURN_LENGTH (32 + 4 + `WB_DATA_WIDTH + `WB_TAG_WIDTH - 1) + +// write cycle stimulus type consists of +// - address field +// - data field +// - sel field +// - tag field +`define WRITE_STIM_TYPE [(`WB_ADDR_WIDTH + `WB_DATA_WIDTH + `WB_SEL_WIDTH + `WB_TAG_WIDTH - 1):0] +`define WRITE_ADDRESS [(`WB_ADDR_WIDTH - 1):0] +`define WRITE_DATA [(`WB_ADDR_WIDTH + `WB_DATA_WIDTH - 1):`WB_ADDR_WIDTH] +`define WRITE_SEL [(`WB_ADDR_WIDTH + `WB_DATA_WIDTH + `WB_SEL_WIDTH - 1):(`WB_ADDR_WIDTH + `WB_DATA_WIDTH)] +`define WRITE_TAG_STIM [(`WB_ADDR_WIDTH + `WB_DATA_WIDTH + `WB_SEL_WIDTH + `WB_TAG_WIDTH - 1):(`WB_ADDR_WIDTH + `WB_DATA_WIDTH + `WB_SEL_WIDTH)] + +// length of WRITE_STIMULUS +`define WRITE_STIM_LENGTH (`WB_ADDR_WIDTH + `WB_DATA_WIDTH + `WB_SEL_WIDTH + `WB_TAG_WIDTH) + +// write cycle return type consists of: +// - test bench error indicator (when testcase has not used wb master model properly) +// - wishbone slave response fields - ACK, ERR and RTY +// - tag field received from WISHBONE +// - how much data was actually transfered +`define WRITE_RETURN_TYPE [(32 + 4 + `WB_TAG_WIDTH - 1):0] +`define WRITE_TAG_RET [(32 + 4 + `WB_TAG_WIDTH - 1):32 + 4] + +// this four fields are common to both read and write routines return values +`define TB_ERROR_BIT [0] +`define CYC_ACK [1] +`define CYC_RTY [2] +`define CYC_ERR [3] +`define CYC_RESPONSE [3:1] +`define CYC_ACTUAL_TRANSFER [35:4] + +// block transfer flags +`define WB_TRANSFER_FLAGS [41:0] +// consists of: +// - number of transfer cycles to perform +// - flag that enables retry termination handling - if disabled, block transfer routines will return on any termination other than acknowledge +// - flag indicating CAB transfer is to be performed - ignored by all single transfer routines +// - number of initial wait states to insert +// - number of subsequent wait states to insert +`define WB_TRANSFER_SIZE [41:10] +`define WB_TRANSFER_AUTO_RTY [8] +`define WB_TRANSFER_CAB [9] +`define INIT_WAITS [3:0] +`define SUBSEQ_WAITS [7:4] + +// wb slave response +`define ACK_RESPONSE 3'b100 +`define ERR_RESPONSE 3'b010 +`define RTY_RESPONSE 3'b001 +`define NO_RESPONSE 3'b000 Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/simulated_system/timescale.v =================================================================== --- ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/simulated_system/timescale.v (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/bench/simulated_system/timescale.v (revision 26) @@ -0,0 +1,68 @@ +////////////////////////////////////////////////////////////////////// +//// //// +//// timescale.v //// +//// //// +//// //// +//// This file is part of the SoC Debug Interface. //// +//// http://www.opencores.org/projects/DebugInterface/ //// +//// //// +//// Author(s): //// +//// Igor Mohor (igorm@opencores.org) //// +//// //// +//// //// +//// All additional information is avaliable in the README.txt //// +//// file. //// +//// //// +////////////////////////////////////////////////////////////////////// +//// //// +//// Copyright (C) 2000 - 2004 Authors //// +//// //// +//// This source file may be used and distributed without //// +//// restriction provided that this copyright statement is not //// +//// removed from the file and that any derivative work contains //// +//// the original copyright notice and the associated disclaimer. //// +//// //// +//// This source file is free software; you can redistribute it //// +//// and/or modify it under the terms of the GNU Lesser General //// +//// Public License as published by the Free Software Foundation; //// +//// either version 2.1 of the License, or (at your option) any //// +//// later version. //// +//// //// +//// This source is distributed in the hope that it will be //// +//// useful, but WITHOUT ANY WARRANTY; without even the implied //// +//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// +//// PURPOSE. See the GNU Lesser General Public License for more //// +//// details. //// +//// //// +//// You should have received a copy of the GNU Lesser General //// +//// Public License along with this source; if not, download it //// +//// from http://www.opencores.org/lgpl.shtml //// +//// //// +////////////////////////////////////////////////////////////////////// +// +// CVS Revision History +// +// $Log: timescale.v,v $ +// Revision 1.1 2008/07/08 19:11:56 Nathan +// Added second testbench to simulate a complete system, including OR1200, wb_conbus, and onchipram. Renamed sim-only testbench directory from verilog to simulated_system. +// +// Revision 1.1 2008/06/18 18:34:48 Nathan +// Initial working version. Only Wishbone module implemented. Simple testbench included, with CPU and Wishbone behavioral models from the old dbg_interface. +// +// Revision 1.1.1.1 2008/05/14 12:07:36 Nathan +// Original from OpenCores +// +// Revision 1.4 2004/03/28 20:27:40 igorm +// New release of the debug interface (3rd. release). +// +// Revision 1.3 2004/01/17 17:01:25 mohor +// Almost finished. +// +// Revision 1.2 2003/12/23 14:26:01 mohor +// New version of the debug interface. Not finished, yet. +// +// +// +// +`timescale 1ns/10ps + Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/rtl/verilog/adbg_or1k_module.v =================================================================== --- ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/rtl/verilog/adbg_or1k_module.v (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/rtl/verilog/adbg_or1k_module.v (revision 26) @@ -0,0 +1,672 @@ +////////////////////////////////////////////////////////////////////// +//// //// +//// adbg_or1k_module.v //// +//// //// +//// //// +//// This file is part of the SoC Advanced Debug Interface. //// +//// //// +//// Author(s): //// +//// Nathan Yawn (nathan.yawn@opencores.org) //// +//// //// +//// //// +//// //// +////////////////////////////////////////////////////////////////////// +//// //// +//// Copyright (C) 2008 Authors //// +//// //// +//// This source file may be used and distributed without //// +//// restriction provided that this copyright statement is not //// +//// removed from the file and that any derivative work contains //// +//// the original copyright notice and the associated disclaimer. //// +//// //// +//// This source file is free software; you can redistribute it //// +//// and/or modify it under the terms of the GNU Lesser General //// +//// Public License as published by the Free Software Foundation; //// +//// either version 2.1 of the License, or (at your option) any //// +//// later version. //// +//// //// +//// This source is distributed in the hope that it will be //// +//// useful, but WITHOUT ANY WARRANTY; without even the implied //// +//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// +//// PURPOSE. See the GNU Lesser General Public License for more //// +//// details. //// +//// //// +//// You should have received a copy of the GNU Lesser General //// +//// Public License along with this source; if not, download it //// +//// from http://www.opencores.org/lgpl.shtml //// +//// //// +////////////////////////////////////////////////////////////////////// +// +// CVS Revision History +// +// $Log: adbg_or1k_module.v,v $ +// Revision 1.2 2009/05/17 20:54:56 Nathan +// Changed email address to opencores.org +// +// Revision 1.1 2008/07/22 20:28:31 Nathan +// Changed names of all files and modules (prefixed an a, for advanced). Cleanup, indenting. No functional changes. +// +// Revision 1.7 2008/07/11 08:13:29 Nathan +// Latch opcode on posedge, like other signals. This fixes a problem +// when the module is used with a Xilinx BSCAN TAP. Added signals to +// allow modules to inhibit latching of a new active module by the top +// module. This allows the sub-modules to force the top level module +// to ignore the command present in the input shift register after e.g. +// a burst read. +// + + +`include "adbg_or1k_defines.v" + +// Module interface +module adbg_or1k_module ( + // JTAG signals + tck_i, + module_tdo_o, + tdi_i, + + // TAP states + capture_dr_i, + shift_dr_i, + update_dr_i, + + data_register_i, // the data register is at top level, shared between all modules + module_select_i, + top_inhibit_o, + rst_i, + + // Interfate to the OR1K debug unit + cpu_clk_i, + cpu_addr_o, + cpu_data_i, + cpu_data_o, + cpu_bp_i, + cpu_stall_o, + cpu_stb_o, + cpu_we_o, + cpu_ack_i, + cpu_rst_o + ); + + // JTAG signals + input tck_i; + output module_tdo_o; + input tdi_i; // This is only used by the CRC module - data_register_i[MSB] is delayed a cycle + + // TAP states + input capture_dr_i; + input shift_dr_i; + input update_dr_i; + + input [52:0] data_register_i; + input module_select_i; + output top_inhibit_o; + input rst_i; + + // WISHBONE master interface + input cpu_clk_i; // 'bus' style interface to SPRs + output [31:0] cpu_addr_o; + input [31:0] cpu_data_i; + output [31:0] cpu_data_o; + output cpu_stb_o; + output cpu_we_o; + input cpu_ack_i; + output cpu_rst_o; // control lines + input cpu_bp_i; + output cpu_stall_o; + + // Declare inputs / outputs as wires / registers + reg module_tdo_o; + reg top_inhibit_o; + + + // Registers to hold state etc. + reg [31:0] address_counter; // Holds address for next Wishbone access + reg [5:0] bit_count; // How many bits have been shifted in/out + reg [15:0] word_count; // bytes remaining in current burst command + reg [3:0] operation; // holds the current command (rd/wr, word size) + reg [31:0] data_out_shift_reg; // parallel-load output shift register + reg [`DBG_OR1K_REGSELECT_SIZE-1:0] internal_register_select; // Holds index of currently selected register + wire [1:0] internal_reg_status; // Holds CPU stall and reset status - signal is output of separate module + + + // Control signals for the various counters / registers / state machines + reg addr_sel; // Selects data for address_counter. 0 = data_register_i, 1 = incremented address count + reg addr_ct_en; // Enable signal for address counter register + reg op_reg_en; // Enable signal for 'operation' register + reg bit_ct_en; // enable bit counter + reg bit_ct_rst; // reset (zero) bit count register + reg word_ct_sel; // Selects data for byte counter. 0 = data_register_i, 1 = decremented byte count + reg word_ct_en; // Enable byte counter register + reg out_reg_ld_en; // Enable parallel load of data_out_shift_reg + reg out_reg_shift_en; // Enable shift of data_out_shift_reg + reg out_reg_data_sel; // 0 = BIU data, 1 = internal register data + reg [1:0] tdo_output_sel; // Selects signal to send to TDO. 0 = ready bit, 1 = output register, 2 = CRC match, 3 = CRC shift reg. + reg biu_strobe; // Indicates that the bus unit should latch data and start a transaction + reg crc_clr; // resets CRC module + reg crc_en; // does 1-bit iteration in CRC module + reg crc_in_sel; // selects incoming write data (=0) or outgoing read data (=1)as input to CRC module + reg crc_shift_en; // CRC reg is also it's own output shift register; this enables a shift + reg regsel_ld_en; // Reg. select register load enable + reg intreg_ld_en; // load enable for internal registers + + + // Status signals + wire word_count_zero; // true when byte counter is zero + wire bit_count_max; // true when bit counter is equal to current word size + wire module_cmd; // inverse of MSB of data_register_i. 1 means current cmd not for top level (but is for us) + wire biu_ready; // indicates that the BIU has finished the last command + wire burst_instruction; // True when the input_data_i reg has a valid burst instruction for this module + wire intreg_instruction; // True when the input_data_i reg has a valid internal register instruction + wire intreg_write; // True when the input_data_i reg has an internal register write op + wire rd_op; // True when operation in the opcode reg is a read, false when a write + wire crc_match; // indicates whether data_register_i matches computed CRC + wire bit_count_32; // true when bit count register == 32, for CRC after burst writes + + // Intermediate signals + wire [5:0] word_size_bits; // 8,16, or 32. Decoded from 'operation' + wire [2:0] address_increment; // How much to add to the address counter each iteration + wire [32:0] incremented_address; // value of address counter plus 'word_size' + wire [31:0] data_to_addr_counter; // output of the mux in front of the address counter inputs + wire [15:0] data_to_word_counter; // output of the mux in front of the byte counter input + wire [15:0] decremented_word_count; + wire [31:0] address_data_in; // from data_register_i + wire [15:0] count_data_in; // from data_register_i + wire [3:0] operation_in; // from data_register_i + wire [31:0] data_to_biu; // from data_register_i + wire [31:0] data_from_biu; // to data_out_shift_register + wire [31:0] crc_data_out; // output of CRC module, to output shift register + wire crc_data_in; // input to CRC module, either data_register_i[52] or data_out_shift_reg[0] + wire crc_serial_out; + wire [`DBG_OR1K_REGSELECT_SIZE-1:0] reg_select_data; // from data_register_i, input to internal register select register + wire [31:0] out_reg_data; // parallel input to the output shift register + reg [31:0] data_from_internal_reg; // data from internal reg. MUX to output shift register + wire status_reg_wr; + + + ///////////////////////////////////////////////// + // Combinatorial assignments + + assign module_cmd = ~(data_register_i[52]); + assign operation_in = data_register_i[51:48]; + assign address_data_in = data_register_i[47:16]; + assign count_data_in = data_register_i[15:0]; + assign data_to_biu = data_register_i[52:21]; + assign reg_select_data = data_register_i[47:(47-(`DBG_OR1K_REGSELECT_SIZE-1))]; + + //////////////////////////////////////////////// + // Operation decoder + + // These are only used before the operation is latched, so decode them from operation_in + assign burst_instruction = (operation_in == `DBG_OR1K_CMD_BWRITE32) | (operation_in == `DBG_OR1K_CMD_BREAD32); + assign intreg_instruction = ((operation_in == `DBG_OR1K_CMD_IREG_WR) | (operation_in == `DBG_OR1K_CMD_IREG_SEL)); + assign intreg_write = (operation_in == `DBG_OR1K_CMD_IREG_WR); + + // These are constant, the CPU module only does 32-bit accesses + assign word_size_bits = 5'd31; // Bits is actually bits-1, to make the FSM easier + assign address_increment = 3'd1; // This is only used to increment the address. SPRs are word-addressed. + + // This is the only thing that actually needs to be saved and 'decoded' from the latched opcode + // It goes to the BIU each time a transaction is started. + assign rd_op = operation[2]; + + + //////////////////////////////////////////////// + // Module-internal register select register (no, that's not redundant.) + // Also internal register output MUX + + always @ (posedge tck_i or posedge rst_i) + begin + if(rst_i) internal_register_select = 1'h0; + else if(regsel_ld_en) internal_register_select = reg_select_data; + end + + // This is completely unnecessary here, since the module has only 1 internal + // register. However, to make the module expandable, it is included anyway. + always @ (internal_register_select or internal_reg_status) + begin + case(internal_register_select) + `DBG_OR1K_INTREG_STATUS: data_from_internal_reg = {30'h0, internal_reg_status}; + default: data_from_internal_reg = {30'h0, internal_reg_status}; + endcase + end + + + + //////////////////////////////////////////////////////////////////// + // Module-internal registers + // These have generic read/write/select code, but + // individual registers may have special behavior, defined here. + + // This is the status register, which holds the reset and stall states. + + assign status_reg_wr = (intreg_ld_en & (reg_select_data == `DBG_OR1K_INTREG_STATUS)); + + adbg_or1k_status_reg or1k_statusreg_i ( + .data_i(data_register_i[(47-`DBG_OR1K_REGSELECT_SIZE):(47-(`DBG_OR1K_REGSELECT_SIZE+1))]), + .we_i(status_reg_wr), + .tck_i(tck_i), + .bp_i(cpu_bp_i), + .rst_i(rst_i), + .cpu_clk_i(cpu_clk_i), + .ctrl_reg_o(internal_reg_status), + .cpu_stall_o(cpu_stall_o), + .cpu_rst_o(cpu_rst_o) + ); + + + /////////////////////////////////////////////// + // Address counter + + assign data_to_addr_counter = (addr_sel) ? incremented_address[31:0] : address_data_in; + assign incremented_address = address_counter + address_increment; + + // Technically, since this data (sometimes) comes from the input shift reg, we should latch on + // negedge, per the JTAG spec. But that makes things difficult when incrementing. + always @ (posedge tck_i or posedge rst_i) // JTAG spec specifies latch on negative edge in UPDATE_DR state + begin + if(rst_i) + address_counter <= 32'h0; + else if(addr_ct_en) + address_counter <= data_to_addr_counter; + end + + //////////////////////////////////////// + // Opcode latch + + always @ (posedge tck_i or posedge rst_i) // JTAG spec specifies latch on negative edge in UPDATE_DR state + begin + if(rst_i) + operation <= 4'h0; + else if(op_reg_en) + operation <= operation_in; + end + + ////////////////////////////////////// + // Bit counter + + always @ (posedge tck_i or posedge rst_i) + begin + + if(rst_i) bit_count <= 6'h0; + else if(bit_ct_rst) bit_count <= 6'h0; + else if(bit_ct_en) bit_count <= bit_count + 6'h1; + + end + + assign bit_count_max = (bit_count == word_size_bits) ? 1'b1 : 1'b0 ; + assign bit_count_32 = (bit_count == 6'h20) ? 1'b1 : 1'b0; + + //////////////////////////////////////// + // Word counter + + assign data_to_word_counter = (word_ct_sel) ? decremented_word_count : count_data_in; + assign decremented_word_count = word_count - 16'h1; + + // Technically, since this data (sometimes) comes from the input shift reg, we should latch on + // negedge, per the JTAG spec. But that makes things difficult when incrementing. + always @ (posedge tck_i or posedge rst_i) // JTAG spec specifies latch on negative edge in UPDATE_DR state + begin + if(rst_i) + word_count <= 16'h0; + else if(word_ct_en) + word_count <= data_to_word_counter; + end + + assign word_count_zero = (word_count == 16'h0); + + ///////////////////////////////////////////////////// + // Output register and TDO output MUX + + assign out_reg_data = (out_reg_data_sel) ? data_from_internal_reg : data_from_biu; + + always @ (posedge tck_i or posedge rst_i) + begin + if(rst_i) data_out_shift_reg <= 32'h0; + else if(out_reg_ld_en) data_out_shift_reg <= out_reg_data; + else if(out_reg_shift_en) data_out_shift_reg <= {1'b0, data_out_shift_reg[31:1]}; + end + + + always @ (tdo_output_sel or data_out_shift_reg[0] or biu_ready or crc_match or crc_serial_out) + begin + if(tdo_output_sel == 2'h0) module_tdo_o <= biu_ready; + else if(tdo_output_sel == 2'h1) module_tdo_o <= data_out_shift_reg[0]; + else if(tdo_output_sel == 2'h2) module_tdo_o <= crc_match; + else module_tdo_o <= crc_serial_out; + end + + //////////////////////////////////////// + // Bus Interface Unit (to OR1K SPR bus) + // It is assumed that the BIU has internal registers, and will + // latch address, operation, and write data on rising clock edge + // when strobe is asserted + + adbg_or1k_biu or1k_biu_i ( + // Debug interface signals + .tck_i (tck_i), + .rst_i (rst_i), + .data_i (data_to_biu), + .data_o (data_from_biu), + .addr_i (address_counter), + .strobe_i (biu_strobe), + .rd_wrn_i (rd_op), // If 0, then write op + .rdy_o (biu_ready), + // This bus has no error signal + + // OR1K SPR bus signals + .cpu_clk_i(cpu_clk_i), + .cpu_addr_o(cpu_addr_o), + .cpu_data_i(cpu_data_i), + .cpu_data_o(cpu_data_o), + .cpu_stb_o(cpu_stb_o), + .cpu_we_o(cpu_we_o), + .cpu_ack_i(cpu_ack_i) + ); + + + + ///////////////////////////////////// + // CRC module + + assign crc_data_in = (crc_in_sel) ? tdi_i : data_out_shift_reg[0]; // MUX, write or read data + + adbg_crc32 or1k_crc_i + ( + .clk(tck_i), + .data(crc_data_in), + .enable(crc_en), + .shift(crc_shift_en), + .clr(crc_clr), + .rst(rst_i), + .crc_out(crc_data_out), + .serial_out(crc_serial_out) + ); + + assign crc_match = (data_register_i[52:21] == crc_data_out) ? 1'b1 : 1'b0; + + //////////////////////////////////////// + // Control FSM + + // Definition of machine state values. + // Don't worry too much about the state encoding, the synthesis tool + // will probably re-encode it anyway. + +`define STATE_idle 4'h0 +`define STATE_Rbegin 4'h1 +`define STATE_Rready 4'h2 +`define STATE_Rstatus 4'h3 +`define STATE_Rburst 4'h4 +`define STATE_Wready 4'h5 +`define STATE_Wwait 4'h6 +`define STATE_Wburst 4'h7 +`define STATE_Wstatus 4'h8 +`define STATE_Rcrc 4'h9 +`define STATE_Wcrc 4'ha +`define STATE_Wmatch 4'hb + + reg [3:0] module_state; // FSM state + reg [3:0] module_next_state; // combinatorial signal, not actually a register + + + + // sequential part of the FSM + always @ (posedge tck_i or posedge rst_i) + begin + if(rst_i) + module_state <= `STATE_idle; + else + module_state <= module_next_state; + end + + + // Determination of next state; purely combinatorial + always @ (module_state or module_select_i or update_dr_i or capture_dr_i or shift_dr_i or operation_in[2] + or word_count_zero or bit_count_max or data_register_i[52] or bit_count_32 or biu_ready + or module_cmd or intreg_write or decremented_word_count or burst_instruction) + begin + case(module_state) + `STATE_idle: + begin + if(module_cmd && module_select_i && update_dr_i && burst_instruction && operation_in[2]) module_next_state <= `STATE_Rbegin; + else if(module_cmd && module_select_i && update_dr_i && burst_instruction) module_next_state <= `STATE_Wready; + else module_next_state <= `STATE_idle; + end + + `STATE_Rbegin: + begin + if(word_count_zero) module_next_state <= `STATE_idle; // set up a burst of size 0, illegal. + else module_next_state <= `STATE_Rready; + end + `STATE_Rready: + begin + if(module_select_i && capture_dr_i) module_next_state <= `STATE_Rstatus; + else module_next_state <= `STATE_Rready; + end + `STATE_Rstatus: + begin + if(update_dr_i) module_next_state <= `STATE_idle; + else if (biu_ready) module_next_state <= `STATE_Rburst; + else module_next_state <= `STATE_Rstatus; + end + `STATE_Rburst: + begin + if(update_dr_i) module_next_state <= `STATE_idle; + else if(bit_count_max && word_count_zero) module_next_state <= `STATE_Rcrc; + else if(bit_count_max) module_next_state <= `STATE_Rstatus; + else module_next_state <= `STATE_Rburst; + end + `STATE_Rcrc: + begin + if(update_dr_i) module_next_state <= `STATE_idle; + // This doubles as the 'recovery' state, so stay here until update_dr_i. + else module_next_state <= `STATE_Rcrc; + end + + `STATE_Wready: + begin + if(word_count_zero) module_next_state <= `STATE_idle; + else if(module_select_i && capture_dr_i) module_next_state <= `STATE_Wwait; + else module_next_state <= `STATE_Wready; + end + `STATE_Wwait: + begin + if(update_dr_i) module_next_state <= `STATE_idle; // client terminated early + else if(module_select_i && data_register_i[52]) module_next_state <= `STATE_Wburst; // Got a start bit + else module_next_state <= `STATE_Wwait; + end + `STATE_Wburst: + begin + if(update_dr_i) module_next_state <= `STATE_idle; // client terminated early + else if(bit_count_max) module_next_state <= `STATE_Wstatus; + else module_next_state <= `STATE_Wburst; + end + `STATE_Wstatus: + begin + if(update_dr_i) module_next_state <= `STATE_idle; // client terminated early + else if(word_count_zero) module_next_state <= `STATE_Wcrc; + // can't wait until bus ready if multiple devices in chain... + // Would have to read postfix_bits, then send another start bit and push it through + // prefix_bits...potentially very inefficient. + else module_next_state <= `STATE_Wburst; + end + + `STATE_Wcrc: + begin + if(update_dr_i) module_next_state <= `STATE_idle; // client terminated early + else if(bit_count_32) module_next_state <= `STATE_Wmatch; + else module_next_state <= `STATE_Wcrc; + end + + `STATE_Wmatch: + begin + if(update_dr_i) module_next_state <= `STATE_idle; + // This doubles as our recovery state, stay here until update_dr_i + else module_next_state <= `STATE_Wmatch; + end + + default: module_next_state <= `STATE_idle; // shouldn't actually happen... + endcase + end + + + // Outputs of state machine, pure combinatorial + always @ (module_state or module_next_state or module_select_i or update_dr_i or capture_dr_i or shift_dr_i or operation_in[2] + or word_count_zero or bit_count_max or data_register_i[52] or biu_ready or intreg_instruction + or module_cmd or intreg_write or decremented_word_count) + begin + // Default everything to 0, keeps the case statement simple + addr_sel <= 1'b1; // Selects data for address_counter. 0 = data_register_i, 1 = incremented address count + addr_ct_en <= 1'b0; // Enable signal for address counter register + op_reg_en <= 1'b0; // Enable signal for 'operation' register + bit_ct_en <= 1'b0; // enable bit counter + bit_ct_rst <= 1'b0; // reset (zero) bit count register + word_ct_sel <= 1'b1; // Selects data for byte counter. 0 = data_register_i, 1 = decremented byte count + word_ct_en <= 1'b0; // Enable byte counter register + out_reg_ld_en <= 1'b0; // Enable parallel load of data_out_shift_reg + out_reg_shift_en <= 1'b0; // Enable shift of data_out_shift_reg + tdo_output_sel <= 2'b1; // 1 = data reg, 0 = biu_ready, 2 = crc_match, 3 = CRC data + biu_strobe <= 1'b0; + crc_clr <= 1'b0; + crc_en <= 1'b0; // add the input bit to the CRC calculation + crc_in_sel <= 1'b0; // 0 = tdo, 1 = tdi + crc_shift_en <= 1'b0; + out_reg_data_sel <= 1'b1; // 0 = BIU data, 1 = internal register data + regsel_ld_en <= 1'b0; + intreg_ld_en <= 1'b0; + top_inhibit_o <= 1'b0; // Don't disable the top-level module in the default case + + case(module_state) + `STATE_idle: + begin + addr_sel <= 1'b0; + word_ct_sel <= 1'b0; + + // Operations for internal registers - stay in idle state + if(module_select_i & shift_dr_i) out_reg_shift_en <= 1'b1; // For module regs + if(module_select_i & capture_dr_i) + begin + out_reg_data_sel <= 1'b1; // select internal register data + out_reg_ld_en <= 1'b1; // For module regs + end + if(module_select_i & module_cmd & update_dr_i) begin + if(intreg_instruction) regsel_ld_en <= 1'b1; // For module regs + if(intreg_write) intreg_ld_en <= 1'b1; // For module regs + end + + // Burst operations + if(module_next_state != `STATE_idle) begin // Do the same to receive read or write opcode + addr_ct_en <= 1'b1; + op_reg_en <= 1'b1; + bit_ct_rst <= 1'b1; + word_ct_en <= 1'b1; + crc_clr <= 1'b1; + end + end + + `STATE_Rbegin: + begin + if(!word_count_zero) begin // Start a biu read transaction + biu_strobe <= 1'b1; + addr_sel <= 1'b1; + addr_ct_en <= 1'b1; + end + end + + `STATE_Rready: + ; // Just a wait state + + `STATE_Rstatus: + begin + tdo_output_sel <= 2'h0; + top_inhibit_o <= 1'b1; // in case of early termination + + if (module_next_state == `STATE_Rburst) begin + out_reg_data_sel <= 1'b0; // select BIU data + out_reg_ld_en <= 1'b1; + bit_ct_rst <= 1'b1; + word_ct_sel <= 1'b1; + word_ct_en <= 1'b1; + if(!(decremented_word_count == 0) && !word_count_zero) begin // Start a biu read transaction + biu_strobe <= 1'b1; + addr_sel <= 1'b1; + addr_ct_en <= 1'b1; + end + end + end + + `STATE_Rburst: + begin + tdo_output_sel <= 2'h1; + out_reg_shift_en <= 1'b1; + bit_ct_en <= 1'b1; + crc_en <= 1'b1; + crc_in_sel <= 1'b0; // read data in output shift register LSB (tdo) + top_inhibit_o <= 1'b1; // in case of early termination + end + + `STATE_Rcrc: + begin + // Just shift out the data, don't bother counting, we don't move on until update_dr_i + tdo_output_sel <= 2'h3; + crc_shift_en <= 1'b1; + top_inhibit_o <= 1'b1; + end + + `STATE_Wready: + ; // Just a wait state + + `STATE_Wwait: + begin + tdo_output_sel <= 2'h1; + top_inhibit_o <= 1'b1; // in case of early termination + if(module_next_state == `STATE_Wburst) begin + bit_ct_en <= 1'b1; + word_ct_sel <= 1'b1; // Pre-decrement the byte count + word_ct_en <= 1'b1; + crc_en <= 1'b1; // CRC gets tdi_i, which is 1 cycle ahead of data_register_i, so we need the bit there now in the CRC + crc_in_sel <= 1'b1; // read data from tdi_i + end + end + + `STATE_Wburst: + begin + bit_ct_en <= 1'b1; + tdo_output_sel <= 2'h1; + crc_en <= 1'b1; + crc_in_sel <= 1'b1; // read data from tdi_i + top_inhibit_o <= 1'b1; // in case of early termination + end + + `STATE_Wstatus: + begin + tdo_output_sel <= 2'h0; // Send the status bit to TDO + // start transaction + biu_strobe <= 1'b1; // Start a BIU transaction + word_ct_sel <= 1'b1; // Decrement the byte count + word_ct_en <= 1'b1; + bit_ct_rst <= 1'b1; // Zero the bit count + addr_ct_en <= 1'b1; // Increment thte address counter + top_inhibit_o <= 1'b1; // in case of early termination + end + + `STATE_Wcrc: + begin + bit_ct_en <= 1'b1; + top_inhibit_o <= 1'b1; // in case of early termination + if(module_next_state == `STATE_Wmatch) tdo_output_sel <= 2'h2; // This is when the 'match' bit is actually read + end + + `STATE_Wmatch: + begin + tdo_output_sel <= 2'h2; + top_inhibit_o <= 1'b1; // in case of early termination + end + + default: ; + endcase + end + + +endmodule + Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/rtl/verilog/adbg_top.v =================================================================== --- ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/rtl/verilog/adbg_top.v (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/rtl/verilog/adbg_top.v (revision 26) @@ -0,0 +1,386 @@ +////////////////////////////////////////////////////////////////////// +//// //// +//// adbg_top.v //// +//// //// +//// //// +//// This file is part of the SoC Advanced Debug Interface. //// +//// //// +//// Author(s): //// +//// Nathan Yawn (nathan.yawn@opencores.org) //// +//// //// +//// //// +//// //// +////////////////////////////////////////////////////////////////////// +//// //// +//// Copyright (C) 2008 Authors //// +//// //// +//// This source file may be used and distributed without //// +//// restriction provided that this copyright statement is not //// +//// removed from the file and that any derivative work contains //// +//// the original copyright notice and the associated disclaimer. //// +//// //// +//// This source file is free software; you can redistribute it //// +//// and/or modify it under the terms of the GNU Lesser General //// +//// Public License as published by the Free Software Foundation; //// +//// either version 2.1 of the License, or (at your option) any //// +//// later version. //// +//// //// +//// This source is distributed in the hope that it will be //// +//// useful, but WITHOUT ANY WARRANTY; without even the implied //// +//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// +//// PURPOSE. See the GNU Lesser General Public License for more //// +//// details. //// +//// //// +//// You should have received a copy of the GNU Lesser General //// +//// Public License along with this source; if not, download it //// +//// from http://www.opencores.org/lgpl.shtml //// +//// //// +////////////////////////////////////////////////////////////////////// +// +// CVS Revision History +// +// $Log: adbg_top.v,v $ +// Revision 1.2 2009/05/17 20:54:56 Nathan +// Changed email address to opencores.org +// +// Revision 1.1 2008/07/22 20:28:32 Nathan +// Changed names of all files and modules (prefixed an a, for advanced). Cleanup, indenting. No functional changes. +// +// Revision 1.10 2008/07/11 08:13:29 Nathan +// Latch opcode on posedge, like other signals. This fixes a problem +// when the module is used with a Xilinx BSCAN TAP. Added signals to +// allow modules to inhibit latching of a new active module by the top +// module. This allows the sub-modules to force the top level module +// to ignore the command present in the input shift register after e.g. +// a burst read. +// +// Revision 1.7 2008/06/30 20:09:20 Nathan +// Removed code to select top-level module as active (it served no +// purpose). Re-numbered modules, requiring changes to testbench and +// software driver. +// + + +`include "adbg_defines.v" + + +// Top module +module adbg_top( + // JTAG signals + tck_i, + tdi_i, + tdo_o, + rst_i, + + + // TAP states + shift_dr_i, + pause_dr_i, + update_dr_i, + capture_dr_i, + + // Instructions + debug_select_i + + + `ifdef DBG_WISHBONE_SUPPORTED + // WISHBONE common signals + , + wb_clk_i, + + // WISHBONE master interface + wb_adr_o, + wb_dat_o, + wb_dat_i, + wb_cyc_o, + wb_stb_o, + wb_sel_o, + wb_we_o, + wb_ack_i, + wb_cab_o, + wb_err_i, + wb_cti_o, + wb_bte_o + `endif + + `ifdef DBG_CPU0_SUPPORTED + // CPU signals + , + cpu0_clk_i, + cpu0_addr_o, + cpu0_data_i, + cpu0_data_o, + cpu0_bp_i, + cpu0_stall_o, + cpu0_stb_o, + cpu0_we_o, + cpu0_ack_i, + cpu0_rst_o + `endif + + `ifdef DBG_CPU1_SUPPORTED + // CPU signals + , + cpu1_clk_i, + cpu1_addr_o, + cpu1_data_i, + cpu1_data_o, + cpu1_bp_i, + cpu1_stall_o, + cpu1_stb_o, + cpu1_we_o, + cpu1_ack_i, + cpu1_rst_o + `endif + + ); + + + // JTAG signals + input tck_i; + input tdi_i; + output tdo_o; + input rst_i; + + // TAP states + input shift_dr_i; + input pause_dr_i; + input update_dr_i; + input capture_dr_i; + + // Module select from TAP + input debug_select_i; + + `ifdef DBG_WISHBONE_SUPPORTED + input wb_clk_i; + output [31:0] wb_adr_o; + output [31:0] wb_dat_o; + input [31:0] wb_dat_i; + output wb_cyc_o; + output wb_stb_o; + output [3:0] wb_sel_o; + output wb_we_o; + input wb_ack_i; + output wb_cab_o; + input wb_err_i; + output [2:0] wb_cti_o; + output [1:0] wb_bte_o; + `endif + + `ifdef DBG_CPU0_SUPPORTED + // CPU signals + input cpu0_clk_i; + output [31:0] cpu0_addr_o; + input [31:0] cpu0_data_i; + output [31:0] cpu0_data_o; + input cpu0_bp_i; + output cpu0_stall_o; + output cpu0_stb_o; + output cpu0_we_o; + input cpu0_ack_i; + output cpu0_rst_o; + `endif + + `ifdef DBG_CPU1_SUPPORTED + input cpu1_clk_i; + output [31:0] cpu1_addr_o; + input [31:0] cpu1_data_i; + output [31:0] cpu1_data_o; + input cpu1_bp_i; + output cpu1_stall_o; + output cpu1_stb_o; + output cpu1_we_o; + input cpu1_ack_i; + output cpu1_rst_o; + `endif + + + reg tdo_o; + wire tdo_wb; + wire tdo_cpu0; + wire tdo_cpu1; + + + // Registers + reg [`DBG_TOP_MODULE_DATA_LEN-1:0] input_shift_reg; // 1 bit sel/cmd, 4 bit opcode, 32 bit address, 16 bit length = 53 bits + //reg output_shift_reg; // Just 1 bit for status (valid module selected) + reg [`DBG_TOP_MODULE_ID_LENGTH -1:0] module_id_reg; // Module selection register + + + // Control signals + wire select_cmd; // True when the command (registered at Update_DR) is for top level/module selection + wire [(`DBG_TOP_MODULE_ID_LENGTH - 1) : 0] module_id_in; // The part of the input_shift_register to be used as the module select data + reg [(`DBG_TOP_MAX_MODULES - 1) : 0] module_selects; // Select signals for the individual modules + wire select_inhibit; // OR of inhibit signals from sub-modules, prevents latching of a new module ID + wire [2:0] module_inhibit; // signals to allow submodules to prevent top level from latching new module ID + + /////////////////////////////////////// + // Combinatorial assignments + +assign select_cmd = input_shift_reg[52]; +assign module_id_in = input_shift_reg[51:50]; + +////////////////////////////////////////////////////////// +// Module select register and select signals + +always @ (posedge tck_i or posedge rst_i) +begin + if (rst_i) + module_id_reg <= 2'b0; + else if(debug_select_i && select_cmd && update_dr_i && !select_inhibit) // Chain select + module_id_reg <= module_id_in; +end + + +always @ (module_id_reg) +begin + module_selects <= `DBG_TOP_MODULE_ID_LENGTH'h0; + module_selects[module_id_reg] <= 1'b1; +end + +/////////////////////////////////////////////// +// Data input shift register + +always @ (posedge tck_i or posedge rst_i) +begin + if (rst_i) + input_shift_reg <= 53'h0; + else if(debug_select_i && shift_dr_i) + input_shift_reg <= {tdi_i, input_shift_reg[52:1]}; +end + + +////////////////////////////////////////////// +// Debug module instantiations + +`ifdef DBG_WISHBONE_SUPPORTED +// Connecting wishbone module +adbg_wb_module i_dbg_wb ( + // JTAG signals + .tck_i (tck_i), + .module_tdo_o (tdo_wb), + .tdi_i (tdi_i), + + // TAP states + .capture_dr_i (capture_dr_i), + .shift_dr_i (shift_dr_i), + .update_dr_i (update_dr_i), + + .data_register_i (input_shift_reg), + .module_select_i (module_selects[`DBG_TOP_WISHBONE_DEBUG_MODULE]), + .top_inhibit_o (module_inhibit[`DBG_TOP_WISHBONE_DEBUG_MODULE]), + .rst_i (rst_i), + + // WISHBONE common signals + .wb_clk_i (wb_clk_i), + + // WISHBONE master interface + .wb_adr_o (wb_adr_o), + .wb_dat_o (wb_dat_o), + .wb_dat_i (wb_dat_i), + .wb_cyc_o (wb_cyc_o), + .wb_stb_o (wb_stb_o), + .wb_sel_o (wb_sel_o), + .wb_we_o (wb_we_o), + .wb_ack_i (wb_ack_i), + .wb_cab_o (wb_cab_o), + .wb_err_i (wb_err_i), + .wb_cti_o (wb_cti_o), + .wb_bte_o (wb_bte_o) + ); +`else +assign tdo_wb = 1'b0; +assign module_inhibit[`DBG_TOP_WISHBONE_DEBUG_MODULE] = 1'b0; +`endif + + + +`ifdef DBG_CPU0_SUPPORTED +adbg_or1k_module i_dbg_cpu_or1k ( + // JTAG signals + .tck_i (tck_i), + .module_tdo_o (tdo_cpu0), + .tdi_i (tdi_i), + + // TAP states + .capture_dr_i (capture_dr_i), + .shift_dr_i (shift_dr_i), + .update_dr_i (update_dr_i), + + .data_register_i (input_shift_reg), + .module_select_i (module_selects[`DBG_TOP_CPU0_DEBUG_MODULE]), + .top_inhibit_o (module_inhibit[`DBG_TOP_CPU0_DEBUG_MODULE]), + .rst_i (rst_i), + + // CPU signals + .cpu_clk_i (cpu0_clk_i), + .cpu_addr_o (cpu0_addr_o), + .cpu_data_i (cpu0_data_i), + .cpu_data_o (cpu0_data_o), + .cpu_bp_i (cpu0_bp_i), + .cpu_stall_o (cpu0_stall_o), + .cpu_stb_o (cpu0_stb_o), + .cpu_we_o (cpu0_we_o), + .cpu_ack_i (cpu0_ack_i), + .cpu_rst_o (cpu0_rst_o) + ); +`else +assign tdo_cpu0 = 1'b0; +assign module_inhibit[`DBG_TOP_CPU0_DEBUG_MODULE] = 1'b0; +`endif // DBG_CPU0_SUPPORTED + + + +`ifdef DBG_CPU1_SUPPORTED +// Connecting cpu module +adbg_or1k_module i_dbg_cpu_8051 ( + // JTAG signals + .tck_i (tck_i), + .module_tdo_o (tdo_cpu1), + .tdi_i (tdi_i), + + // TAP states + .capture_dr_i (capture_dr_i), + .shift_dr_i (shift_dr_i), + .update_dr_i (update_dr_i), + + .data_register_i (input_shift_reg), + .module_select_i (module_selects[`DBG_TOP_CPU1_DEBUG_MODULE]), + .top_inhibit_o (module_inhibit[`DBG_TOP_CPU1_DEBUG_MODULE]), + .rst_i (rst_i), + + // CPU signals + .cpu_clk_i (cpu1_clk_i), + .cpu_addr_o (cpu1_addr_o), + .cpu_data_i (cpu1_data_i), + .cpu_data_o (cpu1_data_o), + .cpu_bp_i (cpu1_bp_i), + .cpu_stall_o (cpu1_stall_o), + .cpu_stb_o (cpu1_stb_o), + .cpu_we_o (cpu1_we_o), + .cpu_ack_i (cpu1_ack_i), + .cpu_rst_o (cpu1_rst_o) + ); +`else +assign tdo_cpu1 = 1'b0; +assign module_inhibit[`DBG_TOP_CPU1_DEBUG_MODULE] = 1'b0; +`endif + +assign select_inhibit = |module_inhibit; + +///////////////////////////////////////////////// +// TDO output MUX + +always @ (module_id_reg or tdo_wb or tdo_cpu0 or tdo_cpu1) +begin + case (module_id_reg) + `DBG_TOP_WISHBONE_DEBUG_MODULE: tdo_o <= tdo_wb; + `DBG_TOP_CPU0_DEBUG_MODULE: tdo_o <= tdo_cpu0; + `DBG_TOP_CPU1_DEBUG_MODULE: tdo_o <= tdo_cpu1; + default: tdo_o <= 1'b0; + endcase + +end + + +endmodule Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/rtl/verilog/adbg_wb_defines.v =================================================================== --- ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/rtl/verilog/adbg_wb_defines.v (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/rtl/verilog/adbg_wb_defines.v (revision 26) @@ -0,0 +1,89 @@ +////////////////////////////////////////////////////////////////////// +//// //// +//// adbg_wb_defines.v //// +//// //// +//// //// +//// This file is part of the SoC Advanced Debug Interface. //// +//// //// +//// Author(s): //// +//// Nathan Yawn (nathan.yawn@opencores.org) //// +//// //// +//// //// +//// //// +////////////////////////////////////////////////////////////////////// +//// //// +//// Copyright (C) 2008 Authors //// +//// //// +//// This source file may be used and distributed without //// +//// restriction provided that this copyright statement is not //// +//// removed from the file and that any derivative work contains //// +//// the original copyright notice and the associated disclaimer. //// +//// //// +//// This source file is free software; you can redistribute it //// +//// and/or modify it under the terms of the GNU Lesser General //// +//// Public License as published by the Free Software Foundation; //// +//// either version 2.1 of the License, or (at your option) any //// +//// later version. //// +//// //// +//// This source is distributed in the hope that it will be //// +//// useful, but WITHOUT ANY WARRANTY; without even the implied //// +//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// +//// PURPOSE. See the GNU Lesser General Public License for more //// +//// details. //// +//// //// +//// You should have received a copy of the GNU Lesser General //// +//// Public License along with this source; if not, download it //// +//// from http://www.opencores.org/lgpl.shtml //// +//// //// +////////////////////////////////////////////////////////////////////// +// +// CVS Revision History +// +// $Log: adbg_wb_defines.v,v $ +// Revision 1.3 2009/05/17 20:54:57 Nathan +// Changed email address to opencores.org +// +// Revision 1.2 2009/05/04 00:50:11 Nathan +// Changed the WB BIU to use big-endian byte ordering, to match the OR1000. Kept little-endian ordering as a compile-time option in case this is ever used with a little-endian CPU. +// +// Revision 1.1 2008/07/22 20:28:32 Nathan +// Changed names of all files and modules (prefixed an a, for advanced). Cleanup, indenting. No functional changes. +// + +// Endian-ness of the Wishbone interface. +// Default is BIG endian, to match the OR1200. +// If using a LITTLE endian CPU, e.g. an x86, un-comment this line. +//`define DBG_WB_LITTLE_ENDIAN + +// These relate to the number of internal registers, and how +// many bits are required in the Reg. Select register +`define DBG_WB_REGSELECT_SIZE 1 +`define DBG_WB_NUM_INTREG 1 + +// Register index definitions for module-internal registers +// The WB module has just 1, the error register +`define DBG_WB_INTREG_ERROR 1'b0 + +// Valid commands/opcodes for the wishbone debug module +// 0000 NOP +// 0001 Write burst, 8-bit access +// 0010 Write burst, 16-bit access +// 0011 Write burst, 32-bit access +// 0100 Reserved +// 0101 Read burst, 8-bit access +// 0110 Read burst, 16-bit access +// 0111 Read burst, 32-bit access +// 1000 Reserved +// 1001 Internal register select/write +// 1010 - 1100 Reserved +// 1101 Internal register select +// 1110 - 1111 Reserved + +`define DBG_WB_CMD_BWRITE8 4'h1 +`define DBG_WB_CMD_BWRITE16 4'h2 +`define DBG_WB_CMD_BWRITE32 4'h3 +`define DBG_WB_CMD_BREAD8 4'h5 +`define DBG_WB_CMD_BREAD16 4'h6 +`define DBG_WB_CMD_BREAD32 4'h7 +`define DBG_WB_CMD_IREG_WR 4'h9 +`define DBG_WB_CMD_IREG_SEL 4'hd Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/rtl/verilog/adbg_wb_biu.v =================================================================== --- ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/rtl/verilog/adbg_wb_biu.v (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/rtl/verilog/adbg_wb_biu.v (revision 26) @@ -0,0 +1,434 @@ +////////////////////////////////////////////////////////////////////// +//// //// +//// adbg_wb_biu.v //// +//// //// +//// //// +//// This file is part of the SoC Debug Interface. //// +//// //// +//// Author(s): //// +//// Nathan Yawn (nathan.yawn@opencores.org) //// +//// //// +//// //// +//// //// +////////////////////////////////////////////////////////////////////// +//// //// +//// Copyright (C) 2008 Authors //// +//// //// +//// This source file may be used and distributed without //// +//// restriction provided that this copyright statement is not //// +//// removed from the file and that any derivative work contains //// +//// the original copyright notice and the associated disclaimer. //// +//// //// +//// This source file is free software; you can redistribute it //// +//// and/or modify it under the terms of the GNU Lesser General //// +//// Public License as published by the Free Software Foundation; //// +//// either version 2.1 of the License, or (at your option) any //// +//// later version. //// +//// //// +//// This source is distributed in the hope that it will be //// +//// useful, but WITHOUT ANY WARRANTY; without even the implied //// +//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// +//// PURPOSE. See the GNU Lesser General Public License for more //// +//// details. //// +//// //// +//// You should have received a copy of the GNU Lesser General //// +//// Public License along with this source; if not, download it //// +//// from http://www.opencores.org/lgpl.shtml //// +//// //// +////////////////////////////////////////////////////////////////////// +// +// CVS Revision History +// +// $Log: adbg_wb_biu.v,v $ +// Revision 1.3 2009/05/17 20:54:57 Nathan +// Changed email address to opencores.org +// +// Revision 1.2 2009/05/04 00:50:10 Nathan +// Changed the WB BIU to use big-endian byte ordering, to match the OR1000. Kept little-endian ordering as a compile-time option in case this is ever used with a little-endian CPU. +// +// Revision 1.1 2008/07/22 20:28:32 Nathan +// Changed names of all files and modules (prefixed an a, for advanced). Cleanup, indenting. No functional changes. +// +// Revision 1.4 2008/07/08 19:04:04 Nathan +// Many small changes to eliminate compiler warnings, no functional changes. +// System will now pass SRAM and CPU self-tests on Altera FPGA using +// altera_virtual_jtag TAP. +// + +`include "adbg_wb_defines.v" + +// Top module +module adbg_wb_biu + ( + // Debug interface signals + tck_i, + rst_i, + data_i, + data_o, + addr_i, + strobe_i, + rd_wrn_i, // If 0, then write op + rdy_o, + err_o, + word_size_i, // 1,2, or 4 + + // Wishbone signals + wb_clk_i, + wb_adr_o, + wb_dat_o, + wb_dat_i, + wb_cyc_o, + wb_stb_o, + wb_sel_o, + wb_we_o, + wb_ack_i, + wb_cab_o, + wb_err_i, + wb_cti_o, + wb_bte_o + ); + + // Debug interface signals + input tck_i; + input rst_i; + input [31:0] data_i; // Assume short words are in UPPER order bits! + output [31:0] data_o; + input [31:0] addr_i; + input strobe_i; + input rd_wrn_i; + output rdy_o; + output err_o; + input [2:0] word_size_i; + + // Wishbone signals + input wb_clk_i; + output [31:0] wb_adr_o; + output [31:0] wb_dat_o; + input [31:0] wb_dat_i; + output wb_cyc_o; + output wb_stb_o; + output [3:0] wb_sel_o; + output wb_we_o; + input wb_ack_i; + output wb_cab_o; + input wb_err_i; + output [2:0] wb_cti_o; + output [1:0] wb_bte_o; + + wire [31:0] data_o; + reg rdy_o; + wire err_o; + + wire [31:0] wb_adr_o; + reg wb_cyc_o; + reg wb_stb_o; + wire [31:0] wb_dat_o; + wire [3:0] wb_sel_o; + wire wb_we_o; + wire wb_cab_o; + wire [2:0] wb_cti_o; + wire [1:0] wb_bte_o; + + + // Registers + reg [3:0] sel_reg; + reg [29:0] addr_reg; // Don't need the two LSB, this info is in the SEL bits + reg [31:0] data_in_reg; // dbg->WB + reg [31:0] data_out_reg; // WB->dbg + reg wr_reg; + reg str_sync; // This is 'active-toggle' rather than -high or -low. + reg rdy_sync; // ditto, active-toggle + reg err_reg; + + // Sync registers. TFF indicates TCK domain, WBFF indicates wb_clk domain + reg rdy_sync_tff1; + reg rdy_sync_tff2; + reg rdy_sync_tff2q; // used to detect toggles + reg str_sync_wbff1; + reg str_sync_wbff2; + reg str_sync_wbff2q; // used to detect toggles + + + // Control Signals + reg data_o_en; // latch wb_data_i + reg rdy_sync_en; // toggle the rdy_sync signal, indicate ready to TCK domain + reg err_en; // latch the wb_err_i signal + + // Internal signals + reg [3:0] be_dec; // word_size and low-order address bits decoded to SEL bits + wire start_toggle; // WB domain, indicates a toggle on the start strobe + reg [31:0] swapped_data_i; + reg [31:0] swapped_data_out; + + ////////////////////////////////////////////////////// + // TCK clock domain + // There is no FSM here, just signal latching and clock + // domain synchronization + + // Create byte enable signals from word_size and address (combinatorial) + `ifdef DBG_WB_LITTLE_ENDIAN + // This uses LITTLE ENDIAN byte ordering...lowest-addressed bytes is the + // least-significant byte of the 32-bit WB bus. + always @ (word_size_i or addr_i) + begin + case (word_size_i) + 3'h1: + begin + if(addr_i[1:0] == 2'b00) be_dec <= 4'b0001; + else if(addr_i[1:0] == 2'b01) be_dec <= 4'b0010; + else if(addr_i[1:0] == 2'b10) be_dec <= 4'b0100; + else be_dec <= 4'b1000; + end + 3'h2: + begin + if(addr_i[1]) be_dec <= 4'b1100; + else be_dec <= 4'b0011; + end + 3'h4: be_dec <= 4'b1111; + default: be_dec <= 4'b1111; // default to 32-bit access + endcase + end + `else + // This is for a BIG ENDIAN CPU...lowest-addressed byte is + // the 8 most significant bits of the 32-bit WB bus. + always @ (word_size_i or addr_i) + begin + case (word_size_i) + 3'h1: + begin + if(addr_i[1:0] == 2'b00) be_dec <= 4'b1000; + else if(addr_i[1:0] == 2'b01) be_dec <= 4'b0100; + else if(addr_i[1:0] == 2'b10) be_dec <= 4'b0010; + else be_dec <= 4'b0001; + end + 3'h2: + begin + if(addr_i[1] == 1'b1) be_dec <= 4'b0011; + else be_dec <= 4'b1100; + end + 3'h4: be_dec <= 4'b1111; + default: be_dec <= 4'b1111; // default to 32-bit access + endcase + end + `endif + + + // Byte- or word-swap data as necessary. Use the non-latched be_dec signal, + // since it and the swapped data will be latched at the same time. + // Remember that since the data is shifted in LSB-first, shorter words + // will be in the high-order bits. (combinatorial) + always @ (be_dec or data_i) + begin + case (be_dec) + 4'b1111: swapped_data_i <= data_i; + 4'b0011: swapped_data_i <= {16'h0,data_i[31:16]}; + 4'b1100: swapped_data_i <= data_i; + 4'b0001: swapped_data_i <= {24'h0, data_i[31:24]}; + 4'b0010: swapped_data_i <= {16'h0, data_i[31:24], 8'h0}; + 4'b0100: swapped_data_i <= {8'h0, data_i[31:24], 16'h0}; + 4'b1000: swapped_data_i <= {data_i[31:24], 24'h0}; + default: swapped_data_i <= data_i; // Shouldn't be possible + endcase + end + + // Latch input data on 'start' strobe, if ready. + always @ (posedge tck_i or posedge rst_i) + begin + if(rst_i) begin + sel_reg <= 4'h0; + addr_reg <= 30'h0; + data_in_reg <= 32'h0; + wr_reg <= 1'b0; + end + else + if(strobe_i && rdy_o) begin + sel_reg <= be_dec; + addr_reg <= addr_i[31:2]; + if(!rd_wrn_i) data_in_reg <= swapped_data_i; + wr_reg <= ~rd_wrn_i; + end + end + + // Create toggle-active strobe signal for clock sync. This will start a transaction + // on the WB once the toggle propagates to the FSM in the WB domain. + always @ (posedge tck_i or posedge rst_i) + begin + if(rst_i) str_sync <= 1'b0; + else if(strobe_i && rdy_o) str_sync <= ~str_sync; + end + + // Create rdy_o output. Set on reset, clear on strobe (if set), set on input toggle + always @ (posedge tck_i or posedge rst_i) + begin + if(rst_i) begin + rdy_sync_tff1 <= 1'b0; + rdy_sync_tff2 <= 1'b0; + rdy_sync_tff2q <= 1'b0; + rdy_o <= 1'b1; + end + else begin + rdy_sync_tff1 <= rdy_sync; // Synchronize the ready signal across clock domains + rdy_sync_tff2 <= rdy_sync_tff1; + rdy_sync_tff2q <= rdy_sync_tff2; // used to detect toggles + + if(strobe_i && rdy_o) rdy_o <= 1'b0; + else if(rdy_sync_tff2 != rdy_sync_tff2q) rdy_o <= 1'b1; + end + + end + + ////////////////////////////////////////////////////////// + // Direct assignments, unsynchronized + + assign wb_dat_o = data_in_reg; + assign wb_we_o = wr_reg; + assign wb_adr_o = {addr_reg, 2'h0}; + assign wb_sel_o = sel_reg; + + assign data_o = data_out_reg; + assign err_o = err_reg; + + assign wb_cti_o = 3'h0; + assign wb_bte_o = 2'h0; + assign wb_cab_o = 1'b0; + + /////////////////////////////////////////////////////// + // Wishbone clock domain + + // synchronize the start strobe + always @ (posedge wb_clk_i or posedge rst_i) + begin + if(rst_i) begin + str_sync_wbff1 <= 1'b0; + str_sync_wbff2 <= 1'b0; + str_sync_wbff2q <= 1'b0; + end + else begin + str_sync_wbff1 <= str_sync; + str_sync_wbff2 <= str_sync_wbff1; + str_sync_wbff2q <= str_sync_wbff2; // used to detect toggles + end + end + + assign start_toggle = (str_sync_wbff2 != str_sync_wbff2q); + + // Error indicator register + always @ (posedge wb_clk_i or posedge rst_i) + begin + if(rst_i) err_reg <= 1'b0; + else if(err_en) err_reg <= wb_err_i; + end + + // Byte- or word-swap the WB->dbg data, as necessary (combinatorial) + // We assume bits not required by SEL are don't care. We reuse assignments + // where possible to keep the MUX smaller. (combinatorial) + always @ (sel_reg or wb_dat_i) + begin + case (sel_reg) + 4'b1111: swapped_data_out <= wb_dat_i; + 4'b0011: swapped_data_out <= wb_dat_i; + 4'b1100: swapped_data_out <= {16'h0, wb_dat_i[31:16]}; + 4'b0001: swapped_data_out <= wb_dat_i; + 4'b0010: swapped_data_out <= {24'h0, wb_dat_i[15:8]}; + 4'b0100: swapped_data_out <= {16'h0, wb_dat_i[31:16]}; + 4'b1000: swapped_data_out <= {24'h0, wb_dat_i[31:24]}; + default: swapped_data_out <= wb_dat_i; // Shouldn't be possible + endcase + end + + // WB->dbg data register + always @ (posedge wb_clk_i or posedge rst_i) + begin + if(rst_i) data_out_reg <= 32'h0; + else if(data_o_en) data_out_reg <= swapped_data_out; + end + + // Create a toggle-active ready signal to send to the TCK domain + always @ (posedge wb_clk_i or posedge rst_i) + begin + if(rst_i) rdy_sync <= 1'b0; + else if(rdy_sync_en) rdy_sync <= ~rdy_sync; + end + + ///////////////////////////////////////////////////// + // Small state machine to create WB accesses + // Not much more that an 'in_progress' bit, but easier + // to read. Deals with single-cycle and multi-cycle + // accesses. + + reg wb_fsm_state; + reg next_fsm_state; + +`define STATE_IDLE 1'h0 +`define STATE_TRANSFER 1'h1 + + // Sequential bit + always @ (posedge wb_clk_i or posedge rst_i) + begin + if(rst_i) wb_fsm_state <= `STATE_IDLE; + else wb_fsm_state <= next_fsm_state; + end + + // Determination of next state (combinatorial) + always @ (wb_fsm_state or start_toggle or wb_ack_i or wb_err_i) + begin + case (wb_fsm_state) + `STATE_IDLE: + begin + if(start_toggle && !(wb_ack_i || wb_err_i)) next_fsm_state <= `STATE_TRANSFER; // Don't go to next state for 1-cycle transfer + else next_fsm_state <= `STATE_IDLE; + end + `STATE_TRANSFER: + begin + if(wb_ack_i || wb_err_i) next_fsm_state <= `STATE_IDLE; + else next_fsm_state <= `STATE_TRANSFER; + end + endcase + end + + // Outputs of state machine (combinatorial) + always @ (wb_fsm_state or start_toggle or wb_ack_i or wb_err_i or wr_reg) + begin + rdy_sync_en <= 1'b0; + err_en <= 1'b0; + data_o_en <= 1'b0; + wb_cyc_o <= 1'b0; + wb_stb_o <= 1'b0; + + case (wb_fsm_state) + `STATE_IDLE: + begin + if(start_toggle) begin + wb_cyc_o <= 1'b1; + wb_stb_o <= 1'b1; + if(wb_ack_i || wb_err_i) begin + err_en <= 1'b1; + rdy_sync_en <= 1'b1; + end + + if (wb_ack_i && !wr_reg) begin + data_o_en <= 1'b1; + end + end + end + + `STATE_TRANSFER: + begin + wb_cyc_o <= 1'b1; + wb_stb_o <= 1'b1; + if(wb_ack_i) begin + err_en <= 1'b1; + data_o_en <= 1'b1; + rdy_sync_en <= 1'b1; + end + else if (wb_err_i) begin + err_en <= 1'b1; + rdy_sync_en <= 1'b1; + end + end + endcase + + end + +endmodule + Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/rtl/verilog/adbg_or1k_defines.v =================================================================== --- ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/rtl/verilog/adbg_or1k_defines.v (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/rtl/verilog/adbg_or1k_defines.v (revision 26) @@ -0,0 +1,86 @@ +////////////////////////////////////////////////////////////////////// +//// //// +//// adbg_or1k_defines.v //// +//// //// +//// //// +//// This file is part of the SoC Advanced Debug Interface. //// +//// //// +//// Author(s): //// +//// Nathan Yawn (nathan.yawn@opencores.org) //// +//// //// +//// //// +//// //// +////////////////////////////////////////////////////////////////////// +//// //// +//// Copyright (C) 2008 Authors //// +//// //// +//// This source file may be used and distributed without //// +//// restriction provided that this copyright statement is not //// +//// removed from the file and that any derivative work contains //// +//// the original copyright notice and the associated disclaimer. //// +//// //// +//// This source file is free software; you can redistribute it //// +//// and/or modify it under the terms of the GNU Lesser General //// +//// Public License as published by the Free Software Foundation; //// +//// either version 2.1 of the License, or (at your option) any //// +//// later version. //// +//// //// +//// This source is distributed in the hope that it will be //// +//// useful, but WITHOUT ANY WARRANTY; without even the implied //// +//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// +//// PURPOSE. See the GNU Lesser General Public License for more //// +//// details. //// +//// //// +//// You should have received a copy of the GNU Lesser General //// +//// Public License along with this source; if not, download it //// +//// from http://www.opencores.org/lgpl.shtml //// +//// //// +////////////////////////////////////////////////////////////////////// +// +// CVS Revision History +// +// $Log: adbg_or1k_defines.v,v $ +// Revision 1.2 2009/05/17 20:54:56 Nathan +// Changed email address to opencores.org +// +// Revision 1.1 2008/07/22 20:28:31 Nathan +// Changed names of all files and modules (prefixed an a, for advanced). Cleanup, indenting. No functional changes. +// +// Revision 1.3 2008/07/06 20:02:54 Nathan +// Fixes for synthesis with Xilinx ISE (also synthesizable with +// Quartus II 7.0). Ran through dos2unix. +// +// Revision 1.2 2008/06/26 20:52:31 Nathan +// OR1K module tested and working. Added copyright / license info +// to _define files. Other cleanup. +// + + +// These relate to the number of internal registers, and how +// many bits are required in the Reg. Select register +`define DBG_OR1K_REGSELECT_SIZE 1 +`define DBG_OR1K_NUM_INTREG 1 + +// Register index definitions for module-internal registers +// Index 0 is the Status register, used for stall and reset +`define DBG_OR1K_INTREG_STATUS 1'b0 + +`define DBG_OR1K_STATUS_LEN 2 + +// Valid commands/opcodes for the or1k debug module +// 0000 NOP +// 0001 - 0010 Reserved +// 0011 Write burst, 32-bit access +// 0100 - 0110 Reserved +// 0111 Read burst, 32-bit access +// 1000 Reserved +// 1001 Internal register select/write +// 1010 - 1100 Reserved +// 1101 Internal register select +// 1110 - 1111 Reserved + + +`define DBG_OR1K_CMD_BWRITE32 4'h3 +`define DBG_OR1K_CMD_BREAD32 4'h7 +`define DBG_OR1K_CMD_IREG_WR 4'h9 +`define DBG_OR1K_CMD_IREG_SEL 4'hd Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/rtl/verilog/adbg_or1k_biu.v =================================================================== --- ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/rtl/verilog/adbg_or1k_biu.v (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/rtl/verilog/adbg_or1k_biu.v (revision 26) @@ -0,0 +1,296 @@ +////////////////////////////////////////////////////////////////////// +//// //// +//// adbg_or1k_biu.v //// +//// //// +//// //// +//// This file is part of the SoC Advanced Debug Interface. //// +//// //// +//// Author(s): //// +//// Nathan Yawn (nathan.yawn@opencores.org) //// +//// //// +//// //// +//// //// +////////////////////////////////////////////////////////////////////// +//// //// +//// Copyright (C) 2008 Authors //// +//// //// +//// This source file may be used and distributed without //// +//// restriction provided that this copyright statement is not //// +//// removed from the file and that any derivative work contains //// +//// the original copyright notice and the associated disclaimer. //// +//// //// +//// This source file is free software; you can redistribute it //// +//// and/or modify it under the terms of the GNU Lesser General //// +//// Public License as published by the Free Software Foundation; //// +//// either version 2.1 of the License, or (at your option) any //// +//// later version. //// +//// //// +//// This source is distributed in the hope that it will be //// +//// useful, but WITHOUT ANY WARRANTY; without even the implied //// +//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// +//// PURPOSE. See the GNU Lesser General Public License for more //// +//// details. //// +//// //// +//// You should have received a copy of the GNU Lesser General //// +//// Public License along with this source; if not, download it //// +//// from http://www.opencores.org/lgpl.shtml //// +//// //// +////////////////////////////////////////////////////////////////////// +// +// CVS Revision History +// +// $Log: adbg_or1k_biu.v,v $ +// Revision 1.2 2009/05/17 20:54:56 Nathan +// Changed email address to opencores.org +// +// Revision 1.1 2008/07/22 20:28:30 Nathan +// Changed names of all files and modules (prefixed an a, for advanced). Cleanup, indenting. No functional changes. +// +// Revision 1.5 2008/07/08 19:04:03 Nathan +// Many small changes to eliminate compiler warnings, no functional +// changes. System will now pass SRAM and CPU self-tests on Altera +// FPGA using altera_virtual_jtag TAP. +// + + + +module adbg_or1k_biu + ( + // Debug interface signals + tck_i, + rst_i, + data_i, + data_o, + addr_i, + strobe_i, + rd_wrn_i, // If 0, then write op + rdy_o, + + // OR1K SPR bus signals + cpu_clk_i, + cpu_addr_o, + cpu_data_i, + cpu_data_o, + cpu_stb_o, + cpu_we_o, + cpu_ack_i + ); + + // Debug interface signals + input tck_i; + input rst_i; + input [31:0] data_i; // Assume short words are in UPPER order bits! + output [31:0] data_o; + input [31:0] addr_i; + input strobe_i; + input rd_wrn_i; + output rdy_o; + + + // OR1K SPR bus signals + input cpu_clk_i; + output [31:0] cpu_addr_o; + input [31:0] cpu_data_i; + output [31:0] cpu_data_o; + output cpu_stb_o; + output cpu_we_o; + input cpu_ack_i; + + reg rdy_o; + reg cpu_stb_o; + + + // Registers + reg [31:0] addr_reg; + reg [31:0] data_in_reg; // dbg->WB + reg [31:0] data_out_reg; // WB->dbg + reg wr_reg; + reg str_sync; // This is 'active-toggle' rather than -high or -low. + reg rdy_sync; // ditto, active-toggle + + + // Sync registers. TFF indicates TCK domain, WBFF indicates cpu_clk domain + reg rdy_sync_tff1; + reg rdy_sync_tff2; + reg rdy_sync_tff2q; // used to detect toggles + reg str_sync_wbff1; + reg str_sync_wbff2; + reg str_sync_wbff2q; // used to detect toggles + + + // Control Signals + reg data_o_en; // latch wb_data_i + reg rdy_sync_en; // toggle the rdy_sync signal, indicate ready to TCK domain + + + // Internal signals + wire start_toggle; // CPU domain, indicates a toggle on the start strobe + + + ////////////////////////////////////////////////////// + // TCK clock domain + // There is no FSM here, just signal latching and clock + // domain synchronization + + + // Latch input data on 'start' strobe, if ready. + always @ (posedge tck_i or posedge rst_i) + begin + if(rst_i) begin + addr_reg <= 32'h0; + data_in_reg <= 32'h0; + wr_reg <= 1'b0; + end + else + if(strobe_i && rdy_o) begin + addr_reg <= addr_i; + if(!rd_wrn_i) data_in_reg <= data_i; + wr_reg <= ~rd_wrn_i; + end + end + + // Create toggle-active strobe signal for clock sync. This will start a transaction + // to the CPU once the toggle propagates to the FSM in the cpu_clk domain. + always @ (posedge tck_i or posedge rst_i) + begin + if(rst_i) str_sync <= 1'b0; + else if(strobe_i && rdy_o) str_sync <= ~str_sync; + end + + // Create rdy_o output. Set on reset, clear on strobe (if set), set on input toggle + always @ (posedge tck_i or posedge rst_i) + begin + if(rst_i) begin + rdy_sync_tff1 <= 1'b0; + rdy_sync_tff2 <= 1'b0; + rdy_sync_tff2q <= 1'b0; + rdy_o <= 1'b1; + end + else begin + rdy_sync_tff1 <= rdy_sync; // Synchronize the ready signal across clock domains + rdy_sync_tff2 <= rdy_sync_tff1; + rdy_sync_tff2q <= rdy_sync_tff2; // used to detect toggles + + if(strobe_i && rdy_o) rdy_o <= 1'b0; + else if(rdy_sync_tff2 != rdy_sync_tff2q) rdy_o <= 1'b1; + end + + end + + ////////////////////////////////////////////////////////// + // Direct assignments, unsynchronized + + assign cpu_data_o = data_in_reg; + assign cpu_we_o = wr_reg; + assign cpu_addr_o = addr_reg; + + assign data_o = data_out_reg; + + + /////////////////////////////////////////////////////// + // Wishbone clock domain + + // synchronize the start strobe + always @ (posedge cpu_clk_i or posedge rst_i) + begin + if(rst_i) begin + str_sync_wbff1 <= 1'b0; + str_sync_wbff2 <= 1'b0; + str_sync_wbff2q <= 1'b0; + end + else begin + str_sync_wbff1 <= str_sync; + str_sync_wbff2 <= str_sync_wbff1; + str_sync_wbff2q <= str_sync_wbff2; // used to detect toggles + end + end + + assign start_toggle = (str_sync_wbff2 != str_sync_wbff2q); + + + // CPU->dbg data register + always @ (posedge cpu_clk_i or posedge rst_i) + begin + if(rst_i) data_out_reg <= 32'h0; + else if(data_o_en) data_out_reg <= cpu_data_i; + end + + // Create a toggle-active ready signal to send to the TCK domain + always @ (posedge cpu_clk_i or posedge rst_i) + begin + if(rst_i) rdy_sync <= 1'b0; + else if(rdy_sync_en) rdy_sync <= ~rdy_sync; + end + + ///////////////////////////////////////////////////// + // Small state machine to create OR1K SPR bus accesses + // Not much more that an 'in_progress' bit, but easier + // to read. Deals with single-cycle and multi-cycle + // accesses. + + reg cpu_fsm_state; + reg next_fsm_state; + +`define STATE_IDLE 1'h0 +`define STATE_TRANSFER 1'h1 + + // Sequential bit + always @ (posedge cpu_clk_i or posedge rst_i) + begin + if(rst_i) cpu_fsm_state <= `STATE_IDLE; + else cpu_fsm_state <= next_fsm_state; + end + + // Determination of next state (combinatorial) + always @ (cpu_fsm_state or start_toggle or cpu_ack_i) + begin + case (cpu_fsm_state) + `STATE_IDLE: + begin + if(start_toggle && !cpu_ack_i) next_fsm_state <= `STATE_TRANSFER; // Don't go to next state for 1-cycle transfer + else next_fsm_state <= `STATE_IDLE; + end + `STATE_TRANSFER: + begin + if(cpu_ack_i) next_fsm_state <= `STATE_IDLE; + else next_fsm_state <= `STATE_TRANSFER; + end + endcase + end + + // Outputs of state machine (combinatorial) + always @ (cpu_fsm_state or start_toggle or cpu_ack_i or wr_reg) + begin + rdy_sync_en <= 1'b0; + data_o_en <= 1'b0; + cpu_stb_o <= 1'b0; + + case (cpu_fsm_state) + `STATE_IDLE: + begin + if(start_toggle) begin + cpu_stb_o <= 1'b1; + if(cpu_ack_i) begin + rdy_sync_en <= 1'b1; + end + + if (cpu_ack_i && !wr_reg) begin // latch read data + data_o_en <= 1'b1; + end + end + end + + `STATE_TRANSFER: + begin + cpu_stb_o <= 1'b1; // OR1K behavioral model needs this. OR1200 should be indifferent. + if(cpu_ack_i) begin + data_o_en <= 1'b1; + rdy_sync_en <= 1'b1; + end + end + endcase + + end + +endmodule + Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/rtl/verilog/adbg_crc32.v =================================================================== --- ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/rtl/verilog/adbg_crc32.v (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/rtl/verilog/adbg_crc32.v (revision 26) @@ -0,0 +1,114 @@ +////////////////////////////////////////////////////////////////////// +// File: CRC32.v +// Date: Thu Nov 27 13:56:49 2003 +// +// Copyright (C) 1999-2003 Easics NV. +// This source file may be used and distributed without restriction +// provided that this copyright statement is not removed from the file +// and that any derivative work contains the original copyright notice +// and the associated disclaimer. +// +// THIS SOURCE FILE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS +// OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +// WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. +// +// Purpose: Verilog module containing a synthesizable CRC function +// * polynomial: (0 1 2 4 5 7 8 10 11 12 16 22 23 26 32) +// * data width: 1 +// +// Info: janz@easics.be (Jan Zegers) +// http://www.easics.com +// +// Modified by Nathan Yawn for the Advanced Debug Module +// Changes (C) 2008 Nathan Yawn +/////////////////////////////////////////////////////////////////////// +// +// CVS Revision History +// +// $Log: adbg_crc32.v,v $ +// Revision 1.1 2008/07/22 20:28:29 Nathan +// Changed names of all files and modules (prefixed an a, for advanced). Cleanup, indenting. No functional changes. +// +// Revision 1.3 2008/07/06 20:02:53 Nathan +// Fixes for synthesis with Xilinx ISE (also synthesizable with +// Quartus II 7.0). Ran through dos2unix. +// +// Revision 1.2 2008/06/20 19:22:10 Nathan +// Reversed the direction of the CRC computation shift, for a more +// hardware-efficient implementation. +// +// +// +// + + +module adbg_crc32 (clk, data, enable, shift, clr, rst, crc_out, serial_out); + +input clk; +input data; +input enable; +input shift; +input clr; +input rst; +output [31:0] crc_out; +output serial_out; + + +reg [31:0] crc; +wire [31:0] new_crc; + + +// You may notice that the 'poly' in this implementation is backwards. +// This is because the shift is also 'backwards', so that the data can +// be shifted out in the same direction, which saves on logic + routing. +assign new_crc[0] = crc[1]; +assign new_crc[1] = crc[2]; +assign new_crc[2] = crc[3]; +assign new_crc[3] = crc[4]; +assign new_crc[4] = crc[5]; +assign new_crc[5] = crc[6] ^ data ^ crc[0]; +assign new_crc[6] = crc[7]; +assign new_crc[7] = crc[8]; +assign new_crc[8] = crc[9] ^ data ^ crc[0]; +assign new_crc[9] = crc[10] ^ data ^ crc[0]; +assign new_crc[10] = crc[11]; +assign new_crc[11] = crc[12]; +assign new_crc[12] = crc[13]; +assign new_crc[13] = crc[14]; +assign new_crc[14] = crc[15]; +assign new_crc[15] = crc[16] ^ data ^ crc[0]; +assign new_crc[16] = crc[17]; +assign new_crc[17] = crc[18]; +assign new_crc[18] = crc[19]; +assign new_crc[19] = crc[20] ^ data ^ crc[0]; +assign new_crc[20] = crc[21] ^ data ^ crc[0]; +assign new_crc[21] = crc[22] ^ data ^ crc[0]; +assign new_crc[22] = crc[23]; +assign new_crc[23] = crc[24] ^ data ^ crc[0]; +assign new_crc[24] = crc[25] ^ data ^ crc[0]; +assign new_crc[25] = crc[26]; +assign new_crc[26] = crc[27] ^ data ^ crc[0]; +assign new_crc[27] = crc[28] ^ data ^ crc[0]; +assign new_crc[28] = crc[29]; +assign new_crc[29] = crc[30] ^ data ^ crc[0]; +assign new_crc[30] = crc[31] ^ data ^ crc[0]; +assign new_crc[31] = data ^ crc[0]; + +always @ (posedge clk or posedge rst) +begin + if(rst) + crc[31:0] <= #1 32'hffffffff; + else if(clr) + crc[31:0] <= #1 32'hffffffff; + else if(enable) + crc[31:0] <= #1 new_crc; + else if (shift) + crc[31:0] <= #1 {1'b0, crc[31:1]}; +end + + +//assign crc_match = (crc == 32'h0); +assign crc_out = crc; //[31]; +assign serial_out = crc[0]; + +endmodule Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/rtl/verilog/adbg_or1k_status_reg.v =================================================================== --- ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/rtl/verilog/adbg_or1k_status_reg.v (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/rtl/verilog/adbg_or1k_status_reg.v (revision 26) @@ -0,0 +1,192 @@ +////////////////////////////////////////////////////////////////////// +//// //// +//// adbg_or1k_status_reg.v //// +//// //// +//// //// +//// This file is part of the SoC Debug Interface. //// +//// //// +//// Author(s): //// +//// Igor Mohor (igorm@opencores.org) //// +//// //// +//// //// +//// //// +////////////////////////////////////////////////////////////////////// +//// //// +//// Copyright (C) 2000 - 2008 Authors //// +//// //// +//// This source file may be used and distributed without //// +//// restriction provided that this copyright statement is not //// +//// removed from the file and that any derivative work contains //// +//// the original copyright notice and the associated disclaimer. //// +//// //// +//// This source file is free software; you can redistribute it //// +//// and/or modify it under the terms of the GNU Lesser General //// +//// Public License as published by the Free Software Foundation; //// +//// either version 2.1 of the License, or (at your option) any //// +//// later version. //// +//// //// +//// This source is distributed in the hope that it will be //// +//// useful, but WITHOUT ANY WARRANTY; without even the implied //// +//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// +//// PURPOSE. See the GNU Lesser General Public License for more //// +//// details. //// +//// //// +//// You should have received a copy of the GNU Lesser General //// +//// Public License along with this source; if not, download it //// +//// from http://www.opencores.org/lgpl.shtml //// +//// //// +////////////////////////////////////////////////////////////////////// +// +// CVS Revision History +// +// $Log: adbg_or1k_status_reg.v,v $ +// Revision 1.1 2008/07/22 20:28:31 Nathan +// Changed names of all files and modules (prefixed an a, for advanced). Cleanup, indenting. No functional changes. +// +// Revision 1.3 2008/07/06 20:02:54 Nathan +// Fixes for synthesis with Xilinx ISE (also synthesizable with +// Quartus II 7.0). Ran through dos2unix. +// +// Revision 1.2 2008/06/26 20:52:32 Nathan +// OR1K module tested and working. Added copyright / license info +// to _define files. Other cleanup. +// +// +// +// + +`include "adbg_or1k_defines.v" + +module adbg_or1k_status_reg ( + data_i, + we_i, + tck_i, + bp_i, + rst_i, + cpu_clk_i, + ctrl_reg_o, + cpu_stall_o, + cpu_rst_o + ); + + + input [`DBG_OR1K_STATUS_LEN - 1:0] data_i; + input we_i; + input tck_i; + input bp_i; + input rst_i; + input cpu_clk_i; + + output [`DBG_OR1K_STATUS_LEN - 1:0] ctrl_reg_o; + output cpu_stall_o; + output cpu_rst_o; + + reg cpu_reset; + wire [2:1] cpu_op_out; + + reg stall_bp, stall_bp_csff, stall_bp_tck; + reg stall_reg, stall_reg_csff, stall_reg_cpu; + reg cpu_reset_csff; + reg cpu_rst_o; + + + + // Breakpoint is latched and synchronized. Stall is set and latched. + // This is done in the CPU clock domain, because the JTAG clock (TCK) is + // irregular. By only allowing bp_i to set (but not reset) the stall_bp + // signal, we insure that the CPU will remain in the stalled state until + // the debug host can read the state. + always @ (posedge cpu_clk_i or posedge rst_i) + begin + if(rst_i) + stall_bp <= #1 1'b0; + else if(bp_i) + stall_bp <= #1 1'b1; + else if(stall_reg_cpu) + stall_bp <= #1 1'b0; + end + + + // Synchronizing + always @ (posedge tck_i or posedge rst_i) + begin + if (rst_i) + begin + stall_bp_csff <= #1 1'b0; + stall_bp_tck <= #1 1'b0; + end + else + begin + stall_bp_csff <= #1 stall_bp; + stall_bp_tck <= #1 stall_bp_csff; + end + end + + + always @ (posedge cpu_clk_i or posedge rst_i) + begin + if (rst_i) + begin + stall_reg_csff <= #1 1'b0; + stall_reg_cpu <= #1 1'b0; + end + else + begin + stall_reg_csff <= #1 stall_reg; + stall_reg_cpu <= #1 stall_reg_csff; + end + end + + // bp_i forces a stall immediately on a breakpoint + // stall_bp holds the stall until the debug host acts + // stall_reg_cpu allows the debug host to control a stall. + assign cpu_stall_o = bp_i | stall_bp | stall_reg_cpu; + + + // Writing data to the control registers (stall) + // This can be set either by the debug host, or by + // a CPU breakpoint. It can only be cleared by the host. + always @ (posedge tck_i or posedge rst_i) + begin + if (rst_i) + stall_reg <= #1 1'b0; + else if (stall_bp_tck) + stall_reg <= #1 1'b1; + else if (we_i) + stall_reg <= #1 data_i[0]; + end + + + // Writing data to the control registers (reset) + always @ (posedge tck_i or posedge rst_i) + begin + if (rst_i) + cpu_reset <= #1 1'b0; + else if(we_i) + cpu_reset <= #1 data_i[1]; + end + + + // Synchronizing signals from registers + always @ (posedge cpu_clk_i or posedge rst_i) + begin + if (rst_i) + begin + cpu_reset_csff <= #1 1'b0; + cpu_rst_o <= #1 1'b0; + end + else + begin + cpu_reset_csff <= #1 cpu_reset; + cpu_rst_o <= #1 cpu_reset_csff; + end + end + + + + // Value for read back + assign ctrl_reg_o = {cpu_reset, stall_reg}; + + +endmodule + Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/rtl/verilog/adbg_defines.v =================================================================== --- ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/rtl/verilog/adbg_defines.v (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/rtl/verilog/adbg_defines.v (revision 26) @@ -0,0 +1,82 @@ +////////////////////////////////////////////////////////////////////// +//// //// +//// adbg_defines.v //// +//// //// +//// //// +//// This file is part of the Advanced Debug Interface. //// +//// //// +//// Author(s): //// +//// Nathan Yawn (nathan.yawn@opencores.org) //// +//// //// +//// //// +//// //// +////////////////////////////////////////////////////////////////////// +//// //// +//// Copyright (C) 2008 Authors //// +//// //// +//// This source file may be used and distributed without //// +//// restriction provided that this copyright statement is not //// +//// removed from the file and that any derivative work contains //// +//// the original copyright notice and the associated disclaimer. //// +//// //// +//// This source file is free software; you can redistribute it //// +//// and/or modify it under the terms of the GNU Lesser General //// +//// Public License as published by the Free Software Foundation; //// +//// either version 2.1 of the License, or (at your option) any //// +//// later version. //// +//// //// +//// This source is distributed in the hope that it will be //// +//// useful, but WITHOUT ANY WARRANTY; without even the implied //// +//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// +//// PURPOSE. See the GNU Lesser General Public License for more //// +//// details. //// +//// //// +//// You should have received a copy of the GNU Lesser General //// +//// Public License along with this source; if not, download it //// +//// from http://www.opencores.org/lgpl.shtml //// +//// //// +////////////////////////////////////////////////////////////////////// +// +// CVS Revision History +// +// $Log: adbg_defines.v,v $ +// Revision 1.2 2009/05/17 20:54:56 Nathan +// Changed email address to opencores.org +// +// Revision 1.1 2008/07/22 20:28:30 Nathan +// Changed names of all files and modules (prefixed an a, for advanced). Cleanup, indenting. No functional changes. +// +// Revision 1.5 2008/07/06 20:02:53 Nathan +// Fixes for synthesis with Xilinx ISE (also synthesizable with +// Quartus II 7.0). Ran through dos2unix. +// +// Revision 1.4 2008/06/30 20:09:20 Nathan +// Removed code to select top-level module as active (it served no +// purpose). Re-numbered modules, requiring changes to testbench and software driver. +// + +// Length of the MODULE ID register +`define DBG_TOP_MODULE_ID_LENGTH 2 + +// How many modules can be supported by the module id length +`define DBG_TOP_MAX_MODULES 4 + +// Chains +`define DBG_TOP_WISHBONE_DEBUG_MODULE 2'h0 +`define DBG_TOP_CPU0_DEBUG_MODULE 2'h1 +`define DBG_TOP_CPU1_DEBUG_MODULE 2'h2 + +// Length of data +`define DBG_TOP_MODULE_DATA_LEN 53 + + +// If WISHBONE sub-module is supported uncomment the folowing line +`define DBG_WISHBONE_SUPPORTED + +// If CPU_0 sub-module is supported uncomment the folowing line +`define DBG_CPU0_SUPPORTED + +// If CPU_1 sub-module is supported uncomment the folowing line +//`define DBG_CPU1_SUPPORTED + + Index: ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/rtl/verilog/adbg_wb_module.v =================================================================== --- ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/rtl/verilog/adbg_wb_module.v (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/adv_dbg_if/rtl/verilog/adbg_wb_module.v (revision 26) @@ -0,0 +1,736 @@ +////////////////////////////////////////////////////////////////////// +//// //// +//// adbg_wb_module.v //// +//// //// +//// //// +//// This file is part of the SoC Advanced Debug Interface. //// +//// //// +//// Author(s): //// +//// Nathan Yawn (nathan.yawn@opencores.org) //// +//// //// +//// //// +//// //// +////////////////////////////////////////////////////////////////////// +//// //// +//// Copyright (C) 2008 Authors //// +//// //// +//// This source file may be used and distributed without //// +//// restriction provided that this copyright statement is not //// +//// removed from the file and that any derivative work contains //// +//// the original copyright notice and the associated disclaimer. //// +//// //// +//// This source file is free software; you can redistribute it //// +//// and/or modify it under the terms of the GNU Lesser General //// +//// Public License as published by the Free Software Foundation; //// +//// either version 2.1 of the License, or (at your option) any //// +//// later version. //// +//// //// +//// This source is distributed in the hope that it will be //// +//// useful, but WITHOUT ANY WARRANTY; without even the implied //// +//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// +//// PURPOSE. See the GNU Lesser General Public License for more //// +//// details. //// +//// //// +//// You should have received a copy of the GNU Lesser General //// +//// Public License along with this source; if not, download it //// +//// from http://www.opencores.org/lgpl.shtml //// +//// //// +////////////////////////////////////////////////////////////////////// +// +// CVS Revision History +// +// $Log: adbg_wb_module.v,v $ +// Revision 1.2 2009/05/17 20:54:57 Nathan +// Changed email address to opencores.org +// +// Revision 1.1 2008/07/22 20:28:33 Nathan +// Changed names of all files and modules (prefixed an a, for advanced). Cleanup, indenting. No functional changes. +// +// Revision 1.12 2008/07/11 08:13:30 Nathan +// Latch opcode on posedge, like other signals. This fixes a problem when +// the module is used with a Xilinx BSCAN TAP. Added signals to allow modules +// to inhibit latching of a new active module by the top module. This allows +// the sub-modules to force the top level module to ignore the command present +// in the input shift register after e.g. a burst read. +// + + +`include "adbg_wb_defines.v" + +// Top module +module adbg_wb_module ( + // JTAG signals + tck_i, + module_tdo_o, + tdi_i, + + // TAP states + capture_dr_i, + shift_dr_i, + update_dr_i, + + data_register_i, // the data register is at top level, shared between all modules + module_select_i, + top_inhibit_o, + rst_i, + + // WISHBONE common signals + wb_clk_i, + + // WISHBONE master interface + wb_adr_o, wb_dat_o, wb_dat_i, wb_cyc_o, wb_stb_o, wb_sel_o, + wb_we_o, wb_ack_i, wb_cab_o, wb_err_i, wb_cti_o, wb_bte_o + + ); + + // JTAG signals + input tck_i; + output module_tdo_o; + input tdi_i; // This is only used by the CRC module - data_register_i[MSB] is delayed a cycle + + // TAP states + input capture_dr_i; + input shift_dr_i; + input update_dr_i; + + input [52:0] data_register_i; + input module_select_i; + output top_inhibit_o; + input rst_i; + + // WISHBONE master interface + input wb_clk_i; + output [31:0] wb_adr_o; + output [31:0] wb_dat_o; + input [31:0] wb_dat_i; + output wb_cyc_o; + output wb_stb_o; + output [3:0] wb_sel_o; + output wb_we_o; + input wb_ack_i; + output wb_cab_o; + input wb_err_i; + output [2:0] wb_cti_o; + output [1:0] wb_bte_o; + //reg wb_cyc_o; + + // Declare inputs / outputs as wires / registers + reg module_tdo_o; + reg top_inhibit_o; + + + // Registers to hold state etc. + reg [31:0] address_counter; // Holds address for next Wishbone access + reg [5:0] bit_count; // How many bits have been shifted in/out + reg [15:0] word_count; // bytes remaining in current burst command + reg [3:0] operation; // holds the current command (rd/wr, word size) + reg [32:0] data_out_shift_reg; // 32 bits to accomodate the internal_reg_error + reg [`DBG_WB_REGSELECT_SIZE-1:0] internal_register_select; // Holds index of currently selected register + reg [32:0] internal_reg_error; // WB error module internal register. 32 bit address + error bit (LSB) + + + // Control signals for the various counters / registers / state machines + reg addr_sel; // Selects data for address_counter. 0 = data_register_i, 1 = incremented address count + reg addr_ct_en; // Enable signal for address counter register + reg op_reg_en; // Enable signal for 'operation' register + reg bit_ct_en; // enable bit counter + reg bit_ct_rst; // reset (zero) bit count register + reg word_ct_sel; // Selects data for byte counter. 0 = data_register_i, 1 = decremented byte count + reg word_ct_en; // Enable byte counter register + reg out_reg_ld_en; // Enable parallel load of data_out_shift_reg + reg out_reg_shift_en; // Enable shift of data_out_shift_reg + reg out_reg_data_sel; // 0 = BIU data, 1 = internal register data + reg [1:0] tdo_output_sel; // Selects signal to send to TDO. 0 = ready bit, 1 = output register, 2 = CRC match, 3 = CRC shift reg. + reg biu_strobe; // Indicates that the bus unit should latch data and start a transaction + reg crc_clr; // resets CRC module + reg crc_en; // does 1-bit iteration in CRC module + reg crc_in_sel; // selects incoming write data (=0) or outgoing read data (=1)as input to CRC module + reg crc_shift_en; // CRC reg is also it's own output shift register; this enables a shift + reg regsel_ld_en; // Reg. select register load enable + reg intreg_ld_en; // load enable for internal registers + reg error_reg_en; // Tells the error register to check for and latch a bus error + reg biu_clr_err; // Allows FSM to reset BIU, to clear the biu_err bit which may have been set on the last transaction of the last burst. + + // Status signals + wire word_count_zero; // true when byte counter is zero + wire bit_count_max; // true when bit counter is equal to current word size + wire module_cmd; // inverse of MSB of data_register_i. 1 means current cmd not for top level (but is for us) + wire biu_ready; // indicates that the BIU has finished the last command + wire biu_err; // indicates wishbone error during BIU transaction + wire burst_instruction; // True when the input_data_i reg has a valid burst instruction for this module + wire intreg_instruction; // True when the input_data_i reg has a valid internal register instruction + wire intreg_write; // True when the input_data_i reg has an internal register write op + reg rd_op; // True when operation in the opcode reg is a read, false when a write + wire crc_match; // indicates whether data_register_i matches computed CRC + wire bit_count_32; // true when bit count register == 32, for CRC after burst writes + + // Intermediate signals + reg [5:0] word_size_bits; // 8,16, or 32. Decoded from 'operation' + reg [2:0] word_size_bytes; // 1,2, or 4 + wire [32:0] incremented_address; // value of address counter plus 'word_size' + wire [31:0] data_to_addr_counter; // output of the mux in front of the address counter inputs + wire [15:0] data_to_word_counter; // output of the mux in front of the byte counter input + wire [15:0] decremented_word_count; + wire [31:0] address_data_in; // from data_register_i + wire [15:0] count_data_in; // from data_register_i + wire [3:0] operation_in; // from data_register_i + wire [31:0] data_to_biu; // from data_register_i + wire [31:0] data_from_biu; // to data_out_shift_register + wire [31:0] crc_data_out; // output of CRC module, to output shift register + wire crc_data_in; // input to CRC module, either data_register_i[52] or data_out_shift_reg[0] + wire crc_serial_out; + wire [`DBG_WB_REGSELECT_SIZE-1:0] reg_select_data; // from data_register_i, input to internal register select register + wire [32:0] out_reg_data; // parallel input to the output shift register + reg [32:0] data_from_internal_reg; // data from internal reg. MUX to output shift register + wire biu_rst; // logical OR of rst_i and biu_clr_err + + ///////////////////////////////////////////////// + // Combinatorial assignments + + assign module_cmd = ~(data_register_i[52]); + assign operation_in = data_register_i[51:48]; + assign address_data_in = data_register_i[47:16]; + assign count_data_in = data_register_i[15:0]; + assign data_to_biu = data_register_i[52:21]; + assign reg_select_data = data_register_i[47:(47-(`DBG_WB_REGSELECT_SIZE-1))]; + + //////////////////////////////////////////////// + // Operation decoder + + // These are only used before the operation is latched, so decode them from operation_in + assign burst_instruction = (~operation_in[3]) & (operation_in[0] | operation_in[1]); + assign intreg_instruction = ((operation_in == `DBG_WB_CMD_IREG_WR) | (operation_in == `DBG_WB_CMD_IREG_SEL)); + assign intreg_write = (operation_in == `DBG_WB_CMD_IREG_WR); + + + // This is decoded from the registered operation + always @ (operation) + begin + case(operation) + `DBG_WB_CMD_BWRITE8: + begin + word_size_bits <= 5'd7; // Bits is actually bits-1, to make the FSM easier + word_size_bytes <= 3'd1; + rd_op <= 1'b0; + end + `DBG_WB_CMD_BWRITE16: + begin + word_size_bits <= 5'd15; // Bits is actually bits-1, to make the FSM easier + word_size_bytes <= 3'd2; + rd_op <= 1'b0; + end + `DBG_WB_CMD_BWRITE32: + begin + word_size_bits <= 5'd31; // Bits is actually bits-1, to make the FSM easier + word_size_bytes <= 3'd4; + rd_op <= 1'b0; + end + `DBG_WB_CMD_BREAD8: + begin + word_size_bits <= 5'd7; // Bits is actually bits-1, to make the FSM easier + word_size_bytes <= 3'd1; + rd_op <= 1'b1; + end + `DBG_WB_CMD_BREAD16: + begin + word_size_bits <= 5'd15; // Bits is actually bits-1, to make the FSM easier + word_size_bytes <= 3'd2; + rd_op <= 1'b1; + end + `DBG_WB_CMD_BREAD32: + begin + word_size_bits <= 5'd31; // Bits is actually bits-1, to make the FSM easier + word_size_bytes <= 3'd4; + rd_op <= 1'b1; + end + default: + begin + word_size_bits <= 5'hXX; + word_size_bytes <= 3'hX; + rd_op <= 1'bX; + end + endcase + end + + + //////////////////////////////////////////////// + // Module-internal register select register (no, that's not redundant.) + // Also internal register output MUX + + always @ (posedge tck_i or posedge rst_i) + begin + if(rst_i) internal_register_select = 1'h0; + else if(regsel_ld_en) internal_register_select = reg_select_data; + end + + // This is completely unnecessary here, since the WB module has only 1 internal + // register. However, to make the module expandable, it is included anyway. + always @ (internal_register_select or internal_reg_error) + begin + case(internal_register_select) + `DBG_WB_INTREG_ERROR: data_from_internal_reg = internal_reg_error; + default: data_from_internal_reg = internal_reg_error; + endcase + end + + + + //////////////////////////////////////////////////////////////////// + // Module-internal registers + // These have generic read/write/select code, but + // individual registers may have special behavior, defined here. + + // This is the bus error register, which traps WB errors + // We latch every new BIU address in the upper 32 bits, so we always have the address for the transaction which + // generated the error (the address counter might increment, esp. for writes) + // We stop latching addresses when the error bit (bit 0) is set. Keep the error bit set until it is + // manually cleared by a module internal register write. + // Note we use reg_select_data straight from data_register_i, rather than the latched version - + // otherwise, we would write the previously selected register. + + + always @ (posedge tck_i or posedge rst_i) + begin + if(rst_i) internal_reg_error = 33'h0; + else if(intreg_ld_en && (reg_select_data == `DBG_WB_INTREG_ERROR)) // do load from data input register + begin + if(data_register_i[46]) internal_reg_error[0] = 1'b0; // if write data is 1, reset the error bit + end + else if(error_reg_en && !internal_reg_error[0]) + begin + if(biu_err) internal_reg_error[0] = 1'b1; + else if(biu_strobe) internal_reg_error[32:1] = address_counter; + end + else if(biu_strobe && !internal_reg_error[0]) internal_reg_error[32:1] = address_counter; // When no error, latch this whether error_reg_en or not + end + + /////////////////////////////////////////////// + // Address counter + + assign data_to_addr_counter = (addr_sel) ? incremented_address[31:0] : address_data_in; + assign incremented_address = address_counter + word_size_bytes; + + // Technically, since this data (sometimes) comes from the input shift reg, we should latch on + // negedge, per the JTAG spec. But that makes things difficult when incrementing. + always @ (posedge tck_i or posedge rst_i) // JTAG spec specifies latch on negative edge in UPDATE_DR state + begin + if(rst_i) + address_counter <= 32'h0; + else if(addr_ct_en) + address_counter <= data_to_addr_counter; + end + + //////////////////////////////////////// + // Opcode latch + + always @ (posedge tck_i or posedge rst_i) // JTAG spec specifies latch on negative edge in UPDATE_DR state + begin + if(rst_i) + operation <= 4'h0; + else if(op_reg_en) + operation <= operation_in; + end + + ////////////////////////////////////// + // Bit counter + + always @ (posedge tck_i or posedge rst_i) + begin + + if(rst_i) bit_count <= 6'h0; + else if(bit_ct_rst) bit_count <= 6'h0; + else if(bit_ct_en) bit_count <= bit_count + 6'h1; + + end + + assign bit_count_max = (bit_count == word_size_bits) ? 1'b1 : 1'b0 ; + assign bit_count_32 = (bit_count == 6'h20) ? 1'b1 : 1'b0; + + //////////////////////////////////////// + // Word counter + + assign data_to_word_counter = (word_ct_sel) ? decremented_word_count : count_data_in; + assign decremented_word_count = word_count - 16'h1; + + // Technically, since this data (sometimes) comes from the input shift reg, we should latch on + // negedge, per the JTAG spec. But that makes things difficult when incrementing. + always @ (posedge tck_i or posedge rst_i) // JTAG spec specifies latch on negative edge in UPDATE_DR state + begin + if(rst_i) + word_count <= 16'h0; + else if(word_ct_en) + word_count <= data_to_word_counter; + end + + assign word_count_zero = (word_count == 16'h0); + + ///////////////////////////////////////////////////// + // Output register and TDO output MUX + + assign out_reg_data = (out_reg_data_sel) ? data_from_internal_reg : {1'b0,data_from_biu}; + + always @ (posedge tck_i or posedge rst_i) + begin + if(rst_i) data_out_shift_reg <= 33'h0; + else if(out_reg_ld_en) data_out_shift_reg <= out_reg_data; + else if(out_reg_shift_en) data_out_shift_reg <= {1'b0, data_out_shift_reg[32:1]}; + end + + + always @ (tdo_output_sel or data_out_shift_reg[0] or biu_ready or crc_match or crc_serial_out) + begin + if(tdo_output_sel == 2'h0) module_tdo_o <= biu_ready; + else if(tdo_output_sel == 2'h1) module_tdo_o <= data_out_shift_reg[0]; + else if(tdo_output_sel == 2'h2) module_tdo_o <= crc_match; + else module_tdo_o <= crc_serial_out; + end + + //////////////////////////////////////// + // Bus Interface Unit + // It is assumed that the BIU has internal registers, and will + // latch address, operation, and write data on rising clock edge + // when strobe is asserted + + assign biu_rst = rst_i | biu_clr_err; + + adbg_wb_biu wb_biu_i + ( + // Debug interface signals + .tck_i (tck_i), + .rst_i (biu_rst), + .data_i (data_to_biu), + .data_o (data_from_biu), + .addr_i (address_counter), + .strobe_i (biu_strobe), + .rd_wrn_i (rd_op), // If 0, then write op + .rdy_o (biu_ready), + .err_o (biu_err), + .word_size_i (word_size_bytes), + + // Wishbone signals + .wb_clk_i (wb_clk_i), + .wb_adr_o (wb_adr_o), + .wb_dat_o (wb_dat_o), + .wb_dat_i (wb_dat_i), + .wb_cyc_o (wb_cyc_o), + .wb_stb_o (wb_stb_o), + .wb_sel_o (wb_sel_o), + .wb_we_o (wb_we_o), + .wb_ack_i (wb_ack_i), + .wb_cab_o (wb_cab_o), + .wb_err_i (wb_err_i), + .wb_cti_o (wb_cti_o), + .wb_bte_o (wb_bte_o) + ); + + ///////////////////////////////////// + // CRC module + + assign crc_data_in = (crc_in_sel) ? tdi_i : data_out_shift_reg[0]; // MUX, write or read data + + adbg_crc32 wb_crc_i + ( + .clk(tck_i), + .data(crc_data_in), + .enable(crc_en), + .shift(crc_shift_en), + .clr(crc_clr), + .rst(rst_i), + .crc_out(crc_data_out), + .serial_out(crc_serial_out) + ); + + assign crc_match = (data_register_i[52:21] == crc_data_out) ? 1'b1 : 1'b0; + + //////////////////////////////////////// + // Control FSM + + // Definition of machine state values. + // Don't worry too much about the state encoding, the synthesis tool + // will probably re-encode it anyway. + +`define STATE_idle 4'h0 +`define STATE_Rbegin 4'h1 +`define STATE_Rready 4'h2 +`define STATE_Rstatus 4'h3 +`define STATE_Rburst 4'h4 +`define STATE_Wready 4'h5 +`define STATE_Wwait 4'h6 +`define STATE_Wburst 4'h7 +`define STATE_Wstatus 4'h8 +`define STATE_Rcrc 4'h9 +`define STATE_Wcrc 4'ha +`define STATE_Wmatch 4'hb + + reg [3:0] module_state; // FSM state + reg [3:0] module_next_state; // combinatorial signal, not actually a register + + + + // sequential part of the FSM + always @ (posedge tck_i or posedge rst_i) + begin + if(rst_i) + module_state <= `STATE_idle; + else + module_state <= module_next_state; + end + + + // Determination of next state; purely combinatorial + always @ (module_state or module_select_i or module_cmd or update_dr_i or capture_dr_i or operation_in[2] + or word_count_zero or bit_count_max or data_register_i[52] or bit_count_32 or biu_ready or burst_instruction) + begin + case(module_state) + `STATE_idle: + begin + if(module_cmd && module_select_i && update_dr_i && burst_instruction && operation_in[2]) module_next_state <= `STATE_Rbegin; + else if(module_cmd && module_select_i && update_dr_i && burst_instruction) module_next_state <= `STATE_Wready; + else module_next_state <= `STATE_idle; + end + + `STATE_Rbegin: + begin + if(word_count_zero) module_next_state <= `STATE_idle; // set up a burst of size 0, illegal. + else module_next_state <= `STATE_Rready; + end + `STATE_Rready: + begin + if(module_select_i && capture_dr_i) module_next_state <= `STATE_Rstatus; + else module_next_state <= `STATE_Rready; + end + `STATE_Rstatus: + begin + if(update_dr_i) module_next_state <= `STATE_idle; + else if (biu_ready) module_next_state <= `STATE_Rburst; + else module_next_state <= `STATE_Rstatus; + end + `STATE_Rburst: + begin + if(update_dr_i) module_next_state <= `STATE_idle; + else if(bit_count_max && word_count_zero) module_next_state <= `STATE_Rcrc; + else if(bit_count_max) module_next_state <= `STATE_Rstatus; + else module_next_state <= `STATE_Rburst; + end + `STATE_Rcrc: + begin + if(update_dr_i) module_next_state <= `STATE_idle; + // This doubles as the 'recovery' state, so stay here until update_dr_i. + else module_next_state <= `STATE_Rcrc; + end + + `STATE_Wready: + begin + if(word_count_zero) module_next_state <= `STATE_idle; + else if(module_select_i && capture_dr_i) module_next_state <= `STATE_Wwait; + else module_next_state <= `STATE_Wready; + end + `STATE_Wwait: + begin + if(update_dr_i) module_next_state <= `STATE_idle; // client terminated early + else if(module_select_i && data_register_i[52]) module_next_state <= `STATE_Wburst; // Got a start bit + else module_next_state <= `STATE_Wwait; + end + `STATE_Wburst: + begin + if(update_dr_i) module_next_state <= `STATE_idle; // client terminated early + else if(bit_count_max) module_next_state <= `STATE_Wstatus; + else module_next_state <= `STATE_Wburst; + end + `STATE_Wstatus: + begin + if(update_dr_i) module_next_state <= `STATE_idle; // client terminated early + else if(word_count_zero) module_next_state <= `STATE_Wcrc; + // can't wait until bus ready if multiple devices in chain... + // Would have to read postfix_bits, then send another start bit and push it through + // prefix_bits...potentially very inefficient. + else module_next_state <= `STATE_Wburst; + end + + `STATE_Wcrc: + begin + if(update_dr_i) module_next_state <= `STATE_idle; // client terminated early + else if(bit_count_32) module_next_state <= `STATE_Wmatch; + else module_next_state <= `STATE_Wcrc; + end + + `STATE_Wmatch: + begin + if(update_dr_i) module_next_state <= `STATE_idle; + // This doubles as our recovery state, stay here until update_dr_i + else module_next_state <= `STATE_Wmatch; + end + + default: module_next_state <= `STATE_idle; // shouldn't actually happen... + endcase + end + + + // Outputs of state machine, pure combinatorial + always @ (module_state or module_next_state or module_select_i or update_dr_i or capture_dr_i or shift_dr_i or operation_in[2] + or word_count_zero or bit_count_max or data_register_i[52] or biu_ready or intreg_instruction or module_cmd + or intreg_write or decremented_word_count) + begin + // Default everything to 0, keeps the case statement simple + addr_sel <= 1'b1; // Selects data for address_counter. 0 = data_register_i, 1 = incremented address count + addr_ct_en <= 1'b0; // Enable signal for address counter register + op_reg_en <= 1'b0; // Enable signal for 'operation' register + bit_ct_en <= 1'b0; // enable bit counter + bit_ct_rst <= 1'b0; // reset (zero) bit count register + word_ct_sel <= 1'b1; // Selects data for byte counter. 0 = data_register_i, 1 = decremented byte count + word_ct_en <= 1'b0; // Enable byte counter register + out_reg_ld_en <= 1'b0; // Enable parallel load of data_out_shift_reg + out_reg_shift_en <= 1'b0; // Enable shift of data_out_shift_reg + tdo_output_sel <= 2'b1; // 1 = data reg, 0 = biu_ready, 2 = crc_match, 3 = CRC data + biu_strobe <= 1'b0; + crc_clr <= 1'b0; + crc_en <= 1'b0; // add the input bit to the CRC calculation + crc_in_sel <= 1'b0; // 0 = tdo, 1 = tdi + crc_shift_en <= 1'b0; + out_reg_data_sel <= 1'b1; // 0 = BIU data, 1 = internal register data + regsel_ld_en <= 1'b0; + intreg_ld_en <= 1'b0; + error_reg_en <= 1'b0; + biu_clr_err <= 1'b0; // Set this to reset the BIU, clearing the biu_err bit + top_inhibit_o <= 1'b0; // Don't disable the top-level module in the default case + + case(module_state) + `STATE_idle: + begin + addr_sel <= 1'b0; + word_ct_sel <= 1'b0; + + // Operations for internal registers - stay in idle state + if(module_select_i & shift_dr_i) out_reg_shift_en <= 1'b1; // For module regs + if(module_select_i & capture_dr_i) + begin + out_reg_data_sel <= 1'b1; // select internal register data + out_reg_ld_en <= 1'b1; // For module regs + end + if(module_select_i & module_cmd & update_dr_i) begin + if(intreg_instruction) regsel_ld_en <= 1'b1; // For module regs + if(intreg_write) intreg_ld_en <= 1'b1; // For module regs + end + + // Burst operations + if(module_next_state != `STATE_idle) begin // Do the same to receive read or write opcode + addr_ct_en <= 1'b1; + op_reg_en <= 1'b1; + bit_ct_rst <= 1'b1; + word_ct_en <= 1'b1; + crc_clr <= 1'b1; + end + end + + `STATE_Rbegin: + begin + if(!word_count_zero) begin // Start a biu read transaction + biu_strobe <= 1'b1; + addr_sel <= 1'b1; + addr_ct_en <= 1'b1; + end + end + + `STATE_Rready: + ; // Just a wait state + + `STATE_Rstatus: + begin + tdo_output_sel <= 2'h0; + top_inhibit_o <= 1'b1; // in case of early termination + + if (module_next_state == `STATE_Rburst) begin + error_reg_en <= 1'b1; // Check the wb_error bit + out_reg_data_sel <= 1'b0; // select BIU data + out_reg_ld_en <= 1'b1; + bit_ct_rst <= 1'b1; + word_ct_sel <= 1'b1; + word_ct_en <= 1'b1; + if(!(decremented_word_count == 0) && !word_count_zero) begin // Start a biu read transaction + biu_strobe <= 1'b1; + addr_sel <= 1'b1; + addr_ct_en <= 1'b1; + end + end + end + + `STATE_Rburst: + begin + tdo_output_sel <= 2'h1; + out_reg_shift_en <= 1'b1; + bit_ct_en <= 1'b1; + crc_en <= 1'b1; + crc_in_sel <= 1'b0; // read data in output shift register LSB (tdo) + top_inhibit_o <= 1'b1; // in case of early termination + end + + `STATE_Rcrc: + begin + // Just shift out the data, don't bother counting, we don't move on until update_dr_i + tdo_output_sel <= 2'h3; + crc_shift_en <= 1'b1; + top_inhibit_o <= 1'b1; + end + + `STATE_Wready: + ; // Just a wait state + + `STATE_Wwait: + begin + tdo_output_sel <= 2'h1; + top_inhibit_o <= 1'b1; // in case of early termination + if(module_next_state == `STATE_Wburst) begin + biu_clr_err <= 1'b1; // If error occurred on last transaction of last burst, biu_err is still set. Clear it. + bit_ct_en <= 1'b1; + word_ct_sel <= 1'b1; // Pre-decrement the byte count + word_ct_en <= 1'b1; + crc_en <= 1'b1; // CRC gets tdi_i, which is 1 cycle ahead of data_register_i, so we need the bit there now in the CRC + crc_in_sel <= 1'b1; // read data from tdi_i + end + end + + `STATE_Wburst: + begin + bit_ct_en <= 1'b1; + tdo_output_sel <= 2'h1; + crc_en <= 1'b1; + crc_in_sel <= 1'b1; // read data from tdi_i + top_inhibit_o <= 1'b1; // in case of early termination + end + + `STATE_Wstatus: + begin + tdo_output_sel <= 2'h0; // Send the status bit to TDO + error_reg_en <= 1'b1; // Check the wb_error bit + // start transaction + biu_strobe <= 1'b1; // Start a BIU transaction + word_ct_sel <= 1'b1; // Decrement the byte count + word_ct_en <= 1'b1; + bit_ct_rst <= 1'b1; // Zero the bit count + addr_ct_en <= 1'b1; // Increment thte address counter + top_inhibit_o <= 1'b1; // in case of early termination + end + + `STATE_Wcrc: + begin + bit_ct_en <= 1'b1; + top_inhibit_o <= 1'b1; // in case of early termination + if(module_next_state == `STATE_Wmatch) tdo_output_sel <= 2'h2; // This is when the 'match' bit is actually read + end + + `STATE_Wmatch: + begin + tdo_output_sel <= 2'h2; + top_inhibit_o <= 1'b1; + // Bit of a hack here...an error on the final write won't be detected in STATE_Wstatus like the rest, + // so we assume the bus transaction is done and check it / latch it into the error register here. + if(module_next_state == `STATE_idle) error_reg_en <= 1'b1; + end + + default: ; + endcase + end + + +endmodule + Index: ADS_RELEASE_1_2_0/Hardware/jtag/tap/rtl/verilog/tap_top.v =================================================================== --- ADS_RELEASE_1_2_0/Hardware/jtag/tap/rtl/verilog/tap_top.v (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/jtag/tap/rtl/verilog/tap_top.v (revision 26) @@ -0,0 +1,526 @@ +////////////////////////////////////////////////////////////////////// +//// //// +//// tap_top.v //// +//// //// +//// //// +//// This file is part of the JTAG Test Access Port (TAP) //// +//// //// +//// Author(s): //// +//// Igor Mohor (igorm@opencores.org) //// +//// Nathan Yawn (nathan.yawn@opencores.org) //// +//// //// +//// //// +//// All additional information is avaliable in the jtag.pdf //// +//// file. //// +//// //// +////////////////////////////////////////////////////////////////////// +//// //// +//// Copyright (C) 2000 - 2008 Authors //// +//// //// +//// This source file may be used and distributed without //// +//// restriction provided that this copyright statement is not //// +//// removed from the file and that any derivative work contains //// +//// the original copyright notice and the associated disclaimer. //// +//// //// +//// This source file is free software; you can redistribute it //// +//// and/or modify it under the terms of the GNU Lesser General //// +//// Public License as published by the Free Software Foundation; //// +//// either version 2.1 of the License, or (at your option) any //// +//// later version. //// +//// //// +//// This source is distributed in the hope that it will be //// +//// useful, but WITHOUT ANY WARRANTY; without even the implied //// +//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// +//// PURPOSE. See the GNU Lesser General Public License for more //// +//// details. //// +//// //// +//// You should have received a copy of the GNU Lesser General //// +//// Public License along with this source; if not, download it //// +//// from http://www.opencores.org/lgpl.shtml //// +//// //// +////////////////////////////////////////////////////////////////////// +// +// CVS Revision History +// +// $Log: tap_top.v,v $ +// Revision 1.5 2009/06/16 02:53:58 Nathan +// Changed some signal names for better consistency between different hardware modules. Removed stale CVS log/comments. +// +// Revision 1.4 2009/05/17 20:54:38 Nathan +// Changed email address to opencores.org +// +// Revision 1.3 2008/06/18 18:45:07 Nathan +// Improved reset slightly. Cleanup. +// +// +// Revision 1.2 2008/05/14 13:13:24 Nathan +// Rewrote TAP FSM in canonical form, for readability. Switched +// from one-hot to binary encoding. Made reset signal active- +// low, per JTAG spec. Removed FF chain for 5 TMS reset - reset +// done in Test Logic Reset mode. Added test_logic_reset_o and +// run_test_idle_o signals. Removed double registers from IR data +// path. Unified the registers at the output of each data register +// to a single shared FF. +// + +`include "tap_defines.v" + +// Top module +module tap_top( + // JTAG pads + tms_pad_i, + tck_pad_i, + trstn_pad_i, + tdi_pad_i, + tdo_pad_o, + tdo_padoe_o, + + // TAP states + test_logic_reset_o, + run_test_idle_o, + shift_dr_o, + pause_dr_o, + update_dr_o, + capture_dr_o, + + // Select signals for boundary scan or mbist + extest_select_o, + sample_preload_select_o, + mbist_select_o, + debug_select_o, + + // TDO signal that is connected to TDI of sub-modules. + tdi_o, + + // TDI signals from sub-modules + debug_tdo_i, // from debug module + bs_chain_tdo_i, // from Boundary Scan Chain + mbist_tdo_i // from Mbist Chain + ); + + +// JTAG pins +input tms_pad_i; // JTAG test mode select pad +input tck_pad_i; // JTAG test clock pad +input trstn_pad_i; // JTAG test reset pad +input tdi_pad_i; // JTAG test data input pad +output tdo_pad_o; // JTAG test data output pad +output tdo_padoe_o; // Output enable for JTAG test data output pad + +// TAP states +output test_logic_reset_o; +output run_test_idle_o; +output shift_dr_o; +output pause_dr_o; +output update_dr_o; +output capture_dr_o; + +// Select signals for boundary scan or mbist +output extest_select_o; +output sample_preload_select_o; +output mbist_select_o; +output debug_select_o; + +// TDO signal that is connected to TDI of sub-modules. +output tdi_o; + +// TDI signals from sub-modules +input debug_tdo_i; // from debug module +input bs_chain_tdo_i; // from Boundary Scan Chain +input mbist_tdo_i; // from Mbist Chain + +// Wires which depend on the state of the TAP FSM +reg test_logic_reset; +reg run_test_idle; +reg select_dr_scan; +reg capture_dr; +reg shift_dr; +reg exit1_dr; +reg pause_dr; +reg exit2_dr; +reg update_dr; +reg select_ir_scan; +reg capture_ir; +reg shift_ir; +reg exit1_ir; +reg pause_ir; +reg exit2_ir; +reg update_ir; + +// Wires which depend on the current value in the IR +reg extest_select; +reg sample_preload_select; +reg idcode_select; +reg mbist_select; +reg debug_select; +reg bypass_select; + +// TDO and enable +reg tdo_pad_o; +reg tdo_padoe_o; + +assign tdi_o = tdi_pad_i; + +assign test_logic_reset_o = test_logic_reset; +assign run_test_idle_o = run_test_idle; +assign shift_dr_o = shift_dr; +assign pause_dr_o = pause_dr; +assign update_dr_o = update_dr; +assign capture_dr_o = capture_dr; + +assign extest_select_o = extest_select; +assign sample_preload_select_o = sample_preload_select; +assign mbist_select_o = mbist_select; +assign debug_select_o = debug_select; + + +/********************************************************************************** +* * +* TAP State Machine: Fully JTAG compliant * +* * +**********************************************************************************/ +// Definition of machine state values. We could one-hot encode this, and use 16 +// registers, but this uses binary encoding for the minimum of 4 DFF's instead. +`define STATE_test_logic_reset 4'hF +`define STATE_run_test_idle 4'hC +`define STATE_select_dr_scan 4'h7 +`define STATE_capture_dr 4'h6 +`define STATE_shift_dr 4'h2 +`define STATE_exit1_dr 4'h1 +`define STATE_pause_dr 4'h3 +`define STATE_exit2_dr 4'h0 +`define STATE_update_dr 4'h5 +`define STATE_select_ir_scan 4'h4 +`define STATE_capture_ir 4'hE +`define STATE_shift_ir 4'hA +`define STATE_exit1_ir 4'h9 +`define STATE_pause_ir 4'hB +`define STATE_exit2_ir 4'h8 +`define STATE_update_ir 4'hD + +reg [3:0] TAP_state = `STATE_test_logic_reset; // current state of the TAP controller +reg [3:0] next_TAP_state; // state TAP will take at next rising TCK, combinational signal + +// sequential part of the FSM +always @ (posedge tck_pad_i or negedge trstn_pad_i) +begin + if(trstn_pad_i == 0) + TAP_state = `STATE_test_logic_reset; + else + TAP_state = next_TAP_state; +end + + +// Determination of next state; purely combinatorial +always @ (TAP_state or tms_pad_i) +begin + case(TAP_state) + `STATE_test_logic_reset: + begin + if(tms_pad_i) next_TAP_state = `STATE_test_logic_reset; + else next_TAP_state = `STATE_run_test_idle; + end + `STATE_run_test_idle: + begin + if(tms_pad_i) next_TAP_state = `STATE_select_dr_scan; + else next_TAP_state = `STATE_run_test_idle; + end + `STATE_select_dr_scan: + begin + if(tms_pad_i) next_TAP_state = `STATE_select_ir_scan; + else next_TAP_state = `STATE_capture_dr; + end + `STATE_capture_dr: + begin + if(tms_pad_i) next_TAP_state = `STATE_exit1_dr; + else next_TAP_state = `STATE_shift_dr; + end + `STATE_shift_dr: + begin + if(tms_pad_i) next_TAP_state = `STATE_exit1_dr; + else next_TAP_state = `STATE_shift_dr; + end + `STATE_exit1_dr: + begin + if(tms_pad_i) next_TAP_state = `STATE_update_dr; + else next_TAP_state = `STATE_pause_dr; + end + `STATE_pause_dr: + begin + if(tms_pad_i) next_TAP_state = `STATE_exit2_dr; + else next_TAP_state = `STATE_pause_dr; + end + `STATE_exit2_dr: + begin + if(tms_pad_i) next_TAP_state = `STATE_update_dr; + else next_TAP_state = `STATE_shift_dr; + end + `STATE_update_dr: + begin + if(tms_pad_i) next_TAP_state = `STATE_select_dr_scan; + else next_TAP_state = `STATE_run_test_idle; + end + `STATE_select_ir_scan: + begin + if(tms_pad_i) next_TAP_state = `STATE_test_logic_reset; + else next_TAP_state = `STATE_capture_ir; + end + `STATE_capture_ir: + begin + if(tms_pad_i) next_TAP_state = `STATE_exit1_ir; + else next_TAP_state = `STATE_shift_ir; + end + `STATE_shift_ir: + begin + if(tms_pad_i) next_TAP_state = `STATE_exit1_ir; + else next_TAP_state = `STATE_shift_ir; + end + `STATE_exit1_ir: + begin + if(tms_pad_i) next_TAP_state = `STATE_update_ir; + else next_TAP_state = `STATE_pause_ir; + end + `STATE_pause_ir: + begin + if(tms_pad_i) next_TAP_state = `STATE_exit2_ir; + else next_TAP_state = `STATE_pause_ir; + end + `STATE_exit2_ir: + begin + if(tms_pad_i) next_TAP_state = `STATE_update_ir; + else next_TAP_state = `STATE_shift_ir; + end + `STATE_update_ir: + begin + if(tms_pad_i) next_TAP_state = `STATE_select_dr_scan; + else next_TAP_state = `STATE_run_test_idle; + end + default: next_TAP_state = `STATE_test_logic_reset; // can't actually happen + endcase +end + + +// Outputs of state machine, pure combinatorial +always @ (TAP_state) +begin + // Default everything to 0, keeps the case statement simple + test_logic_reset = 1'b0; + run_test_idle = 1'b0; + select_dr_scan = 1'b0; + capture_dr = 1'b0; + shift_dr = 1'b0; + exit1_dr = 1'b0; + pause_dr = 1'b0; + exit2_dr = 1'b0; + update_dr = 1'b0; + select_ir_scan = 1'b0; + capture_ir = 1'b0; + shift_ir = 1'b0; + exit1_ir = 1'b0; + pause_ir = 1'b0; + exit2_ir = 1'b0; + update_ir = 1'b0; + + case(TAP_state) + `STATE_test_logic_reset: test_logic_reset = 1'b1; + `STATE_run_test_idle: run_test_idle = 1'b1; + `STATE_select_dr_scan: select_dr_scan = 1'b1; + `STATE_capture_dr: capture_dr = 1'b1; + `STATE_shift_dr: shift_dr = 1'b1; + `STATE_exit1_dr: exit1_dr = 1'b1; + `STATE_pause_dr: pause_dr = 1'b1; + `STATE_exit2_dr: exit2_dr = 1'b1; + `STATE_update_dr: update_dr = 1'b1; + `STATE_select_ir_scan: select_ir_scan = 1'b1; + `STATE_capture_ir: capture_ir = 1'b1; + `STATE_shift_ir: shift_ir = 1'b1; + `STATE_exit1_ir: exit1_ir = 1'b1; + `STATE_pause_ir: pause_ir = 1'b1; + `STATE_exit2_ir: exit2_ir = 1'b1; + `STATE_update_ir: update_ir = 1'b1; + default: ; + endcase +end + +/********************************************************************************** +* * +* End: TAP State Machine * +* * +**********************************************************************************/ + + + +/********************************************************************************** +* * +* jtag_ir: JTAG Instruction Register * +* * +**********************************************************************************/ +reg [`IR_LENGTH-1:0] jtag_ir; // Instruction register +reg [`IR_LENGTH-1:0] latched_jtag_ir; //, latched_jtag_ir_neg; +wire instruction_tdo; + +always @ (posedge tck_pad_i or negedge trstn_pad_i) +begin + if(trstn_pad_i == 0) + jtag_ir[`IR_LENGTH-1:0] <= #1 `IR_LENGTH'b0; + else if (test_logic_reset == 1) + jtag_ir[`IR_LENGTH-1:0] <= #1 `IR_LENGTH'b0; + else if(capture_ir) + jtag_ir <= #1 4'b0101; // This value is fixed for easier fault detection + else if(shift_ir) + jtag_ir[`IR_LENGTH-1:0] <= #1 {tdi_pad_i, jtag_ir[`IR_LENGTH-1:1]}; +end + +assign instruction_tdo = jtag_ir[0]; // This is latched on a negative TCK edge after the output MUX + +// Updating jtag_ir (Instruction Register) +// jtag_ir should be latched on FALLING EDGE of TCK when capture_ir == 1 +always @ (negedge tck_pad_i or negedge trstn_pad_i) +begin + if(trstn_pad_i == 0) + latched_jtag_ir <=#1 `IDCODE; // IDCODE selected after reset + else if (test_logic_reset) + latched_jtag_ir <=#1 `IDCODE; // IDCODE selected after reset + else if(update_ir) + latched_jtag_ir <=#1 jtag_ir; +end + +/********************************************************************************** +* * +* End: jtag_ir * +* * +**********************************************************************************/ + + + +/********************************************************************************** +* * +* idcode logic * +* * +**********************************************************************************/ +reg [31:0] idcode_reg; +wire idcode_tdo; + +always @ (posedge tck_pad_i or negedge trstn_pad_i) +begin + if(trstn_pad_i == 0) + idcode_reg <=#1 `IDCODE_VALUE; // IDCODE selected after reset + else if (test_logic_reset) + idcode_reg <=#1 `IDCODE_VALUE; // IDCODE selected after reset + else if(idcode_select & capture_dr) + idcode_reg <= #1 `IDCODE_VALUE; + else if(idcode_select & shift_dr) + idcode_reg <= #1 {tdi_pad_i, idcode_reg[31:1]}; + +end + +assign idcode_tdo = idcode_reg[0]; // This is latched on a negative TCK edge after the output MUX + +/********************************************************************************** +* * +* End: idcode logic * +* * +**********************************************************************************/ + + +/********************************************************************************** +* * +* Bypass logic * +* * +**********************************************************************************/ +wire bypassed_tdo; +reg bypass_reg; // This is a 1-bit register + +always @ (posedge tck_pad_i or negedge trstn_pad_i) +begin + if (trstn_pad_i == 0) + bypass_reg <= #1 1'b0; + else if (test_logic_reset == 1) + bypass_reg <= #1 1'b0; + else if (bypass_select & capture_dr) + bypass_reg<=#1 1'b0; + else if(bypass_select & shift_dr) + bypass_reg<=#1 tdi_pad_i; +end + +assign bypassed_tdo = bypass_reg; // This is latched on a negative TCK edge after the output MUX + +/********************************************************************************** +* * +* End: Bypass logic * +* * +**********************************************************************************/ + + +/********************************************************************************** +* * +* Selecting active data register * +* * +**********************************************************************************/ +always @ (latched_jtag_ir) +begin + extest_select = 1'b0; + sample_preload_select = 1'b0; + idcode_select = 1'b0; + mbist_select = 1'b0; + debug_select = 1'b0; + bypass_select = 1'b0; + + case(latched_jtag_ir) /* synthesis parallel_case */ + `EXTEST: extest_select = 1'b1; // External test + `SAMPLE_PRELOAD: sample_preload_select = 1'b1; // Sample preload + `IDCODE: idcode_select = 1'b1; // ID Code + `MBIST: mbist_select = 1'b1; // Mbist test + `DEBUG: debug_select = 1'b1; // Debug + `BYPASS: bypass_select = 1'b1; // BYPASS + default: bypass_select = 1'b1; // BYPASS + endcase +end + + +/********************************************************************************** +* * +* Multiplexing TDO data * +* * +**********************************************************************************/ +reg tdo_mux_out; // really just a wire + +always @ (shift_ir or instruction_tdo or latched_jtag_ir or idcode_tdo or + debug_tdo_i or bs_chain_tdo_i or mbist_tdo_i or bypassed_tdo or + bs_chain_tdo_i) +begin + if(shift_ir) + tdo_mux_out = instruction_tdo; + else + begin + case(latched_jtag_ir) // synthesis parallel_case + `IDCODE: tdo_mux_out = idcode_tdo; // Reading ID code + `DEBUG: tdo_mux_out = debug_tdo_i; // Debug + `SAMPLE_PRELOAD: tdo_mux_out = bs_chain_tdo_i; // Sampling/Preloading + `EXTEST: tdo_mux_out = bs_chain_tdo_i; // External test + `MBIST: tdo_mux_out = mbist_tdo_i; // Mbist test + default: tdo_mux_out = bypassed_tdo; // BYPASS instruction + endcase + end +end + + +// TDO changes state at negative edge of TCK +always @ (negedge tck_pad_i) +begin + tdo_pad_o = tdo_mux_out; +end + + +// Tristate control for tdo_pad_o pin +always @ (posedge tck_pad_i) +begin + tdo_padoe_o <= #1 shift_ir | shift_dr; +end +/********************************************************************************** +* * +* End: Multiplexing TDO data * +* * +**********************************************************************************/ + +endmodule Index: ADS_RELEASE_1_2_0/Hardware/jtag/tap/rtl/verilog/tap_defines.v =================================================================== --- ADS_RELEASE_1_2_0/Hardware/jtag/tap/rtl/verilog/tap_defines.v (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/jtag/tap/rtl/verilog/tap_defines.v (revision 26) @@ -0,0 +1,79 @@ +////////////////////////////////////////////////////////////////////// +//// //// +//// tap_defines.v //// +//// //// +//// //// +//// This file is part of the JTAG Test Access Port (TAP) //// +//// http://www.opencores.org/projects/jtag/ //// +//// //// +//// Author(s): //// +//// Igor Mohor (igorm@opencores.org) //// +//// //// +//// //// +//// All additional information is avaliable in the README.txt //// +//// file. //// +//// //// +////////////////////////////////////////////////////////////////////// +//// //// +//// Copyright (C) 2000 - 2003 Authors //// +//// //// +//// This source file may be used and distributed without //// +//// restriction provided that this copyright statement is not //// +//// removed from the file and that any derivative work contains //// +//// the original copyright notice and the associated disclaimer. //// +//// //// +//// This source file is free software; you can redistribute it //// +//// and/or modify it under the terms of the GNU Lesser General //// +//// Public License as published by the Free Software Foundation; //// +//// either version 2.1 of the License, or (at your option) any //// +//// later version. //// +//// //// +//// This source is distributed in the hope that it will be //// +//// useful, but WITHOUT ANY WARRANTY; without even the implied //// +//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// +//// PURPOSE. See the GNU Lesser General Public License for more //// +//// details. //// +//// //// +//// You should have received a copy of the GNU Lesser General //// +//// Public License along with this source; if not, download it //// +//// from http://www.opencores.org/lgpl.shtml //// +//// //// +////////////////////////////////////////////////////////////////////// +// +// CVS Revision History +// +// $Log: tap_defines.v,v $ +// Revision 1.1.1.1 2008/05/14 12:07:33 Nathan +// Original from OpenCores +// +// Revision 1.3 2004/03/02 17:39:45 mohor +// IDCODE_VALUE changed to Flextronics ID. +// +// Revision 1.2 2004/01/27 10:00:33 mohor +// Unused registers removed. +// +// Revision 1.1 2003/12/23 14:52:14 mohor +// Directory structure changed. New version of TAP. +// +// +// + + +// Define IDCODE Value +`define IDCODE_VALUE 32'h149511c3 +// 0001 version +// 0100100101010001 part number (IQ) +// 00011100001 manufacturer id (flextronics) +// 1 required by standard + +// Length of the Instruction register +`define IR_LENGTH 4 + +// Supported Instructions +`define EXTEST 4'b0000 +`define SAMPLE_PRELOAD 4'b0001 +`define IDCODE 4'b0010 +`define DEBUG 4'b1000 +`define MBIST 4'b1001 +`define BYPASS 4'b1111 + Index: ADS_RELEASE_1_2_0/Hardware/jtag/tap/doc/src/jtag.odt =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: ADS_RELEASE_1_2_0/Hardware/jtag/tap/doc/src/jtag.odt =================================================================== --- ADS_RELEASE_1_2_0/Hardware/jtag/tap/doc/src/jtag.odt (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/jtag/tap/doc/src/jtag.odt (revision 26)
ADS_RELEASE_1_2_0/Hardware/jtag/tap/doc/src/jtag.odt Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: ADS_RELEASE_1_2_0/Hardware/jtag/tap/doc/src/oc_jtag_sys_diag.odg =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: ADS_RELEASE_1_2_0/Hardware/jtag/tap/doc/src/oc_jtag_sys_diag.odg =================================================================== --- ADS_RELEASE_1_2_0/Hardware/jtag/tap/doc/src/oc_jtag_sys_diag.odg (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/jtag/tap/doc/src/oc_jtag_sys_diag.odg (revision 26)
ADS_RELEASE_1_2_0/Hardware/jtag/tap/doc/src/oc_jtag_sys_diag.odg Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: ADS_RELEASE_1_2_0/Hardware/jtag/tap/doc/src/system_block_diagram.odg =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: ADS_RELEASE_1_2_0/Hardware/jtag/tap/doc/src/system_block_diagram.odg =================================================================== --- ADS_RELEASE_1_2_0/Hardware/jtag/tap/doc/src/system_block_diagram.odg (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/jtag/tap/doc/src/system_block_diagram.odg (revision 26)
ADS_RELEASE_1_2_0/Hardware/jtag/tap/doc/src/system_block_diagram.odg Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: ADS_RELEASE_1_2_0/Hardware/jtag/tap/doc/jtag.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: ADS_RELEASE_1_2_0/Hardware/jtag/tap/doc/jtag.pdf =================================================================== --- ADS_RELEASE_1_2_0/Hardware/jtag/tap/doc/jtag.pdf (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/jtag/tap/doc/jtag.pdf (revision 26)
ADS_RELEASE_1_2_0/Hardware/jtag/tap/doc/jtag.pdf Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: ADS_RELEASE_1_2_0/Hardware/jtag/tap/doc/gpl-2.0.txt =================================================================== --- ADS_RELEASE_1_2_0/Hardware/jtag/tap/doc/gpl-2.0.txt (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/jtag/tap/doc/gpl-2.0.txt (revision 26) @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. Index: ADS_RELEASE_1_2_0/Hardware/jtag/cells/rtl/verilog/InputCell.v =================================================================== --- ADS_RELEASE_1_2_0/Hardware/jtag/cells/rtl/verilog/InputCell.v (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/jtag/cells/rtl/verilog/InputCell.v (revision 26) @@ -0,0 +1,62 @@ +/********************************************************************************** +* * +* This verilog file is a part of the Boundary Scan Implementation and comes in * +* a pack with several other files. It is fully IEEE 1149.1 compliant. * +* For details check www.opencores.org (pdf files, bsdl file, etc.) * +* * +* Copyright (C) 2000 Igor Mohor (igorm@opencores.org) and OPENCORES.ORG * +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +* See the file COPYING for the full details of the license. * +* * +* OPENCORES.ORG is looking for new open source IP cores and developers that * +* would like to help in our mission. * +* * +**********************************************************************************/ + + + +/********************************************************************************** +* * +* Input Cell: * +* * +* InputPin: Value that comes from on-chip logic and goes to pin * +* FromPreviousBSCell: Value from previous boundary scan cell * +* ToNextBSCell: Value for next boundary scan cell * +* CaptureDR, ShiftDR: TAP states * +* TCK: Test Clock * +* * +**********************************************************************************/ + +// This is not a top module +module InputCell( InputPin, FromPreviousBSCell, CaptureDR, ShiftDR, TCK, ToNextBSCell); +input InputPin; +input FromPreviousBSCell; +input CaptureDR; +input ShiftDR; +input TCK; + +reg Latch; + +output ToNextBSCell; +reg ToNextBSCell; + +wire SelectedInput = CaptureDR? InputPin : FromPreviousBSCell; + +always @ (posedge TCK) +begin + if(CaptureDR | ShiftDR) + Latch<=SelectedInput; +end + +always @ (negedge TCK) +begin + ToNextBSCell<=Latch; +end + + +endmodule // InputCell \ No newline at end of file Index: ADS_RELEASE_1_2_0/Hardware/jtag/cells/rtl/verilog/ControlCell.v =================================================================== --- ADS_RELEASE_1_2_0/Hardware/jtag/cells/rtl/verilog/ControlCell.v (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/jtag/cells/rtl/verilog/ControlCell.v (revision 26) @@ -0,0 +1,77 @@ +/********************************************************************************** +* * +* This verilog file is a part of the Boundary Scan Implementation and comes in * +* a pack with several other files. It is fully IEEE 1149.1 compliant. * +* For details check www.opencores.org (pdf files, bsdl file, etc.) * +* * +* Copyright (C) 2000 Igor Mohor (igorm@opencores.org) and OPENCORES.ORG * +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +* See the file COPYING for the full details of the license. * +* * +* OPENCORES.ORG is looking for new open source IP cores and developers that * +* would like to help in our mission. * +* * +**********************************************************************************/ + + +/********************************************************************************** +* * +* I/O Control Cell: * +* * +* OutputControl: Output Control from on-chip logic * +* FromPreviousBSCell: Value from previous boundary scan cell * +* ToNextBSCell: Value for next boundary scan cell * +* CaptureDR, ShiftDR, UpdateDR: TAP states * +* extest: Instruction Register Command * +* TCK: Test Clock * +* * +* Output Enable can be generated by running CaptureDR-UpdateDR sequence or * +* shifting data for the exact number of time * +* * +**********************************************************************************/ + +// This is not a top module +module ControlCell( OutputControl, FromPreviousBSCell, CaptureDR, ShiftDR, UpdateDR, extest, TCK, ToNextBSCell, ToOutputEnable); +input OutputControl; +input FromPreviousBSCell; +input CaptureDR; +input ShiftDR; +input UpdateDR; +input extest; +input TCK; + +reg Latch; + +output ToNextBSCell; +output ToOutputEnable; + +reg ToNextBSCell; +reg ShiftedControl; + +wire SelectedInput = CaptureDR? OutputControl : FromPreviousBSCell; + +always @ (posedge TCK) +begin + if(CaptureDR | ShiftDR) + Latch<=SelectedInput; +end + +always @ (negedge TCK) +begin + ToNextBSCell<=Latch; +end + +always @ (negedge TCK) +begin + if(UpdateDR) + ShiftedControl<=ToNextBSCell; +end + +assign ToOutputEnable = extest? ShiftedControl : OutputControl; + +endmodule // ControlCell \ No newline at end of file Index: ADS_RELEASE_1_2_0/Hardware/jtag/cells/rtl/verilog/OutputCell.v =================================================================== --- ADS_RELEASE_1_2_0/Hardware/jtag/cells/rtl/verilog/OutputCell.v (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/jtag/cells/rtl/verilog/OutputCell.v (revision 26) @@ -0,0 +1,83 @@ +/********************************************************************************** +* * +* This verilog file is a part of the Boundary Scan Implementation and comes in * +* a pack with several other files. It is fully IEEE 1149.1 compliant. * +* For details check www.opencores.org (pdf files, bsdl file, etc.) * +* * +* Copyright (C) 2000 Igor Mohor (igorm@opencores.org) and OPENCORES.ORG * +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +* See the file COPYING for the full details of the license. * +* * +* OPENCORES.ORG is looking for new open source IP cores and developers that * +* would like to help in our mission. * +* * +**********************************************************************************/ + + + +/********************************************************************************** +* * +* Output Cell: * +* * +* FromCore: Value that comes from on-chip logic and goes to pin * +* FromPreviousBSCell: Value from previous boundary scan cell * +* ToNextBSCell: Value for next boundary scan cell * +* CaptureDR, ShiftDR, UpdateDR: TAP states * +* extest: Instruction Register Command * +* TCK: Test Clock * +* TristatedPin: Signal from core is connected to this output pin via BS * +* FromOutputEnable: This pin comes from core or ControlCell * +* * +* Signal that is connected to TristatedPin comes from core or BS chain. * +* Tristate control is generated in core or BS chain (ControlCell). * +* * +**********************************************************************************/ + +// This is not a top module +module OutputCell( FromCore, FromPreviousBSCell, CaptureDR, ShiftDR, UpdateDR, extest, TCK, ToNextBSCell, FromOutputEnable, TristatedPin); +input FromCore; +input FromPreviousBSCell; +input CaptureDR; +input ShiftDR; +input UpdateDR; +input extest; +input TCK; +input FromOutputEnable; + +reg Latch; + +output ToNextBSCell; +reg ToNextBSCell; + +output TristatedPin; + +reg ShiftedControl; + +wire SelectedInput = CaptureDR? FromCore : FromPreviousBSCell; + +always @ (posedge TCK) +begin + if(CaptureDR | ShiftDR) + Latch<=SelectedInput; +end + +always @ (negedge TCK) +begin + ToNextBSCell<=Latch; +end + +always @ (negedge TCK) +begin + if(UpdateDR) + ShiftedControl<=ToNextBSCell; +end + +wire MuxedSignal = extest? ShiftedControl : FromCore; +assign TristatedPin = FromOutputEnable? MuxedSignal : 1'bz; + +endmodule // OutputCell \ No newline at end of file Index: ADS_RELEASE_1_2_0/Hardware/jtag/cells/rtl/verilog/BiDirectionalCell.v =================================================================== --- ADS_RELEASE_1_2_0/Hardware/jtag/cells/rtl/verilog/BiDirectionalCell.v (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/jtag/cells/rtl/verilog/BiDirectionalCell.v (revision 26) @@ -0,0 +1,66 @@ +/********************************************************************************** +* * +* BiDirectional Cell: * +* * +* FromCore: Value that comes from on-chip logic and goes to pin * +* ToCore: Value that is read-in from the pin and goes to core * +* FromPreviousBSCell: Value from previous boundary scan cell * +* ToNextBSCell: Value for next boundary scan cell * +* CaptureDR, ShiftDR, UpdateDR: TAP states * +* extest: Instruction Register Command * +* TCK: Test Clock * +* BiDirPin: Bidirectional pin connected to this BS cell * +* FromOutputEnable: This pin comes from core or ControlCell * +* * +* Signal that is connected to BiDirPin comes from core or BS chain. Tristate * +* control is generated in core or BS chain (ControlCell). * +* * +**********************************************************************************/ + +module BiDirectionalCell( FromCore, ToCore, FromPreviousBSCell, CaptureDR, ShiftDR, UpdateDR, extest, TCK, ToNextBSCell, FromOutputEnable, BiDirPin); +input FromCore; +input FromPreviousBSCell; +input CaptureDR; +input ShiftDR; +input UpdateDR; +input extest; +input TCK; +input FromOutputEnable; + +reg Latch; + +output ToNextBSCell; +reg ToNextBSCell; + +output BiDirPin; +output ToCore; + +reg ShiftedControl; + +wire SelectedInput = CaptureDR? BiDirPin : FromPreviousBSCell; + +always @ (posedge TCK) +begin + if(CaptureDR | ShiftDR) + Latch<=SelectedInput; +end + +always @ (negedge TCK) +begin + ToNextBSCell<=Latch; +end + +always @ (negedge TCK) +begin + if(UpdateDR) + ShiftedControl<=ToNextBSCell; +end + +wire MuxedSignal = extest? ShiftedControl : FromCore; +assign BiDirPin = FromOutputEnable? MuxedSignal : 1'bz; + +//BUF Buffer (.I(BiDirPin), .O(ToCore)); +assign ToCore = BiDirPin; + + +endmodule // TristateCell \ No newline at end of file Index: ADS_RELEASE_1_2_0/Hardware/jtag/BSDL/opencores_tap.bsd =================================================================== --- ADS_RELEASE_1_2_0/Hardware/jtag/BSDL/opencores_tap.bsd (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/jtag/BSDL/opencores_tap.bsd (revision 26) @@ -0,0 +1,35 @@ +-- This is a minimal BSDL file describing the particulars +-- of the OpenCores standard / native TAP. It is designed +-- only to be used by the adv_jtag_bridge program. This +-- file almost certainly lacks key entries and attributes +-- required by other JTAG / BSDL systems. +-- +-- by Nathan Yawn (nathan.yawn@opencores.org) +-- Copyright: This file is released into the public domain. +-- + + +entity OC_TAP is + + +attribute INSTRUCTION_LENGTH of OC_TAP : entity is 4; + + +attribute INSTRUCTION_OPCODE of OC_TAP : entity is + "EXTEST (0000)," & + "SAMPLE_PRELOAD (0001)," & + "IDCODE (0010)," & + "MBIST (1001)," & + "DEBUG (1000)," & + "BYPASS (1111),"; + + +attribute IDCODE_REGISTER of OC_TAP : entity is + "0001" & -- version + "0100100101010001" & -- part number + "00011100001" & -- manufacturer (flextronics) + "1"; -- required by 1149.1 + + +end OC_TAP; + Index: ADS_RELEASE_1_2_0/Hardware/xilinx_internal_jtag/rtl/verilog/xilinx_internal_jtag.v =================================================================== --- ADS_RELEASE_1_2_0/Hardware/xilinx_internal_jtag/rtl/verilog/xilinx_internal_jtag.v (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/xilinx_internal_jtag/rtl/verilog/xilinx_internal_jtag.v (revision 26) @@ -0,0 +1,436 @@ +/////////////////////////////////////////////////////////////////////// +//// //// +//// xilinx_internal_jtag.v //// +//// //// +//// //// +//// //// +//// Author(s): //// +//// Nathan Yawn (nathan.yawn@opencores.org) //// +//// //// +//// //// +//// //// +////////////////////////////////////////////////////////////////////// +//// //// +//// Copyright (C) 2008 Authors //// +//// //// +//// This source file may be used and distributed without //// +//// restriction provided that this copyright statement is not //// +//// removed from the file and that any derivative work contains //// +//// the original copyright notice and the associated disclaimer. //// +//// //// +//// This source file is free software; you can redistribute it //// +//// and/or modify it under the terms of the GNU Lesser General //// +//// Public License as published by the Free Software Foundation; //// +//// either version 2.1 of the License, or (at your option) any //// +//// later version. //// +//// //// +//// This source is distributed in the hope that it will be //// +//// useful, but WITHOUT ANY WARRANTY; without even the implied //// +//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// +//// PURPOSE. See the GNU Lesser General Public License for more //// +//// details. //// +//// //// +//// You should have received a copy of the GNU Lesser General //// +//// Public License along with this source; if not, download it //// +//// from http://www.opencores.org/lgpl.shtml //// +//// //// +////////////////////////////////////////////////////////////////////// +// // +// This file is a wrapper for the various Xilinx internal BSCAN // +// TAP devices. It is designed to take the place of a separate TAP // +// controller in Xilinx systems, to allow a user to access a CPU // +// debug module (such as that of the OR1200) through the FPGA's // +// dedicated JTAG / configuration port. // +// // +////////////////////////////////////////////////////////////////////// +// +// CVS Revision History +// +// $Log: xilinx_internal_jtag.v,v $ +// Revision 1.3 2009/06/16 02:54:23 Nathan +// Changed some signal names for better consistency between different hardware modules. +// +// Revision 1.2 2009/05/17 20:54:16 Nathan +// Changed email address to opencores.org +// +// Revision 1.1 2008/07/18 20:07:32 Nathan +// Changed the directory structure to match existing projects. +// +// Revision 1.4 2008/07/11 08:26:10 Nathan +// Ran through dos2unix +// +// Revision 1.3 2008/07/11 08:25:52 Nathan +// Added logic to provide CAPTURE_DR signal when necessary, and to provide a TCK while UPDATE_DR is asserted. Note that there is no TCK event between SHIFT_DR and UPDATE_DR, and no TCK event between UPDATE_DR and the next CAPTURE_DR; the Xilinx BSCAN devices do not provide it. Tested successfully with the adv_dbg_if on Virtex-4. +// +// Revision 1.2 2008/06/09 19:34:14 Nathan +// Syntax and functional fixes made after compiling each type of BSCAN module using Xilinx tools. +// +// Revision 1.1 2008/05/22 19:54:07 Nathan +// Initial version +// + + +`include "xilinx_internal_jtag_options.v" + +// Note that the SPARTAN BSCAN controllers have more than one channel. +// This implementation always uses channel 1, this is not configurable. +// If you want to use another channel, then it is probably because you +// want to attach multiple devices to the BSCAN device, which means +// you'll be making changes to this file anyway. +// Virtex BSCAN devices are instantiated separately for each channel. +// To select something other than the default (1), change the parameter +// "virtex_jtag_chain". + + +module xilinx_internal_jtag ( + tck_o, + debug_tdo_i, + tdi_o, + test_logic_reset_o, + run_test_idle_o, + shift_dr_o, + capture_dr_o, + pause_dr_o, + update_dr_o, + debug_select_o +); + +// May be 1, 2, 3, or 4 +// Only used for Virtex 4/5 devices +parameter virtex_jtag_chain = 1; + +input debug_tdo_i; +output tck_o; +output tdi_o; +output test_logic_reset_o; +output run_test_idle_o; +output shift_dr_o; +output capture_dr_o; +output pause_dr_o; +output update_dr_o; +output debug_select_o; + +wire debug_tdo_i; +wire tck_o; +wire drck; +wire tdi_o; +wire test_logic_reset_o; +wire run_test_idle_o; +wire shift_dr_o; +wire pause_dr_o; +wire update_dr_o; +wire debug_select_o; + + + +`ifdef SPARTAN2 + +// Note that this version is missing three outputs. +// It also does not have a real TCK...DRCK1 is only active when USER1 is selected +// AND the TAP is in SHIFT_DR or CAPTURE_DR states...except there's no +// capture_dr output. + +reg capture_dr_o; +wire update_bscan; +reg update_out; + +BSCAN_SPARTAN2 BSCAN_SPARTAN2_inst ( +.DRCK1(drck), // Data register output for USER1 functions +.DRCK2(), // Data register output for USER2 functions +.RESET(test_logic_reset_o), // Reset output from TAP controller +.SEL1(debug_select_o), // USER1 active output +.SEL2(), // USER2 active output +.SHIFT(shift_dr_o), // SHIFT output from TAP controller +.TDI(tdi_o), // TDI output from TAP controller +.UPDATE(update_bscan), // UPDATE output from TAP controller +.TDO1(debug_tdo_i), // Data input for USER1 function +.TDO2( 1'b0 ) // Data input for USER2 function +); + +assign pause_dr_o = 1'b0; +assign run_test_idle_o = 1'b0; +assign capture_dr_o = 1'b0; + +// We get one TCK during capture_dr state (low,high,SHIFT goes high on next DRCK high) +// On that negative edge, set capture_dr, and it will get registered on the rising +// edge. +always @ (negedge tck_o) +begin + if(debug_select_o && !shift_dr_o) + capture_dr_o <= 1'b1; + else + capture_dr_o <= 1'b0; +end + +// The & !update_bscan tern will provide a clock edge so update_dr_o can be registered +// The &debug_select term will drop TCK when the module is un-selected (does not happen in the BSCAN block). +// This allows a user to kludge clock ticks in the IDLE state, which is needed by the advanced debug module. +assign tck_o = (drck & debug_select_o & !update_bscan); + +// This will hold the update_dr output so it can be registered on the rising edge +// of the clock created above. +always @(posedge update_bscan or posedge capture_dr_o or negedge debug_select_o) +begin + if(update_bscan) update_out <= 1'b1; + else if(capture_dr_o) update_out <= 1'b0; + else if(!debug_select_o) update_out <= 1'b0; +end + +assign update_dr_o = update_out; + +`else +`ifdef SPARTAN3 +// Note that this version is missing two outputs. +// It also does not have a real TCK...DRCK1 is only active when USER1 is selected. + +wire capture_dr_o; +wire update_bscan; +reg update_out; + +BSCAN_SPARTAN3 BSCAN_SPARTAN3_inst ( +.CAPTURE(capture_dr_o), // CAPTURE output from TAP controller +.DRCK1(drck), // Data register output for USER1 functions +.DRCK2(), // Data register output for USER2 functions +.RESET(test_logic_reset_o), // Reset output from TAP controller +.SEL1(debug_select_o), // USER1 active output +.SEL2(), // USER2 active output +.SHIFT(shift_dr_o), // SHIFT output from TAP controller +.TDI(tdi_o), // TDI output from TAP controller +.UPDATE(update_bscan), // UPDATE output from TAP controller +.TDO1(debug_tdo_i), // Data input for USER1 function +.TDO2(1'b0) // Data input for USER2 function +); + +assign pause_dr_o = 1'b0; +assign run_test_idle_o = 1'b0; + +// The & !update_bscan tern will provide a clock edge so update_dr_o can be registered +// The &debug_select term will drop TCK when the module is un-selected (does not happen in the BSCAN block). +// This allows a user to kludge clock ticks in the IDLE state, which is needed by the advanced debug module. +assign tck_o = (drck & debug_select_o & !update_bscan); + +// This will hold the update_dr output so it can be registered on the rising edge +// of the clock created above. +always @(posedge update_bscan or posedge capture_dr_o or negedge debug_select_o) +begin + if(update_bscan) update_out <= 1'b1; + else if(capture_dr_o) update_out <= 1'b0; + else if(!debug_select_o) update_out <= 1'b0; +end + +assign update_dr_o = update_out; + +`else +`ifdef SPARTAN3A +// Note that this version is missing two outputs. +// At least it has a real TCK. + +wire capture_dr_o; + +BSCAN_SPARTAN3A BSCAN_SPARTAN3A_inst ( +.CAPTURE(capture_dr_o), // CAPTURE output from TAP controller +.DRCK1(), // Data register output for USER1 functions +.DRCK2(), // Data register output for USER2 functions +.RESET(test_logic_reset_o), // Reset output from TAP controller +.SEL1(debug_select_o), // USER1 active output +.SEL2(), // USER2 active output +.SHIFT(shift_dr_o), // SHIFT output from TAP controller +.TCK(tck_o), // TCK output from TAP controller +.TDI(tdi_o), // TDI output from TAP controller +.TMS(), // TMS output from TAP controller +.UPDATE(update_dr_o), // UPDATE output from TAP controller +.TDO1(debug_tdo_i), // Data input for USER1 function +.TDO2( 1'b0) // Data input for USER2 function +); + +assign pause_dr_o = 1'b0; +assign run_test_idle_o = 1'b0; + +`else +`ifdef VIRTEX + +// Note that this version is missing three outputs. +// It also does not have a real TCK...DRCK1 is only active when USER1 is selected. + +reg capture_dr_o; +wire update_bscan; +reg update_out; + +BSCAN_VIRTEX BSCAN_VIRTEX_inst ( +.DRCK1(drck), // Data register output for USER1 functions +.DRCK2(), // Data register output for USER2 functions +.RESET(test_logic_reset_o), // Reset output from TAP controller +.SEL1(debug_select_o), // USER1 active output +.SEL2(), // USER2 active output +.SHIFT(shift_dr_o), // SHIFT output from TAP controller +.TDI(tdi_o), // TDI output from TAP controller +.UPDATE(update_bscan), // UPDATE output from TAP controller +.TDO1(debug_tdo_i), // Data input for USER1 function +.TDO2( 1'b0) // Data input for USER2 function +); + +assign pause_dr_o = 1'b0; +assign run_test_idle_o = 1'b0; + +// We get one TCK during capture_dr state (low,high,SHIFT goes high on next DRCK low) +// On that negative edge, set capture_dr, and it will get registered on the rising +// edge, then de-asserted on the same edge that SHIFT goes high. +always @ (negedge tck_o) +begin + if(debug_select_o && !shift_dr_o) + capture_dr_o <= 1'b1; + else + capture_dr_o <= 1'b0; +end + +// The & !update_bscan tern will provide a clock edge so update_dr_o can be registered +// The &debug_select term will drop TCK when the module is un-selected (does not happen in the BSCAN block). +// This allows a user to kludge clock ticks in the IDLE state, which is needed by the advanced debug module. +assign tck_o = (drck & debug_select_o & !update_bscan); + +// This will hold the update_dr output so it can be registered on the rising edge +// of the clock created above. +always @(posedge update_bscan or posedge capture_dr_o or negedge debug_select_o) +begin + if(update_bscan) update_out <= 1'b1; + else if(capture_dr_o) update_out <= 1'b0; + else if(!debug_select_o) update_out <= 1'b0; +end + +assign update_dr_o = update_out; + +`else +`ifdef VIRTEX2 + +// Note that this version is missing two outputs. +// It also does not have a real TCK...DRCK1 is only active when USER1 is selected. + +wire capture_dr_o; +wire update_bscan; +reg update_out; + +BSCAN_VIRTEX2 BSCAN_VIRTEX2_inst ( +.CAPTURE(capture_dr_o), // CAPTURE output from TAP controller +.DRCK1(drck), // Data register output for USER1 functions +.DRCK2(), // Data register output for USER2 functions +.RESET(test_logic_reset_o), // Reset output from TAP controller +.SEL1(debug_select_o), // USER1 active output +.SEL2(), // USER2 active output +.SHIFT(shift_dr_o), // SHIFT output from TAP controller +.TDI(tdi_o), // TDI output from TAP controller +.UPDATE(update_bscan), // UPDATE output from TAP controller +.TDO1(debug_tdo_i), // Data input for USER1 function +.TDO2( 1'b0 ) // Data input for USER2 function +); + +assign pause_dr_o = 1'b0; +assign run_test_idle_o = 1'b0; + +// The & !update_bscan tern will provide a clock edge so update_dr_o can be registered +// The &debug_select term will drop TCK when the module is un-selected (does not happen in the BSCAN block). +// This allows a user to kludge clock ticks in the IDLE state, which is needed by the advanced debug module. +assign tck_o = (drck & debug_select_o & !update_bscan); + +// This will hold the update_dr output so it can be registered on the rising edge +// of the clock created above. +always @(posedge update_bscan or posedge capture_dr_o or negedge debug_select_o) +begin + if(update_bscan) update_out <= 1'b1; + else if(capture_dr_o) update_out <= 1'b0; + else if(!debug_select_o) update_out <= 1'b0; +end + +assign update_dr_o = update_out; + +`else +`ifdef VIRTEX4 +// Note that this version is missing two outputs. +// It also does not have a real TCK...DRCK is only active when USERn is selected. + +wire capture_dr_o; +wire update_bscan; +reg update_out; + +BSCAN_VIRTEX4 #( +.JTAG_CHAIN(virtex_jtag_chain) +) BSCAN_VIRTEX4_inst ( +.CAPTURE(capture_dr_o), // CAPTURE output from TAP controller +.DRCK(drck), // Data register output for USER function +.RESET(test_logic_reset_o), // Reset output from TAP controller +.SEL(debug_select_o), // USER active output +.SHIFT(shift_dr_o), // SHIFT output from TAP controller +.TDI(tdi_o), // TDI output from TAP controller +.UPDATE(update_bscan), // UPDATE output from TAP controller +.TDO( debug_tdo_i ) // Data input for USER function +); + +assign pause_dr_o = 1'b0; +assign run_test_idle_o = 1'b0; + +// The & !update_bscan tern will provide a clock edge so update_dr_o can be registered +// The &debug_select term will drop TCK when the module is un-selected (does not happen in the BSCAN block). +// This allows a user to kludge clock ticks in the IDLE state, which is needed by the advanced debug module. +assign tck_o = (drck & debug_select_o & !update_bscan); + +// This will hold the update_dr output so it can be registered on the rising edge +// of the clock created above. +always @(posedge update_bscan or posedge capture_dr_o or negedge debug_select_o) +begin + if(update_bscan) update_out <= 1'b1; + else if(capture_dr_o) update_out <= 1'b0; + else if(!debug_select_o) update_out <= 1'b0; +end + +assign update_dr_o = update_out; + +`else +`ifdef VIRTEX5 +// Note that this version is missing two outputs. +// It also does not have a real TCK...DRCK is only active when USERn is selected. + +wire capture_dr_o; +wire update_bscan; +reg update_out; + +BSCAN_VIRTEX5 #( +.JTAG_CHAIN(virtex_jtag_chain) +) BSCAN_VIRTEX5_inst ( +.CAPTURE(capture_dr_o), // CAPTURE output from TAP controller +.DRCK(drck), // Data register output for USER function +.RESET(test_logic_reset), // Reset output from TAP controller +.SEL(debug_select_o), // USER active output +.SHIFT(shift_dr_o), // SHIFT output from TAP controller +.TDI(tdi_o), // TDI output from TAP controller +.UPDATE(update_bscan), // UPDATE output from TAP controller +.TDO(debug_tdo_i) // Data input for USER function +); + +assign pause_dr_o = 1'b0; +assign run_test_idle_o = 1'b0; + +// The & !update_bscan tern will provide a clock edge so update_dr_o can be registered +// The &debug_select term will drop TCK when the module is un-selected (does not happen in the BSCAN block). +// This allows a user to kludge clock ticks in the IDLE state, which is needed by the advanced debug module. +assign tck_o = (drck & debug_select_o & !update_bscan); + +// This will hold the update_dr output so it can be registered on the rising edge +// of the clock created above. +always @(posedge update_bscan or posedge capture_dr_o or negedge debug_select_o) +begin + if(update_bscan) update_out <= 1'b1; + else if(capture_dr_o) update_out <= 1'b0; + else if(!debug_select_o) update_out <= 1'b0; +end + +assign update_dr_o = update_out; + + +`endif +`endif +`endif +`endif +`endif +`endif +`endif + +endmodule \ No newline at end of file Index: ADS_RELEASE_1_2_0/Hardware/xilinx_internal_jtag/rtl/verilog/xilinx_internal_jtag_options.v =================================================================== --- ADS_RELEASE_1_2_0/Hardware/xilinx_internal_jtag/rtl/verilog/xilinx_internal_jtag_options.v (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/xilinx_internal_jtag/rtl/verilog/xilinx_internal_jtag_options.v (revision 26) @@ -0,0 +1,12 @@ + + +// Xilinx has a different HDL entity for the internal JTAG in each of these. +// How thoughtful. + +//`define SPARTAN2 +//`define SPARTAN3 // This is also used for SPARTAN 3E devices +//`define SPARTAN3A +//`define VIRTEX +//`define VIRTEX2 // Also used for the VIRTEX 2P +`define VIRTEX4 +//`define VIRTEX5 \ No newline at end of file Index: ADS_RELEASE_1_2_0/Hardware/xilinx_internal_jtag/doc/xilinx_internal_jtag.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: ADS_RELEASE_1_2_0/Hardware/xilinx_internal_jtag/doc/xilinx_internal_jtag.pdf =================================================================== --- ADS_RELEASE_1_2_0/Hardware/xilinx_internal_jtag/doc/xilinx_internal_jtag.pdf (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/xilinx_internal_jtag/doc/xilinx_internal_jtag.pdf (revision 26)
ADS_RELEASE_1_2_0/Hardware/xilinx_internal_jtag/doc/xilinx_internal_jtag.pdf Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: ADS_RELEASE_1_2_0/Hardware/xilinx_internal_jtag/doc/src/xilinx_internal_jtag.odt =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: ADS_RELEASE_1_2_0/Hardware/xilinx_internal_jtag/doc/src/xilinx_internal_jtag.odt =================================================================== --- ADS_RELEASE_1_2_0/Hardware/xilinx_internal_jtag/doc/src/xilinx_internal_jtag.odt (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/xilinx_internal_jtag/doc/src/xilinx_internal_jtag.odt (revision 26)
ADS_RELEASE_1_2_0/Hardware/xilinx_internal_jtag/doc/src/xilinx_internal_jtag.odt Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: ADS_RELEASE_1_2_0/Hardware/xilinx_internal_jtag/doc/src/xilinx_bscan_waveform.odg =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: ADS_RELEASE_1_2_0/Hardware/xilinx_internal_jtag/doc/src/xilinx_bscan_waveform.odg =================================================================== --- ADS_RELEASE_1_2_0/Hardware/xilinx_internal_jtag/doc/src/xilinx_bscan_waveform.odg (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/xilinx_internal_jtag/doc/src/xilinx_bscan_waveform.odg (revision 26)
ADS_RELEASE_1_2_0/Hardware/xilinx_internal_jtag/doc/src/xilinx_bscan_waveform.odg Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: ADS_RELEASE_1_2_0/Hardware/xilinx_internal_jtag/doc/License_FDL-1.2.txt =================================================================== --- ADS_RELEASE_1_2_0/Hardware/xilinx_internal_jtag/doc/License_FDL-1.2.txt (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/xilinx_internal_jtag/doc/License_FDL-1.2.txt (revision 26) @@ -0,0 +1,397 @@ + GNU Free Documentation License + Version 1.2, November 2002 + + + Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + +0. PREAMBLE + +The purpose of this License is to make a manual, textbook, or other +functional and useful document "free" in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. + +This License is a kind of "copyleft", which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. + +We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. + + +1. APPLICABILITY AND DEFINITIONS + +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The "Document", below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as "you". You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. + +A "Modified Version" of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. + +A "Secondary Section" is a named appendix or a front-matter section of +the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall subject +(or to related matters) and contains nothing that could fall directly +within that overall subject. (Thus, if the Document is in part a +textbook of mathematics, a Secondary Section may not explain any +mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. + +The "Invariant Sections" are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. + +The "Cover Texts" are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. + +A "Transparent" copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not "Transparent" is called "Opaque". + +Examples of suitable formats for Transparent copies include plain +ASCII without markup, Texinfo input format, LaTeX input format, SGML +or XML using a publicly available DTD, and standard-conforming simple +HTML, PostScript or PDF designed for human modification. Examples of +transparent image formats include PNG, XCF and JPG. Opaque formats +include proprietary formats that can be read and edited only by +proprietary word processors, SGML or XML for which the DTD and/or +processing tools are not generally available, and the +machine-generated HTML, PostScript or PDF produced by some word +processors for output purposes only. + +The "Title Page" means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, "Title Page" means +the text near the most prominent appearance of the work's title, +preceding the beginning of the body of the text. + +A section "Entitled XYZ" means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as "Acknowledgements", +"Dedications", "Endorsements", or "History".) To "Preserve the Title" +of such a section when you modify the Document means that it remains a +section "Entitled XYZ" according to this definition. + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. + + +2. VERBATIM COPYING + +You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no other +conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3. + +You may also lend copies, under the same conditions stated above, and +you may publicly display copies. + + +3. COPYING IN QUANTITY + +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects. + +If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages. + +If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. + +It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to give +them a chance to provide you with an updated version of the Document. + + +4. MODIFICATIONS + +You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version: + +A. Use in the Title Page (and on the covers, if any) a title distinct + from that of the Document, and from those of previous versions + (which should, if there were any, be listed in the History section + of the Document). You may use the same title as a previous version + if the original publisher of that version gives permission. +B. List on the Title Page, as authors, one or more persons or entities + responsible for authorship of the modifications in the Modified + Version, together with at least five of the principal authors of the + Document (all of its principal authors, if it has fewer than five), + unless they release you from this requirement. +C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. +D. Preserve all the copyright notices of the Document. +E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. +F. Include, immediately after the copyright notices, a license notice + giving the public permission to use the Modified Version under the + terms of this License, in the form shown in the Addendum below. +G. Preserve in that license notice the full lists of Invariant Sections + and required Cover Texts given in the Document's license notice. +H. Include an unaltered copy of this License. +I. Preserve the section Entitled "History", Preserve its Title, and add + to it an item stating at least the title, year, new authors, and + publisher of the Modified Version as given on the Title Page. If + there is no section Entitled "History" in the Document, create one + stating the title, year, authors, and publisher of the Document as + given on its Title Page, then add an item describing the Modified + Version as stated in the previous sentence. +J. Preserve the network location, if any, given in the Document for + public access to a Transparent copy of the Document, and likewise + the network locations given in the Document for previous versions + it was based on. These may be placed in the "History" section. + You may omit a network location for a work that was published at + least four years before the Document itself, or if the original + publisher of the version it refers to gives permission. +K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the section all + the substance and tone of each of the contributor acknowledgements + and/or dedications given therein. +L. Preserve all the Invariant Sections of the Document, + unaltered in their text and in their titles. Section numbers + or the equivalent are not considered part of the section titles. +M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. +N. Do not retitle any existing section to be Entitled "Endorsements" + or to conflict in title with any Invariant Section. +O. Preserve any Warranty Disclaimers. + +If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version's license notice. +These titles must be distinct from any other section titles. + +You may add a section Entitled "Endorsements", provided it contains +nothing but endorsements of your Modified Version by various +parties--for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. + +You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. + +The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. + + +5. COMBINING DOCUMENTS + +You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice, and that you preserve all their Warranty Disclaimers. + +The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work. + +In the combination, you must combine any sections Entitled "History" +in the various original documents, forming one section Entitled +"History"; likewise combine any sections Entitled "Acknowledgements", +and any sections Entitled "Dedications". You must delete all sections +Entitled "Endorsements". + + +6. COLLECTIONS OF DOCUMENTS + +You may make a collection consisting of the Document and other documents +released under this License, and replace the individual copies of this +License in the various documents with a single copy that is included in +the collection, provided that you follow the rules of this License for +verbatim copying of each of the documents in all other respects. + +You may extract a single document from such a collection, and distribute +it individually under this License, provided you insert a copy of this +License into the extracted document, and follow this License in all +other respects regarding verbatim copying of that document. + + +7. AGGREGATION WITH INDEPENDENT WORKS + +A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, is called an "aggregate" if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. + +If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. + + +8. TRANSLATION + +Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. + +If a section in the Document is Entitled "Acknowledgements", +"Dedications", or "History", the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. + + +9. TERMINATION + +You may not copy, modify, sublicense, or distribute the Document except +as expressly provided for under this License. Any other attempt to +copy, modify, sublicense or distribute the Document is void, and will +automatically terminate your rights under this License. However, +parties who have received copies, or rights, from you under this +License will not have their licenses terminated so long as such +parties remain in full compliance. + + +10. FUTURE REVISIONS OF THIS LICENSE + +The Free Software Foundation may publish new, revised versions +of the GNU Free Documentation License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. See +http://www.gnu.org/copyleft/. + +Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License "or any later version" applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. + + +ADDENDUM: How to use this License for your documents + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: + + Copyright (c) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.2 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. + A copy of the license is included in the section entitled "GNU + Free Documentation License". + +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with the + Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. + +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + +If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. Index: ADS_RELEASE_1_2_0/Hardware/xilinx_internal_jtag/doc/gpl-2.0.txt =================================================================== --- ADS_RELEASE_1_2_0/Hardware/xilinx_internal_jtag/doc/gpl-2.0.txt (nonexistent) +++ ADS_RELEASE_1_2_0/Hardware/xilinx_internal_jtag/doc/gpl-2.0.txt (revision 26) @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License.

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.