diff --git a/.github/workflows/auto-update.yml b/.github/workflows/auto-update.yml new file mode 100755 index 00000000..95882c04 --- /dev/null +++ b/.github/workflows/auto-update.yml @@ -0,0 +1,49 @@ +# SPDX-FileCopyrightText: 2020 Efabless Corporation +# +# 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. +# SPDX-License-Identifier: Apache-2.0 + +# This is a basic workflow to help you get started with Actions +name: Manifest and README.src.rst + +# Controls when the action will run. +on: push + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v2 + # Runs a single command using the runners shell + - name: Run creating manifest + run: make manifest + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: 3.6 + - name: Install dependencies + run: python -m pip install --upgrade pip + - name: Run creating README.rst + run: make README.rst + - uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: Apply automatic changes to Manifest and README.rst + # Optional commit user and author settings + commit_user_name: My GitHub Actions Bot # defaults to "GitHub Actions" + commit_user_email: my-github-actions-bot@example.org # defaults to "actions@github.com" diff --git a/doc/.gitignore b/doc/.gitignore new file mode 100755 index 00000000..567609b1 --- /dev/null +++ b/doc/.gitignore @@ -0,0 +1 @@ +build/ diff --git a/doc/Makefile b/doc/Makefile new file mode 100755 index 00000000..585eac82 --- /dev/null +++ b/doc/Makefile @@ -0,0 +1,35 @@ +# SPDX-FileCopyrightText: 2020 Efabless Corporation +# +# 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. +# +# SPDX-License-Identifier: Apache-2.0 +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/doc/environment.yml b/doc/environment.yml new file mode 100755 index 00000000..d5cda1b4 --- /dev/null +++ b/doc/environment.yml @@ -0,0 +1,24 @@ +# SPDX-FileCopyrightText: 2020 Efabless Corporation +# +# 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. +# +# SPDX-License-Identifier: Apache-2.0 + +name: caravel-docs +channels: +- defaults +dependencies: +- python>=3.8 +- pip +- pip: + - -r ./requirements.txt diff --git a/doc/other/clamp_list.txt b/doc/other/clamp_list.txt new file mode 100755 index 00000000..c4b3bf7c --- /dev/null +++ b/doc/other/clamp_list.txt @@ -0,0 +1,47 @@ +Pad Instance Clamp connections + DRN1 SRC1 DRN2 SRC2 B2B +---------------------------------------------------------------------------------------- +sky130_ef_io__vddio_hvc_pad \mgmt_vddio_hvclamp_pad[0] vddio, vssio +sky130_ef_io__vddio_hvc_pad \mgmt_vddio_hvclamp_pad[1] vddio, vssio +sky130_ef_io__vssio_hvc_pad \mgmt_vssio_hvclamp_pad[0] vddio, vssio +sky130_ef_io__vssio_hvc_pad \mgmt_vssio_hvclamp_pad[1] vddio, vssio +----------------------------------------------------------------------------------------- +sky130_ef_io__vdda_hvc_pad mgmt_vdda_hvclamp_pad vdda, vssa +sky130_ef_io__vssa_hvc_pad mgmt_vssa_hvclamp_pad vdda, vssa +sky130_ef_io__vdda_hvc_pad user1_vdda_hvclamp_pad vdda1, vssa1 +sky130_ef_io__vssa_hvc_pad user1_vssa_hvclamp_pad vdda1, vssa1 +sky130_ef_io__vdda_hvc_pad user2_vdda_hvclamp_pad vdda2, vssa2 +sky130_ef_io__vssa_hvc_pad user2_vssa_hvclamp_pad vdda2, vssa2 +----------------------------------------------------------------------------------------- +sky130_ef_io__vccd_lvc_pad mgmt_vccd_lvclamp_pad vccd, vssio, vccd, vssd, vssa +sky130_ef_io__vssd_lvc_pad mgmt_vssd_lvclmap_pad vccd, vssio, vccd, vssd, vssa +----------------------------------------------------------------------------------------- +sky130_ef_io__vccd_lvc_pad user1_vccd_lvclamp_pad vccd1, vssd1, vccd1, vssd, vssio +sky130_ef_io__vssd_lvc_pad user1_vssd_lvclmap_pad vccd1, vssd1, vccd1, vssd, vssio +sky130_ef_io__vccd_lvc_pad user2_vccd_lvclamp_pad vccd2, vssd2, vccd2, vssd, vssio +sky130_ef_io__vssd_lvc_pad user2_vssd_lvclmap_pad vccd2, vssd2, vccd2, vssd, vssio +----------------------------------------------------------------------------------------- + +Overlay types used: +1. hvc_pad: vddio -> vssio +2. hvc_pad: vdda -> vssa +3. lvc_pad: vccd -> vssio, vccd -> vssd vssa +4. lvc_pad: vccd -> vssd, vccd -> vssdG vssio + +NOTE: Type (4) crosses domains, so that the local VCCD has a diode to the +local VSSD and also to the global VSSD. BUT: Although vccd goes all the way +around the chip in the form of vcchib, vssd does not, which makes the SRC2 +connection effectively unreachable in this configuration, so better to just +change it to vssd1 and vssd2 for the respective domains. + +New overlay types created: +1. sky130_ef_io__vddio_hvc_clamped_pad: sky130_ef_io__vddio_hvc_pad + overlay (1) +2. sky130_ef_io__vssio_hvc_clamped_pad: sky130_ef_io__vssio_hvc_pad + overlay (1) +3. sky130_ef_io__vdda_hvc_clamped_pad: sky130_ef_io__vdda_hvc_pad + overlay (2) +4. sky130_ef_io__vssa_hvc_clamped_pad: sky130_ef_io__vssa_hvc_pad + overlay (2) +5. sky130_ef_io__vccd_lvc_clamped_pad: sky130_ef_io__vccd_lvc_pad + overlay (3) +6. sky130_ef_io__vssd_lvc_clamped_pad: sky130_ef_io__vssd_lvc_pad + overlay (3) +7. sky130_ef_io__vccd_lvc_clamped2_pad: sky130_ef_io__vccd_lvc_pad + overlay (4) +7. sky130_ef_io__vssd_lvc_clamped2_pad: sky130_ef_io__vssd_lvc_pad + overlay (4) + + diff --git a/doc/pdf/caravel_block_diagram.pdf b/doc/pdf/caravel_block_diagram.pdf new file mode 100644 index 00000000..172b984d Binary files /dev/null and b/doc/pdf/caravel_block_diagram.pdf differ diff --git a/doc/pdf/caravel_clocking.pdf b/doc/pdf/caravel_clocking.pdf new file mode 100644 index 00000000..6f66ffd9 Binary files /dev/null and b/doc/pdf/caravel_clocking.pdf differ diff --git a/doc/pdf/caravel_floorplan.pdf b/doc/pdf/caravel_floorplan.pdf new file mode 100644 index 00000000..c49fcf23 Binary files /dev/null and b/doc/pdf/caravel_floorplan.pdf differ diff --git a/doc/pdf/counter_timer_function.pdf b/doc/pdf/counter_timer_function.pdf new file mode 100644 index 00000000..bb13c07f Binary files /dev/null and b/doc/pdf/counter_timer_function.pdf differ diff --git a/doc/pdf/gpio_function.pdf b/doc/pdf/gpio_function.pdf new file mode 100644 index 00000000..968a81b4 Binary files /dev/null and b/doc/pdf/gpio_function.pdf differ diff --git a/doc/pdf/housekeeping_function.pdf b/doc/pdf/housekeeping_function.pdf new file mode 100644 index 00000000..b98e02d7 --- /dev/null +++ b/doc/pdf/housekeeping_function.pdf @@ -0,0 +1,2060 @@ +%PDF-1.3 +%âãÏÓ +2 0 obj +<< +/Length 8167 +>> +stream +0.361 0.675 0.933 RG +1 J 2 j 0.975 w 6 M []0 d +/GS1 gs +1 i +342 459 m +342 531 l +345 459 m +345 531 l +150 462 m +150 525 l +S +BT +/TT2 1 Tf +10.5 0 0 10.5 71.16 708 Tm +0 0 0 rg +0 Tc +0 Tw +(Functional Description )Tj +/TT4 1 Tf +11.1118 0 TD +(\(cont.\))Tj +ET +0 0 0 RG +540 702 m +72 702 l +S +BT +/TT2 1 Tf +10.5 0 0 10.5 71.16 684 Tm +(Housekeeping SPI)Tj +/TT6 1 Tf +17.7482 0 TD +(SDI \(pin F9\), CSB \(pin E8\), SCK \(pin F8\), and SDO \(pin E9\))Tj +/TT2 1 Tf +-17.7139 -6.8571 TD +(SPI protocol definition)Tj +ET +540 204 m +72 204 l +S +BT +/TT8 1 Tf +10.5 0 0 10.5 119.4 192 Tm +(00000000)Tj +/TT6 1 Tf +10.2629 0 TD +(No operation)Tj +/TT8 1 Tf +-10.3086 -1.1429 TD +(10000000)Tj +0.0457 -1.1429 TD +(01000000)Tj +/TT6 1 Tf +10.32 1.1429 TD +(Write in streaming mode)Tj +-0.0686 -1.1429 TD +(Read in streaming mode)Tj +0.0454 -1.1429 TD +(Simultaneous Read/Write in streaming mode)Tj +/TT8 1 Tf +-10.3425 0 TD +(11000000)Tj +0 -3.4286 TD +(10nnn000)Tj +ET +540 90 m +72 90 l +S +BT +/TT6 1 Tf +10.5 0 0 10.5 71.88 594 Tm +(All input is in groups of 8 bits. Each byte is input msb first.)Tj +0 -34.2857 TD +(The first transferred byte is the command word, interpreted according to Table 8 below.)Tj +0 8.4171 TD +(CSB pin must be low to enable an SPI transmission. Data are clocked by pin SCK, with data valid)Tj +0 -1 TD +(on the rising edge of SCK. Output data are received on the SDO line. SDO is held high-impedance)Tj +T* +(when CSB is high and at all times other than the transfer of data bits on a read command. SDO)Tj +T* +(outputs become active on the falling edge of SCK, such that data are written and read on the same)Tj +T* +(SCK rising edge.)Tj +0 -2.2857 TD +(After CSB is set low, the SPI is always in the "command" state, awaiting a new command.)Tj +0 13.7143 TD +(Addresses are read in sequence from lower values to higher values.)Tj +0 -1.7143 TD +(Therefore groups of bits larger than 8 should be grouped such that the lowest bits are at the)Tj +0 -1 TD +(highest address. Any bits additional to an 8-bit boundary should be at the lowest address.)Tj +-0.0457 -1.8571 TD +(Data are captured from the register map in bytes on the falling edge of the last SCK before a data)Tj +0 -1 TD +(byte transfer. Multi-byte transfers should ensure that data do not change between byte reads. )Tj +/TT8 1 Tf +4.5714 -22.2743 TD +(01nnn000)Tj +-0.0457 -1.1429 TD +(11nnn000)Tj +/TT6 1 Tf +10.3657 2.2857 TD +(Write in n-byte mode \(up to 7 bytes\).)Tj +-0.0686 -1.1429 TD +(Read in n-byte mode \(up to 7 bytes\).)Tj +0.0454 -1.1429 TD +(Simultaneous Read/Write in n-byte mode \(up to 7 bytes\).)Tj +-14.8339 45.56 TD +(Every command sequence requires one command word \(8 bits\) followed by one address word)Tj +0 -1 TD +(\(8 bits\) followed by one or more data words \(8 bits each\), according to the data transfer modes)Tj +T* +(defined below.)Tj +0.0114 10.5714 TD +(The “housekeeping” SPI is an SPI slave that can be accessed from a remote host through a)Tj +0 -1 TD +(standard 4-pin serial interface. The SPI implementation is mode 0, with new data on SDI captured)Tj +T* +(on the SCK rising edge, and output data presented on the falling edge of SCK \(to be sampled on)Tj +T* +(the next SCK rising edge\). The SPI pins are shared with user area general-purpose I/O.)Tj +0.7405 -10.9229 TD +(CSB)Tj +-0.0223 -1.7143 TD +(SCK)Tj +0.2329 -1.7143 TD +(SDI)Tj +-0.2662 -1.7143 TD +(SDO)Tj +ET +456 516 m +138 516 l +138 528 l +120 528 l +252 498 m +240 498 l +240 510 l +234 510 l +234 498 l +228 498 l +228 510 l +222 510 l +222 498 l +216 498 l +216 510 l +210 510 l +210 498 l +204 498 l +204 510 l +198 510 l +198 498 l +192 498 l +192 510 l +186 510 l +186 498 l +180 498 l +180 510 l +174 510 l +174 498 l +168 498 l +168 510 l +162 510 l +162 498 l +156 498 l +156 510 l +150 510 l +150 498 l +354 498 m +342 498 l +342 510 l +336 510 l +336 498 l +330 498 l +330 510 l +324 510 l +324 498 l +318 498 l +318 510 l +312 510 l +312 498 l +306 498 l +306 510 l +300 510 l +300 498 l +294 498 l +294 510 l +288 510 l +288 498 l +282 498 l +282 510 l +276 510 l +276 498 l +270 498 l +270 510 l +264 510 l +264 498 l +258 498 l +258 510 l +252 510 l +252 498 l +456 498 m +444 498 l +444 510 l +438 510 l +438 498 l +432 498 l +432 510 l +426 510 l +426 498 l +420 498 l +420 510 l +414 510 l +414 498 l +408 498 l +408 510 l +402 510 l +402 498 l +396 498 l +396 510 l +390 510 l +390 498 l +384 498 l +384 510 l +378 510 l +378 498 l +372 498 l +372 510 l +366 510 l +366 498 l +360 498 l +360 510 l +354 510 l +354 498 l +120 498 m +150 498 l +456 480 m +447 480 l +444 492 l +351 492 l +348 480 l +243 480 l +240 492 l +147 492 l +144 480 l +120 480 l +159 492 m +156 480 l +144 480 l +171 492 m +168 480 l +156 480 l +183 492 m +180 480 l +168 480 l +195 492 m +192 480 l +180 480 l +207 492 m +204 480 l +192 480 l +S +219 492 m +216 480 l +204 480 l +231 492 m +228 480 l +216 480 l +243 480 m +228 480 l +159 480 m +156 492 l +171 480 m +168 492 l +183 480 m +180 492 l +195 480 m +192 492 l +207 480 m +204 492 l +219 480 m +216 492 l +231 480 m +228 492 l +345 480 m +342 492 l +249 492 l +246 480 l +261 480 m +258 492 l +258 480 m +261 492 l +270 480 m +273 492 l +273 480 m +270 492 l +282 480 m +285 492 l +285 480 m +282 492 l +294 480 m +297 492 l +297 480 m +294 492 l +306 480 m +309 492 l +309 480 m +306 492 l +318 480 m +321 492 l +321 480 m +318 492 l +330 480 m +333 492 l +333 480 m +330 492 l +360 480 m +363 492 l +363 480 m +360 492 l +372 480 m +375 492 l +375 480 m +372 492 l +384 480 m +387 492 l +387 480 m +384 492 l +396 480 m +399 492 l +399 480 m +396 492 l +408 480 m +411 492 l +411 480 m +408 492 l +420 480 m +423 492 l +423 480 m +420 492 l +432 480 m +435 492 l +435 480 m +432 492 l +447 480 m +348 480 l +456 474 m +447 474 l +444 462 l +444 462 m +456 462 l +345 462 m +432 462 l +S +0.6 0.6 0.6 RG +456 456 m +456 534 l +462 456 m +462 534 l +S +0 0 0 RG +510 498 m +462 498 l +510 480 m +462 480 l +468 474 m +462 474 l +468 462 m +462 462 l +469.5 468 m +468 474 l +468 462 m +469.5 468 l +510 468 m +469.5 468 l +345 462 m +343.5 468 l +435 462 m +432 474 l +345 474 l +343.5 468 l +120 468 m +343.5 468 l +363 462 m +360 474 l +363 474 m +360 462 l +375 462 m +372 474 l +375 474 m +372 462 l +387 462 m +384 474 l +387 474 m +384 462 l +399 462 m +396 474 l +399 474 m +396 462 l +411 462 m +408 474 l +411 474 m +408 462 l +423 462 m +420 474 l +423 474 m +420 462 l +435 474 m +432 462 l +447 474 m +432 474 l +444 462 m +432 462 l +447 462 m +444 474 l +S +BT +10.5 0 0 10.5 71.88 78 Tm +(All other words are reserved and act as no-operation if not defined by the SPI slave module.)Tj +ET +510 528 m +468 528 l +468 516 l +462 516 l +S +BT +7.5 0 0 7.5 461.76 441.66 Tm +(additional data bytes)Tj +ET +0.78 w +459 456.75 m +459 445.5 l +S +460.5 455.25 m +459.562 457.125 459.562 457.688 459 460.5 c +458.437 457.688 458.437 457.125 457.5 455.25 c +458.625 455.625 459.375 455.625 460.5 455.25 c +f* +0.975 w +243 456 m +240 453 l +147 453 l +144 456 l +S +BT +7.5 0 0 7.5 172.8619 444.66 Tm +(command)Tj +ET +348 456 m +345 453 l +249 453 l +246 456 l +S +BT +7.5 0 0 7.5 280.9219 444.66 Tm +(address)Tj +ET +456 453 m +354 453 l +351 456 l +474 456 m +471 453 l +462 453 l +S +BT +7.5 0 0 7.5 394.9247 444.66 Tm +(data)Tj +-36.1091 5.556 TD +(msb)Tj +26.8 -2.044 TD +[(msb)-17499.3(lsb)]TJ +-23.3908 1.66 TD +(7)Tj +1.6035 -0.008 TD +(6)Tj +1.599 0.008 TD +(5)Tj +1.592 -0.008 TD +1.0474 Tc +[(432)-109.1(1)115.7(0)]TJ +8.8055 0.008 TD +0 Tc +(7)Tj +1.6035 -0.008 TD +(6)Tj +1.599 0.008 TD +(5)Tj +1.592 -0.008 TD +1.0474 Tc +[(432)-109.1(1)115.7(0)]TJ +8.8055 0.008 TD +0 Tc +(7)Tj +1.6035 -0.008 TD +(6)Tj +1.599 0.008 TD +(5)Tj +1.592 -0.008 TD +1.0474 Tc +[(432)-109.1(1)115.7(0)]TJ +-4.7945 -2.392 TD +0 Tc +(7)Tj +1.6035 -0.008 TD +(6)Tj +1.599 0.008 TD +(5)Tj +1.592 -0.008 TD +1.0474 Tc +[(432)-109.1(1)115.7(0)]TJ +8.0055 0.008 TD +0 Tc +(7)Tj +-39.6207 0.74 TD +(high impedence)Tj +-0.368 7.6 TD +[(data must be valid on SCK rising edge)-9390.2(data valid on SCK falling edge)]TJ +ET +0.361 0.675 0.933 RG +354 432 m +354 495 l +S +BT +7.5 0 0 7.5 356.76 432 Tm +(capture data on SCK rising edge)Tj +/TT4 1 Tf +10.5 0 0 10.5 70.44 210 Tm +(Table 8)Tj +/TT6 1 Tf +5.2114 0 TD +(Housekeeping SPI command word definition)Tj +/TT4 1 Tf +-4.5714 20.5714 TD +(Figure 2. Housekeeping SPI signaling)Tj +ET +0.8 0.8 0.8 RG +72 420 468 120 re +S +BT +/TT8 1 Tf +10.5 0 0 10.5 118.92 144 Tm +(11000100)Tj +/TT6 1 Tf +10.3086 0 TD +(Pass-through \(management\) Read/Write in streaming mode)Tj +/TT8 1 Tf +-10.3086 -1.1429 TD +(11000110)Tj +/TT6 1 Tf +10.3086 0 TD +(Pass-through \(user\) Read/Write in streaming mode)Tj +ET +endstream +endobj +3 0 obj +<< +/ProcSet [/PDF /Text ] +/Font << +/TT2 4 0 R +/TT4 5 0 R +/TT6 6 0 R +/TT8 7 0 R +>> +/ExtGState << +/GS1 8 0 R +>> +>> +endobj +11 0 obj +<< +/Length 4277 +>> +stream +BT +/TT2 1 Tf +10.5 0 0 10.5 70.77 708 Tm +0 0 0 rg +/GS1 gs +0 Tc +0 Tw +(Functional Description )Tj +/TT4 1 Tf +11.1118 0 TD +(\(cont.\))Tj +ET +0 0 0 RG +1 J 2 j 0.975 w 6 M []0 d +1 i +539.625 702 m +71.625 702 l +S +BT +/TT6 1 Tf +10.5 0 0 10.5 71.49 664.38 Tm +(The two basic modes of operation are "streaming mode" and "n-byte mode". In "streaming mode")Tj +0 -1 TD +(operation, data are sent or received continuously, one byte at a time, with the internal address)Tj +T* +(incrementing for each byte. Streaming mode operation continues until CSB is raised to end the)Tj +T* +(transfer. )Tj +-0.0229 -2.1429 TD +(In "n-byte mode" operation, the number of bytes to be read and/or written is encoded in the)Tj +0 -1 TD +(command word, and may have a value from 1 to 7 \(note that a value of zero implies streaming)Tj +T* +(mode\). After n bytes have been read and/or written, the SPI returns to waiting for the next)Tj +T* +(command. No toggling of CSB is required to end the command or to initiate the following)Tj +T* +(command.)Tj +/TT2 1 Tf +-0.0114 11.0114 TD +(SPI protocol definition )Tj +/TT4 1 Tf +10.9438 0 TD +(\(continued\))Tj +/TT6 1 Tf +-10.9324 -41.8686 TD +(Under normal working conditions, the SPI should not need to be accessed unless it is to adjust the)Tj +0 -1 TD +(clock speed of the CPU. All other functions are purely for test and debug.)Tj +/TT2 1 Tf +-0.0229 -6.8457 TD +(manufacturer_ID)Tj +/TT6 1 Tf +2.3314 -1.1429 TD +(The 12-bit manufacturer ID for efabless is 0x456)Tj +/TT2 1 Tf +-2.3543 16.5714 TD +(Housekeeping SPI registers)Tj +/TT6 1 Tf +12.0114 -15.4286 TD +(register address 0x01 low 4 bits and register address 0x02)Tj +/TT2 1 Tf +-12.0114 36.5714 TD +(Pass-thru mode)Tj +/TT6 1 Tf +0.0686 -1.8686 TD +(The pass-thru mode puts the CPU into immediate reset, then sets FLASH_CSB low to initiate a data)Tj +0 -1 TD +(transfer to the QSPI flash. After the pass-thru command byte has been issued, all subsequent SPI)Tj +T* +(signaling on SDI and SCK are applied directly to the QSPI flash \(pins FLASH_IO0 and FLASH_CLK,)Tj +T* +(respectively\), and the QSPI flash data output \(pin FLASH_IO1\) is applied directly to SDO, until the)Tj +T* +(CSB pin is raised. When CSB is raised, the FLASH_CSB is also raised, terminating the data)Tj +T* +(transfer to the QSPI flash. The CPU is brought out of reset, and starts executing instructions at the)Tj +T* +(program start address. )Tj +0 -2 TD +(This mode allows the QSPI flash to be programmed from the same SPI communication channel as)Tj +0 -1 TD +(the housekeeping SPI, without the need for additional wiring to the QSPI flash chip.)Tj +0 -1.8571 TD +(There are two pass-thru modes. The first one corresponds to the primary SPI flash used by the)Tj +0 -1 TD +(management SoC. The second one corresponds to a secondary optional SPI flash that can be)Tj +T* +(defined in the user project. The pass-thru mode allows a communications chip external to the)Tj +T* +(Caravel chip program either SPI flash chip from a host computer without requiring separate)Tj +T* +(external access to the SPI flash. Both pass-thru modes only connect to I/O pins 0 and 1 of the SPI)Tj +T* +(flash chips, and so must operate only in the 4-pin SPI mode. The user project may elect to operate)Tj +T* +(the SPI flash in quad mode using a 6-pin interface.)Tj +0 -4.2857 TD +(The purpose of the housekeeping SPI is to give access to certain system values and controls)Tj +0 -1 TD +(independently of the CPU. The housekeeping SPI can be accessed even when the CPU is in full)Tj +T* +(reset. Some control registers in the housekeeping SPI affect the behavior of the CPU in a way that)Tj +T* +(potentially can be detrimental to the CPU operation, such as adjusting the trim value of the digital)Tj +T* +(frequency-locked loop generating the CPU core clock.)Tj +0 -4.5714 TD +(The housekeeping SPI can be accessed by the CPU from a running program by enabling the SPI)Tj +0 -1 TD +(master, and enabling the bit that connects the internal SPI master directly to the housekeeping SPI.)Tj +T* +(This configuration then allows a program to read, for example, the user project ID of the chip. See)Tj +T* +(the SPI master description for details.)Tj +/TT2 1 Tf +-0.0457 -5.4171 TD +(product_ID)Tj +/TT6 1 Tf +2.3314 -1.1429 TD +(The product ID for the Caravel harness chip is 0x10)Tj +9.6571 1.1429 TD +(register address 0x03)Tj +ET +endstream +endobj +12 0 obj +<< +/ProcSet [/PDF /Text ] +/Font << +/TT2 4 0 R +/TT4 5 0 R +/TT6 6 0 R +>> +/ExtGState << +/GS1 8 0 R +>> +>> +endobj +14 0 obj +<< +/Length 4204 +>> +stream +BT +/TT2 1 Tf +10.5 0 0 10.5 71.16 708 Tm +0 0 0 rg +/GS1 gs +0 Tc +0 Tw +(Functional Description )Tj +/TT4 1 Tf +11.1118 0 TD +(\(cont.\))Tj +ET +0 0 0 RG +1 J 2 j 0.975 w 6 M []0 d +1 i +540 702 m +72 702 l +S +BT +/TT2 1 Tf +10.5 0 0 10.5 71.16 684 Tm +(Housekeeping SPI registers )Tj +/TT4 1 Tf +13.5049 0 TD +(\(continued\))Tj +/TT2 1 Tf +-13.4706 -26.8571 TD +(CPU reset)Tj +0 -4 TD +(CPU trap)Tj +/TT6 1 Tf +2.32 2.7029 TD +(The CPU reset bit puts the entire CPU into a reset state. This bit is not self-resetting and)Tj +0 -1 TD +(must be set back to zero manually to clear the reset state.)Tj +0 -3 TD +(If the CPU has stopped after encountering an error, it will raise the trap signal. The trap signal)Tj +0 -1 TD +(can be configured to be read from a GPIO pin, but as the GPIO state is potentially unknowable,)Tj +T* +(the housekeeping SPI can be used to determine the true trap state.)Tj +/TT2 1 Tf +-2.32 12.44 TD +(CPU IRQ)Tj +/TT6 1 Tf +2.32 -1.4286 TD +(This is a dedicated manual interrupt driving the CPU IRQ channel 6. The bit is not self-)Tj +0 -1 TD +(resetting, so while the rising edge will trigger an interrupt, the signal must be manually set to)Tj +T* +(zero before it can trigger another interrupt.)Tj +/TT2 1 Tf +-2.3543 8.5714 TD +(PLL bypass)Tj +/TT6 1 Tf +2.3543 -1.2971 TD +(When enabled, the PLL bypass switches the clock source of the CPU from the PLL output to)Tj +0 -1 TD +(the external CMOS clock \(pin C9\). The default value is 0x1 \(CPU clock source is the external)Tj +T* +(CMOS clock\).)Tj +9.6571 3.5829 TD +(register address 0x09 bit 0)Tj +0 -5.1429 TD +(register address 0x0A bit 0)Tj +T* +(register address 0x0B bit 0)Tj +0 -4 TD +(register address 0x0C bit 0)Tj +/TT2 1 Tf +-12.0114 19.1429 TD +(PLL DCO enable)Tj +0 5.1429 TD +(PLL enable)Tj +0 -29.4286 TD +(PLL trim)Tj +/TT6 1 Tf +2.3543 -1.8686 TD +(The 26-bit trim value can adjust the DCO frequency over a factor of about two from the slowest)Tj +0 -1 TD +(\(trim value 0x3ffffff\) to the fastest \(trim value 0x0\). Default value is 0x3ffefff \(slow trim, -1\).)Tj +T* +(Note that this is a thermometer-code trim, where each bit provides an additional)Tj +T* +[(\(approximately\) 250)-137.1(ps delay \(on top of a fixed delay of 4.67)-140(ns\). The fastest output frequency)]TJ +T* +[(is approximately 215)-137.1(MHz while the slowest output frequency is approximately 90)-137.1(MHz.)]TJ +9.6571 30.1543 TD +(register address 0x08 bit 1)Tj +0 5.1429 TD +(register address 0x08 bit 0)Tj +0 -29.4286 TD +(register addresses 0x0D \(all bits\) to 0x10 \(lower 2 bits\))Tj +-9.6571 32.1314 TD +(The 4-byte \(32 bit\) user project ID is metal-mask programmed on each project before tapeout,)Tj +0 -1 TD +(with a unique number given to each user project.)Tj +9.6571 2.2971 TD +(register addresses 0x04 to 0x07)Tj +/TT2 1 Tf +-11.9886 0 TD +(user project ID)Tj +-0.0229 -48 TD +(PLL output divider \(2\))Tj +/TT6 1 Tf +12.0114 0 TD +(register address 0x11 bit 5–3)Tj +-9.6571 42.7029 TD +(This bit enables the digital frequency-locked-loop clock multiplier. The enable should be)Tj +0 -1 TD +(applied prior to turning off the PLL bypass to allow the PLL time to stabilize before using it to)Tj +T* +(drive the CPU clock.)Tj +0 -3.1429 TD +(The PLL can be run in DCO mode, in which the feedback loop to the driving clock is removed,)Tj +0 -1 TD +(and the system operates in free-running mode, driven by the ring oscillator which can be tuned)Tj +T* +(between approximately 90 to 200 MHz by setting the trim bits \(see below\).)Tj +/TT2 1 Tf +-2.3543 -28.7029 TD +(PLL output divider)Tj +/TT6 1 Tf +12.0114 0 TD +(register address 0x11 bits 2–0)Tj +-9.6571 -1.8686 TD +(The PLL output can be divided down by an integer divider to provide the core clock frequency.)Tj +0 -1 TD +(This 3-bit divider can generate a clock divided by 2 to 7. Values 0 and 1 both pass the)Tj +T* +(undivided PLL clock directly to the core \(and should not be used, as the processor does not)Tj +T* +(operate at these frequencies\). )Tj +0 -3.2743 TD +(The PLL 90-degree phase output is passed through an independent 3-bit integer clock divider)Tj +0 -1 TD +(and provided to the user project space as a secondary clock. Values 0 and 1 both pass the)Tj +T* +(undivided PLL clock, while values 2 to 7 pass the clock divided by 2 to 7, respectively.)Tj +ET +endstream +endobj +15 0 obj +<< +/ProcSet [/PDF /Text ] +/Font << +/TT2 4 0 R +/TT4 5 0 R +/TT6 6 0 R +>> +/ExtGState << +/GS1 8 0 R +>> +>> +endobj +17 0 obj +<< +/Length 1136 +>> +stream +BT +/TT2 1 Tf +10.5 0 0 10.5 68.16 711 Tm +0 0 0 rg +/GS1 gs +0 Tc +0 Tw +(Functional Description )Tj +/TT4 1 Tf +11.1118 0 TD +(\(cont.\))Tj +ET +0 0 0 RG +1 J 2 j 0.975 w 6 M []0 d +1 i +543 705 m +69 705 l +S +BT +/TT2 1 Tf +10.5 0 0 10.5 68.16 687 Tm +(Housekeeping SPI registers )Tj +/TT4 1 Tf +13.5049 0 TD +(\(continued\))Tj +/TT2 1 Tf +-13.5049 -2.2857 TD +(PLL feedback divider)Tj +/TT6 1 Tf +12.0114 0 TD +(register address 0x12 bits 4–0)Tj +-9.6571 -1.2971 TD +(The PLL operates by comparing the input clock \(pin C9\) rate to the rate of the PLL clock)Tj +0 -1 TD +(divided by the feedback divider value \(when running in PLL mode, not DCO mode\). The)Tj +T* +(feedback divider must be set such that the external clock rate multiplied by the feedback)Tj +T* +(divider value falls between 90 and 214 MHz \(preferably centered on this range, or)Tj +T* +[(approximately 150)-137.1(MHz\). For example, when using an 8)-137.1(MHz external clock, the divider should)]TJ +T* +(be set to 19 \(19 * 8 = 152\). The DCO range and the number of bits of the feedback divider)Tj +T* +[(implies that the external clock should be no slower than around 4 to 5)-137.1(MHz. )]TJ +ET +endstream +endobj +18 0 obj +<< +/ProcSet [/PDF /Text ] +/Font << +/TT2 4 0 R +/TT4 5 0 R +/TT6 6 0 R +>> +/ExtGState << +/GS1 8 0 R +>> +>> +endobj +20 0 obj +<< +/Length 4438 +>> +stream +0.898 0.898 0.898 rg +0.898 0.898 0.898 RG +1 J 2 j 0.975 w 6 M []0 d +/GS1 gs +1 i +117 159 42 36 re +B* +117 195 150 36 re +B* +117 591 180 36 re +B* +117 231 84 36 re +B* +117 447 264 36 re +B* +BT +/TT2 1 Tf +10.5 0 0 10.5 68.16 711 Tm +0 0 0 rg +0 Tc +0 Tw +(Functional Description )Tj +/TT4 1 Tf +11.1118 0 TD +(\(cont.\))Tj +ET +0 0 0 RG +543 705 m +69 705 l +S +0.898 0.898 0.898 rg +0.898 0.898 0.898 RG +117 303 312 144 re +B* +0 0 0 RG +543 627 m +69 627 l +S +BT +10.5 0 0 10.5 125.2228 681 Tm +0 0 0 rg +[(msb)-28133.7(lsb)]TJ +/TT6 1 Tf +9.7429 -10.6486 TD +(manufacturer_ID[7:0] \(= 0x56\))Tj +ET +543 555 m +69 555 l +69 159 m +69 681 l +S +BT +/TT4 1 Tf +10.5 0 0 10.5 72.9525 679.5 Tm +(Register)Tj +0 -1 TD +(Address)Tj +ET +543 663 m +69 663 l +543 519 m +69 519 l +S +BT +/TT6 1 Tf +10.5 0 0 10.5 257.1028 533.1901 Tm +(product_ID \(= 0x11\))Tj +-16.6758 10.0771 TD +(0x00)Tj +0.0836 -3.4286 TD +(0x01)Tj +ET +543 411 m +69 411 l +159 663 m +159 675 l +207 663 m +207 675 l +255 663 m +255 675 l +297 663 m +297 675 l +339 663 m +339 675 l +381 663 m +381 675 l +429 663 m +429 675 l +471 159 m +471 681 l +S +BT +10.5 0 0 10.5 134.64 669 Tm +3.4438 Tc +[(76)-571.5(5)-582.9(4)0(3)11.4(2)57.1(1)-628.6(0)]TJ +/TT4 1 Tf +32.5985 0 TD +0 Tc +(comments)Tj +ET +543 375 m +69 375 l +543 339 m +69 339 l +543 447 m +69 447 l +543 483 m +69 483 l +543 591 m +69 591 l +S +BT +/TT6 1 Tf +10.5 0 0 10.5 82.0022 573 Tm +(0x02)Tj +ET +297 591 m +297 627 l +S +BT +10.5 0 0 10.5 311.5228 605.1901 Tm +(manufacturer_ID[11:8] \(= 0x4\))Tj +-21.8561 -6.4943 TD +(0x03)Tj +-0.0016 -7.4286 TD +(0x08)Tj +0.004 -3.4286 TD +(0x09)Tj +-0.0724 -3.4286 TD +(0x0A)Tj +0.0149 -3.4286 TD +(0x0B)Tj +-0.0301 -3.4286 TD +(0x0C)Tj +0.0821 -10.2857 TD +(0x12)Tj +16.2094 41.3514 TD +(SPI status and control)Tj +22.2219 -2.8514 TD +(read-only)Tj +0 -3.4286 TD +(read-only)Tj +T* +(read-only)Tj +-0.3176 10.2143 TD +(unused/)Tj +-0.3722 -1 TD +(undefined)Tj +ET +117 159 m +117 681 l +S +BT +10.5 0 0 10.5 485.5303 317.25 Tm +(read-only)Tj +-22.387 0 TD +(unused)Tj +ET +429 447 m +429 483 l +381 447 m +381 483 l +S +BT +10.5 0 0 10.5 395.4431 471.75 Tm +(DLL)Tj +-0.1765 -1 TD +(DCO)Tj +-0.3921 -1 TD +(enable)Tj +8.4999 0.9943 TD +(default 0x02)Tj +ET +429 411 m +429 447 l +S +BT +10.5 0 0 10.5 440.4431 430.5 Tm +(DLL)Tj +-0.6543 -1 TD +(bypass)Tj +4.3839 0.4943 TD +(default 0x01)Tj +ET +429 375 m +429 411 l +429 339 m +429 375 l +429 303 m +429 339 l +S +BT +10.5 0 0 10.5 436.2938 394.44 Tm +(CPU)Tj +0.1501 -1 TD +(IRQ)Tj +-0.1501 -2.4286 TD +(CPU)Tj +-0.0791 -1 TD +(reset)Tj +0.0791 -2.4286 TD +(CPU)Tj +0.178 -1 TD +(trap)Tj +-17.8758 3.9343 TD +(unused)Tj +0 3.4286 TD +(unused)Tj +T* +(unused)Tj +21.739 -3.4343 TD +(default 0x00)Tj +0 -3.4286 TD +(default 0x00)Tj +/TT2 1 Tf +-25.9587 31.7914 TD +(Housekeeping SPI register map)Tj +ET +543 303 m +69 303 l +543 267 m +69 267 l +543 195 m +69 195 l +S +BT +/TT6 1 Tf +10.5 0 0 10.5 77.9991 286.5 Tm +(0x0D–)Tj +0 -1 TD +(0x10)Tj +0.4653 -3.1429 TD +(0x11)Tj +12.8174 20.7857 TD +(unused)Tj +21.2358 0.5 TD +(DLL)Tj +-0.5686 -1 TD +(enable)Tj +ET +201 231 m +201 267 l +S +BT +10.5 0 0 10.5 142.4672 245.25 Tm +(unused)Tj +32.0243 -0.0057 TD +(default 0x12)Tj +1.2058 3.9286 TD +(default)Tj +-0.2821 -1 TD +(0x3ffefff)Tj +ET +543 159 m +543 681 l +543 231 m +69 231 l +S +BT +10.5 0 0 10.5 78.8391 502.62 Tm +(0x04–)Tj +T* +(0x07)Tj +10.0598 10.56 TD +(unused)Tj +0.872 -10.0771 TD +(user_project_ID \(unique value per project\))Tj +27.8007 0.0057 TD +(read-only)Tj +-28.1013 -27.4286 TD +(unused)Tj +ET +267 195 m +267 231 l +339 231 m +339 267 l +S +BT +10.5 0 0 10.5 478.7072 209.19 Tm +(default 0x04)Tj +-15.0726 0 TD +(PLL feedback divider)Tj +4.0686 3.4343 TD +(PLL output divider)Tj +-12.9774 0 TD +(PLL output divider 2)Tj +0.042 3.4229 TD +(DCO trim \(26 bits\) \(= 0x3ffefff\))Tj +ET +543 159 m +69 159 l +S +BT +10.5 0 0 10.5 82.0341 171 Tm +(0x13)Tj +ET +159 159 m +159 195 l +207 159 m +207 195 l +255 159 m +255 195 l +297 159 m +297 195 l +339 159 m +339 195 l +381 159 m +381 195 l +429 159 m +429 195 l +S +BT +10.5 0 0 10.5 168.7022 178.5 Tm +(serial)Tj +0 -1 TD +(data 2)Tj +4.6554 1 TD +(serial)Tj +0 -1 TD +(data 1)Tj +4.1309 1 TD +(serial)Tj +0 -1 TD +(clock)Tj +4 1 TD +(serial)Tj +0 -1 TD +(load)Tj +4 1 TD +(serial)Tj +ET +0.518 w +344.959 176.33 m +368.302 176.33 l +S +BT +10.5 0 0 10.5 344.9587 168 Tm +(reset)Tj +4.2566 1 TD +(serial)Tj +0 -1 TD +(enable)Tj +4.2335 1.5 TD +(serial)Tj +0 -1 TD +(xfer/)Tj +T* +(busy*)Tj +-34.2347 -3.9286 TD +(* Bit is write-only for serial transfer, read-only for serial busy. During transfer, the busy bit is one.)Tj +0 -1 TD +( Transfer is complete when the busy bit returns to zero.)Tj +38.5594 6.9286 TD +(bits 6 to 1)Tj +0 -1 TD +(are bit-bang)Tj +T* +(control.)Tj +ET +endstream +endobj +21 0 obj +<< +/ProcSet [/PDF /Text ] +/Font << +/TT2 4 0 R +/TT4 5 0 R +/TT6 6 0 R +>> +/ExtGState << +/GS1 8 0 R +>> +>> +endobj +23 0 obj +<< +/Length 4685 +>> +stream +0.898 0.898 0.898 rg +0.898 0.898 0.898 RG +1 J 2 j 0.975 w 6 M []0 d +/GS1 gs +1 i +117 261 306 36 re +B* +117 297 174 36 re +B* +117 369 90 36 re +B* +117 441 264 36 re +B* +117 477 216 36 re +B* +117 513 174 36 re +B* +117 621 264 36 re +B* +117 147 138 36 re +B* +BT +/TT2 1 Tf +10.5 0 0 10.5 68.16 711 Tm +0 0 0 rg +0 Tc +0 Tw +(Functional Description )Tj +/TT4 1 Tf +11.1118 0 TD +(\(cont.\))Tj +ET +0 0 0 RG +543 705 m +69 705 l +543 621 m +69 621 l +S +BT +10.5 0 0 10.5 125.2228 675 Tm +[(msb)-28133.7(lsb)]TJ +ET +543 549 m +69 549 l +69 261 m +69 675 l +S +BT +10.5 0 0 10.5 72.9525 673.5 Tm +(Register)Tj +0 -1 TD +(Address)Tj +ET +543 657 m +69 657 l +543 513 m +69 513 l +S +BT +/TT6 1 Tf +10.5 0 0 10.5 81.9872 633 Tm +(0x14)Tj +0.0023 -2.8571 TD +(0x15)Tj +ET +543 405 m +69 405 l +159 657 m +159 669 l +207 657 m +207 669 l +255 657 m +255 669 l +297 657 m +297 669 l +339 657 m +339 669 l +381 657 m +381 669 l +429 657 m +429 669 l +471 261 m +471 675 l +S +BT +10.5 0 0 10.5 134.64 663 Tm +3.4438 Tc +[(76)-571.5(5)-582.9(4)0(3)11.4(2)57.1(1)-628.6(0)]TJ +/TT4 1 Tf +32.5985 0 TD +0 Tc +(comments)Tj +ET +543 369 m +69 369 l +543 333 m +69 333 l +543 441 m +69 441 l +543 477 m +69 477 l +543 585 m +69 585 l +S +BT +/TT6 1 Tf +10.5 0 0 10.5 81.9431 531 Tm +(0x1a)Tj +38.4369 3.0714 TD +(read-only)Tj +-0.3176 -23.5 TD +(unused/)Tj +-0.3722 -1 TD +(undefined)Tj +ET +117 261 m +117 675 l +S +BT +10.5 0 0 10.5 478.7269 383.19 Tm +(default 0x00)Tj +/TT2 1 Tf +-26.5302 28.9343 TD +(Housekeeping SPI register map, continued)Tj +ET +543 297 m +69 297 l +543 261 m +69 261 l +543 261 m +543 675 l +S +BT +/TT6 1 Tf +10.5 0 0 10.5 78.8391 571.6201 Tm +(0x16–)Tj +0 -1 TD +(0x19)Tj +0.3013 -6.8686 TD +(0x1b)Tj +0.0177 -3.4286 TD +(0x1c)Tj +-0.319 -3 TD +(0x1d–)Tj +0 -1 TD +(0x68)Tj +0.3067 -2.8571 TD +(0x69)Tj +-0.3067 -2.9886 TD +(0x6a–)Tj +0 -1 TD +(0x6d)Tj +0.3042 -2.8686 TD +(0x6e)Tj +0.1264 -3.4286 TD +(0x6f)Tj +ET +69 183 474 -72 re +543 147 m +69 147 l +471 111 m +471 183 l +117 111 m +117 183 l +S +BT +10.5 0 0 10.5 82.1672 161.25 Tm +(0x1d)Tj +-0.0128 -3.4171 TD +(0x1e)Tj +-1.287 6.6314 TD +(GPIO configuration bits \(2 bytes per GPIO, using GPIO mprj_io[0] as an example\))Tj +9.3283 -3.2143 TD +(unused)Tj +ET +255 111 m +255 147 l +339 111 m +339 147 l +297 111 m +297 147 l +381 111 m +381 147 l +429 111 m +429 147 l +297 147 m +297 183 l +339 147 m +339 183 l +381 147 m +381 183 l +429 147 m +429 183 l +255 147 m +255 183 l +213 111 m +213 147 l +165 111 m +165 147 l +S +BT +10.5 0 0 10.5 259.7756 161.25 Tm +[(DM[2])-1904.4(DM[1])-1333(DM[0])]TJ +13.0521 0.5 TD +(trip)Tj +0 -1 TD +(point)Tj +3.8028 1 TD +(slow)Tj +0 -1 TD +(slew)Tj +-29.7545 -2.4286 TD +(analog)Tj +0 -1 TD +(polarity)Tj +4.707 1 TD +(analog)Tj +0 -1 TD +(select)Tj +3.9904 1 TD +(analog)Tj +0 -1 TD +(enable)Tj +4.1857 1.5 TD +(IB)Tj +0 -1 TD +(mode)Tj +T* +(select)Tj +3.7229 1.5 TD +(input)Tj +0 -1 TD +(disable)Tj +4.3771 1 TD +(hold)Tj +0 -1 TD +(value)Tj +4.2857 1.0229 TD +(output)Tj +ET +0.518 w +389.653 129.105 m +421.184 129.105 l +S +BT +10.5 0 0 10.5 389.6531 120.24 Tm +(enable)Tj +4 1 TD +(mgmt)Tj +0 -1 TD +(enable)Tj +ET +0.975 w +381 621 m +381 657 l +S +BT +10.5 0 0 10.5 238.4672 635.25 Tm +(unused)Tj +ET +429 621 m +429 657 l +S +BT +10.5 0 0 10.5 385.7513 640.4401 Tm +(SRAM)Tj +T* +(r/o clock)Tj +4.9466 1 TD +(SRAM)Tj +0 -1 TD +(r/o csb)Tj +-21.232 -2.9286 TD +(SRAM read-only address)Tj +-1.121 -3.4286 TD +(SRAM read-only data \(32 bits\))Tj +26.2612 3.4286 TD +(default 0x00)Tj +T* +(default 0x00)Tj +ET +291 513 m +291 549 l +333 477 m +333 513 l +381 441 m +381 477 l +333 513 m +333 549 l +381 513 m +381 549 l +381 477 m +381 513 l +429 513 m +429 549 l +429 477 m +429 513 l +429 441 m +429 477 l +S +BT +10.5 0 0 10.5 296.9644 537.8701 Tm +(user1)Tj +0 -1 TD +(vccd)Tj +T* +(good)Tj +4.4874 2 TD +(user2)Tj +0 -1 TD +(vccd)Tj +T* +(good)Tj +4.6554 2 TD +(user1)Tj +0 -1 TD +(vdda)Tj +T* +(good)Tj +4.4874 2 TD +(user2)Tj +0 -1 TD +(vdda)Tj +T* +(good)Tj +4.3284 0.9886 TD +(read-only)Tj +-13.8881 -2.3371 TD +(core)Tj +0 -1 TD +(clock)Tj +T* +(monitor)Tj +4.5714 2 TD +(user)Tj +0 -1 TD +(clock)Tj +T* +(monitor)Tj +4.56 1.9314 TD +(trap)Tj +0 -1 TD +(state)Tj +T* +(monitor)Tj +-4.3745 -1.9514 TD +(irq 2)Tj +0 -1 TD +(source)Tj +4.5714 1 TD +(irq 1)Tj +0 -1 TD +(source)Tj +-26.8924 -2.9343 TD +(GPIO configuration data staging \(see table at bottom\))Tj +30.8042 6.8571 TD +(default 0x00)Tj +0 -3.4286 TD +(default 0x00)Tj +-27.4533 6.8629 TD +(unused)Tj +1.7143 -3.4286 TD +(unused)Tj +1.7143 -3.4286 TD +(unused)Tj +-7.4286 -6.8571 TD +(unused)Tj +ET +207 369 m +207 405 l +S +BT +10.5 0 0 10.5 254.4956 383.19 Tm +(GPIO data for mprj_io[37:32])Tj +21.3554 -3.4286 TD +(default 0x00)Tj +-23.3668 0 TD +(GPIO data for mprj_io[31:0])Tj +ET +291 333 m +291 297 l +S +BT +10.5 0 0 10.5 190.4672 311.25 Tm +[(unused)-7889.9(user domain power control)]TJ +ET +423 261 m +423 297 l +S +BT +10.5 0 0 10.5 244.4672 275.25 Tm +(unused)Tj +17.5796 1 TD +(house-)Tj +0 -1 TD +(keeping)Tj +T* +(disable)Tj +4.7308 0.9943 TD +(default 0x00)Tj +ET +endstream +endobj +24 0 obj +<< +/ProcSet [/PDF /Text ] +/Font << +/TT2 4 0 R +/TT4 5 0 R +/TT6 6 0 R +>> +/ExtGState << +/GS1 8 0 R +>> +>> +endobj +8 0 obj +<< +/Type /ExtGState +/SA false +/SM 0.02 +/OP false +/op false +/OPM 1 +/BG2 /Default +/UCR2 /Default +/HT /Default +/TR2 /Default +>> +endobj +25 0 obj +<< +/Type /FontDescriptor +/Ascent 770 +/CapHeight 718 +/Descent -229 +/Flags 262176 +/FontBBox [-170 -228 1003 962] +/FontName /Helvetica-Bold +/ItalicAngle 0 +/StemV 133 +/XHeight 532 +/StemH 140 +>> +endobj +26 0 obj +<< +/Type /FontDescriptor +/Ascent 770 +/CapHeight 718 +/Descent -229 +/Flags 96 +/FontBBox [-170 -225 1116 931] +/FontName /Helvetica-Oblique +/ItalicAngle -15 +/StemV 88 +/XHeight 523 +/StemH 88 +>> +endobj +27 0 obj +<< +/Type /FontDescriptor +/Ascent 770 +/CapHeight 718 +/Descent -229 +/Flags 32 +/FontBBox [-166 -225 1000 931] +/FontName /Helvetica +/ItalicAngle 0 +/StemV 88 +/XHeight 523 +/StemH 88 +>> +endobj +28 0 obj +<< +/Type /FontDescriptor +/Ascent 753 +/CapHeight 562 +/Descent -246 +/Flags 262179 +/FontBBox [-113 -250 749 801] +/FontName /Courier-Bold +/ItalicAngle 0 +/StemV 133 +/XHeight 439 +/StemH 84 +>> +endobj +4 0 obj +<< +/Type /Font +/Subtype /TrueType +/FirstChar 32 +/LastChar 121 +/Widths [278 0 0 0 0 0 0 0 333 333 0 0 278 333 0 0 +0 0 556 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 722 722 0 611 0 722 278 0 0 611 0 0 778 +667 778 722 667 0 722 0 0 0 0 0 0 0 0 0 556 +0 556 611 556 611 556 333 611 611 278 278 556 278 889 611 611 +611 0 389 556 333 611 556 0 0 556 ] +/Encoding /WinAnsiEncoding +/BaseFont /Helvetica-Bold +/FontDescriptor 25 0 R +>> +endobj +5 0 obj +<< +/Type /Font +/Subtype /TrueType +/FirstChar 32 +/LastChar 117 +/Widths [278 0 0 0 0 0 0 0 333 333 0 0 0 0 278 0 +0 0 556 0 0 0 0 0 556 0 0 0 0 0 0 0 +0 667 0 0 0 0 611 0 722 278 0 0 0 0 0 0 +667 0 722 667 611 0 0 0 0 0 0 0 0 0 0 0 +0 556 556 500 556 556 0 556 0 222 0 500 222 833 556 556 +556 0 333 500 278 556 ] +/Encoding /WinAnsiEncoding +/BaseFont /Helvetica-Oblique +/FontDescriptor 26 0 R +>> +endobj +6 0 obj +<< +/Type /Font +/Subtype /TrueType +/FirstChar 32 +/LastChar 150 +/Widths [278 0 355 0 0 0 0 0 333 333 389 0 278 333 278 278 +556 556 556 556 556 556 556 556 556 556 278 0 0 584 0 0 +0 667 667 722 722 667 611 778 722 278 0 667 556 833 722 778 +667 778 722 667 611 722 667 944 0 0 0 278 0 278 0 556 +0 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 +556 556 333 500 278 556 500 722 500 500 500 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 333 333 0 556 ] +/Encoding /WinAnsiEncoding +/BaseFont /Helvetica +/FontDescriptor 27 0 R +>> +endobj +7 0 obj +<< +/Type /Font +/Subtype /TrueType +/FirstChar 48 +/LastChar 110 +/Widths [600 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 ] +/Encoding /WinAnsiEncoding +/BaseFont /Courier-Bold +/FontDescriptor 28 0 R +>> +endobj +1 0 obj +<< +/Type /Page +/Parent 9 0 R +/Resources 3 0 R +/Contents 2 0 R +>> +endobj +10 0 obj +<< +/Type /Page +/Parent 9 0 R +/Resources 12 0 R +/Contents 11 0 R +>> +endobj +13 0 obj +<< +/Type /Page +/Parent 9 0 R +/Resources 15 0 R +/Contents 14 0 R +>> +endobj +16 0 obj +<< +/Type /Page +/Parent 9 0 R +/Resources 18 0 R +/Contents 17 0 R +>> +endobj +19 0 obj +<< +/Type /Page +/Parent 9 0 R +/Resources 21 0 R +/Contents 20 0 R +>> +endobj +22 0 obj +<< +/Type /Page +/Parent 9 0 R +/Resources 24 0 R +/Contents 23 0 R +>> +endobj +29 0 obj +<< +/S /D +>> +endobj +30 0 obj +<< +/Nums [0 29 0 R ] +>> +endobj +9 0 obj +<< +/Type /Pages +/Kids [1 0 R 10 0 R 13 0 R 16 0 R 19 0 R 22 0 R] +/Count 6 +/MediaBox [0 0 612 792] +>> +endobj +31 0 obj +<< +/CreationDate (D:20211216153745-08'00') +/ModDate (D:20211216153745-08'00') +/Producer (PSNormalizer.framework) +>> +endobj +32 0 obj +<< +/Type /Catalog +/Pages 9 0 R +/PageLabels 30 0 R +>> +endobj +xref +0 33 +0000000000 65535 f +0000030606 00000 n +0000000016 00000 n +0000008235 00000 n +0000028906 00000 n +0000029340 00000 n +0000029749 00000 n +0000030306 00000 n +0000027958 00000 n +0000031169 00000 n +0000030686 00000 n +0000008363 00000 n +0000012693 00000 n +0000030769 00000 n +0000012811 00000 n +0000017068 00000 n +0000030852 00000 n +0000017186 00000 n +0000018375 00000 n +0000030935 00000 n +0000018493 00000 n +0000022984 00000 n +0000031018 00000 n +0000023102 00000 n +0000027840 00000 n +0000028098 00000 n +0000028304 00000 n +0000028509 00000 n +0000028704 00000 n +0000031101 00000 n +0000031129 00000 n +0000031285 00000 n +0000031417 00000 n +trailer +<< +/Size 33 +/Root 32 0 R +/Info 31 0 R +/ID [<632f8673ade4cd4dd365331bd25c0f05><632f8673ade4cd4dd365331bd25c0f05>] +>> +startxref +31486 +%%EOF +1 0 obj +<< /Resources 3 0 R /Type /Page /Contents 2 0 R /Rotate 0 /Parent 9 0 R >> +endobj +10 0 obj +<< /Resources 12 0 R /Type /Page /Contents 11 0 R /Rotate 0 /Parent 9 0 R +>> +endobj +13 0 obj +<< /Resources 15 0 R /Type /Page /Contents 14 0 R /Rotate 0 /Parent 9 0 R +>> +endobj +16 0 obj +<< /Resources 18 0 R /Type /Page /Contents 17 0 R /Rotate 0 /Parent 9 0 R +>> +endobj +19 0 obj +<< /Resources 21 0 R /Type /Page /Contents 20 0 R /Rotate 0 /Parent 9 0 R +>> +endobj +22 0 obj +<< /Resources 24 0 R /Type /Page /Contents 23 0 R /Rotate 0 /Parent 9 0 R +>> +endobj +31 0 obj +<< /ModDate (D:20211216234047Z00'00') /Producer (macOS Version 11.5.2 \(Build 20G95\) Quartz PDFContext, AppendMode 1.1) +/CreationDate (D:20211216153745-08'00') >> +endobj +xref +0 2 +0000000000 65535 f +0000032302 00000 n +10 1 +0000032392 00000 n +13 1 +0000032485 00000 n +16 1 +0000032578 00000 n +19 1 +0000032671 00000 n +22 1 +0000032764 00000 n +31 1 +0000032857 00000 n +trailer +<< /ID [<632F8673ADE4CD4DD365331BD25C0F05> ] /Root 32 0 R /Size 33 /Prev 31486 /Info 31 0 R >> +startxref +33037 +%%EOF diff --git a/doc/pdf/irq_function.pdf b/doc/pdf/irq_function.pdf new file mode 100644 index 00000000..e04ea1ba Binary files /dev/null and b/doc/pdf/irq_function.pdf differ diff --git a/doc/pdf/memory_map.pdf b/doc/pdf/memory_map.pdf new file mode 100644 index 00000000..9393c960 Binary files /dev/null and b/doc/pdf/memory_map.pdf differ diff --git a/doc/pdf/monitor_function.pdf b/doc/pdf/monitor_function.pdf new file mode 100644 index 00000000..adf28058 Binary files /dev/null and b/doc/pdf/monitor_function.pdf differ diff --git a/doc/pdf/openframe_pinout.pdf b/doc/pdf/openframe_pinout.pdf new file mode 100644 index 00000000..f1198d9d Binary files /dev/null and b/doc/pdf/openframe_pinout.pdf differ diff --git a/doc/pdf/qspi_function.pdf b/doc/pdf/qspi_function.pdf new file mode 100644 index 00000000..c2830a34 Binary files /dev/null and b/doc/pdf/qspi_function.pdf differ diff --git a/doc/pdf/spi_master_function.pdf b/doc/pdf/spi_master_function.pdf new file mode 100644 index 00000000..f9fde88b Binary files /dev/null and b/doc/pdf/spi_master_function.pdf differ diff --git a/doc/pdf/uart_function.pdf b/doc/pdf/uart_function.pdf new file mode 100644 index 00000000..099adb56 Binary files /dev/null and b/doc/pdf/uart_function.pdf differ diff --git a/doc/requirements.txt b/doc/requirements.txt new file mode 100755 index 00000000..46b77444 --- /dev/null +++ b/doc/requirements.txt @@ -0,0 +1,8 @@ +git+https://github.com/SymbiFlow/sphinx_materialdesign_theme.git#egg=sphinx-symbiflow-theme + +docutils +sphinx +sphinx-autobuild +recommonmark +sphinx_markdown_tables +sphinxcontrib-wavedrom diff --git a/doc/source/_static/Google_logo.svg b/doc/source/_static/Google_logo.svg new file mode 100755 index 00000000..3790851d --- /dev/null +++ b/doc/source/_static/Google_logo.svg @@ -0,0 +1,2 @@ + + diff --git a/doc/source/_static/bond_plan.svg b/doc/source/_static/bond_plan.svg new file mode 100755 index 00000000..e4c289ec --- /dev/null +++ b/doc/source/_static/bond_plan.svg @@ -0,0 +1,984 @@ + + +XCircuit Version 3.10 +File "bond_plan.ps" Page 32 + + + +Bond plan + + +Bumps at 0.5mm spacing, 250um diameter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +45 signal pins + + +14 unique power pins + + +4 redundant power pins + + + +59 pins + + +60 pad positions (6 x 10 array) + + +Unique power domains: + + +vddio + + +vdda + + +vccd + + +vdda1 + + +vccd1 + + +vdda2 + + +vccd2 + + +vssio + + +vssa + + +vssd + + +vssa1 + + +vssd1 + + +vssa2 + + +vssd2 + + + + +Combine these into one netand route to center bumps + + + +Total: 56 pins + + +A + + +B + + +C + + +D + + +E + + +F + + +1 + + +2 + + +3 + + +4 + + +5 + + +6 + + +7 + + +8 + + +9 + + +10 + + +flashio0 + + +gpio + + +flashio1 + + +flashclk + + +flashcsb + + +mprjio[0] + + +mprjio[1] + + +mprjio[2] + + +mprjio[37] + + +mprjio[36] + + +clock + + +resetb + + +vddio + + +vdda + + +vssa1 + + +vccd + + +vssa + + +mprjio[3] + + +mprjio[4] + + +mprjio[5] + + +mprjio[6] + + +mprjio[7] + + +mprjio[8] + + +mprjio[9] + + +mprjio[10] + + +mprjio[11] + + +mprjio[35] + + +mprjio[33] + + +mprjio[32] + + +mprjio[31] + + +mprjio[30] + + +mprjio[29] + + +mprjio[28] + + +mprjio[27] + + +mprjio[26] + + +mprjio[25] + + +mprjio[24] + + +mprjio[23] + + +mprjio[22] + + +mprjio[21] + + +mprjio[20] + + +mprjio[19] + + +mprjio[18] + + +mprjio[17] + + +mprjio[16] + + +mprjio[15] + + +mprjio[14] + + +mprjio[13] + + +mprjio[12] + + +vssd + + +vdda1 + + +vccd1 + + +vccd2 + + +vdda2 + + +vssa1 + + +vssd2 + + +vssa2 + + +vdda1 + + +vddio + + +vssio + + +vssio + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Pinout + + + +A1 + + +A2 + + +A3 + + +A4 + + +A5 + + +A6 + + +A7 + + +A8 + + +A9 + + +A10 + + +B1 + + +B2 + + +B3 + + +B4 + + +B5 + + +B6 + + +B7 + + +B8 + + +B9 + + +B10 + + +C1 + + +C2 + + +C3 + + +C4 + + +C7 + + +C8 + + +C9 + + +C10 + + +D1 + + +D2 + + +D3 + + +D4 + + +D7 + + +D8 + + +D9 + + +D10 + + +E1 + + +E2 + + +E3 + + +E4 + + +E5 + + +E6 + + +E7 + + +E8 + + +E9 + + +E10 + + +F1 + + +F2 + + +F3 + + +F4 + + +F5 + + +F6 + + +F7 + + +F8 + + +F9 + + +F10 + + +mprj_io[23] + + +vccd2 + + +mprj_io[25] + + +mprj_io[26] + + +mprj_io[27] + + +mprj_io[28] + + +mprj_io[29] + + +mprj_io[30] + + +mprj_io[31] + + +mprj_io[32] + + +mprj_io[33] + + +mprj_io[34] + + +mprj_io[35] + + +mprj_io[36] + + +mprj_io[22] + + +mprj_io[21] + + +mprj_io[20] + + +mprj_io[19] + + +mprj_io[18] + + +mprj_io[17] + + +mprj_io[16] + + +mprj_io[15] + + +mprj_io[14] + + +mprj_io[13] + + +mprj_io[12] + + +mprj_io[11]/flash2 io1 + + +mprj_io[10]/flash2 io0 + + +mprj_io[9]/flash2 sck + + +mprj_io[8]/flash2 csb + + +mprj_io[7]/irq + + +mprj_io[6]/ser_tx + + +mprj_io[5]/ser_rx + + +mprj_io[4]/SCK + + +mprj_io[3]/CSB + + +mprj_io[2]/SDI + + +mprj_io[1]/SDO + + +mprj_io[0]/JTAG + + +vccd + + +vssa2 + + +vssd2 + + +resetb + + +mprj_io[24] + + +vssio/vssa/vssd + + +flash clk + + +clock + + +flash csb + + +vdda1 + + +vssa1 + + +flash io1 + + +flash io0 + + +vssd1 + + +gpio + + +vccd1 + + +vdda + + + +JTAG + + +SDO + + +SDI + + +CSB + + +SCK + + +ser_rx + + +ser_tx + + +irq + + +flash2 csb + + +flash2 sck + + +flash2 io0 + + +flash2 io1 + + +NOTE: Viewed from bump side + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +mprjio[34] + + + + + + + +vssd1 + + + + + + + + + + + +mprj_io[37] + + +vddio + + +C5 + + +C6 + + +D5 + + +D6 + + +vssio/vssa/vssd + + +vssio/vssa/vssd + + +vssio/vssa/vssd + + +vdda2 + + + diff --git a/doc/source/_static/caravel.png b/doc/source/_static/caravel.png new file mode 100755 index 00000000..55fcf886 Binary files /dev/null and b/doc/source/_static/caravel.png differ diff --git a/doc/source/_static/caravel_harness.png b/doc/source/_static/caravel_harness.png new file mode 100755 index 00000000..c220df9c Binary files /dev/null and b/doc/source/_static/caravel_harness.png differ diff --git a/doc/source/_static/caravel_harness_die.svg b/doc/source/_static/caravel_harness_die.svg new file mode 100755 index 00000000..1c82a846 --- /dev/null +++ b/doc/source/_static/caravel_harness_die.svg @@ -0,0 +1,1805 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/source/_static/caravel_management_soc_simplified_block_diagram.svg b/doc/source/_static/caravel_management_soc_simplified_block_diagram.svg new file mode 100755 index 00000000..afd995b0 --- /dev/null +++ b/doc/source/_static/caravel_management_soc_simplified_block_diagram.svg @@ -0,0 +1,7952 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/source/_static/counter_32.png b/doc/source/_static/counter_32.png new file mode 100755 index 00000000..cbe7e06d Binary files /dev/null and b/doc/source/_static/counter_32.png differ diff --git a/doc/source/_static/die_pads.svg b/doc/source/_static/die_pads.svg new file mode 100755 index 00000000..fc8f2bae --- /dev/null +++ b/doc/source/_static/die_pads.svg @@ -0,0 +1,10105 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/source/_static/efabless_lg_logo.png b/doc/source/_static/efabless_lg_logo.png new file mode 100755 index 00000000..5c1b9116 Binary files /dev/null and b/doc/source/_static/efabless_lg_logo.png differ diff --git a/doc/source/_static/gpio.svg b/doc/source/_static/gpio.svg new file mode 100755 index 00000000..aa19e532 --- /dev/null +++ b/doc/source/_static/gpio.svg @@ -0,0 +1,3561 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/source/_static/gpio_pads.svg b/doc/source/_static/gpio_pads.svg new file mode 100755 index 00000000..913b02d7 --- /dev/null +++ b/doc/source/_static/gpio_pads.svg @@ -0,0 +1,4278 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/source/_static/housekeeping_spi_register_map.svg b/doc/source/_static/housekeeping_spi_register_map.svg new file mode 100755 index 00000000..ce0df352 --- /dev/null +++ b/doc/source/_static/housekeeping_spi_register_map.svg @@ -0,0 +1,5861 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/source/_static/housekeeping_spi_signalling.svg b/doc/source/_static/housekeeping_spi_signalling.svg new file mode 100755 index 00000000..44ba242d --- /dev/null +++ b/doc/source/_static/housekeeping_spi_signalling.svg @@ -0,0 +1,3705 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/source/_static/mgmt_soc_memory_map.png b/doc/source/_static/mgmt_soc_memory_map.png new file mode 100755 index 00000000..ff29081b Binary files /dev/null and b/doc/source/_static/mgmt_soc_memory_map.png differ diff --git a/doc/source/_static/package_as_viewed_from_the_bottom.svg b/doc/source/_static/package_as_viewed_from_the_bottom.svg new file mode 100755 index 00000000..523a3a9c --- /dev/null +++ b/doc/source/_static/package_as_viewed_from_the_bottom.svg @@ -0,0 +1,1967 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/source/_static/pcb_example_route_pattern.svg b/doc/source/_static/pcb_example_route_pattern.svg new file mode 100755 index 00000000..ab7f0fa5 --- /dev/null +++ b/doc/source/_static/pcb_example_route_pattern.svg @@ -0,0 +1,434 @@ + + +XCircuit Version 3.10 +File "pcb_example_route_pattern.ps" Page 31 + + + +PCB example route pattern + + + +Via in center connects center ground pads + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Signal pad + + +Power pad + + +Ground pad + + + + +PCB via + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +mprj_io[23] + + +mprj_io[21] + + +mprj_io[19] + + +mprj_io[18] + + +mprj_io[16] + + +mprj_io[15] + + +vccd1 + + +A + + +B + + +C + + +D + + +E + + +F + + +1 + + +2 + + +3 + + +4 + + +5 + + +6 + + +7 + + +8 + + +9 + + +10 + + +vccd2 + + +mprj_io[25] + + +mprj_io[27] + + +mprj_io[29] + + + +mprj_io[31] + + +mprj_io[32] + + +mprj_io[35] + + +mprj_io[37] + + +vdda + + +mprj_io[24] + + +vssa2 + + +vddio + + +mprj_io[26] + + +mprj_io[28] + + +mprj_io[30] + + +vssd2 + + +mprj_io[34] + + +mprj_io[33] + + +mprj_io[22] + + +mprj_io[20] + + +mprj_io[17] + + +mprj_io[13] + + +mprj_io[14] + + +vdda1 + + +mprj_io[11]/flash2_io1 + + +mprj_io[12] + + +mprj_io[9]/flash2_sck + + +mprj_io[10]/flash2_io0 + + +mprj_io[7]/irq + + +mprj_io[8]/flash2_csb + + +vssa1 + + +vssd1 + + +mrpj_io[5]/ser_rx + + +mprj_io[6]/ser_tx + + +mprj_io[0]/JTAG + + +mprj_io[4]/SCK + + +mprj_io[3]/CSB + + +mprj_io[2]/SDI + + +mprj_io[1]/SDO + + +vdda + + +vssio/vssa/vssd + + +flash_clk + + +gpio + + +flash_io1 + + +flash_io0 + + +vdda2 + + +flash_csb + + +clock + + +resetb + + +mprj_io[36] + + + diff --git a/doc/source/_static/plus.png b/doc/source/_static/plus.png new file mode 100755 index 00000000..c29a22fc Binary files /dev/null and b/doc/source/_static/plus.png differ diff --git a/doc/source/_static/power_domain_splits.svg b/doc/source/_static/power_domain_splits.svg new file mode 100755 index 00000000..275a15b0 --- /dev/null +++ b/doc/source/_static/power_domain_splits.svg @@ -0,0 +1,4265 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/source/_static/reg_gpio_data.svg b/doc/source/_static/reg_gpio_data.svg new file mode 100755 index 00000000..ee4fbe34 --- /dev/null +++ b/doc/source/_static/reg_gpio_data.svg @@ -0,0 +1,2783 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/source/_static/reg_gpio_ena.svg b/doc/source/_static/reg_gpio_ena.svg new file mode 100755 index 00000000..63763a6d --- /dev/null +++ b/doc/source/_static/reg_gpio_ena.svg @@ -0,0 +1,2804 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/source/_static/reg_gpio_pd.svg b/doc/source/_static/reg_gpio_pd.svg new file mode 100755 index 00000000..0c0c84ca --- /dev/null +++ b/doc/source/_static/reg_gpio_pd.svg @@ -0,0 +1,2874 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/source/_static/reg_gpio_pu.svg b/doc/source/_static/reg_gpio_pu.svg new file mode 100755 index 00000000..6ba08586 --- /dev/null +++ b/doc/source/_static/reg_gpio_pu.svg @@ -0,0 +1,2783 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/source/_static/reg_irq7_source.svg b/doc/source/_static/reg_irq7_source.svg new file mode 100755 index 00000000..216bb2ff --- /dev/null +++ b/doc/source/_static/reg_irq7_source.svg @@ -0,0 +1,2813 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/source/_static/reg_pll_out_dest.svg b/doc/source/_static/reg_pll_out_dest.svg new file mode 100755 index 00000000..5602499d --- /dev/null +++ b/doc/source/_static/reg_pll_out_dest.svg @@ -0,0 +1,2841 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/source/_static/reg_spi_config.svg b/doc/source/_static/reg_spi_config.svg new file mode 100755 index 00000000..2aa1c0b4 --- /dev/null +++ b/doc/source/_static/reg_spi_config.svg @@ -0,0 +1,3000 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/source/_static/reg_spi_data.svg b/doc/source/_static/reg_spi_data.svg new file mode 100755 index 00000000..77672147 --- /dev/null +++ b/doc/source/_static/reg_spi_data.svg @@ -0,0 +1,2874 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/source/_static/reg_spictrl.svg b/doc/source/_static/reg_spictrl.svg new file mode 100755 index 00000000..be8f4a51 --- /dev/null +++ b/doc/source/_static/reg_spictrl.svg @@ -0,0 +1,2961 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/source/_static/reg_timer0_config.svg b/doc/source/_static/reg_timer0_config.svg new file mode 100755 index 00000000..5ecfab37 --- /dev/null +++ b/doc/source/_static/reg_timer0_config.svg @@ -0,0 +1,2977 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/source/_static/reg_timer0_data.svg b/doc/source/_static/reg_timer0_data.svg new file mode 100755 index 00000000..635868ec --- /dev/null +++ b/doc/source/_static/reg_timer0_data.svg @@ -0,0 +1,2778 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/source/_static/reg_timer0_value.svg b/doc/source/_static/reg_timer0_value.svg new file mode 100755 index 00000000..20848d1e --- /dev/null +++ b/doc/source/_static/reg_timer0_value.svg @@ -0,0 +1,2792 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/source/_static/reg_timer1_config.svg b/doc/source/_static/reg_timer1_config.svg new file mode 100755 index 00000000..6ad5d7bd --- /dev/null +++ b/doc/source/_static/reg_timer1_config.svg @@ -0,0 +1,2907 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/source/_static/reg_timer1_data.svg b/doc/source/_static/reg_timer1_data.svg new file mode 100755 index 00000000..c30f4476 --- /dev/null +++ b/doc/source/_static/reg_timer1_data.svg @@ -0,0 +1,2708 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/source/_static/reg_timer1_value.svg b/doc/source/_static/reg_timer1_value.svg new file mode 100755 index 00000000..80af0889 --- /dev/null +++ b/doc/source/_static/reg_timer1_value.svg @@ -0,0 +1,2722 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/source/_static/reg_trap_out_dest.svg b/doc/source/_static/reg_trap_out_dest.svg new file mode 100755 index 00000000..b42f82a8 --- /dev/null +++ b/doc/source/_static/reg_trap_out_dest.svg @@ -0,0 +1,2862 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/source/_static/reg_uart_clkdiv.svg b/doc/source/_static/reg_uart_clkdiv.svg new file mode 100755 index 00000000..df2843aa --- /dev/null +++ b/doc/source/_static/reg_uart_clkdiv.svg @@ -0,0 +1,2924 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/source/_static/reg_uart_data.svg b/doc/source/_static/reg_uart_data.svg new file mode 100755 index 00000000..502237da --- /dev/null +++ b/doc/source/_static/reg_uart_data.svg @@ -0,0 +1,2943 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/source/_static/reg_uart_enable.svg b/doc/source/_static/reg_uart_enable.svg new file mode 100755 index 00000000..c614f166 --- /dev/null +++ b/doc/source/_static/reg_uart_enable.svg @@ -0,0 +1,2957 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/source/_static/single_gpio_pad_structure_used_all_pads_except_0_and_1.svg b/doc/source/_static/single_gpio_pad_structure_used_all_pads_except_0_and_1.svg new file mode 100755 index 00000000..262b8b84 --- /dev/null +++ b/doc/source/_static/single_gpio_pad_structure_used_all_pads_except_0_and_1.svg @@ -0,0 +1,3800 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/source/_static/single_gpio_pad_structure_used_for_pad_0_and_pad_1.svg b/doc/source/_static/single_gpio_pad_structure_used_for_pad_0_and_pad_1.svg new file mode 100755 index 00000000..ec149349 --- /dev/null +++ b/doc/source/_static/single_gpio_pad_structure_used_for_pad_0_and_pad_1.svg @@ -0,0 +1,3761 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/source/_static/voltage_clamp_arrangement.svg b/doc/source/_static/voltage_clamp_arrangement.svg new file mode 100755 index 00000000..ece11cef --- /dev/null +++ b/doc/source/_static/voltage_clamp_arrangement.svg @@ -0,0 +1,10810 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/source/caravel-with-openlane.rst b/doc/source/caravel-with-openlane.rst new file mode 100755 index 00000000..a6c0f9a3 --- /dev/null +++ b/doc/source/caravel-with-openlane.rst @@ -0,0 +1,206 @@ +.. raw:: html + + + +.. raw:: html + + + +.. _caravel-with-openlane: + +Using OpenLANE to Harden Your Design +==================================== + +You can utilize the Makefile existing here in this directory to do that. + +But, first you need to specify 2 things: + +.. code:: bash + + export PDK_ROOT= + export OPENLANE_ROOT= + +If you don't have openlane already, then you can get it from +`here `__. + +**NOTE:** + + We are developing caravel using the latest openlane release v0.12. This will be continuously updated to the latest openlane tag until we reach a stable version of caravel. + +Then, you have two options: + +#. Create a macro for your design and harden it, then insert it into + `user_project_wrapper`. + +#. Flatten your design with the `user_project_wrapper` and harden them + as one. + +**NOTE:** + + The OpenLANE documentation should cover everything you might + need to create your design. You can find that + `here `__. + +Option 1: Inserting your design macro into the wrapper +---------------------------------------------------------- + +This could be done by creating a directory for your design under the ``/openlane/`` and adding a configuration file for it under the same +directory. You can follow the instructions given +`here `__ to +generate an initial configuration file for your design, or you can start +with the following: + +.. code:: tcl + + set script_dir [file dirname [file normalize [info script]]] + + set ::env(DESIGN_NAME) + + set ::env(DESIGN_IS_CORE) 0 + set ::env(FP_PDN_CORE_RING) 0 + set ::env(GLB_RT_MAXLAYER) 5 + + set ::env(VERILOG_FILES) "$script_dir/../../verilog/rtl/" + + set ::env(CLOCK_PORT) + set ::env(CLOCK_PERIOD) + +Then you can add any other configurations as you see fit to get the desired DRC/LVS clean +outcome. + +After that, run the following command from your ``/openlane/``: + +.. code:: bash + + make + +Then, follow the instructions given in Option 2. + +**NOTE:** + + You might have other macros inside your design. In which case, + you may need to have some special power configurations. This is covered + `here `__. + +Option 2: Flattening your design with the wrapper +------------------------------------------------ + +#. Add your design to the RTL of the + `user_project_wrapper `__. + +#. Modify the configuration file `here `__ to include any extra + files you may need. Make sure to change these accordingly: + + .. code:: tcl + + set ::env(CLOCK_NET) "mprj.clk" + set ::env(VERILOG_FILES) " \ + $script_dir/../../verilog/rtl/defines.v \ + $script_dir/../../verilog/rtl/user_project_wrapper.v" + + set ::env(VERILOG_FILES_BLACKBOX) " \ + $script_dir/../../verilog/rtl/defines.v \ + $script_dir/../../verilog/rtl/user_proj_example.v" + + set ::env(EXTRA_LEFS) " \ + $script_dir/../../lef/user_proj_example.lef" + + set ::env(EXTRA_GDS_FILES) " \ + $script_dir/../../gds/user_proj_example.gds" + + +#. If your design has standard cells then you need to modify the + configuration file `here `__ to + remove or change these configs accordingly: + + .. code:: tcl + + # The following is because there are no std cells in the example wrapper project. + set ::env(SYNTH_TOP_LEVEL) 1 + set ::env(PL_RANDOM_GLB_PLACEMENT) 1 + set ::env(PL_OPENPHYSYN_OPTIMIZATIONS) 0 + set ::env(DIODE_INSERTION_STRATEGY) 0 + set ::env(FILL_INSERTION) 0 + set ::env(TAP_DECAP_INSERTION) 0 + set ::env(CLOCK_TREE_SYNTH) 0 + +#. Remove this line + ``set ::env(MACRO_PLACEMENT_CFG) $script_dir/macro.cfg`` from the + configuration file `here `__ + entirely if you have no macros. Alternatively, if you do have macros + inside your design, then control their placement by modifying `this + file `__ + +#. Run your design through the flow: ``make user_project_wrapper`` + +#. You may want to take a look at the `Extra + Pointers <#extra-pointers>`__ to apply any necessary changes to the + interactive script. + +#. Re-iterate until you have what you want. + +**NOTE:** + + In both cases you might have other macros inside your design. + In which case, you may need to have some special power configurations. + This is covered `here `__. + +**WARNING:** + + Don't change the size or the pin order! + + +Extra Pointers +-------------- + +- The OpenLANE documentation should cover everything you might need to + create your design. You can find that + `here `__. +- The OpenLANE `FAQs `__ can + guide through your troubles. +- `Here `__ + you can find all the configurations and how to use them. +- `Here `__ + you can learn how to write an interactive script. +- `Here `__ + you can find a full documentation for all OpenLANE commands. +- `This + documentation `__ + describes how to use the exploration script to achieve an LVS/DRC + clean design. +- `This + documentation `__ + walks you through hardening a macro and all the decisions you should + make. diff --git a/doc/source/conf.py b/doc/source/conf.py new file mode 100755 index 00000000..f960f130 --- /dev/null +++ b/doc/source/conf.py @@ -0,0 +1,89 @@ +# SPDX-FileCopyrightText: 2020 Efabless Corporation +# +# 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. +# +# SPDX-License-Identifier: Apache-2.0 + +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + + +# -- Project information ----------------------------------------------------- + +project = 'CIIC Harness' +copyright = '2020, efabless' +author = 'efabless' + + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinxcontrib.wavedrom', + 'sphinx.ext.mathjax', + 'sphinx.ext.todo' +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = [ + 'build', + 'Thumbs.db', + # Files included in other rst files. + 'introduction.rst', +] + + +# -- Options for HTML output ------------------------------------------------- +""" +html_theme_options = { + 'header_links' : [ + ("Home", 'index', False, 'home'), + ("GitHub", "https://github.com/efabless/caravel", True, 'code'), + ], + 'hide_symbiflow_links': True, + 'license_url' : 'https://www.apache.org/licenses/LICENSE-2.0', +} +""" +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'sphinx_rtd_theme' + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +todo_include_todos = False + +numfig = True diff --git a/doc/source/counter-timers.rst b/doc/source/counter-timers.rst new file mode 100755 index 00000000..50a5ec34 --- /dev/null +++ b/doc/source/counter-timers.rst @@ -0,0 +1,211 @@ +.. raw:: html + + + +Counter-Timers +============== + +The counter/timer is a general-purpose 32-bit adder and subtractor that can be configured for a variety of timing functions including one-shot counts, continuous timing and interval interrupts. +At a core clock rate of 80 MHz, the longest single time interval is 26.84 seconds. + +Functionality +------------- + +When enabled, the counter counts up or down from the value set in ``reg_timerX_value`` (X is replaced by 0 or 1) at the time the counter is enabled. +If counting up, the count continues until the counter reaches ``reg_timerX_data``. +If counting down, the count continues until the counter reaches zero. + +In continuous mode, the counter resets to zero if counting up, and resets to the value in ``reg_timerX_data`` if counting down, and the count continues immediately. +If the interrupt is enabled, the counter will generate an interrupt on every cycle. + +In one-shot mode, the counter triggers an interrupt (:doc:`IRQ channels 10 and 11 ` for Timer 0 and 1, respectively), when it reaches the value of ``reg_timerX_data`` (up count) or zero (down count) and stops. + +.. note:: + + When the counter/timer is disabled, the ``reg_timerX_value`` remains unchanged, which puts the timer in a hold state. + When reenabled, counting resumes. + To reset the timer, write zero to the ``reg_timerX_value`` register. + +Counter-Timer 0 +--------------- + +The counter triggers an interrupt on IRQ channel 10. + +.. _reg_timer0_config: + +``reg_timer0_config`` +~~~~~~~~~~~~~~~~~~~~~ + +Base address: ``0x22000000`` + +.. wavedrom:: + + { "reg": [ + {"name": "Timer config", "bits": 8}, + {"name": "(undefined, reads zero)", "bits": 24, "type": 1}] + } + +.. list-table:: Timer 0 configuration bit definitions + :name: reg_timer0_configuration_bit_definitions + :header-rows: 1 + :widths: auto + + * - Bit + - Name + - Values + * - 3 + - Counter/timer enable + - 0 - counter/timer disabled + + 1 - counter/timer enabled + * - 2 + - One-shot mode + - 0 - continuous mode + + 1 - one-shot mode + * - 1 + - Updown + - 0 - count down + + 1 - count up + * - 0 + - Interrupt enable + - 0 - interrupt disabled + + 1 - interrupt enabled + +.. _reg_timer0_value: + +``reg_timer0_value`` +~~~~~~~~~~~~~~~~~~~~ + +Base address: ``0x22000004`` + +.. wavedrom:: + + { "reg": [ + {"name": "Timer value", "bits": 32}] + } + +| + +The value in this register is the current value of the counter. +Value is 32 bits. +The register is read-write and can be used to reset the timer. + +.. _reg_timer0_data: + +``reg_timer0_data`` +~~~~~~~~~~~~~~~~~~~~ + +Base address: ``0x22000008`` + +.. wavedrom:: + + { "reg": [ + {"name": "Timer data", "bits": 32}] + } + +| + +The value in this register is the reset value for the comparator. + +Counter-Timer 1 +--------------- + +The counter triggers an interrupt on IRQ channel 11. + +.. _reg_timer1_config: + +``reg_timer1_config`` +~~~~~~~~~~~~~~~~~~~~~ + +Base address: ``0x23000000`` + +.. wavedrom:: + + { "reg": [ + {"name": "Timer config", "bits": 8}, + {"name": "(undefined, reads zero)", "bits": 24, "type": 1}] + } + +.. list-table:: Timer 1 configuration bit definitions + :name: reg_timer1_configuration_bit_definitions + :header-rows: 1 + :widths: auto + + * - Bit + - Name + - Values + * - 3 + - Counter/timer enable + - 0 - counter/timer disabled + + 1 - counter/timer enabled + * - 2 + - One-shot mode + - 0 - continuous mode + + 1 - one-shot mode + * - 1 + - Updown + - 0 - count down + + 1 - count up + * - 0 + - Interrupt enable + - 0 - interrupt disabled + + 1 - interrupt enabled + +.. _reg_timer1_value: + +``reg_timer1_value`` +~~~~~~~~~~~~~~~~~~~~ + +Base address: ``0x23000004`` + +.. wavedrom:: + + { "reg": [ + {"name": "Timer value", "bits": 32}] + } + +| + +The value in this register is the current value of the counter. +Value is 32 bits. +The register is read-write and can be used to reset the timer. + +.. _reg_timer1_data: + +``reg_timer1_data`` +~~~~~~~~~~~~~~~~~~~~ + +Base address: ``0x23000008`` + +.. wavedrom:: + + { "reg": [ + {"name": "Timer data", "bits": 32}] + } + +| + +The value in this register is the reset value for the comparator. diff --git a/doc/source/description.rst b/doc/source/description.rst new file mode 100755 index 00000000..4ab01e70 --- /dev/null +++ b/doc/source/description.rst @@ -0,0 +1,62 @@ +.. raw:: html + + + +Description +=========== + +This section provides basic description of the Efabless Caravel "harness" SoC. + +Core +---- + +The processor core is the PicoRV32 design. +See GitHub `cliffordwolf/picorv32 repository `_ for the core implementation and description. +The hardware implementation is the "large" variant, incorporating options ``IRQ``, ``MUL``, ``DIV``, ``BARREL_SHIFTER``, and ``COMPRESSED_ISA`` (16-bit instructions). + +Core clock rate: (TBD) MHz maximum over all PVT conditions (likely around 50MHz guaranteed). + +Features +-------- + +Functions/features of the SoC include: + +* 1 SPI flash controller, +* 1 UART, +* 1 SPI controller, +* 2 counter-timers, +* 1 dedicated GPIO channel, +* 27 shared GPIO channels, +* 8k word (32768 bytes x 8 bits) on-board SRAM, +* All-digital frequency-locked loop clock multiplier 128bit logic analyzer. + +License +------- + +The Caravel is an open-source design, licensed under the terms of Apache 2.0. + +Repository +---------- + +The complete Caravel chip design may be obtained from the git repository located at GitHub `efabless/caravel repository `_. + +Process +------- + +The efabless Caravel harness chip is fabricated in SkyWater 0.13um CMOS technology, with process specifications and data at GitHub `google/skywater-pdk repository `_. diff --git a/doc/source/external-clock.rst b/doc/source/external-clock.rst new file mode 100755 index 00000000..e076fbcd --- /dev/null +++ b/doc/source/external-clock.rst @@ -0,0 +1,30 @@ +.. raw:: html + + + +External clock +============== + +The external clock is provided to :ref:`clock ` pin (C9). + +The external clock functions as the source clock for the entire processor. +On startup, the processor runs at the same rate as the external clock. +The processor program may access the :doc:`housekeeping-spi` to set the processor into PLL mode or DCO free-running mode. +In PLL mode, the external clock is multiplied by the feedback divider value to obtain the core clock. +In DCO mode, the processor is driven by a trimmed free-running ring oscillator. diff --git a/doc/source/further-work.rst b/doc/source/further-work.rst new file mode 100755 index 00000000..e92bc7c8 --- /dev/null +++ b/doc/source/further-work.rst @@ -0,0 +1,27 @@ +.. raw:: html + + + +Further work +============ + +* Add description for Logic Analyzer +* Add description for User area wishbone base +* Add description for user project area GPIO +* Link installation and build manual diff --git a/doc/source/getting-started.rst b/doc/source/getting-started.rst new file mode 100755 index 00000000..3f8b3ef0 --- /dev/null +++ b/doc/source/getting-started.rst @@ -0,0 +1,192 @@ +.. raw:: html + + +.. _getting-started: + +Caravel Architecture +==================== + +Caravel is composed of three main sub-blocks: *management area*, *storage area*, and *user project area*. + +.. _management-area: + +Management Area +-------------- + +The managment area includes a `picorv32 `__ based SoC that includes a number of periphrals like timers, uart, and gpio. The managemnt area runs firmware that can be used to: + +- Configure User Project I/O pads +- Observe and control User Project signals (through on-chip logic + analyzer probes) +- Control the User Project power supply + +For a complete list of the SoC periphrals, check the `memory map `__ + +.. _storage-area: + +Storage Area +-------------- + +The storage area is an auxiliary storage space for the managment SoC. It holds two dual port RAM blocks (1KB) generated by +`OpenRAM `__ + +The storage area is only accessible by the management SoC. + +.. _user-project-area: + +User Project Area +-------------- + +This is the user space. It has a limited silicon area ``2.92mm x 3.52mm`` as well as a fixed number of I/O pads ``38`` and power pads ``4``. + +The user space has access to the following utilities provided by the management SoC: + +- ``38`` IO Ports +- ``128`` Logic analyzer probes +- Wishbone port connection to the management SoC wishbone bus. + + +Quick Start for User Projects +============================= + +Your area is the full user space, so feel free to add your +project there or create a differnt macro and harden it seperately then +insert it into the ``user_project_wrapper`` for digital projects or insert it into ``user_project_analog_wrapper`` for analog projects. + +.. _digital-user-project: + +Digital User Project +-------------------- + +If you are building a digital project for the user space, check a sample project at `caravel_user_project `__. + +If you will use OpenLANE to harden your design, go through the instructions in this `README `__. + +Digital user projects should adhere the following requirements: + +- Top module is named ``user_project_wrapper`` + + +- The ``user_project_wrapper`` adheres to the pin order defined at `Digital Wrapper Pin Order `__. + + +- The ``user_project_wrapper`` adheres to the fixed design configurations at `Digital Wrapper Fixed Configuration `__. + + +- The user project repository adheres to the `Required Directory Structure <#required-directory-structure>`__. + + +.. _analog-user-project: + +Analog User Project +------------------ + +If you are building an analog project for the user space, check a sample project at `caravel_user_project_analog `__. + +Analog user projects should adhere the following requirements: + +- Top module is named ``user_analog_project_wrapper`` + +- The ``user_analog_project_wrapper`` uses the `empty analog wrapper `__. + +- The ``user_analog_project_wrapper`` adheres to the same pin order and placement of the `empty analog wrapper `__. + +------ + +IMPORTANT +^^^^^^^^^ + +Please make sure to run ``make compress`` before commiting anything to +your repository. Avoid having 2 versions of the +``gds/user_project_wrapper.gds`` one compressed and the +other not compressed. + +For information on tooling and versioning, please refer to `tool-versioning.rst <./docs/source/tool-versioning.rst>`__. + +----- + +Required Directory Structure +============================ + +- ``gds/`` : includes all the gds files used or produced from the + project. +- ``def`` : includes all the def files used or produced from the + project. +- ``lef/`` : includes all the lef files used or produced from the + project. +- ``mag/`` : includes all the mag files used or produced from the + project. +- ``maglef`` : includes all the maglef files used or produced from the + project. +- ``spi/lvs/`` : includes all the spice files used or produced from the + project. +- ``verilog/dv`` : includes all the simulation test benches and how to + run them. +- ``verilog/gl/`` : includes all the synthesized/elaborated netlists. +- ``verilog/rtl`` : includes all the Verilog RTLs and source files. +- ``openlane//`` : includes all configuration files used to + run openlane on your project. +- ``info.yaml``: includes all the info required in `this + example `__. Please make sure that you are pointing to an + elaborated caravel netlist as well as a synthesized + gate-level-netlist for the `user_project_wrapper` + + +**NOTE:** + + If you're using openlane to harden your design, the ``verilog/gl`` ``def/`` ``lef/`` ``gds/`` ``mag`` ``maglef`` directories should + be automatically populated by openlane. + +.. _additional-material: + +Additional Material +=============== + +.. _mpw-two: + +MPW Two +-------- + +- `Open MPW Program - MPW-TWO Walkthrough `__ +- `MPW Two Shuttle Program `__ + +.. _mpw-one: + +MPW One +-------------- + +- `Caravel User Project Features -- What are the utilities provided by caravel to the user project ? `__ +- `Aboard Caravel -- How to integrate your design with Caravel? `__ +- `Things to Clarify About Caravel -- What versions to use with Caravel? `__ +- `45 Chips in 30 Days: Open Source ASIC at its best! `__ + +Check `mpw-one-final `__ for the caravel used for the mpw-one tapeout. + +> :warning: You don't need to integrate your design with Caravel GDS for **MPW two**. Running ``make ship`` is no longer required. + + +.. |License| image:: https://img.shields.io/github/license/efabless/caravel + :alt: GitHub license - Apache 2.0 + :target: https://github.com/efabless/caravel +.. |Documentation Status| image:: https://readthedocs.org/projects/caravel-harness/badge/?version=latest + :alt: ReadTheDocs Badge - https://caravel-harness.rtfd.io + :target: https://caravel-harness.readthedocs.io/en/latest/?badge=latest +.. |Build Status| image:: https://travis-ci.com/efabless/caravel.svg?branch=master + :alt: Travis Badge - https://travis-ci.org/efabless/caravel + :target: https://travis-ci.com/efabless/caravel \ No newline at end of file diff --git a/doc/source/gpio.rst b/doc/source/gpio.rst new file mode 100755 index 00000000..adcf9b2c --- /dev/null +++ b/doc/source/gpio.rst @@ -0,0 +1,388 @@ +.. raw:: html + + + +General Purpose Input/Output +============================ + +The GPIO pin is a single assignable general-purpose digital input or output that is available only to the management SoC and cannot be assigned to the user project area. +On the test board provided with the completed user projects, this pin is used to enable the voltage regulators generating the user area power supplies. + +The basic function of the GPIO is illustrated in :ref:`gpio_structure`. +All writes to :ref:`reg_gpio_data` are registered. +All reads from :ref:`reg_gpio_data` are immediate. + +.. figure:: _static/gpio.svg + :name: gpio_structure + :alt: GPIO channel structure + :align: center + + GPIO channel structure + +Register descriptions +~~~~~~~~~~~~~~~~~~~~~ + +.. list-table:: GPIO memory address map + :name: gpio_memory_address_map + :header-rows: 1 + + * - C header name + - Address + - Description + * - :ref:`reg_gpio_data` + - ``0x21000000`` + - GPIO input/output (low bit) + + GPIO output readback (16th bit) + * - :ref:`reg_gpio_ena` + - ``0x21000004`` + - GPIO output enable (`0 = output`, `1 = input`) + * - :ref:`reg_gpio_pu` + - ``0x21000008`` + - GPIO pullup enable (`0 = none`, `1 = pullup`) + * - :ref:`reg_gpio_pd` + - ``0x2100000c`` + - GPIO pulldown enable (`0 = none`, `1 = pulldown`) + * - :ref:`reg_pll_out_dest` + - ``0x2f000000`` + - PLL clock output destination (low bit) + * - :ref:`reg_trap_out_dest` + - ``0x2f000004`` + - Trap output destination (low bit) + * - :ref:`reg_irq7_source` + - ``0x2f000008`` + - IRQ 7 input source (low bit) + +.. note:: + + In the registers description below, each register is shown as 32 bits corresponding + to the data bus width of the wishbone bus. Depending on the instruction and data type, + the entire 32-bit register can be read in one instruction, or one 16-bit word, + or one 8-bit byte. + +.. _reg_gpio_data: + +``reg_gpio_data`` +----------------- + +Base address: ``0x21000000`` + +.. wavedrom:: + + { "reg": [ + {"name": "GPIO input/output", "bits": 16}, + {"name": "GPIO output readback", "bits": 16}] + } + +| + +* Writing to the address low bit always sets the registered value at the GPIO. +* Writing to address bit 16 has no effect. +* Reading from the address low bit reads the value at the chip pin. +* Reading from address bit 16 reads the value at the multiplexer output (see :ref:`gpio_structure`). + +.. _reg_gpio_ena: + +``reg_gpio_ena`` +---------------- + +Base address: ``0x21000004`` + +.. wavedrom:: + + { "reg": [ + {"name": "GPIO output enable", "bits": 16}, + {"name": "(undefined, reads zero)", "bits": 16, "type": 1}] + } + +| + +* Bit 0 corresponds to the GPIO channel enable. +* Bit value 1 indicates an output channel; 0 indicates an input. + +.. _reg_gpio_pu: + +``reg_gpio_pu`` +--------------- + +Base address: ``0x21000008`` + +.. wavedrom:: + + { "reg": [ + {"name": "GPIO pin pull-up", "bits": 16}, + {"name": "(undefined, reads zero)", "bits": 16, "type": 1}] + } + +| + +* Bit 0 corresponds to the GPIO channel pull-up state. +* Bit value 1 indicates pullup is active; 0 indicates pullup is inactive. + +.. _reg_gpio_pd: + +``reg_gpio_pd`` +--------------- + +Base address: ``0x2100000c`` + +.. wavedrom:: + + { "reg": [ + {"name": "GPIO pin pull-down (inverted)", "bits": 16}, + {"name": "(undefined, reads zero)", "bits": 16, "type": 1}] + } + +| + +.. todo:: The statement below (second sentence) seems to be invalid. + +* Bit 0 corresponds to the GPIO channel pull-down state. +* Bit value 1 indicates pullup is active; 0 indicates pulldown is inactive. + +.. _reg_pll_out_dest: + +``reg_pll_out_dest`` +-------------------- + +Base address: ``0x2f000000`` + +.. wavedrom:: + + { "reg": [ + {"name": "PLL clock dest.", "bits": 8}, + {"name": "(undefined, reads zero)", "bits": 24, "type": 1}] + } + +| + +The PLL clock (crystal oscillator clock multiplied up by PLL) can be viewed on the GPIO pin. +The GPIO pin cannot be used as general-purpose I/O when selected for PLL clock output. + +The low bit of this register directs the output of the core clock to the GPIO channel, according to the :ref:`reg_pll_out_dest_table`. + +.. list-table:: ``reg_pll_out_dest`` register settings + :name: reg_pll_out_dest_table + :header-rows: 1 + + * - ``0x2f000000`` value + - Clock output directed to this channel + * - ``0`` + - (none) + * - ``1`` + - Core PLL clock to GPIO output + +.. note:: + + High rate core clock (e.g. 80MHz) may be unable to generate a full swing on the GPIO output, but is detectable. + +.. _reg_trap_out_dest: + +``reg_trap_out_dest`` +--------------------- + +Base address: ``0x2f000004`` + +.. wavedrom:: + + { "reg": [ + {"name": "trap signal dest.", "bits": 8}, + {"name": "(undefined, reads zero)", "bits": 24, "type": 1}] + } + +| + +The CPU fault state (trap) can be viewed at the GPIO pin as a way to monitor the CPU trap state externally. +The low bit of this register directs the output of the processor trap signal to the GPIO channel, according to the :ref:`reg_trap_out_dest_table`. + + +.. list-table:: ``reg_trap_out_dest`` register settings + :name: reg_trap_out_dest_table + :header-rows: 1 + + * - ``0x2f000004`` value + - Trap signal output directed to this channel + * - ``0`` + - (none) + * - ``1`` + - GPIO + +.. _reg_irq7_source: + +``reg_irq7_source`` +------------------- + +Base address: ``0x2f000008`` + +.. wavedrom:: + + { "reg": [ + {"name": "IRQ 7 source", "bits": 8}, + {"name": "(undefined, reads zero)", "bits": 24, "type": 1}] + } + +| + +The GPIO input can be used as an IRQ event source and passed to the CPU through IRQ channel 7 (see :doc:`irq`). +When used as an IRQ source, the GPIO pin must be configured as an input. +The low bit of this register directs the input of the GPIO to the processor's IRQ7 channel, according to the :ref:`reg_irq7_source_table`. + + +.. list-table:: ``reg_irq7_source`` register settings + :name: reg_irq7_source_table + :header-rows: 1 + + * - Register byte + - ``0x2f000008`` value + - This channel directed to IRQ channel 7 + * - 0 + - ``00`` + - (none) + * - 1 + - ``01`` + - GPIO + +User project area GPIO +~~~~~~~~~~~~~~~~~~~~~~ + +.. todo:: + + This section is based on Memory mapped I/O summary by address from PDF documentation. + It needs some elaboration. + +.. _reg_mprj_io_configure: + +User project area GPIO ``mprj_io[37:0]`` configure registers +------------------------------------------------------------ + +Each of 38 ``mprj_io`` GPIOs has a configuration register. + +.. csv-table:: Base addresses for ``mprj_io`` configuration registers + :name: reg_mprj_io_configure_addresses + :widths: auto + :header-rows: 1 + :delim: ; + + User project area GPIO ; Address + + ``mprj_io[00]`` ; ``0x2600000c`` + ``mprj_io[01]`` ; ``0x26000010`` + ``mprj_io[02]`` ; ``0x26000014`` + ``mprj_io[03]`` ; ``0x26000018`` + ``mprj_io[04]`` ; ``0x2600001c`` + ``mprj_io[05]`` ; ``0x26000020`` + ``mprj_io[06]`` ; ``0x26000024`` + ``mprj_io[07]`` ; ``0x26000028`` + ``mprj_io[08]`` ; ``0x2600002c`` + ``mprj_io[09]`` ; ``0x26000030`` + ``mprj_io[10]`` ; ``0x26000034`` + ``mprj_io[11]`` ; ``0x26000038`` + ``mprj_io[12]`` ; ``0x2600003c`` + ``mprj_io[13]`` ; ``0x26000040`` + ``mprj_io[14]`` ; ``0x26000044`` + ``mprj_io[15]`` ; ``0x26000048`` + ``mprj_io[16]`` ; ``0x2600004c`` + ``mprj_io[17]`` ; ``0x26000050`` + ``mprj_io[18]`` ; ``0x26000054`` + ``mprj_io[19]`` ; ``0x26000058`` + ``mprj_io[20]`` ; ``0x2600005c`` + ``mprj_io[21]`` ; ``0x26000060`` + ``mprj_io[22]`` ; ``0x26000064`` + ``mprj_io[23]`` ; ``0x26000068`` + ``mprj_io[24]`` ; ``0x2600006c`` + ``mprj_io[25]`` ; ``0x26000070`` + ``mprj_io[26]`` ; ``0x26000074`` + ``mprj_io[27]`` ; ``0x26000078`` + ``mprj_io[28]`` ; ``0x2600007c`` + ``mprj_io[29]`` ; ``0x26000080`` + ``mprj_io[30]`` ; ``0x26000084`` + ``mprj_io[31]`` ; ``0x26000088`` + ``mprj_io[32]`` ; ``0x2600008c`` + ``mprj_io[33]`` ; ``0x26000090`` + ``mprj_io[34]`` ; ``0x26000094`` + ``mprj_io[35]`` ; ``0x26000098`` + ``mprj_io[36]`` ; ``0x2600009c`` + ``mprj_io[37]`` ; ``0x260000a0`` + +.. wavedrom:: + + { "reg": [ + {"bits": 1, "type": 2}, + {"bits": 1, "type": 2}, + {"bits": 1, "type": 2}, + {"bits": 1, "type": 2}, + {"bits": 1, "type": 2}, + {"bits": 1, "type": 2}, + {"bits": 1, "type": 2}, + {"bits": 1, "type": 2}, + {"bits": 1, "type": 2}, + {"bits": 1, "type": 2}, + {"name": "mode", "bits": 3, "type": 1}, + {"bits": 19, "type": 1}] + } + +| + +.. todo:: Missing default values + +.. todo:: Missing setting descriptions + +.. list-table:: ``mprj_io[i]`` control register descriptions + :name: reg_mprj_io_configure_description + :header-rows: 1 + :widths: auto + + * - Mask bit + - Default + - Description + * - 10-12 + - ``001`` + - Digital mode + * - 9 + - TODO + - input voltage trip point select + * - 8 + - 0 + - slow slew (0 - fast slew, 1 - slow slew) + * - 7 + - TODO + - analog bus polarity + * - 6 + - TODO + - analog bus select + * - 5 + - TODO + - analog bus enable (0 - disabled, 1 - enabled) + * - 4 + - TODO + - IB mode select + * - 3 + - 0 + - input disable (0 - input enabled, 1 - input disabled) + * - 2 + - 0 + - hold override value (value is the value during hold mode) + * - 1 + - 1 + - output disable (0 - output enabled, 1 - output disabled) + * - 0 + - 1 + - management control enable (0 - user control, 1 - management control) + +.. todo:: Missing *digital mode* description diff --git a/doc/source/housekeeping-spi.rst b/doc/source/housekeeping-spi.rst new file mode 100755 index 00000000..8d00d375 --- /dev/null +++ b/doc/source/housekeeping-spi.rst @@ -0,0 +1,216 @@ +.. raw:: html + + + +Housekeeping SPI +================ + +The "housekeeping" SPI is an SPI responder that can be accessed from a remote host through a standard 4-pin serial interface. +The SPI implementation is mode 0, with new data on ``SDI`` captured on the ``SCK`` rising edge, and output data presented on the falling edge of ``SCK`` (to be sampled on the next ``SCK`` rising edge). +The SPI pins are shared with user area GPIO. + +Related pins +------------ + +* :ref:`SDI ` - F9, +* :ref:`CSB ` - E8, +* :ref:`SCK ` - F8, +* :ref:`SDO ` - E9. + +SPI protocol definition +----------------------- + +All input is in groups of 8 bits. +Each byte is input most-significant-bit first. + +Every command sequence requires one command word (8 bits), followed by one address word (8 bits), followed by one or more data words (8 bits each), according to the data transfer modes described in :ref:`housekeeping_spi_modes`. + +.. figure:: _static/housekeeping_spi_signalling.svg + :width: 100% + :name: housekeeping_spi_signalling + :alt: Housekeeping SPI signalling + :align: center + + Housekeeping SPI signalling + +Addresses are read in sequence from lower values to higher values. + +Therefore groups of bits larger than 8 should be grouped such that the lowest bits are at the highest address. +Any bits additional to an 8-bit boundary should be at the lowest address. + +Data is captured from the register map in bytes on the falling edge of the last SCK before a data byte transfer. +Multi-byte transfers should ensure that data do not change between byte reads. + +``CSB`` pin must be low to enable an SPI transmission. +Data are clocked by pin ``SCK``, with data valid on the rising edge of ``SCK``. +Output data is received on the ``SDO`` line. +``SDO`` is held high-impedance when ``CSB`` is high and at all times other than the transfer of data bits on a read command. +``SDO`` outputs become active on the falling edge of ``SCK``, such that data are written and read on the same ``SCK`` rising edge. + +After ``CSB`` is set low, the SPI is always in the "command" state, awaiting a new command. + +The first transferred byte is the command word, interpreted according to the :ref:`housekeeping_spi_command_words`. + +.. list-table:: Housekeeping SPI command word definition + :name: housekeeping_spi_command_words + :header-rows: 1 + :widths: auto + + * - Word + - Meaning + * - ``00000000`` + - No operation + * - ``10000000`` + - Write in streaming mode + * - ``01000000`` + - Read in streaming mode + * - ``11000000`` + - Simultaneous Read/Write in streaming mode + * - ``11000100`` + - Pass-through (management) Read/Write in streaming mode + * - ``11000110`` + - Pass-through (user) Read/Write in streaming mode + * - ``10nnn000`` + - Write in n-byte mode (up to 7 bytes) + * - ``01nnn000`` + - Read in n-byte mode (up to 7 bytes) + * - ``11nnn000`` + - Simultaneous Read/Write in n-byte mode (up to 7 bytes) + +.. note:: All other words are reserved and act as no-operation if not defined by the SPI responder module. + +.. _housekeeping_spi_modes: + +Housekeeping SPI modes +---------------------- + +The two basic modes of operation are **streaming mode** and **n-byte mode**. + +In **streaming mode** operation, the data is sent or received continuously, one byte at a time, with the internal address incrementing for each byte. +Streaming mode operation continues until ``CSB`` is raised to end the transfer. + +In **n-byte mode** operation, the number of bytes to be read and/or written is encoded in the command word, and may have a value from 1 to 7 (note that a value of zero implies streaming mode). +After ``n`` bytes have been read and/or written, the SPI returns to waiting for the next command. +No toggling of CSB is required to end the command or to initiate the following command. + +Pass-thru mode +-------------- + +The pass-thru mode puts the CPU into immediate reset, then sets ``FLASH_CSB`` low to initiate a data transfer to the QSPI flash. +After the pass-thru command byte has been issued, all subsequent SPI signaling on ``SDI`` and ``SCK`` are applied directly to the QSPI flash (pins ``FLASH_IO0`` and ``FLASH_CLK``, respectively), and the QSPI flash data output (pin ``FLASH_IO1``) is applied directly to ``SDO``, until the ``CSB`` pin is raised. +When ``CSB`` is raised, the ``FLASH_CSB`` is also raised, terminating the data transfer to the QSPI flash. +The CPU is brought out of reset, and starts executing instructions at the program start address. + +This mode allows the QSPI flash to be programmed from the same SPI communication channel as the housekeeping SPI, without the need for additional wiring to the QSPI flash chip. + +There are two pass-thru modes. +The first one corresponds to the primary SPI flash used by the management SoC. +The second one corresponds to a secondary optional SPI flash that can be defined in the user project. + +.. todo:: + The below sentence may require some rephrasing. + +The pass-thru mode allows a communications chip external to the Caravel chip program either SPI flash chip from a host computer without requiring separate external access to the SPI flash. +Both pass-thru modes only connect to I/O pins 0 and 1 of the SPI flash chips, and so must operate only in the 4-pin SPI mode. +The user project may elect to operate the SPI flash in quad mode using a 6-pin interface. + +Housekeeping SPI registers +-------------------------- + +The purpose of the housekeeping SPI is to give access to certain system values and controls independently of the CPU. +The housekeeping SPI can be accessed even when the CPU is in full reset. +Some control registers in the housekeeping SPI affect the behaviour of the CPU in a way that can be potentially detrimental to the CPU operation, such as adjusting the trim value of the digital frequency-locked loop generating the CPU core clock. + +Under normal working conditions, the SPI should not need to be accessed unless it is to adjust the clock speed of the CPU. +All other functions are purely for test and debug. + +The housekeeping SPI can be accessed by the CPU from a running program by enabling the SPI controller, and enabling the bit that connects the internal SPI controller directly to the housekeeping SPI. +This configuration then allows a program to read, for example, the user project ID of the chip. +See the :doc:`SPI controller description ` for details. + +.. figure:: _static/housekeeping_spi_register_map.svg + :name: housekeeping_spi_register_map + :alt: Housekeeping SPI register map + :align: center + + Housekeeping SPI register map + + +.. list-table:: Housekeeping SPI registers + :name: housekeeping_spi_registers + :widths: auto + + * - Name + - Register address + - Description + * - manufacturer_ID + - ``0x01`` `(low 4 bits)` and ``0x02`` + - The 12-bit manufacturer ID for efabless is ``0x456`` + * - product_ID + - ``0x03`` + - The product ID for the Caravel harness chip is 0x10 + * - user_project_ID + - ``0x04`` to ``0x07`` + - The 4-byte (32bit) user project ID is metal-mask programmed on each project before tapeout, with a unique number given to each user project. + * - PLL enable + - ``0x08`` `bit 0` + - This bit enables the digital frequency-locked-loop clock multiplier. + The enable should be applied prior to turning off the PLL bypass to allow the PLL time to stabilize before using it to drive the CPU clock. + * - PLL DCO enable + - ``0x08`` `bit 1` + - The PLL can be run in DCO mode, in which the feedback loop to the driving clock is removed, and the system operates in free-running mode, driven by the ring oscillator which can be tuned between approximately 90 to 200MHz by setting the trim bits (:ref:`check PLL trim `) + * - PLL bypass + - ``0x09`` `bit 0` + - When enabled, the PLL bypass switches the clock source of the CPU from the PLL output to the external CMOS clock (pin ``C9``). + The default value is ``0x1`` (CPU clock source is the external CMOS clock). + * - CPU IRQ + - ``0x0A`` `bit 0` + - This is a dedicated manual interrupt driving the CPU IRQ channel 6. + The bit is not self-resetting, so while the rising edge will trigger an interrupt, the signal must be manually set to zero before it can trigger another interrupt. + * - CPU reset + - ``0x0B`` `bit 0` + - The CPU reset bit puts the entire CPU into a reset state. + This bit is not self-resetting and must be set back to zero manually to clear the reset state + * - CPU trap + - ``0x0C`` `bit 0` + - If the CPU has stopped after encountering an error, it will raise the trap signal. + The trap signal can be configured to be read from a GPIO pin, but as the GPIO state is potentially unknowable, the housekeeping SPI can be used to determine the true trap state. + * - .. _housekeeping_reg_pll_trim: + + PLL trim + - ``0x0D`` `(all bits)` to ``0x10`` `(lower two bits)` + - The 26-bit trim value can adjust the DCO frequency over a factor of about two from the slowest (trim value ``0x3ffffff``) to the fastest (trim value ``0x0``). + Default value is ``0x3ffefff`` (slow trim, ``-1``). + Note that this is a thermometer-code trim, where each bit provides an additional (approximately) 250ps delay (on top of a fixed delay of 4.67ns). + The fastest output frequency is approximately 215MHz while the slowest output frequency is approximately 90MHz. + * - PLL output divider + - ``0x11`` `bits 2-0` + - The PLL output can be divided down by an integer divider to provide the core clock frequency. + This 3-bit divider can generate a clock divided by 2 to 7. + Values 0 and 1 both pass the undivided PLL clock directly to the core (and should not be used, as the processor does not operate at these frequencies). + * - PLL output divider (2) + - ``0x11`` `bits 5-3` + - The PLL 90-degree phase output is passed through an independent 3-bit integer clock divider and provided to the user project space as a secondary clock. + Values 0 and 1 both pass the undivided PLL clock, while values 2 to 7 pass the clock divided by 2 to 7, respectively. + * - PLL feedback divider + - ``0x12`` `bits 4-0` + - The PLL operates by comparing the input clock (pin ``C9``) rate to the rate of the PLL clock divided by the feedback divider value (when running in PLL mode, not DCO mode). + The feedback divider must be set such that the external clock rate multiplied by the feedback divider value falls between 90 and 214 MHz (preferably centered on this range, or approximately 150 MHz). + For example, when using an 8 MHz external clock, the divider should be set to 19 (``19 * 8 = 152``). + The DCO range and the number of bits of the feedback divider implies that the external clock should be no slower than around 4 to 5 MHz. diff --git a/doc/source/index.rst b/doc/source/index.rst new file mode 100755 index 00000000..f7325d11 --- /dev/null +++ b/doc/source/index.rst @@ -0,0 +1,69 @@ +.. raw:: html + + + +============================== +Efabless Caravel "harness" SoC +============================== + +.. image:: _static/Google_logo.svg + :width: 45 % + +.. image:: _static/plus.png + :width: 5 % + +.. image:: _static/efabless_lg_logo.png + :width: 45 % + +.. include:: introduction.rst + +.. toctree:: + :hidden: + :maxdepth: 1 + + description + getting-started + tool-versioning + quick-start + caravel-with-openlane + pinout + gpio + housekeeping-spi + qspi-flash + external-clock + uart + spi + counter-timers + irq + sram + programming + memory-mapped-io-summary + supplementary-figures + maximum-ratings + references + further-work + +.. figure:: _static/caravel_harness_die.svg + :width: 30 % + :align: left + :alt: Caravel harness die + + Caravel harness die (3.2 mm x 5.3 mm) + + diff --git a/doc/source/introduction.rst b/doc/source/introduction.rst new file mode 100755 index 00000000..a29106f3 --- /dev/null +++ b/doc/source/introduction.rst @@ -0,0 +1,61 @@ +.. raw:: html + + + +Introduction +============ + + +The efabless Caravel chip is a ready-to-use test harness for creating designs with the Google/Skywater 130nm Open PDK. +The Caravel harness comprises a small RISC-V microprocessor based on the simple 2-cycle PicoRV32 RISC-V core implementing the RV32IMC instruction set (see `riscv.org page `_), a 32-bit wishbone bus, and an approximately 2.8mm x 2.8mm open area for the placement of user IP blocks. + +.. figure:: _static/caravel_management_soc_simplified_block_diagram.svg + :name: caravel_management_soc_simplified_block_diagram + :alt: Caravel management SoC simplified block diagram + :align: center + + Caravel management SoC simplified block diagram + +| + +The Github Repo could be found here: https://github.com/efabless/caravel/ + +The documentation contains the following chapters: + +* :doc:`description` contains the general information about the Efabless Caravel "harness" SoC, +* :doc:`getting-started` contains the general information about how to use the Efabless Caravel "harness" SoC, +* :doc:`tool-versioning` contains the tool versions prefered for usage with the current Efabless Caravel "harness" SoC, +* :doc:`quick-start` contains a guide on how to get quickly started with using Efabless Caravel "harness" SoC without many details, +* :doc:`caravel-with-openlane` contains information on how to build your user project with OpenLANE inside the Efabless Caravel "harness" SoC, +* :doc:`pinout` describes the pinout of the SoC, +* :doc:`gpio` describes GPIO and its registers, +* :doc:`housekeeping-spi` describes the SPI responder that can be accessed from a remote host, +* :doc:`qspi-flash` describes the QSPI flash controller, +* :doc:`external-clock` describes the source external clock for the CPU, +* :doc:`uart` describes the UART interface, +* :doc:`spi` describes the SPI configuration, +* :doc:`counter-timers` describes two counter/timers blocks, +* :doc:`irq` describes the interrups, +* :doc:`sram` describes management and storage area SRAM, +* :doc:`programming` shows how to get started with programming on Caravel chip, +* :doc:`memory-mapped-io-summary` lists the memory mapped I/O registers by address, +* :doc:`supplementary-figures` provides supplementary internal structure and die arrangement figures +* :doc:`maximum-ratings` lists the parameters and their ranges at which the device operates correctly, +* :doc:`references` contains list of references, +* :doc:`further-work` lists things to be added to the documentation. diff --git a/doc/source/irq.rst b/doc/source/irq.rst new file mode 100755 index 00000000..be3d7ba2 --- /dev/null +++ b/doc/source/irq.rst @@ -0,0 +1,56 @@ +.. raw:: html + + + +Interrupts (IRQ) +================ + +The interrupt vector is set to memory address ``0`` (bottom of SRAM). +The program counter switches to this location when an interrupt is received. +To enable interrupts, it is necessary to copy an interrupt handler to memory location ``0``. +The `PicoRV32 `_ defines 32 IRQ channels, of which the Caravel chip uses only a handful, as described in the :ref:`cpu_irq_channel_definitions`. +All IRQ channels not in the :ref:`cpu_irq_channel_definitions` always have value zero. + +.. list-table:: CPU IRQ channel definitions + :name: cpu_irq_channel_definitions + :header-rows: 1 + :widths: auto + + * - IRQ channel + - description + * - 4 + - :doc:`uart` data available + * - 5 + - IRQ external pin (:ref:`IRQ E5 pin `) + * - 6 + - :doc:`housekeeping-spi` IRQ + * - 7 + - Assignable interrupt (see :ref:`reg_irq7_source`) + * - 9 + - SPI controller data available, when enabled (see :ref:`reg_spi_config`) + * - 10 + - Timer 0 expired, when enabled (see :ref:`reg_timer0_config`) + * - 11 + - Timer 1 expired, when enabled (see :ref:`reg_timer1_config`) + +The Caravel PicoRV32 implementation does not enable IRQ QREGS (see `PicoRV32 description `__). + +The handling of interrupts is beyond the scope of this document +(see `RISC-V instruction set description `_). +All interrupts are masked and must be enabled in software. diff --git a/doc/source/maximum-ratings.rst b/doc/source/maximum-ratings.rst new file mode 100755 index 00000000..65901b19 --- /dev/null +++ b/doc/source/maximum-ratings.rst @@ -0,0 +1,37 @@ +.. raw:: html + + + +Absolute maximum ratings +======================== + +.. csv-table:: + :name: absolute_maximum_ratings_table + :header-rows: 1 + :widths: auto + :delim: ; + + Type ; minimum ; typical ; maximum ; units + Supply voltage (VDDIO) ; 1.8 ; 3.3 ; 5.0 ; V + Core digital supply voltage (VCCD) ; 1.62 ; 1.8 ; 1.98 ; V + Junction temperature ; -40 ; 27 ; 100 ; :math:`^{\circ} C` + :math:`V_{OH}` ; :math:`0.8 \cdot {VDDIO}` ; ; V + :math:`V_{OL}` ; ; ; 0.4 ; V + Management area power ; ; TBD ; ; mW + Storage area power ; ; TBD ; ; mW diff --git a/doc/source/memory-mapped-io-summary.rst b/doc/source/memory-mapped-io-summary.rst new file mode 100755 index 00000000..9d03f819 --- /dev/null +++ b/doc/source/memory-mapped-io-summary.rst @@ -0,0 +1,125 @@ +.. raw:: html + + + +Memory Mapped I/O summary +========================= + +.. list-table:: Memory mapped I/O summary by address + :name: memory_mapped_io_summary_by_address + :header-rows: 1 + :widths: auto + + * - Address (bytes) + - Function + * - `0x 00 00 00 00` + - Flash SPI / overlaid SRAM (4k words) start of memory block + * - `0x 00 00 3f ff` + - End of SRAM + * - `0x 10 00 00 00` + - Flash SPI start of program block. + Program to run starts here on reset + (see :ref:`SPI Flash initialization `). + * - `0x 10 ff ff ff` + - Maximum SPI flash addressable space (16MB) with QSPI 3-byte addressing + * - `0x 1f ff ff ff` + - Maximum SPI flash addressable space (32MB) + * - `0x 20 00 00 00` + - UART clock divider select (:ref:`reg_uart_clkdiv`) + * - `0x 20 00 00 04` + - UART data (:ref:`reg_uart_data`) + * - `0x 20 00 00 08` + - UART enable (:ref:`reg_uart_enable`) + * - `0x 21 00 00 00` + - GPIO input/output (bit 16/bit 0) (:ref:`reg_gpio_data`). 1 general-purpose digital, management area only. + * - `0x 21 00 00 04` + - GPIO output enable (:ref:`reg_gpio_ena`) + * - `0x 21 00 00 08` + - GPIO pullup enable (:ref:`reg_gpio_pu`) + * - `0x 21 00 00 0c` + - GPIO pulldown enable (:ref:`reg_gpio_pd`) + * - `0x 22 00 00 00` + - Counter/Timer 0 configuration register (:ref:`reg_timer0_config`) + * - `0x 22 00 00 04` + - Counter/Timer 0 current value (:ref:`reg_timer0_value`) + * - `0x 22 00 00 08` + - Counter/Timer 0 reset value (:ref:`reg_timer0_data`) + * - `0x 23 00 00 00` + - Counter/Timer 1 configuration register (:ref:`reg_timer1_config`) + * - `0x 23 00 00 04` + - Counter/Timer 1 current value (:ref:`reg_timer1_value`) + * - `0x 23 00 00 08` + - Counter/Timer 1 reset value (:ref:`reg_timer1_data`) + * - `0x 24 00 00 00` + - SPI controller configuration register (:ref:`reg_spi_config`) + * - `0x 24 00 00 08` + - SPI controller data register (:ref:`reg_spi_data`) + * - `0x 25 00 00 00` + - Logic Analyzer Data 0 + * - `0x 25 00 00 04` + - Logic Analyzer Data 1 + * - `0x 25 00 00 08` + - Logic Analyzer Data 2 + * - `0x 25 00 00 0c` + - Logic Analyzer Data 3 + * - `0x 25 00 00 10` + - Logic Analyzer Enable 0 + * - `0x 25 00 00 14` + - Logic Analyzer Enable 1 + * - `0x 25 00 00 18` + - Logic Analyzer Enable 2 + * - `0x 25 00 00 1c` + - Logic Analyzer Enable 3 + * - `0x 26 00 00 00` + - User project area GPIO data (L) + * - `0x 26 00 00 04` + - User project area GPIO data (H) + * - `0x 26 00 00 08` + - User project area GPIO data transfer (bit 0, auto-zeroing) + * - `0x 26 00 00 0c` + - User project area GPIO ``mprj_io[0]`` configure + * - ... + - ... + * - `0x 26 00 00 a0` + - User project area GPIO ``mprj_io[37]`` configure + * - `0x 26 00 00 a4` + - User project area GPIO power[0] configure (currently undefined/unused) + * - ... + - ... + * - `0x 26 00 00 b4` + - User project area GPIO power[3] configure (currently undefined/unused) + * - `0x 2d 00 00 00` + - QSPI controller config (:ref:`reg_spictrl`) + * - `0x 2f 00 00 00` + - PLL clock output destination (:ref:`reg_pll_out_dest`) + * - `0x 2f 00 00 04` + - Trap output destination (:ref:`reg_trap_out_dest`) + * - `0x 2f 00 00 08` + - IRQ 7 input source (:ref:`reg_irq7_source`) + * - `0x 30 00 00 0` + - User area base. + A user project may define additional Wishbone responder modules starting at this address. + * - `0x 80 00 00 00` + - QSPI controller + * - `0x 90 00 00 00` + - :ref:`storage-area-sram` + * - `0x a0 00 00 00` + - Any responder 1 + * - `0x b0 00 00 00` + - Any responder 2 diff --git a/doc/source/pinout.rst b/doc/source/pinout.rst new file mode 100755 index 00000000..0fe87c0f --- /dev/null +++ b/doc/source/pinout.rst @@ -0,0 +1,392 @@ +.. raw:: html + + + +Pinout description +================== + +This section describes lists the pinout for the SoC, and provides the description for pins. + +.. todo:: + + Verify `flash_io[1:0]`, `flash_csb`, `flash2_io[1:0]`, `flash2_csb` pins. + There was inconsistency (Pinout vs Pin description) in source PDF. + +Ball assignment (6x10 WLCSP) +---------------------------- + +.. figure:: _static/package_as_viewed_from_the_bottom.svg + :name: ball_assignment + :width: 30% + :align: center + + Ball assignment (6x10 WLCSP) + +Pinout (6x10 WLCSP) +------------------- + +.. list-table:: Pinout + :name: pinout + :header-rows: 1 + :stub-columns: 1 + + * - + - F + - E + - D + - C + - B + - A + * - 1 + - :ref:`mprj_io[15] ` + - :ref:`mprj_io[16] ` + - :ref:`mprj_io[18] ` + - :ref:`mprj_io[19] ` + - :ref:`mprj_io[21] ` + - :ref:`mprj_io[23] ` + * - 2 + - :ref:`vccd1 ` + - :ref:`mprj_io[14] ` + - :ref:`mprj_io[17] ` + - :ref:`mprj_io[20] ` + - :ref:`mprj_io[22] ` + - :ref:`vccd2 ` + * - 3 + - :ref:`mprj_io[12] ` + - :ref:`mprj_io[11] ` + + :ref:`flash2_io[1] ` + - :ref:`mprj_io[13] ` + - :ref:`mprj_io[24] ` + - :ref:`vssa2 ` + - :ref:`mprj_io[25] ` + * - 4 + - :ref:`mprj_io[10] ` + + :ref:`flash2_io[0] ` + - :ref:`mprj_io[9] ` + + :ref:`flash2_sck ` + - :ref:`vdda1 ` + - :ref:`vddio ` + - :ref:`mprj_io[26] ` + - :ref:`mprj_io[27] ` + * - 5 + - :ref:`mprj_io[8] ` + + :ref:`flash2_csb ` + - :ref:`mprj_io[7] ` + + :ref:`irq ` + - :ref:`vssio ` + + :ref:`vssa ` + + :ref:`vssd ` + - :ref:`vssio ` + + :ref:`vssa ` + + :ref:`vssd ` + - :ref:`mprj_io[28] ` + - :ref:`mprj_io[29] ` + * - 6 + - :ref:`vssd1 ` + - :ref:`vssa1 ` + - :ref:`vssio ` + + :ref:`vssa ` + + :ref:`vssd ` + - :ref:`vssio ` + + :ref:`vssa ` + + :ref:`vssd ` + - :ref:`mprj_io[30] ` + - :ref:`mprj_io[31] ` + * - 7 + - :ref:`mprj_io[6] ` + + :ref:`ser_tx ` + - :ref:`mprj_io[5] ` + + :ref:`ser_rx ` + - :ref:`mprj_io[0] ` + + :ref:`JTAG ` + - :ref:`vdda2 ` + - :ref:`vssd2 ` + - :ref:`mprj_io[32] ` + * - 8 + - :ref:`mprj_io[4] ` + + :ref:`SCK ` + - :ref:`mprj_io[3] ` + + :ref:`CSB ` + - :ref:`flash_clk ` + - :ref:`mprj_io[33] ` + - :ref:`mprj_io[34] ` + - :ref:`mprj_io[35] ` + * - 9 + - :ref:`mprj_io[2] ` + + :ref:`SDI ` + - :ref:`mprj_io[1] ` + + :ref:`SDO ` + - :ref:`flash_io[1] ` + - :ref:`clock ` + - :ref:`mprj_io[36] ` + - :ref:`mprj_io[37] ` + * - 10 + - :ref:`vdda ` + - :ref:`gpio ` + - :ref:`flash_io[0] ` + - :ref:`flash_csb ` + - :ref:`resetb ` + - :ref:`vccd ` + +Pin description (6x10 WLCSP) +---------------------------- + +.. list-table:: Pin description + :name: pin-description + :header-rows: 1 + + * - Pin # + - Name + - Type + - Summary description + * - A9, B9, A8, B8, C8, A7, A6, B6, A5, B5, A4, B4, A3, C3, A1, B2, B1, C2, C1, D1, D2, E1, F1, E2, D3, F3, E3, F4, E4, F5, E5, F7, E7, F8, E8, F9, E9, D7 + - .. _mprj_io: + + ``mprj_io[37:0]`` + - Digital I/O + - General purpose configurable digital I/O with pullup/pulldown, input or output, enable/disable, analog output, high voltage output, slew rate control. + Shared between the user project area and the management SoC. + * - D8 + - .. _flash_clk: + + ``flash_clk`` + - Digital out + - Flash SPI clock + * - C10 + - .. _flash_csb: + + ``flash_csb`` + - Digital out + - Flash SPI chip select + * - D9, D10 + - .. _flash_io: + + ``flash_io[1:0]`` + - Digital I/O + - Flash SPI data input/output + * - C9 + - .. _clock: + + ``clock`` + - Digital in + - External CMOS 3.3V clock source + * - B10 + - .. _resetb: + + ``resetb`` + - Digital in + - SoC system reset (sense inverted) + * - E9 + - .. _sdo: + + ``SDO`` + - Digital out + - Housekeeping serial interface data output + * - F9 + - .. _sdi: + + ``SDI`` + - Digital in + - Housekeeping serial interface data input + * - E8 + - .. _csb: + + ``CSB`` + - Digital in + - Housekeeping serial interface chip select + * - F8 + - .. _sck: + + ``SCK`` + - Digital in + - Housekeeping serial interface clock + * - F7 + - .. _ser_tx: + + ``ser_tx`` + - Digital out + - UART transmit channel + * - E7 + - .. _ser_rx: + + ``ser_rx`` + - Digital in + - UART receive channel + * - E5 + - .. _irq: + + ``irq`` + - Digital in + - External interrupt + * - E10 + - .. _gpio: + + ``gpio`` + - Digital I/O + - Management GPIO/user power enable + * - D7 + - .. _jtag: + + ``JTAG`` + - Digital I/O + - JTAG system access + * - F5 + - .. _flash2_csb: + + ``flash2_csb`` + - Digital out + - User area QSPI flash enable (sense inverted) + * - E4 + - .. _flash2_sck: + + ``flash2_sck`` + - Digital out + - User area QSPI flash clock + * - E3, F4 + - .. _flash2_io: + + ``flash2_io[1:0]`` + - Digital I/O + - User area QSPI flash data + * - F9 + - .. _spi_sdo: + + ``spi_sdo`` + - Digital out + - Serial interface controller data output + * - F8 + - .. _spi_sck: + + ``spi_sck`` + - Digital out + - Serial interface controller clock + * - E8 + - .. _spi_csb: + + ``spi_csb`` + - Digital out + - Serial interface controller chip select + * - E9 + - .. _spi_sdi: + + ``spi_sdi`` + - Digital in + - Serial interface controller data input + * - C4 + - .. _vddio: + + ``vddio`` + - 3.3V Power + - ESD and padframe power supply + * - F10 + - .. _vdda: + + ``vdda`` + - 3.3V Power + - Management area power supply + * - A10 + - .. _vccd: + + ``vccd`` + - 1.8V Power + - Management area digital power supply + * - C5, C6, D5, D7 + - .. _vssio_vssa_vssd: + + ``vssio``/``vssa``/``vssd`` + - Ground + - ESD, padframe, and management area ground + * - D4 + - .. _vdda1: + + ``vdda1`` + - 3.3V Power + - User area 1 power supply + * - F2 + - .. _vccd1: + + ``vccd1`` + - 1.8V Power + - User area 1 digital power supply + * - E6 + - .. _vssa1: + + ``vssa1`` + - Ground + - User area 1 ground + * - F6 + - .. _vssd1: + + ``vssd1`` + - Ground + - User area 1 digital ground + * - C7 + - .. _vdda2: + + ``vdda2`` + - 3.3V Power + - User area 2 power supply + * - A2 + - .. _vccd2: + + ``vccd2`` + - 1.8V Power + - User area 2 digital power supply + * - B3 + - .. _vssa2: + + ``vssa2`` + - Ground + - User area 2 ground + * - B7 + - .. _vssd2: + + ``vssd2`` + - Ground + - User area 2 digital ground + +.. list-table:: Package physical measurements + :name: wlcsp-physical-measurements + + * - Standard package + - WLCSP (bump bond) + * - Package size + - 3.2 mm x 5.3 mm + * - Bump pitch + - 0.5 mm diff --git a/doc/source/programming.rst b/doc/source/programming.rst new file mode 100755 index 00000000..b59dbaf5 --- /dev/null +++ b/doc/source/programming.rst @@ -0,0 +1,42 @@ +.. raw:: html + + + +Programming +=========== + +The RISC-V architecture has a ``gcc`` compiler. +The best reference for getting the correct cross-compiler version is the PicoRV32 source +in the `cliffordwolf/picorv32 repository `_. + +Specifically, see the top-level ``README.md`` file section +`Building a pure RV32I Toolchain `_. + +For programming examples specifically for the Caravel chip +(assuming a correct installation of a RISC-V ``gcc`` toolchain as described above), +see `efabless/caravel repository `_. + +The directory ``verilog/dv`` contains example source code to program the Ravenna chip +along with the header file ``defs.h`` that defines the memory-mapped locations +as described throughout this text. + +The ``verilog/dv`` directory contains a ``Makefile`` that compiles ``hex`` files +and runs simulations of a number of test programs that exercise various features of the chip. + +Additional documentation exists on the same site for the provided demonstration circuit board and driver software. diff --git a/doc/source/qspi-flash.rst b/doc/source/qspi-flash.rst new file mode 100755 index 00000000..4457e295 --- /dev/null +++ b/doc/source/qspi-flash.rst @@ -0,0 +1,141 @@ +.. raw:: html + + + +QSPI Flash interface +==================== + +Related pins +------------ + +* :ref:`flash_io[1:0] ` - D9 and D10, respectively, +* :ref:`flash_csb ` - C10, +* :ref:`flash_clk ` - D8. + +Description +----------- + +The QSPI flash controller is automatically enabled on power-up, and will +immediately initiate a read sequence in single-bit mode +with pin :ref:`flash_io0 ` acting as ``SDI`` (data from flash to CPU) +and pin :ref:`flash_io1 ` acting as ``SDO`` (data from CPU to flash). +Protocol is according to, e.g., `Cypress S25FL256L `_. + +The initial SPI instruction sequence is :ref:`as follows: `. + +.. list-table:: Initial SPI instruction sequence + :name: initial_spi_instruction_sequence + :widths: auto + + * - ``0xFF`` + - Mode bit reset + * - ``0xAB`` + - Release from deep power-down + * - ``0x03`` + - Read w/3 byte address + * - ``0x00`` + - Program start address (``0x10000000``) (3 bytes) (upper byte is ignored) + * - ``0x00`` + - + * - ``0x00`` + - + +The QSPI flash continues to read bytes, either sequentially on the same command, +or issuing a new read command to read from a new address. + +.. _reg_spictrl: + +``reg_spictrl`` +--------------- +**QSPI control register** + +The behaviour of the QSPI flash controller can be modified by changing values in the register below: + +Base address: ``0x2d000000`` + +.. wavedrom:: + + { "reg": [ + {"name": "FLASH_IO[3:0]", "bits": 4}, + {"name": "CLK", "bits": 1}, + {"name": "CSB", "bits": 1}, + {"bits": 2, "type": 1}, + {"name": "OE_FLASH_IO [3:0]", "bits": 4}, + {"bits": 4, "type": 1}, + {"name": "DUMMY CLK COUNT", "bits": 4}, + {"name": "ACCESS MODE", "bits": 3}, + {"bits": 8, "type": 1}, + {"name": "EN", "bits": 1}], + "config": {"hspace": 1400} + } + +.. list-table:: ``reg_spictrl`` register description + :name: reg_spictrl_description + :header-rows: 1 + :widths: auto + + * - Mask bit + - Default + - Description + * - 31 + - 1 + - QSPI flash interface enable + * - 22-20 + - 0 + - Access mode *(including DDR enable, QSPI enable, CRM enable)* (see :ref:`reg_spictrl_access_mode_values`) + * - 19-16 + - 8 + - Dummy clock cycle count / Read latency cycles + * - 11-8 + - 0 + - Bit-bang ``OE_FLASH_IO[3:0]`` I/O output enable + * - 5 + - 0 + - Bit-bang ``FLASH_CSB`` chip select bit + * - 4 + - 0 + - Bit-bang ``FLASH_CLK`` serial clock line + * - 3-0 + - 0 + - Bit-bang ``FLASH_IO[3:0]`` data bits + +QSPI access modes +----------------- + +.. list-table:: ``reg_spictrl`` Access mode bit values + :name: reg_spictrl_access_mode_values + :widths: auto + + * - 0 + - ``000`` + - Single bit per clock + * - 1 + - ``001`` + - Single bit per clock (same as 0) + +All additional modes (QSPI dual and quad modes) cannot be used, +as the management SoC only has pins for data lines 0 and 1. + +The SPI flash can be accessed by bit banging when the enable is off. +To do this from the CPU, the entire routine to access the SPI flash +must be read into SRAM and executed from the SRAM. + +.. note:: + + To sum up, the DDR enable, QSPI enable and CRM enable bits cannot be used due to the limited number of data pins. diff --git a/doc/source/quick-start.rst b/doc/source/quick-start.rst new file mode 100755 index 00000000..3758f44d --- /dev/null +++ b/doc/source/quick-start.rst @@ -0,0 +1,197 @@ +.. raw:: html + + + +User project quick start guide +============================== + +This section describes how to get going with the `efabless/caravel repository `_ by adding a user project to the harness and merging the ``.gds`` files to create your own ``caravel.gds``. + +Building the example user project +--------------------------------- + +Building the example user project works without any configuration needed. Just cd into ``openlane`` and run ``make`` on the wanted targets: + +.. code-block:: bash + + cd openlane + make user_proj_example + make user_project_wrapper + +Prerequisites +------------- + +* OpenLANE +* Caravel + +If you have followed the Getting Started Guide you should have all of these installed. To proceed make sure, that your environment variables are set correctly: + +.. code-block:: bash + + export PDK_ROOT=/path/to/pdk + export OPENLANE_ROOT=/path/to/openlane + +Adding a user project +--------------------- + +For a more detailed documentation on using openlane with caravel check this documentation :ref:`carave-with-openlane`. + +Requirements +^^^^^^^^^^^^ + +In the current version of Caravel the top level module of your design needs to be compatible with the interface required by `user_project_wrapper `_. Make sure that your design uses the same ports as ``user_proj_example``. + + +Adding a new design +^^^^^^^^^^^^^^^^^^^ + +To add a user project, there are multiple possible ways: + +* Creating a new design in ``openlane`` +* Modifying ``user_proj_example`` to incorporate your design +* Replacing ``user_project_wrapper`` with your design + +In this guide we will focus on the first option, creating a new design. A design in Caravel/OpenLANE has the following structure: + +.. code-block:: bash + + openlane/design_name + ├── config.tcl + └── pinout.cfg + +The configuration file ``config.tcl`` contains configuration options and parameters, as well as the path to the source files, which are not located inside the design folder, but rather at the top level of the repository in ``verilog/rtl``. The ``pinout.cfg`` contains the pin configuration, which you should copy from ``user_proj_example`` without modifying it. + +To create your own design go into ``openlane`` and create a new directory named like your design with the appropriate config file and copy ``pinout.cfg`` from ``user_proj_example``. The name of the directory should be the same as the top level module of your design. You can also copy the config file from ``user_proj_example``, as it provides a good starting point for your own configuration. + +.. code-block:: bash + + cd openlane + mkdir user_proj + cp user_proj_example/config.tcl user_proj/ + +Configuration +^^^^^^^^^^^^^ + +Configuration options and their parameters can be found in the `OpenLANE repository `_. + +It is recommended to create a new subdirectory for your source files under ``verilog/rtl`` if you have more than one source file and place them there. Alternatively you can just place them in ``verilog/rtl``. After adding your source files you have to provide the path to them in your ``config.tcl``: + +.. code-block:: tcl + + set ::env(VERILOG_FILES) "\ + $script_dir/../../verilog/rtl/defines.v \ + $script_dir/../../verilog/rtl/user_proj/top_level.v \ + $script_dir/../../verilog/rtl/user_proj/ctrl.v \ + $script_dir/../../verilog/rtl/user_proj/io.v" + +There are three more configuration options you have to adjust: + +* ``DESIGN_NAME``: This has to be equal to the name of your top level module and therefore your design directory. +* ``CLOCK_PORT``: The clock port. If your design does not have one you can use ``wb_clk_i`` +* ``CLOCK_NET``: The clock net. This does not have to be set manually. To unset it just delete the line. + +Building your design +-------------------- + +To build your design go into ``openlane`` and run make with your design name as a target: + +.. code-block:: bash + + cd openlane + make user_proj + +This will run your design throught the OpenLANE workflow and if successfull produce a ``.gds`` file of your project. The subdirectory ``runs/user_proj`` will be created in your designs folder, which contains the results of the run. The following result files in ``runs/user_proj/`` are important: + +* ``user_proj/runs/user_proj/reports/final_summary_report.csv``: Contains the results of the run including violations +* ``user_proj/runs/user_proj/results/magic/user_proj.lef`` +* ``user_proj/runs/user_proj/results/magic/user_proj.gds`` + +The ``.gds`` and ``.lef`` files can also be found in the ``gds`` and ``lef`` directories on the top level of the repository. + +Adding your design to the wrapper +--------------------------------- + +After building your design you can add it to ``user_project_wrapper``, which takes the ``.gds`` and ``.lef`` files you produced by building your design. To achieve this, we need to adjust a few configuration options in ``user_project_wrapper/config.tcl``: + +.. code-block:: tcl + + set ::env(VERILOG_FILES_BLACKBOX) "\ + $script_dir/../../verilog/rtl/defines.v \ + $script_dir/../../verilog/rtl/user_proj/top_level.v" + + set ::env(EXTRA_LEFS) "\ + $script_dir/../../lef/user_proj.lef" + + set ::env(EXTRA_GDS_FILES) "\ + $script_dir/../../gds/user_proj.gds" + +In many cases it will be sufficient, to just replace ``user_proj_example`` with the name of your user project. For ``VERILOG_FILES_BLACKBOX`` you need to provide the path to the source file of your top level module. + +Placement macro +^^^^^^^^^^^^^^^ + +If your design is different in size to the example you should adjust the position, where your module will be placed inside the wrapper. This can be done in ``user_project_wrapper/macro.cfg``: + +.. code-block:: tcl + + mprj 850 1100 N + +In this case 850/1100 specify the X/Y position of the macro. The size of the wrapper can be found in ``user_project_wrapper/config.tcl``, with that and the size of your design you can figure out, where you need to place your design. + +Building the wrapper +^^^^^^^^^^^^^^^^^^^^ + +After modifying the configuration files of the wrapper you can build it to produce a wrapper, which contains your design: + +.. code-block:: bash + + cd openlane + make user_project_wrapper + +Building Caravel +---------------- + +To build the whole Caravel system you just need to run make in the root of the repository: + +.. code-block:: bash + + make + +The resulting ``.gds`` file can be found in ``gds/caravel.gds``. + +Troubleshooting +--------------- + +Common error messages/warnings +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Pin mprj/xxx is outside die area +"""""""""""""""""""""""""""""""" + +Either your design is too big for the wrapper or you need to adjust the position of your design in the wrapper. See `Placement macro <#placement-macro>`_. + +No clock nets have been found +""""""""""""""""""""""""""""" + +``CLOCK_PORT`` in your config.tcl is not set propertly. + +Design congestion too high +"""""""""""""""""""""""""" + +Reduce ``PL_TARGET_DENSITY`` and/or ``FP_CORE_UTIL`` and/or ``CELL_PAD``. diff --git a/doc/source/references.rst b/doc/source/references.rst new file mode 100755 index 00000000..c78d9894 --- /dev/null +++ b/doc/source/references.rst @@ -0,0 +1,30 @@ +.. raw:: html + + + +References +========== + +* http://riscv.org/ +* http://riscv.org/software-status/ +* https://riscv.org/technical/specifications +* https://github.com/cliffordwolf/picorv32 +* https://github.com/google/skywater-pdk +* https://github.com/efabless/caravel + diff --git a/doc/source/spi.rst b/doc/source/spi.rst new file mode 100755 index 00000000..d2d90753 --- /dev/null +++ b/doc/source/spi.rst @@ -0,0 +1,146 @@ +.. raw:: html + + + +SPI Controller +============== + +This section describes the SPI configuration registers. + +Related pins +------------ + +- :ref:`SDI ` - E9, +- :ref:`CSB ` - E8, +- :ref:`SCK ` - F8, +- :ref:`SDO ` - F9. + +.. _reg_spi_config: + +``reg_spi_config`` +------------------ + +Base address: ``0x24000000`` + +.. wavedrom:: + + { "reg": [ + {"name": "prescaler", "bits": 8}, + {"bits": 1, "name": "MLB"}, + {"bits": 1, "name": "nCSB"}, + {"bits": 1, "name": "nSCK"}, + {"bits": 1, "name": "MOD"}, + {"bits": 1, "name": "STM"}, + {"bits": 1, "name": "IE"}, + {"bits": 1, "name": "INT"}, + {"bits": 1, "name": "HK"}, + {"name": "(undefined, reads zero)", "type": 1, "bits": 16}], + "config": {"hspace": 1400} + } + + +.. list-table:: Configuration bit definitions + :name: spi_configuration_bit_definitions + :header-rows: 1 + :widths: auto + + * - Bit + - Name + - Values + * - 15 + - Housekeeping + - 0 - SPI controller connected to external pins + + 1 - SPI controller connected directly to housekeeping SPI + * - 14 + - SPI interrupt enable + - 0 - interrupt disabled + + 1 - interrupt enabled ( :ref:`IRQ channel 9 ` ) + * - 13 + - SPI system enable + - 0 - SPI disabled + + 1 - SPI enabled + * - 12 + - stream + - 0 - apply/release :ref:`CSB ` separately for each byte + + 1 - apply :ref:`CSB ` until stream bit is cleared (manually) + * - 11 + - mode + - 0 - read and change data on opposite :ref:`SCK ` edges (default) + + 1 - read and change data on the same :ref:`SCK ` edges + * - 10 + - invert :ref:`SCK ` + - 0 - normal :ref:`SCK ` (default) + + 1 - inverted :ref:`SCK ` + * - 9 + - invert :ref:`CSB ` + - 0 - normal :ref:`CSB ` (low is active, default) + + 1 - inverted :ref:`CSB ` (high is active) + * - 8 + - MLB + - 0 - MSB first + + 1 - LSB first + * - 7-0 + - prescaler + - count (in controller clock cycles) of 1/2 :ref:`SCK ` cycle + (default value 2). Clock rate formula: + `SPI clock rate = 2 * core_clock / (prescaler + 1)` + + +.. note:: + + All configuration bits other than the prescaler default to value zero. + +.. _reg_spi_data: + +``reg_spi_data`` +---------------- + +Base address: ``0x24000004`` + +.. wavedrom:: + + { "reg": [ + {"name": "SPI data", "bits": 8}, + {"name": "(undefined, reads zero)", "type": 1, "bits": 24}] + } + +| + +The byte at ``0x24000004`` holds the SPI data (either read or write). + +Reading to and writing from the SPI controller is simply a matter of setting the required values in the configuration register, and writing values to or reading from ``reg_spi_data``. +The protocol is similar to the UART. + +A write operation will stall the CPU if an incomplete SPI transmission is still in progress. + +Reading from the SPI will also stall the CPU if an incomplete SPI transmission is still in progress. +There is no FIFO buffer for data. +Therefore SPI reads and writes are relatively expensive operations that tie up the CPU, but will not lose or overwrite data. + +.. note:: + + There is no FIFO associated with the SPI controller. diff --git a/doc/source/sram.rst b/doc/source/sram.rst new file mode 100755 index 00000000..4560440e --- /dev/null +++ b/doc/source/sram.rst @@ -0,0 +1,43 @@ +.. raw:: html + + + +SRAM +==== + +.. _management-area-sram: + +Management area SRAM +-------------------- + +The Caravel chip has an on-board memory of 256 words of width 32 bits. +The memory is located at address ``0``. +There are additional blocks of memory above this area, size and location TDB. + +.. _storage-area-sram: + +Storage area SRAM +----------------- + +The Caravel chip has a *storage area* SRAM block that is auxiliary space +that can be used by either the management SoC or the user project, through the Wishbone bus interface. +The storage area is connected into the user area 2 power supply, +and so is nominally considered to be part of the user area. + +The storage area may be used as an experimentation area for OpenRAM, so for any user project making use of this space, the user should notify efabless of their requirement for the size and configuration of the SRAM block. diff --git a/doc/source/supplementary-figures.rst b/doc/source/supplementary-figures.rst new file mode 100755 index 00000000..d20b465d --- /dev/null +++ b/doc/source/supplementary-figures.rst @@ -0,0 +1,95 @@ +.. raw:: html + + + +Supplementary figures +===================== + +GPIO pads - management and user IO +---------------------------------- + +.. figure:: _static/gpio_pads.svg + :name: gpio_pads_management_and_user_io + :alt: GPIO pads - management and user IO + :align: center + +GPIO pad structure - pads 0 (JTAG) and 1 (SDO) +---------------------------------------------- + +.. figure:: _static/single_gpio_pad_structure_used_for_pad_0_and_pad_1.svg + :name: gpio_pad_structure_pads_0_and_1 + :alt: GPIO pad structure - pads 0 (JTAG) and 1 (SDO) + :align: center + +GPIO pad structure - all pads except 0 and 1 +-------------------------------------------- + +.. figure:: _static/single_gpio_pad_structure_used_all_pads_except_0_and_1.svg + :name: gpio_pad_structure_all_pads_except_0_and_1 + :alt: GPIO pad structure - all pads except 0 and 1 + :align: center + +Die arrangement and pads +------------------------ + +.. figure:: _static/die_pads.svg + :name: die_arrangement_and_pads + :alt: Die arrangement and pads + :align: center + +Die voltage clamp arrangement +----------------------------- + +.. figure:: _static/voltage_clamp_arrangement.svg + :name: voltage_clamp_arrangement + :alt: Voltage clamp arrangement + :align: center + +Die plot +------------------------ + +.. figure:: _static/caravel.png + :name: caravel + :alt: Die plot + :align: center + +Die to WLCSP bond plan +------------------------ + +.. figure:: _static/bond_plan.svg + :name: bond_plan + :alt: Die to WLCSP bond plan + :align: center + +Power domain splits +------------------- + +.. figure:: _static/power_domain_splits.svg + :name: power_domain_splits + :alt: Power domain splits + :align: center + +PCB example route pattern +------------------------- + +.. figure:: _static/pcb_example_route_pattern.svg + :name: pcb_example_route_pattern + :alt: PCB example route pattern + :align: center + diff --git a/doc/source/tool-versioning.rst b/doc/source/tool-versioning.rst new file mode 100755 index 00000000..346559cf --- /dev/null +++ b/doc/source/tool-versioning.rst @@ -0,0 +1,54 @@ +.. raw:: html + + + +Repositories and versions to use +================================ + + +===================================================================== ================================================ =========================== + Repo commit version +===================================================================== ================================================ =========================== +`skywater-pdk `__ ``c094b6e83a4f9298e47f696ec5a7fd53535ec5eb`` \- +`open_pdks `__ ``6c05bc48dc88784f9d98b89d6791cdfd91526676`` ``1.0.225`` +`OpenLane `__ ``6905a12d2efe18502c37c3207b5ee84cdf720d9c`` ``2021.09.19_20.25.16`` +`caravel/caravel-lite `__ \- ``mpw-three`` +`MPW-Precheck `__ Latest Latest +===================================================================== ================================================ =========================== + + +Notes +----- + +- | If you have already successfully hardened your blocks and have a clean + | ``user_project_wrapper``, you don't have to recreate it and can just reuse it. + | This is only if no changes have been made to the user project area or to the tools that + | require you to reharden your design(s). + +- | If you will use openlane to harden your blocks, you can refer to + | this `README `__. + +- | **IMPORTANT**. Do not forget to run ``make uncompress -j4`` in your user project root + | directory before you start working. Likewise, before you commit and push your + | changes back, run ``make compress -j4``. + +- | If you already have a clean working tree in a previously cloned repository from + | those listed above, what you need to do is: + | ``git pull git checkout tag`` + diff --git a/doc/source/uart.rst b/doc/source/uart.rst new file mode 100755 index 00000000..ae12c7a8 --- /dev/null +++ b/doc/source/uart.rst @@ -0,0 +1,105 @@ +.. raw:: html + + + +UART interface +============== + +The UART is a standard 2-pin serial interface that can communicate with the most similar interfaces at a fixed baud rate. +Although the UART operates independently of the CPU, data transfers are blocking operations which will generate CPU wait states until the data transfer is completed. + +Related pins +------------ + +* :ref:`SER_TX ` - F7, +* :ref:`SER_RX ` - E7. + +UART control registers +---------------------- + +The behaviour of the UART can be modified by changing values in the registers described below. + +.. _reg_uart_clkdiv: + +``reg_uart_clkdiv`` +~~~~~~~~~~~~~~~~~~~ + +Base address: ``0x20000000`` + +.. wavedrom:: + + { "reg": [ + {"name": "UART clock divider", "bits": 32}] + } + +| + +The entire 32bit word encodes the number of CPU core cycles to divide down to get the UART data bit rate (baud rate). +The default value is 1. + +For example, if the external crystal is 12.5 MHz, then the core CPU clock runs at 100 MHz. +To get 9600 baud rate, you need to set:: + + 100 000 000 / 9600 = 10417 (0x28B1) + +.. _reg_uart_data: + +``reg_uart_data`` +~~~~~~~~~~~~~~~~~ + +Base address: ``0x20000004`` + +.. wavedrom:: + + { "reg": [ + {"name": "UART data", "bits": 8}, + {"name": "(unused, value is 0x0)", "type": 1, "bits": 24}] + } + +| + +Writing a value to this register will immediately start a data transfer on the :ref:`SER_TX ` pin. +If the UART write operation is pending, then the CPU will be blocked with wait states until the transfer is complete before starting the new write operation. +This makes the UART transmit a relatively expensive operation on the CPU, but avoids the necessity of buffering data and checking for buffer overflow. + +Reading a value from this register: + +* returns ``255 (0xff)`` if no valid data byte is in the receive buffer (the whole register has value ``0xffffffff``), or +* returns the value of the received buffer otherwise, and +* clears the receive buffer for additional reads. + +.. note:: There is no FIFO associated with the UART. + +.. _reg_uart_enable: + +``reg_uart_enable`` +~~~~~~~~~~~~~~~~~~~ + +Base address: ``0x20000008`` + +.. wavedrom:: + + { "reg": [ + {"name": "UART enable", "bits": 8}, + {"name": "(unused, value is 0x0)", "type": 1, "bits": 24}] + } + +| + +The UART must be enabled to run (disabled by default).