Add README
diff --git a/LICENSE b/LICENSE
index d645695..75b5248 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,202 +1,202 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
+

+                                 Apache License

+                           Version 2.0, January 2004

+                        http://www.apache.org/licenses/

+

+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

+

+   1. Definitions.

+

+      "License" shall mean the terms and conditions for use, reproduction,

+      and distribution as defined by Sections 1 through 9 of this document.

+

+      "Licensor" shall mean the copyright owner or entity authorized by

+      the copyright owner that is granting the License.

+

+      "Legal Entity" shall mean the union of the acting entity and all

+      other entities that control, are controlled by, or are under common

+      control with that entity. For the purposes of this definition,

+      "control" means (i) the power, direct or indirect, to cause the

+      direction or management of such entity, whether by contract or

+      otherwise, or (ii) ownership of fifty percent (50%) or more of the

+      outstanding shares, or (iii) beneficial ownership of such entity.

+

+      "You" (or "Your") shall mean an individual or Legal Entity

+      exercising permissions granted by this License.

+

+      "Source" form shall mean the preferred form for making modifications,

+      including but not limited to software source code, documentation

+      source, and configuration files.

+

+      "Object" form shall mean any form resulting from mechanical

+      transformation or translation of a Source form, including but

+      not limited to compiled object code, generated documentation,

+      and conversions to other media types.

+

+      "Work" shall mean the work of authorship, whether in Source or

+      Object form, made available under the License, as indicated by a

+      copyright notice that is included in or attached to the work

+      (an example is provided in the Appendix below).

+

+      "Derivative Works" shall mean any work, whether in Source or Object

+      form, that is based on (or derived from) the Work and for which the

+      editorial revisions, annotations, elaborations, or other modifications

+      represent, as a whole, an original work of authorship. For the purposes

+      of this License, Derivative Works shall not include works that remain

+      separable from, or merely link (or bind by name) to the interfaces of,

+      the Work and Derivative Works thereof.

+

+      "Contribution" shall mean any work of authorship, including

+      the original version of the Work and any modifications or additions

+      to that Work or Derivative Works thereof, that is intentionally

+      submitted to Licensor for inclusion in the Work by the copyright owner

+      or by an individual or Legal Entity authorized to submit on behalf of

+      the copyright owner. For the purposes of this definition, "submitted"

+      means any form of electronic, verbal, or written communication sent

+      to the Licensor or its representatives, including but not limited to

+      communication on electronic mailing lists, source code control systems,

+      and issue tracking systems that are managed by, or on behalf of, the

+      Licensor for the purpose of discussing and improving the Work, but

+      excluding communication that is conspicuously marked or otherwise

+      designated in writing by the copyright owner as "Not a Contribution."

+

+      "Contributor" shall mean Licensor and any individual or Legal Entity

+      on behalf of whom a Contribution has been received by Licensor and

+      subsequently incorporated within the Work.

+

+   2. Grant of Copyright License. Subject to the terms and conditions of

+      this License, each Contributor hereby grants to You a perpetual,

+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable

+      copyright license to reproduce, prepare Derivative Works of,

+      publicly display, publicly perform, sublicense, and distribute the

+      Work and such Derivative Works in Source or Object form.

+

+   3. Grant of Patent License. Subject to the terms and conditions of

+      this License, each Contributor hereby grants to You a perpetual,

+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable

+      (except as stated in this section) patent license to make, have made,

+      use, offer to sell, sell, import, and otherwise transfer the Work,

+      where such license applies only to those patent claims licensable

+      by such Contributor that are necessarily infringed by their

+      Contribution(s) alone or by combination of their Contribution(s)

+      with the Work to which such Contribution(s) was submitted. If You

+      institute patent litigation against any entity (including a

+      cross-claim or counterclaim in a lawsuit) alleging that the Work

+      or a Contribution incorporated within the Work constitutes direct

+      or contributory patent infringement, then any patent licenses

+      granted to You under this License for that Work shall terminate

+      as of the date such litigation is filed.

+

+   4. Redistribution. You may reproduce and distribute copies of the

+      Work or Derivative Works thereof in any medium, with or without

+      modifications, and in Source or Object form, provided that You

+      meet the following conditions:

+

+      (a) You must give any other recipients of the Work or

+          Derivative Works a copy of this License; and

+

+      (b) You must cause any modified files to carry prominent notices

+          stating that You changed the files; and

+

+      (c) You must retain, in the Source form of any Derivative Works

+          that You distribute, all copyright, patent, trademark, and

+          attribution notices from the Source form of the Work,

+          excluding those notices that do not pertain to any part of

+          the Derivative Works; and

+

+      (d) If the Work includes a "NOTICE" text file as part of its

+          distribution, then any Derivative Works that You distribute must

+          include a readable copy of the attribution notices contained

+          within such NOTICE file, excluding those notices that do not

+          pertain to any part of the Derivative Works, in at least one

+          of the following places: within a NOTICE text file distributed

+          as part of the Derivative Works; within the Source form or

+          documentation, if provided along with the Derivative Works; or,

+          within a display generated by the Derivative Works, if and

+          wherever such third-party notices normally appear. The contents

+          of the NOTICE file are for informational purposes only and

+          do not modify the License. You may add Your own attribution

+          notices within Derivative Works that You distribute, alongside

+          or as an addendum to the NOTICE text from the Work, provided

+          that such additional attribution notices cannot be construed

+          as modifying the License.

+

+      You may add Your own copyright statement to Your modifications and

+      may provide additional or different license terms and conditions

+      for use, reproduction, or distribution of Your modifications, or

+      for any such Derivative Works as a whole, provided Your use,

+      reproduction, and distribution of the Work otherwise complies with

+      the conditions stated in this License.

+

+   5. Submission of Contributions. Unless You explicitly state otherwise,

+      any Contribution intentionally submitted for inclusion in the Work

+      by You to the Licensor shall be under the terms and conditions of

+      this License, without any additional terms or conditions.

+      Notwithstanding the above, nothing herein shall supersede or modify

+      the terms of any separate license agreement you may have executed

+      with Licensor regarding such Contributions.

+

+   6. Trademarks. This License does not grant permission to use the trade

+      names, trademarks, service marks, or product names of the Licensor,

+      except as required for reasonable and customary use in describing the

+      origin of the Work and reproducing the content of the NOTICE file.

+

+   7. Disclaimer of Warranty. Unless required by applicable law or

+      agreed to in writing, Licensor provides the Work (and each

+      Contributor provides its Contributions) on an "AS IS" BASIS,

+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or

+      implied, including, without limitation, any warranties or conditions

+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A

+      PARTICULAR PURPOSE. You are solely responsible for determining the

+      appropriateness of using or redistributing the Work and assume any

+      risks associated with Your exercise of permissions under this License.

+

+   8. Limitation of Liability. In no event and under no legal theory,

+      whether in tort (including negligence), contract, or otherwise,

+      unless required by applicable law (such as deliberate and grossly

+      negligent acts) or agreed to in writing, shall any Contributor be

+      liable to You for damages, including any direct, indirect, special,

+      incidental, or consequential damages of any character arising as a

+      result of this License or out of the use or inability to use the

+      Work (including but not limited to damages for loss of goodwill,

+      work stoppage, computer failure or malfunction, or any and all

+      other commercial damages or losses), even if such Contributor

+      has been advised of the possibility of such damages.

+

+   9. Accepting Warranty or Additional Liability. While redistributing

+      the Work or Derivative Works thereof, You may choose to offer,

+      and charge a fee for, acceptance of support, warranty, indemnity,

+      or other liability obligations and/or rights consistent with this

+      License. However, in accepting such obligations, You may act only

+      on Your own behalf and on Your sole responsibility, not on behalf

+      of any other Contributor, and only if You agree to indemnify,

+      defend, and hold each Contributor harmless for any liability

+      incurred by, or claims asserted against, such Contributor by reason

+      of your accepting any such warranty or additional liability.

+

+   END OF TERMS AND CONDITIONS

+

+   APPENDIX: How to apply the Apache License to your work.

+

+      To apply the Apache License to your work, attach the following

+      boilerplate notice, with the fields enclosed by brackets "[]"

+      replaced with your own identifying information. (Don't include

+      the brackets!)  The text should be enclosed in the appropriate

+      comment syntax for the file format. We also recommend that a

+      file or class name and description of purpose be included on the

+      same "printed page" as the copyright notice for easier

+      identification within third-party archives.

+

+   Copyright [yyyy] [name of copyright owner]

+

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

diff --git a/README.md b/README.md
index 8b13789..d468cc2 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,312 @@
+# HSC Latte HS32 Core
 
+The HSC Latte HS32 Core is a 32-bits RISC CPU. The HS32 Core has 32-bits instructions and 16 32-bits registers.
+
+Below is a list of HS32 Core Project Directories:
+
+| Repository                                                        | Description             | License                                                                      | Issues                                                                     | Stars                                                                    | Contributors                                                                           |
+| ----------------------------------------------------------------- | ----------------------- | ---------------------------------------------------------------------------- | -------------------------------------------------------------------------- | ------------------------------------------------------------------------ | -------------------------------------------------------------------------------------- |
+| [caravel-hs32core](https://github.com/hsc-latte/caravel-hs32core) | Core Harness            | ![License](https://img.shields.io/github/license/hsc-latte/caravel-hs32core) | ![Issues](https://img.shields.io/github/issues/hsc-latte/caravel-hs32core) | ![Stars](https://img.shields.io/github/stars/hsc-latte/caravel-hs32core) | ![Contributors](https://img.shields.io/github/contributors/hsc-latte/caravel-hs32core) |
+| [hs32core-rtl](https://github.com/hsc-latte/hs32core-rtl)         | RTL Circuit Design      | ![License](https://img.shields.io/github/license/hsc-latte/hs32core-rtl)     | ![Issues](https://img.shields.io/github/issues/hsc-latte/hs32core-rtl)     | ![Stars](https://img.shields.io/github/stars/hsc-latte/hs32core-rtl)     | ![Contributors](https://img.shields.io/github/contributors/hsc-latte/hs32core-rtl)     |
+| [hs32core](https://github.com/hsc-latte/hs32core)                 | Main Project Repository | ![License](https://img.shields.io/github/license/hsc-latte/hs32core)         | ![Issues](https://img.shields.io/github/issues/hsc-latte/hs32core)         | ![Stars](https://img.shields.io/github/stars/hsc-latte/hs32core)         | ![Contributors](https://img.shields.io/github/contributors/hsc-latte/hs32core)         |
+
+## Content
+1. [Intro](#intro)
+2. [Docs](#docs)
+3. [Install](#install)
+4. [Usage](#usage)
+5. [Contributing](#contributing)
+6. [Security](#security)
+7. [License](#license)
+
+## Intro
+
+### Instructions
+
+- Immediate value is 16-bits
+- Rd, Rn and Rm specify the way each register is wired to the ALU. In this case,
+  Rd represents the read/write source/destination, Rm and Rn represents the 2 operands fed into the ALU; note that Rn will always have a barrel
+  shifter in front of it.
+- Naming a register with Rd Rn Rm is always 4 bits
+- [xxx] = Dereference pointer, address is stored in xxx
+- sh(Rn) shifts contents of Rn left or right by an 5-bits amount
+
+#### Encoding
+
+These are the different encodings that instructions come in.
+All instructions are 32 bit.
+The first 8 bits is opcode.
+Rd, Rm, Rn are always in the same position in the instruciton if present
+<X> indicates unused spacer value of X bits
+
+- Field Sizes:
+  - Rd : 4 bit register name
+  - Rm : 4 bit register name
+  - Rn : 4 bit register name
+  - Shift: 5 bit shift amount applied to Rn
+  - Imm16: 16 bit literal field
+
+<div class="ritz grid-container" dir="ltr"><table class="waffle" cellspacing="0" cellpadding="0"><thead><tr><th class="row-header freezebar-origin-ltr"></th>
+  <th id="1092009867C0" style="width:121px" class="column-headers-background">A</th>
+  <th id="1092009867C1" style="width:100px" class="column-headers-background">B</th>
+  <th id="1092009867C2" style="width:100px" class="column-headers-background">C</th>
+  <th id="1092009867C3" style="width:100px" class="column-headers-background">D</th>
+  <th id="1092009867C4" style="width:100px" class="column-headers-background">E</th>
+  <th id="1092009867C5" style="width:100px" class="column-headers-background">F</th>
+  <th id="1092009867C6" style="width:100px" class="column-headers-background">G</th>
+  <th id="1092009867C7" style="width:100px" class="column-headers-background">H</th>
+  <th id="1092009867C8" style="width:100px" class="column-headers-background">I</th></tr></thead><tbody>
+
+<tr style='height:20px;'>
+  <th id="1092009867R0" style="height: 20px;" class="row-headers-background">
+    <div class="row-header-wrapper" style="line-height: 20px;">1</div>
+  </th>
+  <td class="s0" dir="ltr">Name</td>
+  <td class="s0" dir="ltr">[0:3]  </td>
+  <td class="s0" dir="ltr">[4:7]  </td>
+  <td class="s0" dir="ltr">[8:11] </td>
+  <td class="s0" dir="ltr">[12:15]</td>
+  <td class="s0" dir="ltr">[16:19]</td>
+  <td class="s0" dir="ltr">[20:23]</td>
+  <td class="s0" dir="ltr">[24:27]</td>
+  <td class="s0" dir="ltr">[28:31]</td>
+</tr>
+
+<tr style='height:20px;'>
+  <th id="1092009867R1" style="height: 20px;" class="row-headers-background">
+    <div class="row-header-wrapper" style="line-height: 20px;">2</div>
+  </th>
+  <td class="s1" dir="ltr">I-Type<br/>(Immediate)</td>
+  <td class="s0" dir="ltr" colspan="2">Opcode</td>
+  <td class="s0" dir="ltr">Rd</td>
+  <td class="s0" dir="ltr">Rm</td>
+  <td class="s0" dir="ltr" colspan="4">Imm16</td>
+</tr>
+
+<tr style='height:20px;'>
+  <th id="1092009867R3" style="height: 20px;" class="row-headers-background">
+    <div class="row-header-wrapper" style="line-height: 20px;">5</div>
+  </th>
+  <td class="s0" dir="ltr">R-Type<br/>(Register)</td>
+  <td class="s0" dir="ltr" colspan="2">Opcode</td>
+  <td class="s0" dir="ltr" colspan="1">Rd</td>
+  <td class="s0" dir="ltr" colspan="1">Rm</td>
+  <td class="s0" dir="ltr" colspan="1">Rn</td>
+  <td class="s0" dir="ltr" colspan="1">Shift</td>
+  <td class="s0" dir="ltr" colspan="1">Shift | Shift Direction | Register Bank</td>
+  <td class="s0" dir="ltr" colspan="1">Register Bank | XXX</td>
+</tr>
+
+<!--<tr style='height:20px;'>
+  <th id="1092009867R3" style="height: 20px;" class="row-headers-background">
+    <div class="row-header-wrapper" style="line-height: 20px;">6</div>
+  </th>
+  <td class="s0" dir="ltr">Jump Type (J-Type)</td>
+  <td class="s0" dir="ltr" colspan="2">Opcode</td>
+  <td class="s0" dir="ltr" colspan="1">Rd</td>
+  <td class="s0" dir="ltr" colspan="1">Unused</td>
+  <td class="s0" dir="ltr" colspan="4">16-bit Address or first half of 32-bit Address</td>
+</tr>-->
+</tbody></table></div>
+
+#### System Details
+
+There are 16 (r0-r15) general-purpose registers plus 4 privileged registers.
+In supervisor mode, r12-15 is separate from user-mode r12-15. In all modes, r14 and r15 will be used as the link register and stack pointer respectively.
+
+Legend:
+
+- **IRQs** -- Interrupt Requests
+- **SP** -- Stack Pointer
+- **LR** -- Link Register
+- **MCR** -- Machine Configuration Register
+- **IVT** -- Interrupt Vector Table
+
+<table border=0 cellpadding=0 cellspacing=0 width=543>
+ <tr height=19>
+  <td rowspan=2 height=38 width=64>Register</td>
+  <td colspan=3 width=287>Alias/Description</td>
+ </tr>
+ <tr height=19>
+  <td height=19>User</td>
+  <td>IRQ</td>
+  <td>Supervisor</td>
+ </tr>
+ <tr height=19>
+  <td height=19>r0-r11</td>
+  <td colspan=3><center>Shared general purpose registers</center></td>
+ </tr>
+ <tr height=19>
+  <td height=19>r12</td>
+  <td>General</td>
+  <td colspan=2><center>Interrupt Vector Table</center></td>
+ </tr>
+ <tr height=19>
+  <td height=19>r13</td>
+  <td>General</td>
+  <td colspan=2><center>Machine Configuration Register</center></td>
+ </tr>
+ <tr height=19>
+  <td height=19>r14</td>
+  <td>User LR</td>
+  <td>IRQ LR</td>
+  <td>Super LR</td>
+ </tr>
+ <tr height=19>
+  <td height=19>r15</td>
+  <td>User SP</td>
+  <td>IRQ SP</td>
+  <td>Super SP</td>
+ </tr>
+</table>
+
+##### Operation
+
+During a mode switch, the return address will be stored in the appropriate LR and the return stack pointer will be stored in the appropriate SP.
+
+For instance, an interrupt call from User mode will prompt a switch to IRQ mode. The return address and stack pointer of the caller will be stored in IRQ LR (r14) and IRQ SP (r15) respectively.
+
+### CPU
+
+#### Planned Pinout
+
+| Pin # | Name | Description |
+|-|-|-|
+| 0-15 | IO0-15 | **Address/Data Parallel Bus:** These lines contain the time-multiplexed address (T<sub>1</sub>, T<sub>2</sub>)<br>and data (T<sub>W</sub>, T<sub>4</sub>) buses. During the T<sub>1</sub> cycle, bits A<sub>0</sub>-A<sub>7</sub> of the address bus is outputted.<br>Bit A<sub>0</sub> is the BLE# signal. It is LOW during T<sub>1</sub> if only the low 8-bits is to be transferred<br>during memory or I/O operations. |
+| 16 | ALE0 | **Address Latch Enable (LOW):** HIGH during T<sub>1</sub> to signal for the latching of the low 8-bits<br>of the address signal. It is LOW otherwise. |
+| 17 | ALE1 | **Address Latch Enable (HIGH):** HIGH during T<sub>2</sub> to signal for the latching of the high 8-bits<br>of the address signal. It is LOW otherwise. |
+| 18 | WE# | **Write Enable:** Write strobe is LOW during T<sub>W</sub> to indicate that the processor is performing<br>an I/O or memory write operation. |
+| 19 | OE# | **Output Enable:** When LOW, indicates that the processor IO lines are ready<br>to accept/output data. It is held HIGH during T<sub>1</sub> and T<sub>2</sub>. |
+| 20 | BHE# | **Bus High Enable:** When LOW, signals for the high 8-bits to be transferred<br>during memory or I/O operations. |
+| 22 | PIO | **IO Mode:** When HIGH, indicates that the current operation is an I/O, not memory, operation.<br>This results in the omittance of cycle T<sub>2</sub>. |
+| 23, 24 | RX, TX | 9600 Baud UART Interface |
+| 25-... | GPIO0-... | General Purpose Input/Output |
+
+#### Overview
+
+![CPU Overview](/images/CPU-Overview.png)
+
+#### Devboard Block Diagram
+![](images/cpu-block.svg)
+
+#### Timing Waveforms
+
+Various timing diagrams of the address and data buses
+
+##### Read Cycle
+
+Clock Cycles: 4 minimum
+
+Timing Requirements:
+- The duration of the T<sub>W</sub> read clock (no data input) is determined by the `tpd` of whichever memory chip used.
+- T<sub>W</sub> can span multiple clock periods to allow for different memory timings. This will allow the CPU to be clocked at a higher speed than the memory chips.
+
+In the implementation, OE# is the AND of 2 signals, one leading edge and one falling edge-driven signals.
+
+<!-- WAVEDROM JSON FILE
+{ signal: [
+  { name: "CLK",		wave: "hlhlhlhlhlh", node: "..1.2.3.4.5" },
+  { name: "ALE0",		wave: "xh.l......x" },
+  { name: "ALE1",		wave: "xl.h.l....." },
+  { name: "WE#",		wave: "h.........." },
+  { name: "OE#",		wave: "h.....l..h." },
+  { name: "BHE#",		wave: "x.h.......x" },
+  { name: "IO[15:0]",	wave: "x.9.9.x.5.x", data:[ "A[15:0]", "A[31:16]", "D[15:0]" ] },],
+  head: { text: "Figure 1. Read Cycle Timing Waveform" },
+  edge: [ '1<->2 T1', '2<->3 T2', '3<->4 TW', '4<->5 T3' ]
+} -->
+
+![](images/cpu-wave1.svg)
+
+##### Write Cycle
+
+Clock Cycles: 4 minimum
+
+Timing Requirements:
+- See the read cycle specifications
+
+<!-- WAVEDROM JSON FILE
+{ signal: [
+  { name: "CLK",		wave: "hlhlhlhlhlh", node: "..1.2.3.4.5" },
+  { name: "ALE0",		wave: "xh.l......x" },
+  { name: "ALE1",		wave: "xl.h.l....." },
+  { name: "WE#",		wave: "h.....l.h.." },
+  { name: "OE#",		wave: "h.....l..h." },
+  { name: "BHE#",		wave: "x.h.......x" },
+  { name: "IO[15:0]",	wave: "x.9.9.7.x..", data:[ "A[15:0]", "A[31:16]", "D[15:0]" ] },],
+  head: { text: "Figure 2. Write Cycle Timing Waveform" },
+  edge: [ '1<->2 T1', '2<->3 T2', '3<->4 TW', '4<->5 T3' ]
+} -->
+![](images/cpu-wave2.svg)
+
+#### Execution Unit
+
+![Execution Unit](/images/Execution-Overview.png)
+
+## Docs
+
+### Directories
+
+**HS32 RTL** -- [`verilog/rtl/hs32cpu`](https://github.com/hsc-latte/hs32core-rtl)
+
+**Documentation** -- [`verilog/rtl/hs32cpu/docs`](https://github.com/hsc-latte/hs32core-rtl/tree/master/docs)
+
+**Testbenches** -- [`verilog/rtl/hs32cpu/bench`](https://github.com/hsc-latte/hs32core-rtl/tree/master/bench)
+
+**CPU Modules** -- [`verilog/rtl/hs32cpu/cpu`](https://github.com/hsc-latte/hs32core-rtl/tree/master/cpu)
+
+**Frontend Modules** -- [`verilog/rtl/hs32cpu/frontend`](https://github.com/hsc-latte/hs32core-rtl/tree/master/frontend)
+
+**SOC Modules** -- [`verilog/rtl/hs32cpu/soc`](https://github.com/hsc-latte/hs32core-rtl/tree/master/soc)
+
+**Third Party Modules** -- [`verilog/rtl/hs32cpu/third_party`](https://github.com/hsc-latte/hs32core-rtl/tree/master/third_party)
+
+**Programmer** -- [`verilog/rtl/hs32cpu/programmer`](https://github.com/hsc-latte/hs32core-rtl/tree/master/programmer)
+
+**Openlane** -- [`verilog/rtl/hs32cpu/openlane`](https://github.com/hsc-latte/hs32core-rtl/tree/master/openlane)
+
+**Skywater** -- [`verilog/rtl/hs32cpu/skywater`](https://github.com/hsc-latte/hs32core-rtl/tree/master/skywater)
+
+### Files
+
+**HS32 ISA** -- [`verilog/rtl/hs32cpu/docs/isa_formal.txt`](https://github.com/hsc-latte/hs32core-rtl/tree/master/docs/isa_formal.txt)
+
+**Top Level Module** -- [`verilog/rtl/hs32cpu/top.v`](https://github.com/hsc-latte/hs32core-rtl/tree/master/top.v)
+
+**HS32 Interrupts** -- [`verilog/rtl/hs32cpu/docs/interrupts.md`](https://github.com/hsc-latte/hs32core-rtl/tree/master/docs/interrupts.md)
+
+**HS32 MMIO** -- [`verilog/rtl/hs32cpu/docs/mmio.md`](https://github.com/hsc-latte/hs32core-rtl/tree/master/docs/mmio.md)
+
+## Install
+
+## Usage
+
+## Contributing
+
+Issues and pull requests are welcome! Please make sure to create them at the right repository :D
+
+## Security
+
+We take any security risks seriously, if you have found or suspected a vulnerability or anything that might compromise our security, we would very much appreciate it if you can report it to us.
+
+## License
+
+Apache 2.0 [LICENSE](https://github.com/hsc-latte/hs32core-rtl/tree/master/LICENSE)
+
+HS32 Core - A 32-bits RISC Processor
+
+```
+  Copyright (c) 2020 The HSC Core Authors
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      https://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+```
diff --git a/info.yaml b/info.yaml
index 2a0898d..bc38ba5 100644
--- a/info.yaml
+++ b/info.yaml
@@ -1,17 +1,17 @@
---- 
-project: 
-  description: "Open Source Hardware Processor"
-  foundry: "SkyWater"
-  git_url: "https://github.com/hsc-latte/caravel-hs32core.git"
-  organization: "HomebrewSiliconClub"
-  organization_url: "https://github.com/hsc-latte"
-  owner: "HomebrewSiliconClub"
-  process: "SKY130"
-  project_name: "HS32Core"
-  tags: 
-    - "Open MPW"
-  category: "CPU"
-  top_level_netlist: "verilog/rtl/caravel.v"
-  user_level_netlist: "verilog/rtl/hs32cpu/top.v"
-  version: "1.00"
-  cover_image: "doc/ciic_harness.png"
+--- 

+project: 

+  description: "Open Source Hardware Processor"

+  foundry: "SkyWater"

+  git_url: "https://github.com/hsc-latte/caravel-hs32core.git"

+  organization: "HomebrewSiliconClub"

+  organization_url: "https://github.com/hsc-latte"

+  owner: "HomebrewSiliconClub"

+  process: "SKY130"

+  project_name: "HS32Core"

+  tags: 

+    - "Open MPW"

+  category: "CPU"

+  top_level_netlist: "verilog/rtl/caravel.v"

+  user_level_netlist: "verilog/rtl/hs32cpu/top.v"

+  version: "1.00"

+  cover_image: "doc/ciic_harness.png"

diff --git a/verilog/rtl/hs32_user_proj/hs32_ram.v b/verilog/rtl/hs32_user_proj/hs32_ram.v
index c35d0b2..40d444c 100644
--- a/verilog/rtl/hs32_user_proj/hs32_ram.v
+++ b/verilog/rtl/hs32_user_proj/hs32_ram.v
@@ -1,95 +1,95 @@
-`ifdef verilator
-    `include "defines.v"
-`endif
-
-`default_nettype none
- 
-module storage (
-    input   wire clk,
-    input   wire[addr_width-1:0] addr,
-    output  reg [31:0] dread,
-    input   wire[31:0] dwrite,
-    input   wire rw,
-    input   wire valid,
-    output  reg  ready
-);
-    parameter addr_width = 8;
-    
-    // 4 addresses for each bram
-    // Selects between current dword and next dword
-    wire [addr_width-3:0] a0, a1, a2, a3;
-    assign a0 = (addr[1:0] == 2'b00) ?
-        addr[addr_width-1:2] : addr[addr_width-1:2] + 1;
-    assign a1 = (addr[1:0] == 2'b00) || (addr[1:0] == 2'b01) ?
-        addr[addr_width-1:2] : addr[addr_width-1:2] + 1;
-    assign a2 = (addr[1:0] == 2'b11) ?
-        addr[addr_width-1:2] + 1 : addr[addr_width-1:2];
-    assign a3 = addr[addr_width-1:2];
-    //
-    // The read buffer shifted over.
-    // Regarding the ending 2 bits of the address:
-    // x = read, . = ignore
-    //       a'  a'+1   -> where a' = addr[addr_width-1:2]
-    // 00 [xxxx][....]
-    // 01 [.xxx][x...]
-    // 10 [..xx][xx..]
-    // 11 [...x][xxx.]
-    //     0123  0123   -> bram# the byte came from
-    // dbuf will always be in the form of [0123]
-    // So, an address ending in 11 should be [3012]
-    //
-    wire[31:0] dout;
-    wire[31:0] dbuf, wbuf;
-    assign dout =
-        (addr[1:0] == 2'b00) ? { dbuf[31:0] } :
-        (addr[1:0] == 2'b01) ? { dbuf[23:0], dbuf[31:24] } :
-        (addr[1:0] == 2'b10) ? { dbuf[15:0], dbuf[31:16] } :
-                               { dbuf[ 7:0], dbuf[31:8] } ;
-    assign wbuf =
-        (addr[1:0] == 2'b00) ? { dwrite[31:0] } :
-        (addr[1:0] == 2'b01) ? { dwrite[ 7:0], dwrite[31:8 ] } :
-        (addr[1:0] == 2'b10) ? { dwrite[15:0], dwrite[31:16] } :
-                               { dwrite[23:0], dwrite[31:24] } ;
-
-    // Write enable signal
-    wire we; assign we = valid & rw;
-
-    // FSM (needed?)
-    reg[1:0] state = 0;
-    always @(posedge clk) case(state)
-        0: begin 
-            if(valid) begin
-                state <= 1;
-            end
-            ready <= 1;
-            dread <= dout;
-        end
-        1: begin
-            state <= 0;
-            ready <= 0;
-        end
-    endcase
-
-    sram_1rw1r_32_256_8_sky130 SRAM_0 (
-        // MGMT R/W port
-        .clk0(clk),
-        .csb0(mgmt_ena[0]),
-        .web0(mgmt_wen[0]),
-        .wmask0(mgmt_wen_mask[3:0]),
-        .addr0(addr),
-        .din0(dwrite),
-        .dout0(dread)
-    ); 
-
-    sram_1rw1r_32_256_8_sky130 SRAM_1 (
-        // MGMT R/W port
-        .clk0(mgmt_clk),
-        .csb0(mgmt_ena[1]),   
-        .web0(mgmt_wen[1]),
-        .wmask0(mgmt_wen_mask[7:4]),
-        .addr0(mgmt_addr),
-        .din0(mgmt_wdata),
-        .dout0(mgmt_rdata[63:32])
-    );
-endmodule
-`default_nettype wire
+`ifdef verilator

+    `include "defines.v"

+`endif

+

+`default_nettype none

+ 

+module storage (

+    input   wire clk,

+    input   wire[addr_width-1:0] addr,

+    output  reg [31:0] dread,

+    input   wire[31:0] dwrite,

+    input   wire rw,

+    input   wire valid,

+    output  reg  ready

+);

+    parameter addr_width = 8;

+    

+    // 4 addresses for each bram

+    // Selects between current dword and next dword

+    wire [addr_width-3:0] a0, a1, a2, a3;

+    assign a0 = (addr[1:0] == 2'b00) ?

+        addr[addr_width-1:2] : addr[addr_width-1:2] + 1;

+    assign a1 = (addr[1:0] == 2'b00) || (addr[1:0] == 2'b01) ?

+        addr[addr_width-1:2] : addr[addr_width-1:2] + 1;

+    assign a2 = (addr[1:0] == 2'b11) ?

+        addr[addr_width-1:2] + 1 : addr[addr_width-1:2];

+    assign a3 = addr[addr_width-1:2];

+    //

+    // The read buffer shifted over.

+    // Regarding the ending 2 bits of the address:

+    // x = read, . = ignore

+    //       a'  a'+1   -> where a' = addr[addr_width-1:2]

+    // 00 [xxxx][....]

+    // 01 [.xxx][x...]

+    // 10 [..xx][xx..]

+    // 11 [...x][xxx.]

+    //     0123  0123   -> bram# the byte came from

+    // dbuf will always be in the form of [0123]

+    // So, an address ending in 11 should be [3012]

+    //

+    wire[31:0] dout;

+    wire[31:0] dbuf, wbuf;

+    assign dout =

+        (addr[1:0] == 2'b00) ? { dbuf[31:0] } :

+        (addr[1:0] == 2'b01) ? { dbuf[23:0], dbuf[31:24] } :

+        (addr[1:0] == 2'b10) ? { dbuf[15:0], dbuf[31:16] } :

+                               { dbuf[ 7:0], dbuf[31:8] } ;

+    assign wbuf =

+        (addr[1:0] == 2'b00) ? { dwrite[31:0] } :

+        (addr[1:0] == 2'b01) ? { dwrite[ 7:0], dwrite[31:8 ] } :

+        (addr[1:0] == 2'b10) ? { dwrite[15:0], dwrite[31:16] } :

+                               { dwrite[23:0], dwrite[31:24] } ;

+

+    // Write enable signal

+    wire we; assign we = valid & rw;

+

+    // FSM (needed?)

+    reg[1:0] state = 0;

+    always @(posedge clk) case(state)

+        0: begin 

+            if(valid) begin

+                state <= 1;

+            end

+            ready <= 1;

+            dread <= dout;

+        end

+        1: begin

+            state <= 0;

+            ready <= 0;

+        end

+    endcase

+

+    sram_1rw1r_32_256_8_sky130 SRAM_0 (

+        // MGMT R/W port

+        .clk0(clk),

+        .csb0(mgmt_ena[0]),

+        .web0(mgmt_wen[0]),

+        .wmask0(mgmt_wen_mask[3:0]),

+        .addr0(addr),

+        .din0(dwrite),

+        .dout0(dread)

+    ); 

+

+    sram_1rw1r_32_256_8_sky130 SRAM_1 (

+        // MGMT R/W port

+        .clk0(mgmt_clk),

+        .csb0(mgmt_ena[1]),   

+        .web0(mgmt_wen[1]),

+        .wmask0(mgmt_wen_mask[7:4]),

+        .addr0(mgmt_addr),

+        .din0(mgmt_wdata),

+        .dout0(mgmt_rdata[63:32])

+    );

+endmodule

+`default_nettype wire

diff --git a/verilog/rtl/hs32_user_proj/hs32_user_core2.v b/verilog/rtl/hs32_user_proj/hs32_user_core2.v
index b8b73fd..07a2061 100644
--- a/verilog/rtl/hs32_user_proj/hs32_user_core2.v
+++ b/verilog/rtl/hs32_user_proj/hs32_user_core2.v
@@ -1,126 +1,126 @@
-`ifdef verilator
-    `include "defines.v"
-    `include "cpu/hs32_cpu.v"
-    `include "frontend/sram.v"
-    `include "frontend/mmio.v"
-`endif
-
-`default_nettype none
-
-module hs32_user_proj (
-`ifdef USE_POWER_PINS
-    inout vdda1,	// User area 1 3.3V supply
-    inout vdda2,	// User area 2 3.3V supply
-    inout vssa1,	// User area 1 analog ground
-    inout vssa2,	// User area 2 analog ground
-    inout vccd1,	// User area 1 1.8V supply
-    inout vccd2,	// User area 2 1.8v supply
-    inout vssd1,	// User area 1 digital ground
-    inout vssd2,	// User area 2 digital ground
-`endif
-
-    // Wishbone Slave ports (WB MI A)
-    input  wire wb_clk_i,
-    input  wire wb_rst_i,
-    input  wire wbs_stb_i,
-    input  wire wbs_cyc_i,
-    input  wire wbs_we_i,
-    input  wire [3:0] wbs_sel_i,
-    input  wire [31:0] wbs_dat_i,
-    input  wire [31:0] wbs_adr_i,
-    output wire wbs_ack_o,
-    output wire [31:0] wbs_dat_o,
-
-    // Logic Analyzer Signals
-    input  wire [127:0] la_data_in,
-    output wire [127:0] la_data_out,
-    input  wire [127:0] la_oen,
-
-    // IOs
-    input  wire [`MPRJ_IO_PADS-1:0] io_in,
-    output wire [`MPRJ_IO_PADS-1:0] io_out,
-    output wire [`MPRJ_IO_PADS-1:0] io_oeb
-);
-    // Clock and reset
-    // wire clk = (~la_oen[64])? la_data_in[64] : wb_clk_i;
-    // wire rst = (~la_oen[65])? la_data_in[65] : wb_rst_i;
-    wire clk = wb_clk_i;
-    wire rst = wb_rst_i;
-
-    // Wishbone logic
-    wire valid;
-    wire [3:0] wstrb;
-    assign valid = wbs_cyc_i && wbs_stb_i; 
-    assign wstrb = wbs_sel_i & { 4 { wbs_we_i } };
-    // TODO
-    
-    // CPU Core 0 Connection
-    wire[31:0] adr0, dtr0, dtw0, isr0;
-    wire rw0, val0, rdy0, iack0, irq0, nmi0, usr0, fault0;
-    wire[23:0] int0;
-    wire[4:0] vec0;
-    hs32_cpu #(
-        .IMUL(1), .BARREL_SHIFTER(1), .PREFETCH_SIZE(3)
-    ) core0 (
-        .i_clk(clk), .reset(rst),
-        // Mem
-        .addr(adr0), .rw(rw0), .din(dtr0), .dout(dtw0),
-        .valid(val0), .ready(rdy0),
-        // Int
-        .interrupts(int0), .iack(iack0), .handler(isr0),
-        .intrq(irq0), .vec(vec0), .nmi(nmi0),
-        // Misc
-        .userbit(usr0), .fault(fault0)
-    );
-
-    // MMIO
-    mmio mmio_unit(
-        .clk(clk), .reset(rst),
-        // CPU
-        .valid(val0), .ready(rdy0),
-        .addr(adr0), .dtw(dtw0), .dtr(dtr0), .rw(rw0),
-        // SRAM
-        .sval(svalid), .srdy(sready),
-        .saddr(saddr), .sdtw(sdtw), .sdtr(sdtr), .srw(srw),
-        // Interrupt controller
-        .interrupts(int0), .handler(isr0), .intrq(irq0),
-        .vec(vec0), .nmi(nmi0)
-    );
-
-    // SRAM Controller
-    wire sready, svalid, srw;
-    wire [31:0] saddr, sdtw, sdtr;
-    // Output
-    wire[15:0] data_in;
-    wire[15:0] data_out;
-    wire we, oe, oe_neg, ale0_neg, ale1_neg, bhe, isout;
-    ext_sram #(
-        .SRAM_LATCH_LAZY(1)
-    ) sram (
-        .clk(clk), .reset(rst),
-        // Memory requests
-        .ready(sready), .valid(svalid), .rw(srw),
-        .addri(saddr), .dtw(sdtw), .dtr(sdtr),
-        // External IO interface, active >> HIGH <<
-        .din(data_in), .dout(data_out),
-        .we(we), .oe(oe), .oe_negedge(oe_neg),
-        .ale0_negedge(ale0_neg),
-        .ale1_negedge(ale1_neg),
-        .bhe(bhe), .isout(isout)
-    );
-
-    // SRAM GPIO Logic
-    assign io_out[36] = usr0;
-    assign data_in = io_in[35:20];
-    assign io_out[35:20] = data_out;
-    assign io_out[19] = !(oe & oe_neg);
-    assign io_out[18] = !we;
-    assign io_out[17] = ale0_neg;
-    assign io_out[16] = ale1_neg;
-    assign io_out[15] = !bhe;
-
-    // Output enables
-    assign io_oeb[36] = 0;
-    assign io_oeb[35:20] = { (16){ ~isout } };
-    assign io_oeb[19:15] = 0;
+`ifdef verilator

+    `include "defines.v"

+    `include "cpu/hs32_cpu.v"

+    `include "frontend/sram.v"

+    `include "frontend/mmio.v"

+`endif

+

+`default_nettype none

+

+module hs32_user_proj (

+`ifdef USE_POWER_PINS

+    inout vdda1,	// User area 1 3.3V supply

+    inout vdda2,	// User area 2 3.3V supply

+    inout vssa1,	// User area 1 analog ground

+    inout vssa2,	// User area 2 analog ground

+    inout vccd1,	// User area 1 1.8V supply

+    inout vccd2,	// User area 2 1.8v supply

+    inout vssd1,	// User area 1 digital ground

+    inout vssd2,	// User area 2 digital ground

+`endif

+

+    // Wishbone Slave ports (WB MI A)

+    input  wire wb_clk_i,

+    input  wire wb_rst_i,

+    input  wire wbs_stb_i,

+    input  wire wbs_cyc_i,

+    input  wire wbs_we_i,

+    input  wire [3:0] wbs_sel_i,

+    input  wire [31:0] wbs_dat_i,

+    input  wire [31:0] wbs_adr_i,

+    output wire wbs_ack_o,

+    output wire [31:0] wbs_dat_o,

+

+    // Logic Analyzer Signals

+    input  wire [127:0] la_data_in,

+    output wire [127:0] la_data_out,

+    input  wire [127:0] la_oen,

+

+    // IOs

+    input  wire [`MPRJ_IO_PADS-1:0] io_in,

+    output wire [`MPRJ_IO_PADS-1:0] io_out,

+    output wire [`MPRJ_IO_PADS-1:0] io_oeb

+);

+    // Clock and reset

+    // wire clk = (~la_oen[64])? la_data_in[64] : wb_clk_i;

+    // wire rst = (~la_oen[65])? la_data_in[65] : wb_rst_i;

+    wire clk = wb_clk_i;

+    wire rst = wb_rst_i;

+

+    // Wishbone logic

+    wire valid;

+    wire [3:0] wstrb;

+    assign valid = wbs_cyc_i && wbs_stb_i; 

+    assign wstrb = wbs_sel_i & { 4 { wbs_we_i } };

+    // TODO

+    

+    // CPU Core 0 Connection

+    wire[31:0] adr0, dtr0, dtw0, isr0;

+    wire rw0, val0, rdy0, iack0, irq0, nmi0, usr0, fault0;

+    wire[23:0] int0;

+    wire[4:0] vec0;

+    hs32_cpu #(

+        .IMUL(1), .BARREL_SHIFTER(1), .PREFETCH_SIZE(3)

+    ) core0 (

+        .i_clk(clk), .reset(rst),

+        // Mem

+        .addr(adr0), .rw(rw0), .din(dtr0), .dout(dtw0),

+        .valid(val0), .ready(rdy0),

+        // Int

+        .interrupts(int0), .iack(iack0), .handler(isr0),

+        .intrq(irq0), .vec(vec0), .nmi(nmi0),

+        // Misc

+        .userbit(usr0), .fault(fault0)

+    );

+

+    // MMIO

+    mmio mmio_unit(

+        .clk(clk), .reset(rst),

+        // CPU

+        .valid(val0), .ready(rdy0),

+        .addr(adr0), .dtw(dtw0), .dtr(dtr0), .rw(rw0),

+        // SRAM

+        .sval(svalid), .srdy(sready),

+        .saddr(saddr), .sdtw(sdtw), .sdtr(sdtr), .srw(srw),

+        // Interrupt controller

+        .interrupts(int0), .handler(isr0), .intrq(irq0),

+        .vec(vec0), .nmi(nmi0)

+    );

+

+    // SRAM Controller

+    wire sready, svalid, srw;

+    wire [31:0] saddr, sdtw, sdtr;

+    // Output

+    wire[15:0] data_in;

+    wire[15:0] data_out;

+    wire we, oe, oe_neg, ale0_neg, ale1_neg, bhe, isout;

+    ext_sram #(

+        .SRAM_LATCH_LAZY(1)

+    ) sram (

+        .clk(clk), .reset(rst),

+        // Memory requests

+        .ready(sready), .valid(svalid), .rw(srw),

+        .addri(saddr), .dtw(sdtw), .dtr(sdtr),

+        // External IO interface, active >> HIGH <<

+        .din(data_in), .dout(data_out),

+        .we(we), .oe(oe), .oe_negedge(oe_neg),

+        .ale0_negedge(ale0_neg),

+        .ale1_negedge(ale1_neg),

+        .bhe(bhe), .isout(isout)

+    );

+

+    // SRAM GPIO Logic

+    assign io_out[36] = usr0;

+    assign data_in = io_in[35:20];

+    assign io_out[35:20] = data_out;

+    assign io_out[19] = !(oe & oe_neg);

+    assign io_out[18] = !we;

+    assign io_out[17] = ale0_neg;

+    assign io_out[16] = ale1_neg;

+    assign io_out[15] = !bhe;

+

+    // Output enables

+    assign io_oeb[36] = 0;

+    assign io_oeb[35:20] = { (16){ ~isout } };

+    assign io_oeb[19:15] = 0;

 endmodule
\ No newline at end of file
diff --git a/verilog/rtl/hs32_user_proj/hs32_user_proj.v b/verilog/rtl/hs32_user_proj/hs32_user_proj.v
index b8b73fd..07a2061 100644
--- a/verilog/rtl/hs32_user_proj/hs32_user_proj.v
+++ b/verilog/rtl/hs32_user_proj/hs32_user_proj.v
@@ -1,126 +1,126 @@
-`ifdef verilator
-    `include "defines.v"
-    `include "cpu/hs32_cpu.v"
-    `include "frontend/sram.v"
-    `include "frontend/mmio.v"
-`endif
-
-`default_nettype none
-
-module hs32_user_proj (
-`ifdef USE_POWER_PINS
-    inout vdda1,	// User area 1 3.3V supply
-    inout vdda2,	// User area 2 3.3V supply
-    inout vssa1,	// User area 1 analog ground
-    inout vssa2,	// User area 2 analog ground
-    inout vccd1,	// User area 1 1.8V supply
-    inout vccd2,	// User area 2 1.8v supply
-    inout vssd1,	// User area 1 digital ground
-    inout vssd2,	// User area 2 digital ground
-`endif
-
-    // Wishbone Slave ports (WB MI A)
-    input  wire wb_clk_i,
-    input  wire wb_rst_i,
-    input  wire wbs_stb_i,
-    input  wire wbs_cyc_i,
-    input  wire wbs_we_i,
-    input  wire [3:0] wbs_sel_i,
-    input  wire [31:0] wbs_dat_i,
-    input  wire [31:0] wbs_adr_i,
-    output wire wbs_ack_o,
-    output wire [31:0] wbs_dat_o,
-
-    // Logic Analyzer Signals
-    input  wire [127:0] la_data_in,
-    output wire [127:0] la_data_out,
-    input  wire [127:0] la_oen,
-
-    // IOs
-    input  wire [`MPRJ_IO_PADS-1:0] io_in,
-    output wire [`MPRJ_IO_PADS-1:0] io_out,
-    output wire [`MPRJ_IO_PADS-1:0] io_oeb
-);
-    // Clock and reset
-    // wire clk = (~la_oen[64])? la_data_in[64] : wb_clk_i;
-    // wire rst = (~la_oen[65])? la_data_in[65] : wb_rst_i;
-    wire clk = wb_clk_i;
-    wire rst = wb_rst_i;
-
-    // Wishbone logic
-    wire valid;
-    wire [3:0] wstrb;
-    assign valid = wbs_cyc_i && wbs_stb_i; 
-    assign wstrb = wbs_sel_i & { 4 { wbs_we_i } };
-    // TODO
-    
-    // CPU Core 0 Connection
-    wire[31:0] adr0, dtr0, dtw0, isr0;
-    wire rw0, val0, rdy0, iack0, irq0, nmi0, usr0, fault0;
-    wire[23:0] int0;
-    wire[4:0] vec0;
-    hs32_cpu #(
-        .IMUL(1), .BARREL_SHIFTER(1), .PREFETCH_SIZE(3)
-    ) core0 (
-        .i_clk(clk), .reset(rst),
-        // Mem
-        .addr(adr0), .rw(rw0), .din(dtr0), .dout(dtw0),
-        .valid(val0), .ready(rdy0),
-        // Int
-        .interrupts(int0), .iack(iack0), .handler(isr0),
-        .intrq(irq0), .vec(vec0), .nmi(nmi0),
-        // Misc
-        .userbit(usr0), .fault(fault0)
-    );
-
-    // MMIO
-    mmio mmio_unit(
-        .clk(clk), .reset(rst),
-        // CPU
-        .valid(val0), .ready(rdy0),
-        .addr(adr0), .dtw(dtw0), .dtr(dtr0), .rw(rw0),
-        // SRAM
-        .sval(svalid), .srdy(sready),
-        .saddr(saddr), .sdtw(sdtw), .sdtr(sdtr), .srw(srw),
-        // Interrupt controller
-        .interrupts(int0), .handler(isr0), .intrq(irq0),
-        .vec(vec0), .nmi(nmi0)
-    );
-
-    // SRAM Controller
-    wire sready, svalid, srw;
-    wire [31:0] saddr, sdtw, sdtr;
-    // Output
-    wire[15:0] data_in;
-    wire[15:0] data_out;
-    wire we, oe, oe_neg, ale0_neg, ale1_neg, bhe, isout;
-    ext_sram #(
-        .SRAM_LATCH_LAZY(1)
-    ) sram (
-        .clk(clk), .reset(rst),
-        // Memory requests
-        .ready(sready), .valid(svalid), .rw(srw),
-        .addri(saddr), .dtw(sdtw), .dtr(sdtr),
-        // External IO interface, active >> HIGH <<
-        .din(data_in), .dout(data_out),
-        .we(we), .oe(oe), .oe_negedge(oe_neg),
-        .ale0_negedge(ale0_neg),
-        .ale1_negedge(ale1_neg),
-        .bhe(bhe), .isout(isout)
-    );
-
-    // SRAM GPIO Logic
-    assign io_out[36] = usr0;
-    assign data_in = io_in[35:20];
-    assign io_out[35:20] = data_out;
-    assign io_out[19] = !(oe & oe_neg);
-    assign io_out[18] = !we;
-    assign io_out[17] = ale0_neg;
-    assign io_out[16] = ale1_neg;
-    assign io_out[15] = !bhe;
-
-    // Output enables
-    assign io_oeb[36] = 0;
-    assign io_oeb[35:20] = { (16){ ~isout } };
-    assign io_oeb[19:15] = 0;
+`ifdef verilator

+    `include "defines.v"

+    `include "cpu/hs32_cpu.v"

+    `include "frontend/sram.v"

+    `include "frontend/mmio.v"

+`endif

+

+`default_nettype none

+

+module hs32_user_proj (

+`ifdef USE_POWER_PINS

+    inout vdda1,	// User area 1 3.3V supply

+    inout vdda2,	// User area 2 3.3V supply

+    inout vssa1,	// User area 1 analog ground

+    inout vssa2,	// User area 2 analog ground

+    inout vccd1,	// User area 1 1.8V supply

+    inout vccd2,	// User area 2 1.8v supply

+    inout vssd1,	// User area 1 digital ground

+    inout vssd2,	// User area 2 digital ground

+`endif

+

+    // Wishbone Slave ports (WB MI A)

+    input  wire wb_clk_i,

+    input  wire wb_rst_i,

+    input  wire wbs_stb_i,

+    input  wire wbs_cyc_i,

+    input  wire wbs_we_i,

+    input  wire [3:0] wbs_sel_i,

+    input  wire [31:0] wbs_dat_i,

+    input  wire [31:0] wbs_adr_i,

+    output wire wbs_ack_o,

+    output wire [31:0] wbs_dat_o,

+

+    // Logic Analyzer Signals

+    input  wire [127:0] la_data_in,

+    output wire [127:0] la_data_out,

+    input  wire [127:0] la_oen,

+

+    // IOs

+    input  wire [`MPRJ_IO_PADS-1:0] io_in,

+    output wire [`MPRJ_IO_PADS-1:0] io_out,

+    output wire [`MPRJ_IO_PADS-1:0] io_oeb

+);

+    // Clock and reset

+    // wire clk = (~la_oen[64])? la_data_in[64] : wb_clk_i;

+    // wire rst = (~la_oen[65])? la_data_in[65] : wb_rst_i;

+    wire clk = wb_clk_i;

+    wire rst = wb_rst_i;

+

+    // Wishbone logic

+    wire valid;

+    wire [3:0] wstrb;

+    assign valid = wbs_cyc_i && wbs_stb_i; 

+    assign wstrb = wbs_sel_i & { 4 { wbs_we_i } };

+    // TODO

+    

+    // CPU Core 0 Connection

+    wire[31:0] adr0, dtr0, dtw0, isr0;

+    wire rw0, val0, rdy0, iack0, irq0, nmi0, usr0, fault0;

+    wire[23:0] int0;

+    wire[4:0] vec0;

+    hs32_cpu #(

+        .IMUL(1), .BARREL_SHIFTER(1), .PREFETCH_SIZE(3)

+    ) core0 (

+        .i_clk(clk), .reset(rst),

+        // Mem

+        .addr(adr0), .rw(rw0), .din(dtr0), .dout(dtw0),

+        .valid(val0), .ready(rdy0),

+        // Int

+        .interrupts(int0), .iack(iack0), .handler(isr0),

+        .intrq(irq0), .vec(vec0), .nmi(nmi0),

+        // Misc

+        .userbit(usr0), .fault(fault0)

+    );

+

+    // MMIO

+    mmio mmio_unit(

+        .clk(clk), .reset(rst),

+        // CPU

+        .valid(val0), .ready(rdy0),

+        .addr(adr0), .dtw(dtw0), .dtr(dtr0), .rw(rw0),

+        // SRAM

+        .sval(svalid), .srdy(sready),

+        .saddr(saddr), .sdtw(sdtw), .sdtr(sdtr), .srw(srw),

+        // Interrupt controller

+        .interrupts(int0), .handler(isr0), .intrq(irq0),

+        .vec(vec0), .nmi(nmi0)

+    );

+

+    // SRAM Controller

+    wire sready, svalid, srw;

+    wire [31:0] saddr, sdtw, sdtr;

+    // Output

+    wire[15:0] data_in;

+    wire[15:0] data_out;

+    wire we, oe, oe_neg, ale0_neg, ale1_neg, bhe, isout;

+    ext_sram #(

+        .SRAM_LATCH_LAZY(1)

+    ) sram (

+        .clk(clk), .reset(rst),

+        // Memory requests

+        .ready(sready), .valid(svalid), .rw(srw),

+        .addri(saddr), .dtw(sdtw), .dtr(sdtr),

+        // External IO interface, active >> HIGH <<

+        .din(data_in), .dout(data_out),

+        .we(we), .oe(oe), .oe_negedge(oe_neg),

+        .ale0_negedge(ale0_neg),

+        .ale1_negedge(ale1_neg),

+        .bhe(bhe), .isout(isout)

+    );

+

+    // SRAM GPIO Logic

+    assign io_out[36] = usr0;

+    assign data_in = io_in[35:20];

+    assign io_out[35:20] = data_out;

+    assign io_out[19] = !(oe & oe_neg);

+    assign io_out[18] = !we;

+    assign io_out[17] = ale0_neg;

+    assign io_out[16] = ale1_neg;

+    assign io_out[15] = !bhe;

+

+    // Output enables

+    assign io_oeb[36] = 0;

+    assign io_oeb[35:20] = { (16){ ~isout } };

+    assign io_oeb[19:15] = 0;

 endmodule
\ No newline at end of file