mirror of
https://github.com/openhwgroup/cva6.git
synced 2025-04-20 04:07:36 -04:00
Design Spec initial commit: description of introduction, system and frontend (#949)
This commit is contained in:
parent
dc7b3ccb9d
commit
e60330ce90
16 changed files with 1720 additions and 2 deletions
1
docs/design_spec/.gitignore
vendored
Normal file
1
docs/design_spec/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
build
|
38
docs/design_spec/Makefile
Normal file
38
docs/design_spec/Makefile
Normal file
|
@ -0,0 +1,38 @@
|
|||
#
|
||||
# Copyright (c) 2020 OpenHW Group
|
||||
#
|
||||
# Licensed under the Solderpad Hardware Licence, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# https://solderpad.org/licenses/
|
||||
#
|
||||
# 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 WITH SHL-2.0
|
||||
#
|
||||
###############################################################################
|
||||
#
|
||||
# Minimal makefile for Sphinx documentation
|
||||
#
|
||||
|
||||
# You can set these variables from the command line.
|
||||
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)
|
BIN
docs/design_spec/images/CVA6_subsystems.png
Normal file
BIN
docs/design_spec/images/CVA6_subsystems.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 47 KiB |
BIN
docs/design_spec/images/ariane_overview.png
Normal file
BIN
docs/design_spec/images/ariane_overview.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 175 KiB |
BIN
docs/design_spec/images/bht.png
Normal file
BIN
docs/design_spec/images/bht.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 111 KiB |
BIN
docs/design_spec/images/frontend_modules.png
Normal file
BIN
docs/design_spec/images/frontend_modules.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 29 KiB |
311
docs/design_spec/images/openhw-landscape.svg
Normal file
311
docs/design_spec/images/openhw-landscape.svg
Normal file
|
@ -0,0 +1,311 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="417.742px" height="103.226px" viewBox="0 0 417.742 103.226" enable-background="new 0 0 417.742 103.226"
|
||||
xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#20AA4D" d="M38.589,37.644c0.665,0.646,1.379,1.235,2.136,1.775v-1.775H38.589z"/>
|
||||
<path fill="#20AA4D" d="M40.726,9.98c-0.136,0.096-0.268,0.197-0.398,0.298h0.398V9.98z"/>
|
||||
<path fill="#20AA4D" d="M40.726,16.773v-5.109h-2.036c-1.196,1.143-2.226,2.446-3.072,3.878v1.231H40.726z"/>
|
||||
<path fill="#20AA4D" d="M34.231,18.457c-0.562,1.521-0.929,3.132-1.063,4.812h1.063V18.457z"/>
|
||||
<rect x="35.617" y="24.654" fill="#20AA4D" width="5.108" height="5.109"/>
|
||||
<path fill="#20AA4D" d="M34.231,24.654h-1.133c0,0.016,0,0.029,0,0.046c0,1.759,0.264,3.454,0.735,5.063h0.398V24.654z"/>
|
||||
<path fill="#20AA4D" d="M47.223,7.081c-1.824,0.407-3.54,1.095-5.111,2.01v1.188h5.111V7.081z"/>
|
||||
<path fill="#20AA4D" d="M40.726,36.258v-5.109h-5.108v2.708c0.501,0.845,1.053,1.652,1.679,2.401H40.726z"/>
|
||||
<rect x="48.609" y="18.159" fill="#20AA4D" width="5.108" height="5.109"/>
|
||||
<rect x="48.609" y="31.149" fill="#20AA4D" width="5.108" height="5.109"/>
|
||||
<rect x="42.111" y="11.664" fill="#20AA4D" width="5.111" height="5.109"/>
|
||||
<rect x="48.609" y="11.664" fill="#20AA4D" width="5.108" height="5.109"/>
|
||||
<rect x="48.609" y="24.654" fill="#20AA4D" width="5.108" height="5.109"/>
|
||||
<rect x="42.111" y="18.159" fill="#20AA4D" width="5.111" height="5.109"/>
|
||||
<rect x="42.111" y="24.654" fill="#20AA4D" width="5.111" height="5.109"/>
|
||||
<rect x="42.111" y="31.149" fill="#20AA4D" width="5.111" height="5.109"/>
|
||||
<rect x="35.617" y="18.159" fill="#20AA4D" width="5.108" height="5.109"/>
|
||||
<rect x="55.102" y="11.664" fill="#20AA4D" width="5.11" height="5.109"/>
|
||||
<path fill="#20AA4D" d="M60.212,9.09c-1.573-0.915-3.287-1.603-5.11-2.01v3.197h5.11V9.09z"/>
|
||||
<path fill="#20AA4D" d="M42.111,37.644v2.665c1.571,0.915,3.287,1.603,5.111,2.01v-4.675H42.111z"/>
|
||||
<path fill="#20AA4D" d="M61.597,37.644v1.775c0.756-0.54,1.472-1.129,2.137-1.775H61.597z"/>
|
||||
<path fill="#20AA4D" d="M61.597,31.149v5.109h3.431c0.626-0.749,1.179-1.559,1.68-2.403v-2.706H61.597z"/>
|
||||
<path fill="#20AA4D" d="M48.609,10.278h5.108v-3.44c-0.837-0.121-1.687-0.203-2.556-0.203c-0.87,0-1.716,0.082-2.552,0.203V10.278
|
||||
z"/>
|
||||
<path fill="#20AA4D" d="M69.224,24.654h-1.131v5.109h0.396c0.471-1.609,0.737-3.305,0.737-5.063
|
||||
C69.226,24.683,69.224,24.669,69.224,24.654z"/>
|
||||
<rect x="55.102" y="31.149" fill="#20AA4D" width="5.11" height="5.109"/>
|
||||
<rect x="55.102" y="18.159" fill="#20AA4D" width="5.11" height="5.109"/>
|
||||
<rect x="55.102" y="24.654" fill="#20AA4D" width="5.11" height="5.109"/>
|
||||
<path fill="#20AA4D" d="M69.153,23.268c-0.134-1.678-0.501-3.288-1.061-4.807v4.807H69.153z"/>
|
||||
<path fill="#20AA4D" d="M48.609,37.644v4.918c0.766,0.111,1.544,0.185,2.339,0.191h0.425c0.795-0.007,1.576-0.08,2.343-0.191
|
||||
v-4.918H48.609z"/>
|
||||
<rect x="61.597" y="18.159" fill="#20AA4D" width="5.11" height="5.109"/>
|
||||
<path fill="#20AA4D" d="M55.102,37.644v4.675c1.824-0.407,3.538-1.095,5.11-2.01v-2.665H55.102z"/>
|
||||
<rect x="61.597" y="24.654" fill="#20AA4D" width="5.11" height="5.109"/>
|
||||
<path fill="#20AA4D" d="M61.597,10.278h0.399c-0.132-0.101-0.264-0.202-0.399-0.298V10.278z"/>
|
||||
<path fill="#20AA4D" d="M66.707,15.544c-0.847-1.432-1.879-2.738-3.073-3.881h-2.038v5.109h5.11V15.544z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#20AA4D" d="M22.625,36.258h3.841c-0.767-1.62-1.369-3.332-1.805-5.109h-2.037V36.258z"/>
|
||||
<rect x="22.625" y="57.129" fill="#20AA4D" width="5.111" height="5.111"/>
|
||||
<rect x="22.625" y="44.139" fill="#20AA4D" width="5.111" height="5.109"/>
|
||||
<path fill="#20AA4D" d="M27.736,38.643c-0.196-0.325-0.371-0.664-0.553-0.999h-4.559v5.109h5.111V38.643z"/>
|
||||
<path fill="#20AA4D" d="M22.625,29.763h1.739c-0.312-1.644-0.504-3.329-0.504-5.063c0-0.017,0.001-0.03,0.001-0.046h-1.236V29.763
|
||||
z"/>
|
||||
<path fill="#20AA4D" d="M25.095,16.773c0.409-1.315,0.875-2.605,1.463-3.832c-1.36,0.84-2.67,1.75-3.934,2.719v1.113H25.095z"/>
|
||||
<path fill="#20AA4D" d="M22.625,23.268h1.318c0.093-1.75,0.334-3.462,0.746-5.109h-2.064V23.268z"/>
|
||||
<rect x="22.625" y="50.634" fill="#20AA4D" width="5.111" height="5.109"/>
|
||||
<rect x="29.122" y="57.129" fill="#20AA4D" width="2.661" height="5.111"/>
|
||||
<path fill="#20AA4D" d="M5.11,44.139c-0.043,0.232-0.1,0.46-0.139,0.691h3.279v-0.691H5.11z"/>
|
||||
<rect x="29.122" y="50.634" fill="#20AA4D" width="2.661" height="5.109"/>
|
||||
<polyline fill="#20AA4D" points="31.678,44.139 29.122,44.139 29.122,49.249 31.783,49.249 31.783,44.831 "/>
|
||||
<path fill="#20AA4D" d="M30.745,42.753c-0.571-0.642-1.113-1.311-1.623-2.005v2.005H30.745z"/>
|
||||
<rect x="16.13" y="44.139" fill="#20AA4D" width="5.11" height="5.109"/>
|
||||
<rect x="9.637" y="37.644" fill="#20AA4D" width="5.107" height="5.109"/>
|
||||
<path fill="#20AA4D" d="M8.251,42.753v-5.109H6.813c-0.568,1.664-1.042,3.37-1.425,5.109H8.251z"/>
|
||||
<rect x="9.637" y="31.149" fill="#20AA4D" width="5.107" height="5.109"/>
|
||||
<path fill="#20AA4D" d="M14.744,24.654h-1.026c-1.222,1.623-2.336,3.334-3.343,5.109h4.37V24.654z"/>
|
||||
<path fill="#20AA4D" d="M8.251,33.999c-0.325,0.744-0.635,1.497-0.924,2.26h0.924V33.999z"/>
|
||||
<rect x="9.637" y="44.139" fill="#20AA4D" width="5.107" height="0.691"/>
|
||||
<rect x="16.13" y="57.129" fill="#20AA4D" width="5.11" height="5.111"/>
|
||||
<rect x="16.13" y="50.634" fill="#20AA4D" width="5.11" height="5.109"/>
|
||||
<rect x="16.13" y="24.654" fill="#20AA4D" width="5.11" height="5.109"/>
|
||||
<path fill="#20AA4D" d="M21.24,23.268v-5.109h-1.584c-1.238,1.124-2.415,2.314-3.526,3.566v1.543H21.24z"/>
|
||||
<rect x="16.13" y="37.644" fill="#20AA4D" width="5.11" height="5.109"/>
|
||||
<rect x="16.13" y="31.149" fill="#20AA4D" width="5.11" height="5.109"/>
|
||||
</g>
|
||||
<g>
|
||||
<polygon fill="#20AA4D" points="86.192,63.626 82.651,63.626 83.873,68.734 86.192,68.734 "/>
|
||||
<rect x="81.083" y="44.139" fill="#20AA4D" width="5.109" height="5.109"/>
|
||||
<path fill="#20AA4D" d="M81.083,23.268h5.109v-1.545c-1.11-1.25-2.287-2.44-3.525-3.564h-1.584V23.268z"/>
|
||||
<rect x="81.083" y="31.149" fill="#20AA4D" width="5.109" height="5.109"/>
|
||||
<rect x="81.083" y="37.644" fill="#20AA4D" width="5.109" height="5.109"/>
|
||||
<rect x="81.083" y="24.654" fill="#20AA4D" width="5.109" height="5.109"/>
|
||||
<path fill="#20AA4D" d="M84.205,70.12l0.763,3.179c0.175,0.701,0.31,1.35,0.414,1.931h0.719c0.025-0.188,0.059-0.395,0.091-0.595
|
||||
V70.12H84.205z"/>
|
||||
<path fill="#20AA4D" d="M85.941,76.615h-0.346c0.114,0.912,0.134,1.459,0.134,1.459h0.13C85.86,78.074,85.86,77.527,85.941,76.615
|
||||
z"/>
|
||||
<polygon fill="#20AA4D" points="87.578,55.744 90.279,55.744 91.401,50.634 87.578,50.634 "/>
|
||||
<path fill="#20AA4D" d="M94.073,44.831h3.279c-0.039-0.231-0.096-0.459-0.139-0.691h-3.14V44.831z"/>
|
||||
<rect x="87.578" y="37.644" fill="#20AA4D" width="5.109" height="5.109"/>
|
||||
<rect x="87.578" y="31.149" fill="#20AA4D" width="5.109" height="5.109"/>
|
||||
<polygon fill="#20AA4D" points="87.578,62.241 88.857,62.241 89.977,57.129 87.578,57.129 "/>
|
||||
<path fill="#20AA4D" d="M87.578,29.763h4.372c-1.008-1.775-2.121-3.486-3.343-5.109h-1.028V29.763z"/>
|
||||
<polygon fill="#20AA4D" points="79.21,49.249 79.697,49.249 79.697,44.139 74.588,44.139 74.588,44.831 78.152,44.831 "/>
|
||||
<polygon fill="#20AA4D" points="86.192,62.241 86.192,57.129 81.097,57.129 82.321,62.241 "/>
|
||||
<polygon fill="#20AA4D" points="79.542,50.634 79.697,51.283 79.697,50.634 "/>
|
||||
<path fill="#20AA4D" d="M70.223,44.139c-0.229,0.228-0.443,0.474-0.685,0.691h3.664v-0.691H70.223z"/>
|
||||
<polygon fill="#20AA4D" points="87.578,63.626 87.578,68.071 88.552,63.626 "/>
|
||||
<path fill="#20AA4D" d="M94.073,36.258h0.924c-0.289-0.763-0.596-1.516-0.924-2.258V36.258z"/>
|
||||
<polygon fill="#20AA4D" points="87.578,44.139 87.578,49.249 91.704,49.249 92.673,44.831 92.687,44.831 92.687,44.139 "/>
|
||||
<path fill="#20AA4D" d="M94.073,37.644v5.109h2.863c-0.382-1.739-0.856-3.445-1.427-5.109H94.073z"/>
|
||||
<path fill="#20AA4D" d="M79.697,15.66c-1.263-0.969-2.571-1.879-3.933-2.719c0.587,1.227,1.054,2.517,1.463,3.832h2.469V15.66z"/>
|
||||
<path fill="#20AA4D" d="M79.697,18.159h-2.064c0.412,1.647,0.653,3.359,0.747,5.109h1.317V18.159z"/>
|
||||
<path fill="#20AA4D" d="M79.697,24.654h-1.236c0,0.016,0.002,0.029,0.002,0.046c0,1.734-0.191,3.42-0.503,5.063h1.736V24.654z"/>
|
||||
<path fill="#20AA4D" d="M79.697,31.149H77.66c-0.435,1.777-1.038,3.489-1.805,5.109h3.841V31.149z"/>
|
||||
<path fill="#20AA4D" d="M79.697,42.753v-5.109h-4.558c-0.182,0.335-0.357,0.672-0.551,0.997v4.112H79.697z"/>
|
||||
<rect x="81.083" y="50.634" fill="#20AA4D" width="5.109" height="5.109"/>
|
||||
<path fill="#20AA4D" d="M73.202,40.749c-0.51,0.694-1.054,1.363-1.623,2.005h1.623V40.749z"/>
|
||||
</g>
|
||||
<g>
|
||||
<polygon fill="#20AA4D" points="61.597,62.241 64.887,62.241 66.146,57.129 61.597,57.129 "/>
|
||||
<polygon fill="#20AA4D" points="60.212,68.734 60.212,63.626 58.755,63.626 59.784,68.734 "/>
|
||||
<polygon fill="#20AA4D" points="60.212,57.129 57.447,57.129 58.478,62.241 60.212,62.241 "/>
|
||||
<path fill="#20AA4D" d="M68.093,46.058v3.16l0.974-3.957C68.75,45.537,68.42,45.796,68.093,46.058z"/>
|
||||
<path fill="#20AA4D" d="M66.707,47.088c-1.159,0.811-2.376,1.536-3.655,2.16h3.655V47.088z"/>
|
||||
<polygon fill="#20AA4D" points="61.597,68.734 63.291,68.734 64.547,63.626 61.597,63.626 "/>
|
||||
<path fill="#20AA4D" d="M62.95,70.12h-1.353v5.109h0.156c0.104-0.581,0.239-1.229,0.414-1.931L62.95,70.12z"/>
|
||||
<polygon fill="#20AA4D" points="61.597,50.634 61.597,55.744 66.486,55.744 66.707,54.851 66.707,50.634 "/>
|
||||
<polygon fill="#20AA4D" points="60.064,70.12 60.212,70.852 60.212,70.12 "/>
|
||||
<path fill="#20AA4D" d="M57.169,55.744h3.043v-5.109h-0.584c-1.076,0.355-2.181,0.648-3.313,0.865L57.169,55.744z"/>
|
||||
</g>
|
||||
<g>
|
||||
<rect x="16.13" y="76.615" fill="#002D62" width="5.11" height="5.109"/>
|
||||
<path fill="#002D62" d="M21.24,83.11h-5.11v0.878c1.33,1.495,2.745,2.916,4.254,4.23h0.856V83.11z"/>
|
||||
<polygon fill="#002D62" points="46.248,57.129 42.927,57.129 42.927,62.241 47.223,62.241 47.223,61.137 "/>
|
||||
<rect x="22.625" y="76.615" fill="#002D62" width="5.111" height="5.109"/>
|
||||
<rect x="22.625" y="83.11" fill="#002D62" width="5.111" height="5.108"/>
|
||||
<path fill="#002D62" d="M22.625,89.605v0.445c1.623,1.248,3.333,2.381,5.111,3.409v-3.854H22.625z"/>
|
||||
<rect x="22.625" y="72.534" fill="#002D62" width="5.111" height="2.695"/>
|
||||
<path fill="#002D62" d="M47.223,96.1h-5.111v2.756c1.674,0.325,3.378,0.564,5.111,0.708V96.1z"/>
|
||||
<path fill="#002D62" d="M40.726,96.1h-5.108v1.003c1.663,0.585,3.368,1.079,5.108,1.475V96.1z"/>
|
||||
<path fill="#002D62" d="M34.231,94.713v-4.349h-2.449v-0.76h-2.661v4.636c0.308,0.161,0.619,0.316,0.93,0.473H34.231z"/>
|
||||
<rect x="16.13" y="72.534" fill="#002D62" width="5.11" height="2.695"/>
|
||||
<rect x="42.927" y="63.626" fill="#002D62" width="4.295" height="5.107"/>
|
||||
<rect x="29.122" y="72.534" fill="#002D62" width="2.661" height="2.695"/>
|
||||
<rect x="42.927" y="83.11" fill="#002D62" width="4.295" height="5.108"/>
|
||||
<path fill="#002D62" d="M44.811,51.224c-0.636-0.15-1.269-0.301-1.883-0.496v5.016h2.982L44.811,51.224z"/>
|
||||
<rect x="42.927" y="76.615" fill="#002D62" width="4.295" height="5.109"/>
|
||||
<rect x="42.927" y="70.12" fill="#002D62" width="4.295" height="5.109"/>
|
||||
<rect x="29.122" y="76.615" fill="#002D62" width="2.661" height="5.109"/>
|
||||
<polygon fill="#002D62" points="47.223,94.713 47.223,89.605 42.927,89.605 42.927,90.365 42.111,90.365 42.111,94.713 "/>
|
||||
<rect x="29.122" y="83.11" fill="#002D62" width="2.661" height="5.108"/>
|
||||
<rect x="35.617" y="90.365" fill="#002D62" width="5.108" height="4.349"/>
|
||||
<path fill="#002D62" d="M34.231,96.1H33.03c0.396,0.166,0.801,0.32,1.202,0.478V96.1z"/>
|
||||
<polygon fill="#002D62" points="48.609,81.724 52.233,81.724 50.988,76.615 48.609,76.615 "/>
|
||||
<rect x="48.609" y="89.605" fill="#002D62" width="5.108" height="5.108"/>
|
||||
<polygon fill="#002D62" points="48.609,88.218 53.717,88.218 53.717,87.821 52.57,83.11 48.609,83.11 "/>
|
||||
<polygon fill="#002D62" points="49.069,68.734 48.609,66.831 48.609,68.734 "/>
|
||||
<path fill="#002D62" d="M66.707,96.1h-5.11v2.439c1.737-0.398,3.452-0.855,5.11-1.438V96.1z"/>
|
||||
<path fill="#002D62" d="M60.212,96.1h-5.11v3.477c1.735-0.143,3.433-0.409,5.11-0.739V96.1z"/>
|
||||
<path fill="#002D62" d="M68.093,96.1v0.448c0.375-0.146,0.749-0.294,1.12-0.448H68.093z"/>
|
||||
<path fill="#002D62" d="M53.717,96.1h-5.108v3.575c0.845,0.045,1.696,0.07,2.552,0.07c0.86,0,1.705-0.062,2.556-0.109V96.1z"/>
|
||||
<path fill="#002D62" d="M79.697,89.605h-5.109v3.832c1.777-1.031,3.489-2.162,5.109-3.409V89.605z"/>
|
||||
<path fill="#002D62" d="M68.093,89.605v5.108h4.115c0.33-0.166,0.667-0.323,0.994-0.496v-4.612H68.093z"/>
|
||||
<polygon fill="#002D62" points="74.861,68.734 74.588,67.634 74.588,68.734 "/>
|
||||
<polygon fill="#002D62" points="79.697,88.132 78.445,83.11 74.588,83.11 74.588,88.218 79.697,88.218 "/>
|
||||
<polygon fill="#002D62" points="48.609,75.229 50.652,75.229 49.407,70.12 48.609,70.12 "/>
|
||||
<polygon fill="#002D62" points="74.588,81.724 78.099,81.724 76.827,76.615 74.588,76.615 "/>
|
||||
<polygon fill="#002D62" points="73.202,76.615 70.307,76.615 69.033,81.724 73.202,81.724 "/>
|
||||
<polygon fill="#002D62" points="74.588,70.12 74.588,75.229 76.479,75.229 75.207,70.12 "/>
|
||||
<polygon fill="#002D62" points="73.202,83.11 68.689,83.11 68.093,85.501 68.093,88.218 73.202,88.218 "/>
|
||||
<rect x="55.102" y="90.365" fill="#002D62" width="5.11" height="4.349"/>
|
||||
<polygon fill="#002D62" points="73.202,70.12 71.927,70.12 70.655,75.229 73.202,75.229 "/>
|
||||
<rect x="61.597" y="90.365" fill="#002D62" width="5.11" height="4.349"/>
|
||||
<path fill="#002D62" d="M73.202,64.391c-0.134,0.855-0.328,1.885-0.589,2.983l-0.339,1.359h0.928V64.391z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#002D62" d="M127.358,67.378c-2.174-0.8-3.945-1.884-5.316-3.247c-1.369-1.364-2.366-2.968-2.997-4.81
|
||||
c-0.626-1.84-0.938-3.818-0.938-5.928c0-2.107,0.312-4.084,0.938-5.926c0.63-1.842,1.628-3.446,2.997-4.808
|
||||
c1.372-1.365,3.143-2.449,5.316-3.252c2.174-0.802,4.794-1.2,7.86-1.2h11.381c3.068,0,5.686,0.398,7.86,1.2
|
||||
c2.174,0.803,3.945,1.887,5.313,3.252c1.372,1.361,2.37,2.966,3,4.808c0.625,1.842,0.938,3.818,0.938,5.926
|
||||
c0,2.109-0.312,4.088-0.938,5.928c-0.631,1.842-1.628,3.445-3,4.81c-1.368,1.363-3.139,2.447-5.313,3.247
|
||||
c-2.174,0.802-4.792,1.203-7.86,1.203h-11.381C132.152,68.582,129.532,68.18,127.358,67.378z M151.482,61.178
|
||||
c1.295-0.436,2.322-1.033,3.089-1.794c0.767-0.758,1.302-1.65,1.605-2.678c0.301-1.026,0.451-2.129,0.451-3.312
|
||||
c0-1.18-0.149-2.285-0.451-3.311c-0.304-1.028-0.838-1.92-1.605-2.679c-0.767-0.761-1.793-1.355-3.089-1.793
|
||||
c-1.294-0.436-2.935-0.654-4.918-0.654h-11.27c-2.013,0-3.665,0.219-4.957,0.654c-1.298,0.438-2.325,1.032-3.091,1.793
|
||||
c-0.767,0.759-1.302,1.65-1.603,2.679c-0.304,1.025-0.451,2.131-0.451,3.311c0,1.184,0.147,2.286,0.451,3.312
|
||||
c0.301,1.027,0.836,1.92,1.603,2.678c0.767,0.761,1.793,1.358,3.091,1.794c1.292,0.435,2.932,0.653,4.916,0.653h11.311
|
||||
C148.547,61.832,150.188,61.613,151.482,61.178z"/>
|
||||
<path fill="#002D62" d="M198.24,38.631c2.033,0,3.758,0.26,5.18,0.777c1.422,0.521,2.576,1.232,3.471,2.132
|
||||
c0.89,0.901,1.542,1.956,1.959,3.164c0.413,1.211,0.619,2.489,0.619,3.838c0,1.407-0.206,2.707-0.619,3.903
|
||||
c-0.417,1.195-1.069,2.243-1.959,3.145c-0.895,0.897-2.049,1.6-3.471,2.107c-1.422,0.506-3.147,0.759-5.18,0.759h-21.864v9.701
|
||||
h-6.635V38.631H198.24z M176.376,51.707h21.71c0.932,0,1.688-0.085,2.281-0.252c0.589-0.168,1.04-0.395,1.359-0.674
|
||||
c0.312-0.282,0.525-0.615,0.637-0.994c0.113-0.379,0.171-0.792,0.171-1.244c0-0.42-0.058-0.829-0.171-1.223
|
||||
c-0.111-0.394-0.324-0.731-0.637-1.014c-0.319-0.279-0.77-0.505-1.359-0.675c-0.593-0.168-1.349-0.251-2.281-0.251h-21.71V51.707z
|
||||
"/>
|
||||
<path fill="#002D62" d="M251.91,38.631v6.749h-31.396v4.978h27.555v6.076h-27.555v4.978h31.396v6.746h-38.028V38.631H251.91z"/>
|
||||
<path fill="#002D62" d="M264.763,68.158h-6.633V38.631h6.296l27.667,20.838V38.631h6.633v29.526h-6.296L264.763,47.32V68.158z"/>
|
||||
<path fill="#20AA4D" d="M312.934,56.769v11.389h-6.632V38.631h6.632V50.02h27.177V38.631h6.639v29.526h-6.639V56.769H312.934z"/>
|
||||
<path fill="#20AA4D" d="M365.86,68.158l-15.076-29.526h7.99l9.606,20.248l9.842-20.248h4.903l9.836,20.248l9.612-20.248h7.988
|
||||
l-15.076,29.526h-4.902l-9.908-20.247l-9.918,20.247H365.86z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#6D6E71" d="M164.382,77.751h7.2c0.4,0,0.74,0.139,1.02,0.42c0.28,0.279,0.42,0.619,0.42,1.02v2.531
|
||||
c0,0.4-0.14,0.74-0.42,1.021c-0.28,0.279-0.62,0.42-1.02,0.42h-5.76c-0.072,0-0.228-0.018-0.468-0.049v3.264h-0.972V77.751z
|
||||
M172.05,81.722v-2.531c0-0.127-0.046-0.238-0.138-0.33c-0.092-0.092-0.202-0.139-0.33-0.139h-5.76
|
||||
c-0.128,0-0.238,0.047-0.33,0.139c-0.092,0.092-0.138,0.203-0.138,0.33v2.531c0,0.129,0.046,0.236,0.138,0.324
|
||||
c0.092,0.088,0.202,0.133,0.33,0.133h5.76c0.128,0,0.238-0.045,0.33-0.133C172.004,81.958,172.05,81.851,172.05,81.722z"/>
|
||||
<path fill="#6D6E71" d="M184.421,79.191v2.531c0,0.4-0.14,0.74-0.42,1.021c-0.28,0.279-0.62,0.42-1.02,0.42h-1.32l2.712,3.215
|
||||
h-1.284l-2.7-3.215h-3.168c-0.072,0-0.228-0.018-0.468-0.049v3.264h-0.972v-8.627h7.2c0.4,0,0.74,0.139,1.02,0.42
|
||||
C184.282,78.451,184.421,78.791,184.421,79.191z M177.222,82.179h5.76c0.128,0,0.236-0.045,0.324-0.133
|
||||
c0.088-0.088,0.132-0.195,0.132-0.324v-2.531c0-0.127-0.044-0.238-0.132-0.33c-0.088-0.092-0.196-0.139-0.324-0.139h-5.76
|
||||
c-0.128,0-0.238,0.047-0.33,0.139c-0.092,0.092-0.138,0.203-0.138,0.33v2.531c0,0.129,0.046,0.236,0.138,0.324
|
||||
C176.983,82.134,177.094,82.179,177.222,82.179z"/>
|
||||
<path fill="#6D6E71" d="M189.029,77.74h5.76c0.4,0,0.74,0.139,1.02,0.42c0.28,0.279,0.42,0.619,0.42,1.02v5.76
|
||||
c0,0.4-0.14,0.74-0.42,1.02c-0.28,0.281-0.62,0.42-1.02,0.42h-5.76c-0.4,0-0.74-0.139-1.02-0.42c-0.28-0.279-0.42-0.619-0.42-1.02
|
||||
v-5.76c0-0.4,0.14-0.74,0.42-1.02C188.29,77.878,188.629,77.74,189.029,77.74z M189.029,85.408h5.76
|
||||
c0.128,0,0.238-0.047,0.33-0.139c0.092-0.092,0.138-0.201,0.138-0.33v-5.76c0-0.129-0.046-0.238-0.138-0.33
|
||||
c-0.092-0.092-0.202-0.139-0.33-0.139h-5.76c-0.128,0-0.238,0.047-0.33,0.139c-0.092,0.092-0.138,0.201-0.138,0.33v5.76
|
||||
c0,0.129,0.046,0.238,0.138,0.33C188.792,85.361,188.901,85.408,189.029,85.408z"/>
|
||||
<path fill="#6D6E71" d="M204.785,85.431l4.416-7.691h1.14l-4.992,8.639h-1.128l-5.004-8.639h1.14L204.785,85.431z"/>
|
||||
<path fill="#6D6E71" d="M221.333,77.74v0.971h-6.912v2.857h5.556v0.982h-5.556v2.857h6.912v0.971h-7.885V77.74H221.333z"/>
|
||||
<path fill="#6D6E71" d="M232.204,85.275V77.74h0.972v8.639h-1.332l-6.336-7.535v7.535h-0.972V77.74h1.332L232.204,85.275z"/>
|
||||
<path fill="#6D6E71" d="M241.622,77.751h7.201c0.399,0,0.739,0.139,1.02,0.42c0.279,0.279,0.42,0.619,0.42,1.02v2.531
|
||||
c0,0.4-0.141,0.74-0.42,1.021c-0.28,0.279-0.62,0.42-1.02,0.42h-5.761c-0.071,0-0.228-0.018-0.468-0.049v3.264h-0.973V77.751z
|
||||
M249.29,81.722v-2.531c0-0.127-0.045-0.238-0.137-0.33c-0.093-0.092-0.203-0.139-0.33-0.139h-5.761
|
||||
c-0.128,0-0.237,0.047-0.329,0.139c-0.093,0.092-0.139,0.203-0.139,0.33v2.531c0,0.129,0.046,0.236,0.139,0.324
|
||||
c0.092,0.088,0.201,0.133,0.329,0.133h5.761c0.127,0,0.237-0.045,0.33-0.133C249.245,81.958,249.29,81.851,249.29,81.722z"/>
|
||||
<path fill="#6D6E71" d="M261.662,79.191v2.531c0,0.4-0.14,0.74-0.42,1.021c-0.28,0.279-0.62,0.42-1.021,0.42h-1.319l2.712,3.215
|
||||
h-1.284l-2.7-3.215h-3.168c-0.072,0-0.228-0.018-0.468-0.049v3.264h-0.972v-8.627h7.199c0.4,0,0.74,0.139,1.021,0.42
|
||||
C261.522,78.451,261.662,78.791,261.662,79.191z M254.462,82.179h5.76c0.129,0,0.236-0.045,0.324-0.133s0.133-0.195,0.133-0.324
|
||||
v-2.531c0-0.127-0.045-0.238-0.133-0.33s-0.195-0.139-0.324-0.139h-5.76c-0.127,0-0.238,0.047-0.33,0.139s-0.138,0.203-0.138,0.33
|
||||
v2.531c0,0.129,0.046,0.236,0.138,0.324S254.335,82.179,254.462,82.179z"/>
|
||||
<path fill="#6D6E71" d="M266.27,77.74h5.761c0.399,0,0.739,0.139,1.02,0.42c0.279,0.279,0.42,0.619,0.42,1.02v5.76
|
||||
c0,0.4-0.141,0.74-0.42,1.02c-0.28,0.281-0.62,0.42-1.02,0.42h-5.761c-0.399,0-0.739-0.139-1.021-0.42
|
||||
c-0.279-0.279-0.42-0.619-0.42-1.02v-5.76c0-0.4,0.141-0.74,0.42-1.02C265.53,77.878,265.87,77.74,266.27,77.74z M266.27,85.408
|
||||
h5.761c0.127,0,0.237-0.047,0.33-0.139c0.092-0.092,0.137-0.201,0.137-0.33v-5.76c0-0.129-0.045-0.238-0.137-0.33
|
||||
c-0.093-0.092-0.203-0.139-0.33-0.139h-5.761c-0.128,0-0.237,0.047-0.33,0.139c-0.092,0.092-0.138,0.201-0.138,0.33v5.76
|
||||
c0,0.129,0.046,0.238,0.138,0.33C266.032,85.361,266.142,85.408,266.27,85.408z"/>
|
||||
<path fill="#6D6E71" d="M285.325,78.71h-7.176c-0.128,0-0.238,0.047-0.33,0.139s-0.138,0.201-0.138,0.33v5.76
|
||||
c0,0.129,0.046,0.238,0.138,0.33s0.202,0.139,0.33,0.139h7.176v0.971h-7.176c-0.4,0-0.74-0.139-1.02-0.42
|
||||
c-0.28-0.279-0.42-0.619-0.42-1.02v-5.76c0-0.4,0.14-0.74,0.42-1.02c0.279-0.281,0.619-0.42,1.02-0.42h7.176V78.71z"/>
|
||||
<path fill="#6D6E71" d="M296.401,77.74v0.971h-6.912v2.857h5.556v0.982h-5.556v2.857h6.912v0.971h-7.885V77.74H296.401z"/>
|
||||
<path fill="#6D6E71" d="M308.185,79.179v0.336h-0.973v-0.336c0-0.129-0.045-0.238-0.137-0.33c-0.093-0.092-0.203-0.139-0.33-0.139
|
||||
h-5.761c-0.128,0-0.237,0.047-0.329,0.139c-0.093,0.092-0.139,0.201-0.139,0.33v1.932c0,0.129,0.046,0.236,0.139,0.324
|
||||
c0.092,0.088,0.201,0.133,0.329,0.133h5.761c0.399,0,0.739,0.139,1.02,0.42c0.279,0.279,0.42,0.619,0.42,1.02v1.932
|
||||
c0,0.4-0.141,0.74-0.42,1.02c-0.28,0.281-0.62,0.42-1.02,0.42h-5.761c-0.399,0-0.739-0.139-1.02-0.42
|
||||
c-0.28-0.279-0.421-0.619-0.421-1.02v-0.336h0.973v0.336c0,0.129,0.046,0.238,0.139,0.33c0.092,0.092,0.201,0.139,0.329,0.139
|
||||
h5.761c0.127,0,0.237-0.047,0.33-0.139c0.092-0.092,0.137-0.201,0.137-0.33v-1.932c0-0.129-0.045-0.236-0.137-0.324
|
||||
c-0.093-0.088-0.203-0.133-0.33-0.133h-5.761c-0.399,0-0.739-0.139-1.02-0.42c-0.28-0.279-0.421-0.619-0.421-1.02v-1.932
|
||||
c0-0.4,0.141-0.74,0.421-1.02c0.28-0.281,0.62-0.42,1.02-0.42h5.761c0.399,0,0.739,0.139,1.02,0.42
|
||||
C308.044,78.439,308.185,78.779,308.185,79.179z"/>
|
||||
<path fill="#6D6E71" d="M319.968,79.179v0.336h-0.973v-0.336c0-0.129-0.045-0.238-0.137-0.33c-0.093-0.092-0.203-0.139-0.33-0.139
|
||||
h-5.761c-0.128,0-0.237,0.047-0.329,0.139c-0.093,0.092-0.139,0.201-0.139,0.33v1.932c0,0.129,0.046,0.236,0.139,0.324
|
||||
c0.092,0.088,0.201,0.133,0.329,0.133h5.761c0.399,0,0.739,0.139,1.02,0.42c0.279,0.279,0.42,0.619,0.42,1.02v1.932
|
||||
c0,0.4-0.141,0.74-0.42,1.02c-0.28,0.281-0.62,0.42-1.02,0.42h-5.761c-0.399,0-0.739-0.139-1.02-0.42
|
||||
c-0.28-0.279-0.421-0.619-0.421-1.02v-0.336h0.973v0.336c0,0.129,0.046,0.238,0.139,0.33c0.092,0.092,0.201,0.139,0.329,0.139
|
||||
h5.761c0.127,0,0.237-0.047,0.33-0.139c0.092-0.092,0.137-0.201,0.137-0.33v-1.932c0-0.129-0.045-0.236-0.137-0.324
|
||||
c-0.093-0.088-0.203-0.133-0.33-0.133h-5.761c-0.399,0-0.739-0.139-1.02-0.42c-0.28-0.279-0.421-0.619-0.421-1.02v-1.932
|
||||
c0-0.4,0.141-0.74,0.421-1.02c0.28-0.281,0.62-0.42,1.02-0.42h5.761c0.399,0,0.739,0.139,1.02,0.42
|
||||
C319.827,78.439,319.968,78.779,319.968,79.179z"/>
|
||||
<path fill="#6D6E71" d="M324.587,77.74h5.761c0.399,0,0.739,0.139,1.021,0.42c0.279,0.279,0.42,0.619,0.42,1.02v5.76
|
||||
c0,0.4-0.141,0.74-0.42,1.02c-0.281,0.281-0.621,0.42-1.021,0.42h-5.761c-0.399,0-0.739-0.139-1.02-0.42
|
||||
c-0.279-0.279-0.42-0.619-0.42-1.02v-5.76c0-0.4,0.141-0.74,0.42-1.02C323.848,77.878,324.188,77.74,324.587,77.74z
|
||||
M324.587,85.408h5.761c0.128,0,0.237-0.047,0.33-0.139c0.092-0.092,0.138-0.201,0.138-0.33v-5.76c0-0.129-0.046-0.238-0.138-0.33
|
||||
c-0.093-0.092-0.202-0.139-0.33-0.139h-5.761c-0.127,0-0.237,0.047-0.33,0.139c-0.092,0.092-0.137,0.201-0.137,0.33v5.76
|
||||
c0,0.129,0.045,0.238,0.137,0.33C324.35,85.361,324.46,85.408,324.587,85.408z"/>
|
||||
<path fill="#6D6E71" d="M343.655,79.191v2.531c0,0.4-0.141,0.74-0.42,1.021c-0.28,0.279-0.621,0.42-1.021,0.42h-1.319l2.711,3.215
|
||||
h-1.283l-2.7-3.215h-3.168c-0.072,0-0.228-0.018-0.468-0.049v3.264h-0.973v-8.627h7.2c0.399,0,0.74,0.139,1.021,0.42
|
||||
C343.515,78.451,343.655,78.791,343.655,79.191z M336.455,82.179h5.76c0.128,0,0.235-0.045,0.324-0.133
|
||||
c0.088-0.088,0.132-0.195,0.132-0.324v-2.531c0-0.127-0.044-0.238-0.132-0.33c-0.089-0.092-0.196-0.139-0.324-0.139h-5.76
|
||||
c-0.128,0-0.238,0.047-0.33,0.139c-0.093,0.092-0.138,0.203-0.138,0.33v2.531c0,0.129,0.045,0.236,0.138,0.324
|
||||
C336.217,82.134,336.327,82.179,336.455,82.179z"/>
|
||||
<path fill="#6D6E71" d="M352.042,86.378V77.74h0.972v8.639H352.042z"/>
|
||||
<path fill="#6D6E71" d="M356.59,77.751h7.2c0.4,0,0.74,0.139,1.02,0.42c0.28,0.279,0.42,0.619,0.42,1.02v2.531
|
||||
c0,0.4-0.14,0.74-0.42,1.021c-0.279,0.279-0.619,0.42-1.02,0.42h-5.76c-0.072,0-0.229-0.018-0.469-0.049v3.264h-0.972V77.751z
|
||||
M364.258,81.722v-2.531c0-0.127-0.046-0.238-0.138-0.33s-0.202-0.139-0.33-0.139h-5.76c-0.129,0-0.238,0.047-0.33,0.139
|
||||
s-0.139,0.203-0.139,0.33v2.531c0,0.129,0.047,0.236,0.139,0.324s0.201,0.133,0.33,0.133h5.76c0.128,0,0.238-0.045,0.33-0.133
|
||||
S364.258,81.851,364.258,81.722z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#002D62" d="M352.39,28.699v5.57h-7.726c-0.936,0-1.732-0.121-2.389-0.363s-1.193-0.572-1.61-0.99
|
||||
c-0.416-0.418-0.721-0.908-0.914-1.471c-0.192-0.564-0.289-1.162-0.289-1.795c0-0.635,0.097-1.232,0.289-1.797
|
||||
c0.193-0.562,0.498-1.053,0.914-1.471c0.417-0.418,0.954-0.748,1.61-0.99s1.453-0.363,2.389-0.363h7.077v2.113h-7.065
|
||||
c-0.598,0-1.089,0.064-1.475,0.197c-0.385,0.131-0.689,0.311-0.914,0.535c-0.224,0.223-0.381,0.49-0.472,0.797
|
||||
c-0.091,0.309-0.136,0.635-0.136,0.979c0,0.342,0.045,0.668,0.136,0.977c0.091,0.307,0.248,0.574,0.472,0.797
|
||||
c0.225,0.225,0.529,0.404,0.914,0.535c0.386,0.133,0.877,0.197,1.475,0.197h5.686v-1.557h-3.952v-1.9H352.39z"/>
|
||||
<path fill="#002D62" d="M363.332,25.029c0.63,0,1.166,0.082,1.61,0.244c0.444,0.164,0.808,0.383,1.091,0.66
|
||||
s0.491,0.602,0.625,0.971s0.201,0.766,0.201,1.188c0,0.396-0.056,0.768-0.165,1.115c-0.11,0.348-0.285,0.656-0.525,0.924
|
||||
c-0.239,0.27-0.546,0.488-0.92,0.66c-0.373,0.172-0.819,0.283-1.339,0.336l4.376,3.143h-3.42l-4.105-3.076h-4.151v3.076h-2.076
|
||||
v-9.24H363.332z M356.609,29.16h6.641c0.291,0,0.53-0.025,0.72-0.078c0.188-0.053,0.336-0.125,0.441-0.219
|
||||
c0.106-0.092,0.18-0.199,0.219-0.322s0.059-0.256,0.059-0.396c0-0.131-0.02-0.26-0.059-0.383s-0.112-0.23-0.219-0.322
|
||||
c-0.105-0.094-0.253-0.166-0.441-0.219c-0.189-0.053-0.429-0.078-0.72-0.078h-6.641V29.16z"/>
|
||||
<path fill="#002D62" d="M371.64,34.025c-0.681-0.252-1.235-0.59-1.663-1.018c-0.429-0.426-0.741-0.928-0.938-1.504
|
||||
c-0.196-0.576-0.295-1.195-0.295-1.854c0-0.66,0.099-1.279,0.295-1.855c0.197-0.576,0.51-1.078,0.938-1.504
|
||||
c0.428-0.428,0.982-0.766,1.663-1.018c0.68-0.25,1.5-0.375,2.459-0.375h3.562c0.96,0,1.779,0.125,2.46,0.375
|
||||
c0.68,0.252,1.234,0.59,1.663,1.018c0.429,0.426,0.741,0.928,0.938,1.504s0.295,1.195,0.295,1.855c0,0.658-0.099,1.277-0.295,1.854
|
||||
s-0.509,1.078-0.938,1.504c-0.429,0.428-0.983,0.766-1.663,1.018c-0.681,0.25-1.5,0.375-2.46,0.375h-3.562
|
||||
C373.14,34.4,372.319,34.275,371.64,34.025z M379.188,32.083c0.404-0.137,0.727-0.322,0.967-0.561s0.407-0.518,0.501-0.838
|
||||
c0.095-0.32,0.142-0.666,0.142-1.035c0-0.371-0.047-0.717-0.142-1.037c-0.094-0.32-0.261-0.6-0.501-0.838s-0.562-0.424-0.967-0.561
|
||||
c-0.405-0.137-0.919-0.205-1.54-0.205h-3.526c-0.629,0-1.146,0.068-1.551,0.205c-0.405,0.137-0.728,0.322-0.968,0.561
|
||||
c-0.239,0.238-0.406,0.518-0.501,0.838s-0.142,0.666-0.142,1.037c0,0.369,0.047,0.715,0.142,1.035s0.262,0.6,0.501,0.838
|
||||
c0.24,0.238,0.562,0.424,0.968,0.561c0.404,0.137,0.918,0.205,1.539,0.205h3.538C378.27,32.289,378.783,32.22,379.188,32.083z"/>
|
||||
<path fill="#002D62" d="M386.863,30.923c0.083,0.277,0.234,0.516,0.454,0.719c0.221,0.203,0.518,0.361,0.891,0.475
|
||||
c0.373,0.115,0.852,0.172,1.433,0.172h2.819c0.582,0,1.06-0.057,1.434-0.172c0.373-0.113,0.67-0.271,0.891-0.475
|
||||
c0.22-0.203,0.371-0.441,0.454-0.719c0.082-0.277,0.123-0.584,0.123-0.918v-4.977h2.076v4.977c0,0.633-0.082,1.221-0.248,1.762
|
||||
c-0.165,0.541-0.441,1.006-0.831,1.393s-0.9,0.691-1.533,0.91c-0.633,0.221-1.418,0.33-2.354,0.33h-2.843
|
||||
c-0.936,0-1.72-0.109-2.353-0.33c-0.633-0.219-1.145-0.523-1.533-0.91c-0.39-0.387-0.667-0.852-0.832-1.393
|
||||
s-0.248-1.129-0.248-1.762v-4.977h2.076v4.977C386.739,30.339,386.781,30.646,386.863,30.923z"/>
|
||||
<path fill="#002D62" d="M408.558,25.029c0.637,0,1.178,0.082,1.622,0.244c0.444,0.164,0.806,0.385,1.085,0.668
|
||||
c0.279,0.281,0.483,0.611,0.613,0.988c0.13,0.379,0.194,0.779,0.194,1.201c0,0.441-0.064,0.848-0.194,1.221
|
||||
c-0.13,0.375-0.334,0.703-0.613,0.984s-0.641,0.502-1.085,0.66s-0.985,0.236-1.622,0.236h-6.841v3.037h-2.076v-9.24H408.558z
|
||||
M401.717,29.121h6.794c0.291,0,0.528-0.025,0.714-0.078c0.185-0.053,0.326-0.123,0.424-0.211c0.099-0.09,0.165-0.191,0.201-0.311
|
||||
c0.035-0.119,0.053-0.25,0.053-0.391c0-0.131-0.018-0.26-0.053-0.383c-0.036-0.123-0.103-0.229-0.201-0.316
|
||||
c-0.098-0.088-0.239-0.158-0.424-0.211c-0.186-0.053-0.423-0.078-0.714-0.078h-6.794V29.121z"/>
|
||||
</g>
|
||||
<line fill="#6D6E71" stroke="#6D6E71" stroke-miterlimit="10" x1="118.106" y1="82.673" x2="157.744" y2="82.673"/>
|
||||
<line fill="#6D6E71" stroke="#6D6E71" stroke-miterlimit="10" x1="370.925" y1="82.673" x2="410.562" y2="82.673"/>
|
||||
</svg>
|
After Width: | Height: | Size: 28 KiB |
35
docs/design_spec/make.bat
Normal file
35
docs/design_spec/make.bat
Normal file
|
@ -0,0 +1,35 @@
|
|||
@ECHO OFF
|
||||
|
||||
pushd %~dp0
|
||||
|
||||
REM Command file for Sphinx documentation
|
||||
|
||||
if "%SPHINXBUILD%" == "" (
|
||||
set SPHINXBUILD=sphinx-build
|
||||
)
|
||||
set SOURCEDIR=source
|
||||
set BUILDDIR=build
|
||||
|
||||
if "%1" == "" goto help
|
||||
|
||||
%SPHINXBUILD% >NUL 2>NUL
|
||||
if errorlevel 9009 (
|
||||
echo.
|
||||
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
|
||||
echo.installed, then set the SPHINXBUILD environment variable to point
|
||||
echo.to the full path of the 'sphinx-build' executable. Alternatively you
|
||||
echo.may add the Sphinx directory to PATH.
|
||||
echo.
|
||||
echo.If you don't have Sphinx installed, grab it from
|
||||
echo.http://sphinx-doc.org/
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
|
||||
goto end
|
||||
|
||||
:help
|
||||
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
|
||||
|
||||
:end
|
||||
popd
|
5
docs/design_spec/requirements.txt
Normal file
5
docs/design_spec/requirements.txt
Normal file
|
@ -0,0 +1,5 @@
|
|||
sphinx
|
||||
sphinx-rtd-theme
|
||||
recommonmark
|
||||
sphinxcontrib-svg2pdfconverter
|
||||
sphinx_github_changelog
|
214
docs/design_spec/source/conf.py
Normal file
214
docs/design_spec/source/conf.py
Normal file
|
@ -0,0 +1,214 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Copyright (c) 2020 OpenHW Group
|
||||
#
|
||||
# Licensed under the Solderpad Hardware Licence, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# https://solderpad.org/licenses/
|
||||
#
|
||||
# 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 WITH SHL-2.0
|
||||
#
|
||||
###############################################################################
|
||||
#
|
||||
# Configuration file for the Sphinx documentation builder.
|
||||
#
|
||||
# This file does only contain a selection of the most common options. For a
|
||||
# full list see the documentation:
|
||||
# http://www.sphinx-doc.org/en/master/config
|
||||
|
||||
# -- 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 = u'CORE-V CV32A6-step1 Design Specification'
|
||||
copyright = u'2022, Thales Group'
|
||||
author = u'Thales and OpenHW Group'
|
||||
|
||||
# The short X.Y version
|
||||
version = u''
|
||||
# The full version, including alpha/beta/rc tags
|
||||
release = u''
|
||||
|
||||
|
||||
# -- General configuration ---------------------------------------------------
|
||||
|
||||
# If your documentation needs a minimal Sphinx version, state it here.
|
||||
#
|
||||
# needs_sphinx = '1.0'
|
||||
|
||||
# Add any Sphinx extension module names here, as strings. They can be
|
||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||
# ones.
|
||||
extensions = [
|
||||
'sphinx.ext.autodoc',
|
||||
'sphinx.ext.todo',
|
||||
'recommonmark',
|
||||
'sphinxcontrib.inkscapeconverter',
|
||||
'sphinx_github_changelog',
|
||||
# 'sphinxcontrib.wavedrom',
|
||||
]
|
||||
#wavedrom_html_jsinline = False
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['ytemplates']
|
||||
|
||||
# The suffix(es) of source filenames.
|
||||
# You can specify multiple suffix as a list of string:
|
||||
#
|
||||
# source_suffix = ['.rst', '.md']
|
||||
source_suffix = '.rst'
|
||||
|
||||
# The master toctree document.
|
||||
master_doc = 'index'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
#
|
||||
# This is also used if you do content translation via gettext catalogs.
|
||||
# Usually you set "language" from the command line for these cases.
|
||||
language = 'en'
|
||||
|
||||
# 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 = []
|
||||
|
||||
# Numbering
|
||||
numfig=True
|
||||
numfig_format = {'figure': 'Figure %s', 'table': 'Table %s', 'code-block': 'Listing %s'}
|
||||
|
||||
# The name of the Pygments (syntax highlighting) style to use.
|
||||
pygments_style = None
|
||||
|
||||
|
||||
# -- Options for HTML output -------------------------------------------------
|
||||
|
||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||
# a list of builtin themes.
|
||||
#
|
||||
#html_theme = 'alabaster'
|
||||
html_theme = 'sphinx_rtd_theme'
|
||||
|
||||
# Theme options are theme-specific and customize the look and feel of a theme
|
||||
# further. For a list of options available for each theme, see the
|
||||
# documentation.
|
||||
#
|
||||
html_theme_options = {'style_nav_header_background': '#DDDDDD'}
|
||||
html_logo = '../images/openhw-landscape.svg'
|
||||
|
||||
# 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 = ['ystatic']
|
||||
# Set html_static_path to null on the advice of RTDs:
|
||||
html_static_path = []
|
||||
|
||||
# Custom sidebar templates, must be a dictionary that maps document names
|
||||
# to template names.
|
||||
#
|
||||
# The default sidebars (for documents that don't match any pattern) are
|
||||
# defined by theme itself. Builtin themes are using these templates by
|
||||
# default: ``['localtoc.html', 'relations.html', 'sourcelink.html',
|
||||
# 'searchbox.html']``.
|
||||
#
|
||||
# html_sidebars = {}
|
||||
|
||||
|
||||
# -- Options for HTMLHelp output ---------------------------------------------
|
||||
|
||||
# Output file base name for HTML help builder.
|
||||
htmlhelp_basename = 'CORE-V_CV32A6-step1_DESIGN_SPEC'
|
||||
|
||||
|
||||
# -- Options for LaTeX output ------------------------------------------------
|
||||
|
||||
latex_elements = {
|
||||
# The paper size ('letterpaper' or 'a4paper').
|
||||
#
|
||||
# 'papersize': 'letterpaper',
|
||||
|
||||
# The font size ('10pt', '11pt' or '12pt').
|
||||
#
|
||||
# 'pointsize': '10pt',
|
||||
|
||||
# Additional stuff for the LaTeX preamble.
|
||||
#
|
||||
# 'preamble': '',
|
||||
|
||||
# Latex figure (float) alignment
|
||||
#
|
||||
# 'figure_align': 'htbp',
|
||||
}
|
||||
|
||||
# Grouping the document tree into LaTeX files. List of tuples
|
||||
# (source start file, target name, title,
|
||||
# author, documentclass [howto, manual, or own class]).
|
||||
latex_documents = [
|
||||
(master_doc, 'CV32A6-step1_Design_Spec.tex', u'CORE-V-Docs Documentation',
|
||||
u'Jean-Roch Coulon', 'manual'),
|
||||
]
|
||||
|
||||
|
||||
# -- Options for manual page output ------------------------------------------
|
||||
|
||||
# One entry per manual page. List of tuples
|
||||
# (source start file, name, description, authors, manual section).
|
||||
man_pages = [
|
||||
(master_doc, 'CV32A6-step1_Design_Spec.tex', u'CORE-V-Docs Documentation',
|
||||
[author], 1)
|
||||
]
|
||||
|
||||
|
||||
# -- Options for Texinfo output ----------------------------------------------
|
||||
|
||||
# Grouping the document tree into Texinfo files. List of tuples
|
||||
# (source start file, target name, title, author,
|
||||
# dir menu entry, description, category)
|
||||
texinfo_documents = [
|
||||
(master_doc, 'CV32A6-step1_Design_Spec.tex', u'CORE-V-Docs Documentation',
|
||||
author, 'UserManual', 'User Manual for CV32A6-step1 CORE-V processor core.',
|
||||
'Miscellaneous'),
|
||||
]
|
||||
|
||||
|
||||
# -- Options for Epub output -------------------------------------------------
|
||||
|
||||
# Bibliographic Dublin Core info.
|
||||
epub_title = project
|
||||
|
||||
# The unique identifier of the text. This can be a ISBN number
|
||||
# or the project homepage.
|
||||
#
|
||||
# epub_identifier = ''
|
||||
|
||||
# A unique identification for the text.
|
||||
#
|
||||
# epub_uid = ''
|
||||
|
||||
# A list of files that should not be packed into the epub file.
|
||||
epub_exclude_files = ['search.html']
|
||||
|
||||
|
||||
# -- Extension configuration -------------------------------------------------
|
||||
|
||||
# -- Options for todo extension ----------------------------------------------
|
||||
|
||||
# If true, `todo` and `todoList` produce output, else they produce nothing.
|
||||
todo_include_todos = True
|
727
docs/design_spec/source/cva6_frontend.rst
Normal file
727
docs/design_spec/source/cva6_frontend.rst
Normal file
|
@ -0,0 +1,727 @@
|
|||
..
|
||||
Copyright 2021 Thales DIS design services SAS
|
||||
Licensed under the Solderpad Hardware Licence, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
SPDX-License-Identifier: Apache-2.0 WITH SHL-2.0
|
||||
You may obtain a copy of the License at https://solderpad.org/licenses/
|
||||
|
||||
Original Author: Jean-Roch COULON (jean-roch.coulon@thalesgroup.com)
|
||||
|
||||
.. _CVA6_FRONTEND:
|
||||
|
||||
FRONTEND Sub-System
|
||||
===================
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
The FRONTEND sub-system implements two first stages of the cva6 pipeline, PC gen and Fetch stages.
|
||||
|
||||
PC gen stage is responsible for generating the next program counter hosting a Branch Target Buffer (BTB) a Branch History Table (BHT) and a Return Address Stack (RAS) to speculate on the branch target address.
|
||||
|
||||
Fetch stage requests data to the CACHE sub-system, realigns the data to store them in instruction queue and transmits the instructions to the DECODE sub-system. FRONTEND can fetch up to 2 instructions per cycles when C extension instructions is used, but as instruction queue limits the data rate, up to one instruction per cycle can be sent to DECODE.
|
||||
|
||||
The system is connected to:
|
||||
|
||||
* CACHES Sub-System provides fethed instructions to FRONTEND.
|
||||
* DECODE Sub-System receives instructions from FRONTEND.
|
||||
* CONTROLLER Sub-System can flush FRONTEND PC gen stage
|
||||
* EXECUTE, CONTROLLER, CSR and COMMIT Sub-systems triggers PC jumping due to a branch mispredict, an exception, a return from exception, a debug entry or pipeline flush. They provides related PC next value.
|
||||
* CSR Sub-system states about debug mode.
|
||||
|
||||
|
||||
.. list-table:: FRONTEND interface signals
|
||||
:header-rows: 1
|
||||
|
||||
* - Signal
|
||||
- IO
|
||||
- connection
|
||||
- Type
|
||||
- Description
|
||||
|
||||
* - ``clk_i``
|
||||
- in
|
||||
- SYSTEM
|
||||
- logic
|
||||
- System Clock
|
||||
|
||||
* - ``rst_ni``
|
||||
- in
|
||||
- SYSTEM
|
||||
- logic
|
||||
- Asynchronous reset active low
|
||||
|
||||
* - ``debug_mode_i``
|
||||
- in
|
||||
- CSR
|
||||
- logic
|
||||
- Debug mode state
|
||||
|
||||
* - ``flush_i``
|
||||
- in
|
||||
- CONTROLLER
|
||||
- logic
|
||||
- Fetch flush request
|
||||
|
||||
* - ``flush_bp_i``
|
||||
- in
|
||||
- stuck at zero
|
||||
- logic
|
||||
- flush branch prediction
|
||||
|
||||
* - ``boot_addr_i``
|
||||
- in
|
||||
- SYSTEM
|
||||
- logic[VLEN-1:0]
|
||||
- Next PC when reset
|
||||
|
||||
* - ``resolved_branch_i``
|
||||
- in
|
||||
- EXECUTE
|
||||
- bp_resolve_t
|
||||
- mispredict event and next PC
|
||||
|
||||
* - ``eret_i``
|
||||
- in
|
||||
- CSR
|
||||
- logic
|
||||
- Return from exception event
|
||||
|
||||
* - ``epc_i``
|
||||
- in
|
||||
- CSR
|
||||
- logic[VLEN-1:0]
|
||||
- Next PC when returning from exception
|
||||
|
||||
* - ``ex_valid_i``
|
||||
- in
|
||||
- COMMIT
|
||||
- logic
|
||||
- Exception event
|
||||
|
||||
* - ``trap_vector_base_i``
|
||||
- in
|
||||
- CSR
|
||||
- logic[VLEN-1:0]
|
||||
- Next PC when jumping into exception
|
||||
|
||||
* - ``set_pc_commit_i``
|
||||
- in
|
||||
- CONTROLLER
|
||||
- logic
|
||||
- Set the PC coming from COMMIT as next PC
|
||||
|
||||
|
||||
* - ``pc_commit_i``
|
||||
- in
|
||||
- COMMIT
|
||||
- logic[VLEN-1:0]
|
||||
- Next PC when flushing pipeline
|
||||
|
||||
* - ``set_debug_pc_i``
|
||||
- in
|
||||
- CSR
|
||||
- logic
|
||||
- Debug event
|
||||
|
||||
* - ``icache_dreq_o``
|
||||
- out
|
||||
- CACHES
|
||||
- icache_dreq_i_t
|
||||
- Handshake between CACHE and FRONTEND (fetch)
|
||||
|
||||
* - ``icache_dreq_i``
|
||||
- in
|
||||
- CACHES
|
||||
- icache_dreq_o_t
|
||||
- Handshake between CACHE and FRONTEND (fetch)
|
||||
|
||||
* - ``fetch_entry_o``
|
||||
- out
|
||||
- DECODE
|
||||
- fetch_entry_t
|
||||
- Handshake's data between FRONTEND (fetch) and DECODE
|
||||
|
||||
* - ``fetch_entry_valid_o``
|
||||
- out
|
||||
- DECODE
|
||||
- logic
|
||||
- Handshake's valid between FRONTEND (fetch) and DECODE
|
||||
|
||||
* - ``fetch_entry_ready_i``
|
||||
- in
|
||||
- DECODE
|
||||
- logic
|
||||
- Handshake's ready between FRONTEND (fetch) and DECODE
|
||||
|
||||
|
||||
Functionality
|
||||
-------------
|
||||
|
||||
PC Generation stage
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
PC gen generates the next program counter. The next PC can originate from the following sources (listed in order of precedence):
|
||||
|
||||
* **Reset state:** At reset, the PC is assigned to the boot address.
|
||||
|
||||
* **Branch Predict:** Fetched instruction is predecoded thanks to instr_scan module. When instruction is a control flow, three cases need to be considered:
|
||||
|
||||
+ 1) If instruction is a JALR and BTB (Branch Target Buffer) returns a valid address, next PC is predicted by BTB. Else JALR is not considered as a control flow instruction, which will generate a mispredict.
|
||||
|
||||
+ 2) If instruction is a branch and BTH (Branch History table) returns a valid address, next PC is predicted by BHT. Else branch is not considered as an control flow instruction, which will generate a mispredict when branch is taken.
|
||||
|
||||
+ 3) If instruction is a RET and RAS (Return Address Stack) returns a valid address and RET has already been consummed by instruction queue. Else RET is considered as a control flow instruction but next PC is not predicted. A mispredict wil be generated.
|
||||
|
||||
Then the PC gen informs the Fetch stage that it performed a prediction on the PC. *In CV32A6-step1, Branch Prediction is simplified: no information is stored in BTB, BHT and RAS. JALR, branch and RET instructions are not considered as control flow instruction and will generates mispredict.*
|
||||
|
||||
* **Default:** PC + 4 is fetched. PC Gen always fetches on a word boundary (32-bit). Compressed instructions are handled by fetch stage.
|
||||
|
||||
* **Mispredict:** When a branch prediction is mispredicted, the EXECUTE feedbacks a misprediction. This can either be a 'real' mis-prediction or a branch which was not recognized as one. In any case we need to correct our action and start fetching from the correct address.
|
||||
|
||||
* **Replay instruction fetch:** When the instruction queue is full, the instr_queue module asks the fetch replay and provides the address to be replayed.
|
||||
|
||||
* **Return from environment call:** When CSR asks a return from an environment call, the PC is assigned to the successive PC to the one stored in the CSR [m-s]epc register.
|
||||
|
||||
* **Exception/Interrupt:** If an exception (or interrupt, which is in the context of RISC-V systems quite similar) is triggered by the COMMIT, the next PC Gen is assigned to the CSR trap vector base address. The trap vector base address can be different depending on whether the exception traps to S-Mode or M-Mode (user mode exceptions are currently not supported). It is the purpose of the CSR Unit to figure out where to trap to and present the correct address to PC Gen.
|
||||
|
||||
* **Pipeline Flush:** When a CSR with side-effects gets written the whole pipeline is flushed by CONTROLLER and FRONTEND starts fetching from the next instruction again in order to take the up-dated information into account (for example virtual memory base pointer changes). The PC related to the flush action is provided by the COMMIT. Moreover flush is also transmitted to the CACHES through the next fetch CACHES access and instruction queue is reset.
|
||||
|
||||
* **Debug:** Debug has the highest order of precedence as it can interrupt any control flow requests. It also the only source of control flow change which can actually happen simultaneously to any other of the forced control flow changes. The debug jump is requested by CSR. The address to be jumped into is HW coded. This debug feature is not supported by cv32a6-step1.
|
||||
|
||||
All program counters are logical addressed. If the logical to physical mapping changes a fence.vm instruction should used to flush the pipeline *and TLBs (MMU is not enabled in CV32A6-step1)*.
|
||||
|
||||
|
||||
|
||||
Fetch Stage
|
||||
~~~~~~~~~~~
|
||||
|
||||
Fetch stage controls by handshake protocol the CACHE sub-system. Fetched data are 32-bit block with word aligned address. A granted fetch is realigned into instr_realign module to produce instructions. Then instructions are pushed into an internal instruction FIFO called instruction queue (instr_queue module). This module stores the instructions and related information which allow to identify the outstanding transactions. In the case CONTROLLER decides to flush the instruction queue, the outstanding transactions are discarded.
|
||||
|
||||
*The Fetch stage asks the MMU (MMU is not enabled in CV32A6-step1) to translate the requested address.*
|
||||
|
||||
Memory *and MMU (MMU is not enabled in CV32A6-step1)* can feedback potential exceptions generated by the memory fetch request. They can be bus errors, invalid accesses or instruction page faults.
|
||||
|
||||
|
||||
|
||||
Architecture and Modules
|
||||
------------------------
|
||||
|
||||
.. figure:: ../images/frontend_modules.png
|
||||
:name: FRONTEND modules
|
||||
:align: center
|
||||
:alt:
|
||||
|
||||
FRONTEND modules
|
||||
|
||||
|
||||
Instr_realign
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
.. list-table:: instr_realign interface signals
|
||||
:header-rows: 1
|
||||
|
||||
* - Signal
|
||||
- IO
|
||||
- connection
|
||||
- Type
|
||||
- Description
|
||||
|
||||
* - ``clk_i``
|
||||
- in
|
||||
- SYSTEM
|
||||
- logic
|
||||
- System Clock
|
||||
|
||||
* - ``rst_ni``
|
||||
- in
|
||||
- SYSTEM
|
||||
- logic
|
||||
- Asynchronous reset active low
|
||||
|
||||
* - ``flush_i``
|
||||
- in
|
||||
- FRONTEND
|
||||
- logic
|
||||
- Instr_align Flush
|
||||
|
||||
* - ``valid_i``
|
||||
- in
|
||||
- CACHES (reg)
|
||||
- logic
|
||||
- 32-bit block is valid
|
||||
|
||||
* - ``address_i``
|
||||
- in
|
||||
- CACHES (reg)
|
||||
- logic[VLEN-1:0]
|
||||
- 32-bit block address
|
||||
|
||||
* - ``data_i``
|
||||
- in
|
||||
- CACHES (reg)
|
||||
- logic[31:0]
|
||||
- 32-bit block
|
||||
|
||||
* - ``valid_o``
|
||||
- out
|
||||
- FRONTEND
|
||||
- logic[1:0]
|
||||
- instruction is valid
|
||||
|
||||
* - ``addr_o``
|
||||
- out
|
||||
- FRONTEND
|
||||
- logic[1:0][VLEN-1:0]
|
||||
- Instruction address
|
||||
|
||||
* - ``instr_o``
|
||||
- out
|
||||
- instr_scan, instr_queue
|
||||
- logic[1:0][31:0]
|
||||
- Instruction
|
||||
|
||||
* - ``serving_unaligned_o``
|
||||
- out
|
||||
- FRONTEND
|
||||
- logic
|
||||
- Instruction is unaligned
|
||||
|
||||
|
||||
The 32-bit aligned block coming from the CACHE sub-system enters the instr_realign module. This module extracts the instructions from the 32-bit blocks, up to two instructions because it is possible to fetch two instructions when C extension is used. If the instructions are not compressed, it is possible that the instruction is not aligned on the block size but rather interleaved with two cache blocks. In that case, two cache accesses are needed. The instr_realign module provides at maximum one instruction per cycle. Not complete instruction is stored in instr_realign module before being provided in the next cycles.
|
||||
|
||||
In case of mispredict, flush, replay or branch predict, the instr_realign is re-initialized, the internal register storing the instruction alignment state is reset.
|
||||
|
||||
|
||||
Instr_queue
|
||||
~~~~~~~~~~~
|
||||
|
||||
.. list-table:: instr_realign interface signals
|
||||
:header-rows: 1
|
||||
|
||||
* - Signal
|
||||
- IO
|
||||
- connection
|
||||
- Type
|
||||
- Description
|
||||
|
||||
* - ``clk_i``
|
||||
- in
|
||||
- SYSTEM
|
||||
- logic
|
||||
- System Clock
|
||||
|
||||
* - ``rst_ni``
|
||||
- in
|
||||
- SYSTEM
|
||||
- logic
|
||||
- Asynchronous reset active low
|
||||
|
||||
* - ``flush_i``
|
||||
- in
|
||||
- CONTROLLER
|
||||
- logic
|
||||
- Fetch flush request
|
||||
|
||||
* - ``valid_i``
|
||||
- in
|
||||
- instr_realign
|
||||
- logic[1:0]
|
||||
- Instruction is valid
|
||||
|
||||
* - ``instr_i``
|
||||
- in
|
||||
- instr_realign
|
||||
- logic[1:0][31:0]
|
||||
- Instruction
|
||||
|
||||
* - ``addr_i``
|
||||
- in
|
||||
- instr_realign
|
||||
- logic[1:0][VLEN-1:0]
|
||||
- Instruction address
|
||||
|
||||
* - ``predict_address_i``
|
||||
- in
|
||||
- FRONTEND
|
||||
- logic[VLEN-1:0]
|
||||
- Instruction predict address
|
||||
|
||||
* - ``cf_type_i``
|
||||
- in
|
||||
- FRONTEND
|
||||
- logic[1:0]
|
||||
- Instruction control flow type
|
||||
|
||||
* - ``ready_o``
|
||||
- out
|
||||
- CACHES
|
||||
- logic
|
||||
- Handshake's ready between CACHE and FRONTEND (fetch stage)
|
||||
|
||||
* - ``consumed_o``
|
||||
- out
|
||||
- FRONTEND
|
||||
- logic[1:0]
|
||||
- Indicates instructions consummed, that is to say popped by DECODE
|
||||
|
||||
* - ``exception_i``
|
||||
- in
|
||||
- CACHES (reg)
|
||||
- logic
|
||||
- Exception
|
||||
|
||||
* - ``exception_addr_i``
|
||||
- in
|
||||
- CACHES (reg)
|
||||
- logic[VLEN-1:0]
|
||||
- Exception address
|
||||
|
||||
* - ``replay_o``
|
||||
- out
|
||||
- FRONTEND
|
||||
- logic
|
||||
- Replay instruction because one of the FIFO was already full
|
||||
|
||||
* - ``replay_addr_o``
|
||||
- out
|
||||
- FRONTEND
|
||||
- logic[VLEN-1:0]
|
||||
- Address at which to replay the fetch
|
||||
|
||||
* - ``fetch_entry_o``
|
||||
- out
|
||||
- DECODE
|
||||
- fetch_entry_t
|
||||
- Handshake's data between FRONTEND (fetch stage) and DECODE
|
||||
|
||||
* - ``fetch_entry_valid_o``
|
||||
- out
|
||||
- DECODE
|
||||
- logic
|
||||
- Handshake's valid between FRONTEND (fetch stage) and DECODE
|
||||
|
||||
* - ``fetch_entry_ready_i``
|
||||
- in
|
||||
- DECODE
|
||||
- logic
|
||||
- Handshake's ready between FRONTEND (fetch stage) and DECODE
|
||||
|
||||
|
||||
The instr_queue receives 32bit block from CACHES to create a valid stream of instructions to be decoded (by DECODE), to be issued (by ISSUE) and executed (by EXECUTE). FRONTEND pushes in FIFO to store the instructions and related information needed in case of mispredict or exception: instructions, instruction control flow type, exception, exception address and predicted address. DECODE pops them when decode stage is ready and indicates to the FRONTEND the instruction has been consummed.
|
||||
|
||||
The instruction queue contains max 4 instructions.
|
||||
|
||||
In instruction queue, exception can only correspond to page-fault exception.
|
||||
|
||||
If the instruction queue is full, a replay request is sent to inform the fetch mechanism to replay the fetch.
|
||||
|
||||
The instruction queue can be flushed by CONTROLLER.
|
||||
|
||||
|
||||
|
||||
Instr_scan
|
||||
~~~~~~~~~~
|
||||
|
||||
.. list-table:: instr_scan interface signals
|
||||
:header-rows: 1
|
||||
|
||||
* - Signal
|
||||
- IO
|
||||
- Connection
|
||||
- Type
|
||||
- Description
|
||||
|
||||
* - ``instr_i``
|
||||
- in
|
||||
- instr_realign
|
||||
- logic[31:0]
|
||||
- Instruction to be predecoded
|
||||
|
||||
* - ``rvi_return_o``
|
||||
- out
|
||||
- FRONTEND
|
||||
- logic
|
||||
- Return instruction
|
||||
|
||||
* - ``rvi_call_o``
|
||||
- out
|
||||
- FRONTEND
|
||||
- logic
|
||||
- JAL instruction
|
||||
|
||||
* - ``rvi_branch_o``
|
||||
- out
|
||||
- FRONTEND
|
||||
- logic
|
||||
- Branch instruction
|
||||
|
||||
* - ``rvi_jalr_o``
|
||||
- out
|
||||
- FRONTEND
|
||||
- logic
|
||||
- JALR instruction
|
||||
|
||||
* - ``rvi_jump_o``
|
||||
- out
|
||||
- FRONTEND
|
||||
- logic
|
||||
- unconditional jump instruction
|
||||
|
||||
* - ``rvi_imm_o``
|
||||
- out
|
||||
- FRONTEND
|
||||
- logic[VLEN-1:0]
|
||||
- Instruction immediat
|
||||
|
||||
* - ``rvc_branch_o``
|
||||
- out
|
||||
- FRONTEND
|
||||
- logic
|
||||
- Branch compressed instruction
|
||||
|
||||
* - ``rvc_jump_o``
|
||||
- out
|
||||
- FRONTEND
|
||||
- logic
|
||||
- unconditional jump compressed instruction
|
||||
|
||||
* - ``rvc_jr_o``
|
||||
- out
|
||||
- FRONTEND
|
||||
- logic
|
||||
- JR compressed instruction
|
||||
|
||||
* - ``rvc_return_o``
|
||||
- out
|
||||
- FRONTEND
|
||||
- logic
|
||||
- Return compressed instruction
|
||||
|
||||
* - ``rvc_jalr_o``
|
||||
- out
|
||||
- FRONTEND
|
||||
- logic
|
||||
- JALR compressed instruction
|
||||
|
||||
* - ``rvc_call_o``
|
||||
- out
|
||||
- FRONTEND
|
||||
- logic
|
||||
- JAL compressed instruction
|
||||
|
||||
* - ``rvc_imm_o``
|
||||
- out
|
||||
- FRONTEND
|
||||
- logic[VLEN-1:0]
|
||||
- Instruction compressed immediat
|
||||
|
||||
|
||||
The instr_scan module pre-decodes the fetched instructions, instructions could be compressed or not. The outputs are used by the branch prediction feature. The instr_scan module tells if the instruction is compressed and provides the intruction type: branch, jump, return, jalr, imm, call or others.
|
||||
|
||||
|
||||
BHT - Branch History Table
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. list-table:: BHT interface signals
|
||||
:header-rows: 1
|
||||
|
||||
* - Signal
|
||||
- IO
|
||||
- Connection
|
||||
- Type
|
||||
- Description
|
||||
|
||||
* - ``clk_i``
|
||||
- in
|
||||
- SYSTEM
|
||||
- logic
|
||||
- System clock
|
||||
|
||||
* - ``rst_ni``
|
||||
- in
|
||||
- SYSTEM
|
||||
- logic
|
||||
- Asynchronous reset active low
|
||||
|
||||
* - ``flush_i``
|
||||
- in
|
||||
- stuck at zero
|
||||
- logic
|
||||
- Flush request
|
||||
|
||||
* - ``debug_mode_i``
|
||||
- in
|
||||
- CSR
|
||||
- logic
|
||||
- Debug mode state
|
||||
|
||||
* - ``vpc_i``
|
||||
- in
|
||||
- CACHES (reg)
|
||||
- logic[VLEN-1:0]
|
||||
- Virtual PC
|
||||
|
||||
* - ``bht_update_i``
|
||||
- in
|
||||
- EXECUTE
|
||||
- bht_update_t
|
||||
- Update btb with resolved address
|
||||
|
||||
* - ``bht_prediction_o``
|
||||
- out
|
||||
- FRONTEND
|
||||
- bht_prediction_t
|
||||
- Prediction from bht
|
||||
|
||||
|
||||
When a branch instruction is resolved by the EXECUTE, the relative information is stored in the Branch History Table.
|
||||
|
||||
The information is stored in a 1024 entry table.
|
||||
|
||||
The Branch History table is a two-bit saturation counter that takes the virtual address of the current fetched instruction by the CACHE. It states whether the current branch request should be taken or not. The two bit counter is updated by the successive execution of the current instructions as shown in the following figure.
|
||||
|
||||
.. figure:: ../images/bht.png
|
||||
:name: BHT saturation
|
||||
:align: center
|
||||
:alt:
|
||||
|
||||
BHT saturation
|
||||
|
||||
The BHT is not updated if processor is in debug mode.
|
||||
|
||||
When a branch instruction is pre-decoded by instr_scan module, the BHT informs whether the PC address is in the BHT. In this case, the BHT predicts whether the branch is taken and provides the corresponding target address.
|
||||
|
||||
The BTB is never flushed.
|
||||
|
||||
|
||||
BTB - Branch Target Buffer
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. list-table:: BTB interface signals
|
||||
:header-rows: 1
|
||||
|
||||
* - Signal
|
||||
- IO
|
||||
- Connection
|
||||
- Type
|
||||
- Description
|
||||
|
||||
* - ``clk_i``
|
||||
- in
|
||||
- SYSTEM
|
||||
- logic
|
||||
- System clock
|
||||
|
||||
* - ``rst_ni``
|
||||
- in
|
||||
- SYSTEM
|
||||
- logic
|
||||
- Asynchronous reset active low
|
||||
|
||||
* - ``flush_i``
|
||||
- in
|
||||
- stuck at zero
|
||||
- logic
|
||||
- Flush request state
|
||||
|
||||
* - ``debug_mode_i``
|
||||
- in
|
||||
- CSR
|
||||
- logic
|
||||
- Debug mode
|
||||
|
||||
* - ``vpc_i``
|
||||
- in
|
||||
- CACHES (reg)
|
||||
- logic
|
||||
- Virtual PC
|
||||
|
||||
* - ``btb_update_i``
|
||||
- in
|
||||
- EXECUTE
|
||||
- btb_update_t
|
||||
- Update BTB with resolved address
|
||||
|
||||
* - ``btb_prediction_o``
|
||||
- out
|
||||
- FRONTEND
|
||||
- btb_prediction_t
|
||||
- BTB Prediction
|
||||
|
||||
|
||||
When a unconditional jumps to a register (JALR instruction) is mispredicted by the EXECUTE, the relative information is stored into the BTB, that is to say the JALR PC and the target address.
|
||||
|
||||
The information is stored in a 8 entry table.
|
||||
|
||||
The BTB is not updated if processor is in debug mode.
|
||||
|
||||
When a branch instruction is pre-decoded by instr_scan module, the BTB informs whether the input PC address is in BTB. In this case, the BTB provides the corresponding target address.
|
||||
|
||||
The BTB is never flushed.
|
||||
|
||||
|
||||
|
||||
RAS - Return Address Stack
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. list-table:: RAS interface signals
|
||||
:header-rows: 1
|
||||
|
||||
* - Signal
|
||||
- IO
|
||||
- Connection
|
||||
- Type
|
||||
- Description
|
||||
|
||||
* - ``clk_i``
|
||||
- in
|
||||
- SYSTEM
|
||||
- logic
|
||||
- System clock
|
||||
|
||||
* - ``rst_ni``
|
||||
- in
|
||||
- SYSTEM
|
||||
- logic
|
||||
- Asynchronous reset active low
|
||||
|
||||
* - ``flush_i``
|
||||
- in
|
||||
- Stuck at zero
|
||||
- logic
|
||||
- Flush request
|
||||
|
||||
* - ``push_i``
|
||||
- in
|
||||
- FRONTEND
|
||||
- logic
|
||||
- Push address in RAS
|
||||
|
||||
* - ``pop_i``
|
||||
- in
|
||||
- FRONTEND
|
||||
- logic
|
||||
- Pop address from RAS
|
||||
|
||||
* - ``data_i``
|
||||
- in
|
||||
- FRONTEND
|
||||
- logic[VLEN-1:0]
|
||||
- Data to be pushed
|
||||
|
||||
* - ``data_o``
|
||||
- out
|
||||
- FRONTEND
|
||||
- ras_t
|
||||
- Popped data
|
||||
|
||||
|
||||
When an unconditional jumps to a known target address (JAL instruction) is consummed by the instr_queue, the next pc after the JAL instruction and the return address are stored into a FIFO.
|
||||
|
||||
The RAS FIFO depth is 2.
|
||||
|
||||
When a branch instruction is pre-decoded by instr_scan module, the RAS informs whether the input PC address is in RAS. In this case, the RAS provides the corresponding target address.
|
||||
|
||||
The RAS is never flushed.
|
||||
|
55
docs/design_spec/source/cva6_glossary.rst
Normal file
55
docs/design_spec/source/cva6_glossary.rst
Normal file
|
@ -0,0 +1,55 @@
|
|||
..
|
||||
Copyright (c) 2020 OpenHW Group
|
||||
|
||||
Licensed under the Solderpad Hardware Licence, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
https://solderpad.org/licenses/
|
||||
|
||||
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 WITH SHL-2.0
|
||||
|
||||
.. _CVA6_GLOSSARY:
|
||||
|
||||
Glossary
|
||||
========
|
||||
|
||||
* **VLEN**: Virtual address lengh
|
||||
* **XLEN**: RISC-V processor data lengh
|
||||
* **ALU**: Arithmetic/Logic Unit
|
||||
* **ASIC**: Application-Specific Integrated Circuit
|
||||
* **Byte**: 8-bit data item
|
||||
* **CPU**: Central Processing Unit, processor
|
||||
* **CSR**: Control and Status Register
|
||||
* **Custom extension**: Non-Standard extension to the RISC-V base instruction set (RISC-V Instruction Set Manual, Volume I: User-Level ISA)
|
||||
* **EXE**: Instruction Execute
|
||||
* **FPGA**: Field Programmable Gate Array
|
||||
* **FPU**: Floating Point Unit
|
||||
* **Halfword**: 16-bit data item
|
||||
* **Halfword aligned address**: An address is halfword aligned if it is divisible by 2
|
||||
* **ID**: Instruction Decode
|
||||
* **IF**: Instruction Fetch
|
||||
* **ISA**: Instruction Set Architecture
|
||||
* **KGE**: kilo gate equivalents (NAND2)
|
||||
* **LSU**: Load Store Unit
|
||||
* **M-Mode**: Machine Mode (RISC-V Instruction Set Manual, Volume II: Privileged Architecture)
|
||||
* **OBI**: Open Bus Interface
|
||||
* **PC**: Program Counter
|
||||
* **PULP platform**: Parallel Ultra Low Power Platform (<https://pulp-platform.org>)
|
||||
* **RV32C**: RISC-V Compressed (C extension)
|
||||
* **RV32F**: RISC-V Floating Point (F extension)
|
||||
* **SIMD**: Single Instruction/Multiple Data
|
||||
* **Standard extension**: Standard extension to the RISC-V base instruction set (RISC-V Instruction Set Manual, Volume I: User-Level ISA)
|
||||
* **WARL**: Write Any Values, Reads Legal Values
|
||||
* **WB**: Write Back of instruction results
|
||||
* **WLRL**: Write/Read Only Legal Values
|
||||
* **Word**: 32-bit data item
|
||||
* **Word aligned address**: An address is word aligned if it is divisible by 4
|
||||
* **WPRI**: Reserved Writes Preserve Values, Reads Ignore Values
|
||||
|
87
docs/design_spec/source/cva6_intro.rst
Normal file
87
docs/design_spec/source/cva6_intro.rst
Normal file
|
@ -0,0 +1,87 @@
|
|||
..
|
||||
Copyright 2022 Thales DIS design services SAS
|
||||
Licensed under the Solderpad Hardware Licence, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
SPDX-License-Identifier: Apache-2.0 WITH SHL-2.0
|
||||
You may obtain a copy of the License at https://solderpad.org/licenses/
|
||||
|
||||
Original Author: Jean-Roch COULON (jean-roch.coulon@thalesgroup.com)
|
||||
|
||||
.. _CVA6_INTRO:
|
||||
|
||||
Introduction
|
||||
=============
|
||||
|
||||
The objective of this document is to provide enough information to allow the RTL modification (by designers) and the RTL verification (by verificators). This document is not dedicated to CVA6 users looking at information to develop software like instructions or registers.
|
||||
|
||||
CVA6 is a 6-stage in-order and single issue processor core which implements the RISC-V instruction set. Many features in the RISC-V specification are optional, and CVA6 can be parameterized to enable or disable some of them. CVA6 can be configured as a 32- or 64-bit core (RV32 or RV64), called CV32A6 or CV64A6. This document describes the CV32A6 processor configuration which allows to connect coprocessor through CV-X-IF but without Linux support, called CV32A6-step1. It is a first step towards the verification of CV32A6.
|
||||
|
||||
|
||||
The CVA6 architecture is illustrated in the following figure extracted from a paper written by F.Zaruba and L.Benini.
|
||||
|
||||
.. figure:: ../images/ariane_overview.png
|
||||
:name: CVA6 Architecute
|
||||
:align: center
|
||||
:alt:
|
||||
|
||||
CVA6 Architecture
|
||||
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
| Copyright 2022 Thales
|
||||
| Copyright 2018 ETH Zürich and University of Bologna
|
||||
| SPDX-License-Identifier: Apache-2.0 WITH SHL-2.1
|
||||
| Licensed under the Solderpad Hardware License v 2.1 (the “License”);
|
||||
you may not use this file except in compliance with the License, or,
|
||||
at your option, the Apache License version 2.0. You may obtain a copy
|
||||
of the License at https://solderpad.org/licenses/SHL-2.1/.
|
||||
| Unless required by applicable law or agreed to in writing, any work
|
||||
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.
|
||||
|
||||
|
||||
Standards Compliance
|
||||
--------------------
|
||||
|
||||
To ease the reading, the reference to these specifications can be implicit in the requirements below. For the sake of precision, the requirements identify the versions of RISC-V extensions from these specifications.
|
||||
|
||||
* **[CVA6req]** “CVA6 requirement specification”, https://github.com/openhwgroup/cva6/blob/master/docs/specifications/cva6_requirement_specification.rst, HASH#767c465.
|
||||
* **[RVunpriv]** “The RISC-V Instruction Set Manual, Volume I: User-Level ISA, Document Version 20191213”, Editors Andrew Waterman and Krste Asanović, RISC-V Foundation, December 13, 2019.
|
||||
* **[RVpriv]** “The RISC-V Instruction Set Manual, Volume II: Privileged Architecture, Document Version 20211203”, Editors Andrew Waterman, Krste Asanović and John Hauser, RISC-V Foundation, December 4, 2021.
|
||||
* **[RVdbg]** “RISC-V External Debug Support, Document Version 0.13.2”, Editors Tim Newsome and Megan Wachs, RISC-V Foundation, March 22, 2019.
|
||||
* **[RVcompat]** “RISC-V Architectural Compatibility Test Framework”, https://github.com/riscv-non-isa/riscv-arch-test.
|
||||
* **[AXI]** AXI Specification, https://developer.arm.com/documentation/ihi0022/hc.
|
||||
* **[CV-X-IF]** Placeholder for the CV-X-IF coprocessor interface currently prepared at OpenHW Group; current version in https://docs.openhwgroup.org/projects/openhw-group-core-v-xif/.
|
||||
* **[OpenPiton]** “OpenPiton Microarchitecture Specification”, Princeton University, https://parallel.princeton.edu/openpiton/docs/micro_arch.pdf.
|
||||
|
||||
CV32A6 is a standards-compliant 32-bit processor fully compliant with RISC-V specifications: [RVunpriv], [RVpriv] and [RVdbg] and passes [RVcompat] compatibility tests, as requested by [GEN-10] in [CVA6req].
|
||||
|
||||
|
||||
Documentation framework
|
||||
-----------------------
|
||||
|
||||
The framework of this document is inspired by the Common Criteria. The Common Criteria for Information Technology Security Evaluation (referred to as Common Criteria or CC) is an international standard (ISO/IEC 15408) for computer security certification.
|
||||
|
||||
Description of the framework:
|
||||
|
||||
* Processor is split into subsystem corresponding to the main modules of the design
|
||||
* Subsystems can contain several modules
|
||||
* Each subsystem is described in a chapter, which contains the following subchapters: “Description”, “Functionalities”, “Architecture and Modules” and "Registers" (if any)
|
||||
* The subchapter “Description” describes the main features of the submodule, the interconnections between the current subsystem and the others and the inputs/outputs interface.
|
||||
* The subchapter “Functionality” lists in details the subsystem functionalities. Please avoid using the RTL signal names to explain the functionalities.
|
||||
* The subchapter “Architecture and Modules” provides a drawing to present the module hierarchy, then the functionalities covered by the module
|
||||
* The subchapter “Registers” specifies the subsystem registers if any
|
||||
|
||||
|
||||
Contributors
|
||||
------------
|
||||
|
||||
| Jean-Roch Coulon
|
||||
(`jean-roch.coulon@thalesgroup.com <mailto:jean-roch.coulon@thalesgroup.com>`__)
|
||||
|
||||
[TO BE COMPLETED]
|
||||
|
214
docs/design_spec/source/cva6_system.rst
Normal file
214
docs/design_spec/source/cva6_system.rst
Normal file
|
@ -0,0 +1,214 @@
|
|||
..
|
||||
Copyright 2022 Thales DIS design services SAS
|
||||
Licensed under the Solderpad Hardware Licence, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
SPDX-License-Identifier: Apache-2.0 WITH SHL-2.0
|
||||
You may obtain a copy of the License at https://solderpad.org/licenses/
|
||||
|
||||
Original Author: Jean-Roch COULON (jean-roch.coulon@thalesgroup.com)
|
||||
|
||||
.. _CVA6_SYSTEM:
|
||||
|
||||
|
||||
CV32A6-step1 System
|
||||
===================
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
The CV32A6-step1 is a system composed of the subsystems and protocol interfaces as illustrated in the figure. The processor is a Harvard-based modern architecture. Instructions are issued in-order through the DECODE stage and executed out-of-order but committed in-order. The processor is Single issue, that means that at maximum one instruction per cycle can be issued to the EXECUTE stage.
|
||||
|
||||
The CV32A6 implements a 6-stage pipeline composed of PC Generation, Instruction Detch, Instruction Decode, Issue stage, Execute stage and Commit stage. At least 6 cycles are needed to execute one instruction.
|
||||
|
||||
|
||||
.. list-table:: cv32a6-step1 interface signals
|
||||
:header-rows: 1
|
||||
|
||||
* - Signal
|
||||
- IO
|
||||
- Type
|
||||
- Description
|
||||
|
||||
* - ``clk_i``
|
||||
- in
|
||||
- logic
|
||||
- system clock
|
||||
|
||||
* - ``rst_ni``
|
||||
- in
|
||||
- logic
|
||||
- Asynchronous reset active low
|
||||
|
||||
* - ``boot_addr_i``
|
||||
- in
|
||||
- logic[VLEN-1:0]
|
||||
- Reset boot address
|
||||
|
||||
* - ``hart_id_i``
|
||||
- in
|
||||
- logic[XLEN-1:0]
|
||||
- Hart id in a multicore environment (reflected in a CSR)
|
||||
|
||||
* - ``irq_i``
|
||||
- in
|
||||
- logic[1:0]
|
||||
- Level sensitive IR lines, mip & sip (async)
|
||||
|
||||
* - ``ipi_i``
|
||||
- in
|
||||
- logic
|
||||
- Inter-processor interrupts (async)
|
||||
|
||||
* - ``time_irq_i``
|
||||
- in
|
||||
- logic
|
||||
- Timer interrupt in (async)
|
||||
|
||||
* - ``debug_req_i``
|
||||
- in
|
||||
- logic
|
||||
- Debug request (async)
|
||||
|
||||
* - ``rvfi_o``
|
||||
- out
|
||||
- trace_port_t
|
||||
- RISC-V Formal Interface port (RVFI)
|
||||
|
||||
* - ``cvxif_req_o``
|
||||
- out
|
||||
- cvxif_req_t
|
||||
- Coprocessor Interface request interface port (CV-X-IF)
|
||||
|
||||
* - ``cvxif_resp_i``
|
||||
- in
|
||||
- cvxif_resp_t
|
||||
- Coprocessor Interface response interface port (CV-X-IF)
|
||||
|
||||
* - ``axi_req_o``
|
||||
- out
|
||||
- req_t
|
||||
- AXI master request interface port
|
||||
|
||||
* - ``axi_resp_i``
|
||||
- in
|
||||
- resp_t
|
||||
- AXI master response interface port
|
||||
|
||||
|
||||
|
||||
Functionality
|
||||
-------------
|
||||
|
||||
CV32A6-step1 implements a configuration which allows to connect coprocessor through CV-X-IF coprocessor interface, but the lack of MMU, A extension and data cache prevent from executing Linux.
|
||||
|
||||
.. list-table:: CV32A6-step1 Standard Configuration
|
||||
:header-rows: 1
|
||||
|
||||
* - Standard Extension
|
||||
- Specification
|
||||
- Configurability
|
||||
|
||||
* - **I**: RV32i Base Integer Instruction Set
|
||||
- [RVunpriv]
|
||||
- ON
|
||||
|
||||
* - **C**: Standard Extension for Compressed Instructions
|
||||
- [RVunpriv]
|
||||
- ON
|
||||
|
||||
* - **M**: Standard Extension for Integer Multiplication and Division
|
||||
- [RVunpriv]
|
||||
- ON
|
||||
|
||||
* - **A**: Standard Extension for Atomic transaction
|
||||
- [RVunpriv]
|
||||
- OFF
|
||||
|
||||
* - **F and D**: Single and Double Precision Floating-Point
|
||||
- [RVunpriv]
|
||||
- OFF
|
||||
|
||||
* - **Zicount**: Performance Counters
|
||||
- [RVunpriv]
|
||||
- OFF
|
||||
|
||||
* - **Zicsr**: Control and Status Register Instructions
|
||||
- [RVpriv]
|
||||
- ON
|
||||
|
||||
* - **Zifencei**: Instruction-Fetch Fence
|
||||
- [RVunpriv]
|
||||
- ON
|
||||
|
||||
* - **Privilege**: Standard privilege modes M, S and U
|
||||
- [RVpriv]
|
||||
- ON
|
||||
|
||||
* - **SV39, SV32, SV0**: MMU capability
|
||||
- [RVpriv]
|
||||
- OFF
|
||||
|
||||
* - **PMP**: Memory Protection Unit
|
||||
- [RVpriv]
|
||||
- OFF
|
||||
|
||||
* - **CSR**: Control and Status Registers
|
||||
- [RVpriv]
|
||||
- ON
|
||||
|
||||
* - **AXI**: AXI interface
|
||||
- [CV-X-IF]
|
||||
- ON
|
||||
|
||||
* - **TRI**: Translation Response Interface (TRI)
|
||||
- [OpenPiton]
|
||||
- OFF
|
||||
|
||||
|
||||
.. list-table:: CV32A6-step1 Micro-Architecture Configuration
|
||||
:header-rows: 1
|
||||
|
||||
* - Micro-architecture
|
||||
- Specification
|
||||
- Configurability
|
||||
|
||||
* - **I$**: Instruction cache
|
||||
- current spec
|
||||
- ON
|
||||
|
||||
* - **D$**: Data cache
|
||||
- current spec
|
||||
- OFF
|
||||
|
||||
* - **Rename**: register Renaming
|
||||
- current spec
|
||||
- OFF
|
||||
|
||||
* - **Double Commit**: out of order pipeline execute stage
|
||||
- current spec
|
||||
- ON
|
||||
|
||||
* - **BP**: Branch Prediction
|
||||
- current spec
|
||||
- ON with no info storage
|
||||
|
||||
|
||||
CVA6 memory interface complies with AXI5 specification including the Atomic_Transactions property support as defined in [AXI] section E1.1.
|
||||
|
||||
CVA6 coprocessor interface complies with CV-X-IF protocol specification as defined in [CV-X-IF].
|
||||
|
||||
The CV32A4-step1 core is fully synthesizable. It has been designed mainly for ASIC designs, but FPGA synthesis is supported as well.
|
||||
|
||||
For ASIC synthesis, the whole design is completely synchronous and uses positive-edge triggered flip-flops. The core occupies an area of about 80 kGE. The clock frequency can be more than 1GHz depending of technology.
|
||||
|
||||
|
||||
Architecture
|
||||
------------
|
||||
|
||||
.. figure:: ../images/CVA6_subsystems.png
|
||||
:name: CVA6 System
|
||||
:align: center
|
||||
:alt:
|
||||
|
||||
CV32A6-step1 System
|
||||
|
28
docs/design_spec/source/index.rst
Normal file
28
docs/design_spec/source/index.rst
Normal file
|
@ -0,0 +1,28 @@
|
|||
..
|
||||
Copyright (c) 2022 Thales
|
||||
|
||||
Licensed under the Solderpad Hardware Licence, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
https://solderpad.org/licenses/
|
||||
|
||||
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 WITH SHL-2.0
|
||||
|
||||
OpenHW Group CV32A6-step1 design Specification
|
||||
==============================================
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 3
|
||||
:caption: Contents:
|
||||
|
||||
cva6_intro
|
||||
cva6_system
|
||||
cva6_frontend
|
||||
cva6_glossary
|
|
@ -1,2 +1,5 @@
|
|||
sphinx>=2.1.0
|
||||
sphinx_rtd_theme
|
||||
sphinx
|
||||
sphinx-rtd-theme
|
||||
recommonmark
|
||||
sphinxcontrib-svg2pdfconverter
|
||||
sphinx_github_changelog
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue