From a14dec79ebc85fae807684fa027d8098a16a4d34 Mon Sep 17 00:00:00 2001 From: KrystalDelusion <93062060+KrystalDelusion@users.noreply.github.com> Date: Wed, 16 Nov 2022 00:55:22 +1300 Subject: [PATCH] Rst docs conversion (#3496) Rst docs conversion --- Makefile | 18 +- README.md | 24 + docs/.gitignore | 10 + docs/Makefile | 226 ++++ docs/images/011/example_out.tex | 18 + docs/images/011/select_prod.tex | 19 + docs/images/011/splitnets_libfile.tex | 15 + docs/images/011/submod_dots.tex | 27 + docs/images/Makefile | 44 + docs/images/approach_flow.png | Bin 0 -> 9709 bytes docs/images/approach_flow.tex | 38 + docs/images/basics_abstractions.png | Bin 0 -> 29158 bytes docs/images/basics_abstractions.tex | 41 + docs/images/basics_ast.png | Bin 0 -> 9478 bytes docs/images/basics_ast.tex | 30 + docs/images/basics_flow.png | Bin 0 -> 12540 bytes docs/images/basics_flow.tex | 44 + docs/images/basics_parsetree.png | Bin 0 -> 23196 bytes docs/images/basics_parsetree.tex | 44 + docs/images/overview_flow.png | Bin 0 -> 17668 bytes docs/images/overview_flow.tex | 37 + docs/images/overview_rtlil.png | Bin 0 -> 16034 bytes docs/images/overview_rtlil.tex | 27 + docs/images/verilog_flow.png | Bin 0 -> 15934 bytes docs/images/verilog_flow.tex | 67 ++ docs/source/CHAPTER_Approach.rst | 141 +++ docs/source/CHAPTER_Basics.rst | 776 +++++++++++++ docs/source/CHAPTER_CellLib.rst | 1020 +++++++++++++++++ docs/source/CHAPTER_Eval.rst | 233 ++++ docs/source/CHAPTER_Intro.rst | 96 ++ docs/source/CHAPTER_Optimize.rst | 330 ++++++ docs/source/CHAPTER_Overview.rst | 571 +++++++++ docs/source/CHAPTER_Prog.rst | 46 + docs/source/CHAPTER_Techmap.rst | 105 ++ docs/source/CHAPTER_Verilog.rst | 666 +++++++++++ .../appendix/APPNOTE_010_Verilog_to_BLIF.rst | 336 ++++++ .../APPNOTE_011_Design_Investigation.rst | 965 ++++++++++++++++ .../appendix/APPNOTE_012_Verilog_to_BTOR.rst | 333 ++++++ docs/source/appendix/CHAPTER_Auxlibs.rst | 42 + docs/source/appendix/CHAPTER_Auxprogs.rst | 29 + .../source/appendix/CHAPTER_StateOfTheArt.rst | 410 +++++++ docs/source/appendix/CHAPTER_TextRtlil.rst | 298 +++++ docs/source/bib.rst | 9 + docs/source/cmd_ref.rst | 11 + docs/source/conf.py | 62 + docs/source/index.rst | 72 ++ docs/source/literature.bib | 202 ++++ docs/source/requirements.txt | 2 + docs/static/custom.css | 1 + docs/static/favico.png | Bin 0 -> 33435 bytes docs/static/logo.png | Bin 0 -> 15938 bytes docs/static/yosyshq.css | 78 ++ docs/util/RtlilLexer.py | 45 + docs/util/YoscryptLexer.py | 73 ++ kernel/register.cc | 109 ++ passes/cmds/select.cc | 2 + passes/sat/sim.cc | 2 +- 57 files changed, 7792 insertions(+), 2 deletions(-) create mode 100644 docs/.gitignore create mode 100644 docs/Makefile create mode 100644 docs/images/011/example_out.tex create mode 100644 docs/images/011/select_prod.tex create mode 100644 docs/images/011/splitnets_libfile.tex create mode 100644 docs/images/011/submod_dots.tex create mode 100644 docs/images/Makefile create mode 100644 docs/images/approach_flow.png create mode 100644 docs/images/approach_flow.tex create mode 100644 docs/images/basics_abstractions.png create mode 100644 docs/images/basics_abstractions.tex create mode 100644 docs/images/basics_ast.png create mode 100644 docs/images/basics_ast.tex create mode 100644 docs/images/basics_flow.png create mode 100644 docs/images/basics_flow.tex create mode 100644 docs/images/basics_parsetree.png create mode 100644 docs/images/basics_parsetree.tex create mode 100644 docs/images/overview_flow.png create mode 100644 docs/images/overview_flow.tex create mode 100644 docs/images/overview_rtlil.png create mode 100644 docs/images/overview_rtlil.tex create mode 100644 docs/images/verilog_flow.png create mode 100644 docs/images/verilog_flow.tex create mode 100644 docs/source/CHAPTER_Approach.rst create mode 100644 docs/source/CHAPTER_Basics.rst create mode 100644 docs/source/CHAPTER_CellLib.rst create mode 100644 docs/source/CHAPTER_Eval.rst create mode 100644 docs/source/CHAPTER_Intro.rst create mode 100644 docs/source/CHAPTER_Optimize.rst create mode 100644 docs/source/CHAPTER_Overview.rst create mode 100644 docs/source/CHAPTER_Prog.rst create mode 100644 docs/source/CHAPTER_Techmap.rst create mode 100644 docs/source/CHAPTER_Verilog.rst create mode 100644 docs/source/appendix/APPNOTE_010_Verilog_to_BLIF.rst create mode 100644 docs/source/appendix/APPNOTE_011_Design_Investigation.rst create mode 100644 docs/source/appendix/APPNOTE_012_Verilog_to_BTOR.rst create mode 100644 docs/source/appendix/CHAPTER_Auxlibs.rst create mode 100644 docs/source/appendix/CHAPTER_Auxprogs.rst create mode 100644 docs/source/appendix/CHAPTER_StateOfTheArt.rst create mode 100644 docs/source/appendix/CHAPTER_TextRtlil.rst create mode 100644 docs/source/bib.rst create mode 100644 docs/source/cmd_ref.rst create mode 100644 docs/source/conf.py create mode 100644 docs/source/index.rst create mode 100644 docs/source/literature.bib create mode 100644 docs/source/requirements.txt create mode 100644 docs/static/custom.css create mode 100644 docs/static/favico.png create mode 100644 docs/static/logo.png create mode 100644 docs/static/yosyshq.css create mode 100644 docs/util/RtlilLexer.py create mode 100644 docs/util/YoscryptLexer.py diff --git a/Makefile b/Makefile index 54d316b1ee7..dbfe6312e02 100644 --- a/Makefile +++ b/Makefile @@ -958,6 +958,19 @@ ifeq ($(ENABLE_PYOSYS),1) endif endif +# also others, but so long as it doesn't fail this is enough to know we tried +docs/source/cmd/abc.rst: $(TARGETS) $(EXTRA_TARGETS) + mkdir -p docs/source/cmd + ./$(PROGRAM_PREFIX)yosys -p 'help -write-rst-command-reference-manual' + +PHONY: docs/gen_images +docs/gen_images: + $(Q) $(MAKE) -C docs/images all + +DOC_TARGET ?= html +docs: docs/source/cmd/abc.rst docs/gen_images + $(Q) $(MAKE) -C docs $(DOC_TARGET) + update-manual: $(TARGETS) $(EXTRA_TARGETS) cd manual && ../$(PROGRAM_PREFIX)yosys -p 'help -write-tex-command-reference-manual' @@ -982,6 +995,9 @@ clean: rm -rf vloghtb/Makefile vloghtb/refdat vloghtb/rtl vloghtb/scripts vloghtb/spec vloghtb/check_yosys vloghtb/vloghammer_tb.tar.bz2 vloghtb/temp vloghtb/log_test_* rm -f tests/svinterfaces/*.log_stdout tests/svinterfaces/*.log_stderr tests/svinterfaces/dut_result.txt tests/svinterfaces/reference_result.txt tests/svinterfaces/a.out tests/svinterfaces/*_syn.v tests/svinterfaces/*.diff rm -f tests/tools/cmp_tbdata + $(MAKE) -C docs clean + $(MAKE) -C docs/images clean + rm -rf docs/source/cmd docs/util/__pycache__ clean-abc: $(MAKE) -C abc DEP= clean @@ -1106,5 +1122,5 @@ echo-abc-rev: -include kernel/*.d -include techlibs/*/*.d -.PHONY: all top-all abc test install install-abc manual clean mrproper qtcreator coverage vcxsrc mxebin +.PHONY: all top-all abc test install install-abc docs manual clean mrproper qtcreator coverage vcxsrc mxebin .PHONY: config-clean config-clang config-gcc config-gcc-static config-gcc-4.8 config-afl-gcc config-gprof config-sudo diff --git a/README.md b/README.md index f916b38adcb..d0f46f24494 100644 --- a/README.md +++ b/README.md @@ -624,3 +624,27 @@ Notes: - To run `make manual` you need to have installed Yosys with `make install`, otherwise it will fail on finding `kernel/yosys.h` while building `PRESENTATION_Prog`. + +Building the website +==================== + +If you're seeing this, it means you are on an as yet unmerged branch (I hope), +and the website version of the documentation is not yet publicly available. + +In addition to those listed above for building Yosys from source, the following +packages are used for building the website: + + $ sudo apt-get install pdf2svg + +PDFLaTeX, included with most LaTeX distributions, is also needed during the +build process for the website. + +The Python package, Sphinx, is needed along with those listed in +`docs/source/requirements.txt`: + + $ pip install -U sphinx -r docs/source/requirements.txt + +From the root of the repository, run `make docs`. This will build/rebuild yosys +as necessary before generating the website documentation from the yosys help +commands. To build for pdf instead of html, call +`make docs DOC_TARGET=latexpdf`. diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 00000000000..26645e4cb65 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,10 @@ +/build/ +/source/cmd +/images/*.log +/images/*.aux +/images/*.pdf +/images/*.svg +/images/011/*.log +/images/011/*.aux +/images/011/*.pdf +/images/011/*.svg diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 00000000000..2319e1665c3 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,226 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = build + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source + +.PHONY: help +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " applehelp to make an Apple Help Book" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " epub3 to make an epub3" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " xml to make Docutils-native XML files" + @echo " pseudoxml to make pseudoxml-XML files for display purposes" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + @echo " coverage to run coverage check of the documentation (if enabled)" + @echo " dummy to check syntax errors of document sources" + +.PHONY: clean +clean: + rm -rf $(BUILDDIR)/* + +.PHONY: html +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +.PHONY: dirhtml +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +# singlehtml section links are broken +.PHONY: singlehtml +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +.PHONY: pickle +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +.PHONY: json +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +.PHONY: htmlhelp +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +.PHONY: qthelp +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/SymbiYosys.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/SymbiYosys.qhc" + +.PHONY: applehelp +applehelp: + $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp + @echo + @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." + @echo "N.B. You won't be able to view it unless you put it in" \ + "~/Library/Documentation/Help or install it in your application" \ + "bundle." + +.PHONY: devhelp +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/SymbiYosys" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/SymbiYosys" + @echo "# devhelp" + +.PHONY: epub +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +.PHONY: epub3 +epub3: + $(SPHINXBUILD) -b epub3 $(ALLSPHINXOPTS) $(BUILDDIR)/epub3 + @echo + @echo "Build finished. The epub3 file is in $(BUILDDIR)/epub3." + +.PHONY: latex +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +.PHONY: latexpdf +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +.PHONY: latexpdfja +latexpdfja: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through platex and dvipdfmx..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +.PHONY: text +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +.PHONY: man +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +.PHONY: texinfo +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +.PHONY: info +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +.PHONY: gettext +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +.PHONY: changes +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +.PHONY: linkcheck +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +.PHONY: doctest +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." + +.PHONY: coverage +coverage: + $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage + @echo "Testing of coverage in the sources finished, look at the " \ + "results in $(BUILDDIR)/coverage/python.txt." + +.PHONY: xml +xml: + $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml + @echo + @echo "Build finished. The XML files are in $(BUILDDIR)/xml." + +.PHONY: pseudoxml +pseudoxml: + $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml + @echo + @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." + +.PHONY: dummy +dummy: + $(SPHINXBUILD) -b dummy $(ALLSPHINXOPTS) $(BUILDDIR)/dummy + @echo + @echo "Build finished. Dummy builder generates no files." diff --git a/docs/images/011/example_out.tex b/docs/images/011/example_out.tex new file mode 100644 index 00000000000..831b036e993 --- /dev/null +++ b/docs/images/011/example_out.tex @@ -0,0 +1,18 @@ +\documentclass[12pt,tikz]{standalone} +\pdfinfoomitdate 1 +\pdfsuppressptexinfo 1 +\pdftrailerid{} +\usepackage[utf8]{inputenc} +\usepackage{tikz} +\pagestyle{empty} + +\begin{document} +\begin{tikzpicture} + \node[inner sep=0pt] at (0,0) + {\includegraphics[width=\linewidth]{example_00.pdf}}; + \node[inner sep=0pt] at (0,-3.8) + {\includegraphics[width=\linewidth]{example_01.pdf}}; + \node[inner sep=0pt] at (0,-7) + {\includegraphics[width=\linewidth]{example_02.pdf}}; +\end{tikzpicture} +\end{document} diff --git a/docs/images/011/select_prod.tex b/docs/images/011/select_prod.tex new file mode 100644 index 00000000000..c4a3c6e379b --- /dev/null +++ b/docs/images/011/select_prod.tex @@ -0,0 +1,19 @@ +\documentclass[12pt,tikz]{standalone} +\pdfinfoomitdate 1 +\pdfsuppressptexinfo 1 +\pdftrailerid{} +\usepackage[utf8]{inputenc} +\pagestyle{empty} + +\begin{document} +\begin{tikzpicture} + \node[inner sep=0pt] at (0,0) + {\hfill \includegraphics[width=4cm,trim=0 1cm 0 1cm]{sumprod_02.pdf}}; + \node[inner sep=0pt] at (0,-2.8) + {\includegraphics[width=\linewidth,trim=0 0cm 0 1cm]{sumprod_03.pdf}}; + \node[inner sep=0pt] at (0,-6.2) + {\includegraphics[width=\linewidth,trim=0 0cm 0 1cm]{sumprod_04.pdf}}; + \node[inner sep=0pt] at (0,-9.2) + {\includegraphics[width=\linewidth,trim=0 1cm 0 1cm]{sumprod_05.pdf}}; +\end{tikzpicture} +\end{document} diff --git a/docs/images/011/splitnets_libfile.tex b/docs/images/011/splitnets_libfile.tex new file mode 100644 index 00000000000..9669ef841b0 --- /dev/null +++ b/docs/images/011/splitnets_libfile.tex @@ -0,0 +1,15 @@ +\documentclass[12pt,tikz]{standalone} +\pdfinfoomitdate 1 +\pdfsuppressptexinfo 1 +\pdftrailerid{} +\usepackage[utf8]{inputenc} +\pagestyle{empty} + +\begin{document} +\begin{tikzpicture} + \node[inner sep=0pt] at (0,0) + {\includegraphics[height=\linewidth]{cmos_00.pdf}}; + \node[inner sep=0pt] at (2,-8) + {\includegraphics[width=\linewidth]{cmos_01.pdf}}; +\end{tikzpicture} +\end{document} diff --git a/docs/images/011/submod_dots.tex b/docs/images/011/submod_dots.tex new file mode 100644 index 00000000000..3d48b46e5a5 --- /dev/null +++ b/docs/images/011/submod_dots.tex @@ -0,0 +1,27 @@ +\documentclass[12pt,tikz]{standalone} +\pdfinfoomitdate 1 +\pdfsuppressptexinfo 1 +\pdftrailerid{} +\usepackage[utf8]{inputenc} +\pagestyle{empty} + +\begin{document} +\begin{tikzpicture} + \node[inner sep=0pt] at (0,0) + {\includegraphics[width=\linewidth,trim=0 1.3cm 0 0cm]{submod_00.pdf}}; + \node at (0, -2.5) + {\tt memdemo}; + \node[inner sep=0pt] at (0,-5) + {\includegraphics[width=\linewidth,trim=0 1.3cm 0 0cm]{submod_01.pdf}}; + \node at (0, -7.5) + {\tt scramble}; + \node[inner sep=0pt] at (0, -11) + {\includegraphics[width=\linewidth,trim=0 1.3cm 0 0cm]{submod_02.pdf}}; + \node at (0, -14.8) + {\tt outstage}; + \node[inner sep=0pt] at (0,-16.6) + {\includegraphics[width=\linewidth,trim=0 1.3cm 0 0cm]{submod_03.pdf}}; + \node at (0, -19) + {\tt selstage}; +\end{tikzpicture} +\end{document} diff --git a/docs/images/Makefile b/docs/images/Makefile new file mode 100644 index 00000000000..b62f6c7f6cc --- /dev/null +++ b/docs/images/Makefile @@ -0,0 +1,44 @@ +all: dots tex svg tidy + +TEX_SOURCE:= $(wildcard *.tex) +DOT_LOC:= ../../manual/APPNOTE_011_Design_Investigation +DOT_SOURCE:= $(wildcard $(DOT_LOC)/*.dot) + +TEX_SOURCE+= 011/example_out.tex +011/example_out.pdf: 011/example_00.pdf 011/example_01.pdf 011/example_02.pdf +TEX_SOURCE+= 011/select_prod.tex +011/select_prod.pdf: 011/sumprod_02.pdf 011/sumprod_03.pdf 011/sumprod_04.pdf 011/sumprod_05.pdf +TEX_SOURCE+= 011/splitnets_libfile.tex +011/splitnets_libfile.pdf: 011/cmos_00.pdf 011/cmos_01.pdf +TEX_SOURCE+= 011/submod_dots.tex +011/submod_dots.pdf: 011/submod_00.pdf 011/submod_01.pdf 011/submod_02.pdf 011/submod_03.pdf + +TEX_PDF:= $(patsubst %.tex,%.pdf,$(TEX_SOURCE)) +DOT_PDF:= $(addprefix 011/,$(notdir $(patsubst %.dot,%.pdf,$(DOT_SOURCE)))) +SVG_OUTPUT:= $(patsubst %.pdf,%.svg,$(TEX_PDF) $(DOT_PDF)) + +dots: $(DOT_PDF) +tex: $(TEX_PDF) +svg: $(SVG_OUTPUT) + +011/%.pdf: $(DOT_LOC)/%.dot + dot -Tpdf -o $@ $< + +011/%.pdf: 011/%.tex + cd 011 && pdflatex $()ey%I^36pzH3PMC=W3x;CytlM_mtkc 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 JDs_j5{{iZXWUc@J literal 0 HcmV?d00001 diff --git a/docs/images/approach_flow.tex b/docs/images/approach_flow.tex new file mode 100644 index 00000000000..275baa3f5bf --- /dev/null +++ b/docs/images/approach_flow.tex @@ -0,0 +1,38 @@ +\documentclass[12pt,tikz]{standalone} +\pdfinfoomitdate 1 +\pdfsuppressptexinfo 1 +\pdftrailerid{} +\usepackage[utf8]{inputenc} +\usepackage{amsmath} +\usepackage{pgfplots} +\usepackage{tikz} +\usetikzlibrary{calc} +\pagestyle{empty} + +\begin{document} +\begin{tikzpicture} + \path (-1.5,3) coordinate (cursor); + \draw[-latex] ($ (cursor) + (0,-1.5) $) -- ++(1,0); + \draw[fill=orange!10] ($ (cursor) + (1,-3) $) rectangle node[rotate=90] {Frontend} ++(1,3) coordinate (cursor); + \draw[-latex] ($ (cursor) + (0,-1.5) $) -- ++(1,0); + \draw[fill=green!10] ($ (cursor) + (1,-3) $) rectangle node[rotate=90] {Pass} ++(1,3) coordinate (cursor); + \draw[-latex] ($ (cursor) + (0,-1.5) $) -- ++(1,0); + \draw[fill=green!10] ($ (cursor) + (1,-3) $) rectangle node[rotate=90] {Pass} ++(1,3) coordinate (cursor); + \draw[-latex] ($ (cursor) + (0,-1.5) $) -- ++(1,0); + \draw[fill=green!10] ($ (cursor) + (1,-3) $) rectangle node[rotate=90] {Pass} ++(1,3) coordinate (cursor); + \draw[-latex] ($ (cursor) + (0,-1.5) $) -- ++(1,0); + \draw[fill=orange!10] ($ (cursor) + (1,-3) $) rectangle node[rotate=90] {Backend} ++(1,3) coordinate (cursor); + \draw[-latex] ($ (cursor) + (0,-1.5) $) -- ++(1,0); + + \path (-3,-0.5) coordinate (cursor); + \draw (cursor) -- node[below] {HDL} ++(3,0) coordinate (cursor); + \draw[|-|] (cursor) -- node[below] {Internal Format(s)} ++(8,0) coordinate (cursor); + \draw (cursor) -- node[below] {Netlist} ++(3,0); + + \path (-3,3.5) coordinate (cursor); + \draw[-] (cursor) -- node[above] {High-Level} ++(3,0) coordinate (cursor); + \draw[-] (cursor) -- ++(8,0) coordinate (cursor); + \draw[->] (cursor) -- node[above] {Low-Level} ++(3,0); + +\end{tikzpicture} +\end{document} diff --git a/docs/images/basics_abstractions.png b/docs/images/basics_abstractions.png new file mode 100644 index 0000000000000000000000000000000000000000..a735fbd3b5e03065def0ea9aa54ab543ee8f2691 GIT binary patch literal 29158 zcmcF~Wm_E4vUPwE91>gu!5Q4$-EFX7!5xCTTX1&|HVp3W7Tn$4-GblAx%d2o_x&=n zpMI)$@2>8yTD5BJFeL>^6hwT)4u+A(*#Q5gyZghEu#bx(dh9!3Rw5Q}XqkC$esguDed8HM6FzM^`$#rf00~wsq7*C;QA%mZ|9{5?&?VoY5Wv7S{%J0Vwa`D4+<2q^{6kDt>Y>qr zB`ux>_Wzj-a#)yR@c+yZ3oK#DK`PD|pJT)G@mOOXoi31rlV-x0xd`R8{Ex{*E-X|^+ zRxQ?*K$10@OD&~l_ZDWm*EXkxpG2L=)V2<7|+rOT9uv1U~Za@ zlax*bhM~JmF=X1Kud#Qsua>DuEiqfU&{S*IO3rR?cGOZQbf=ARksZ%Ydl05dRvo*F9;=ozd?V)v!&${+fY+GjI6#DquZI z%zP~-&fzPF(*90lV7|wc2}hUvCmruF{8EeT0g70}5$Z;J`ss&VGy+;_6+9Jw*w1bB zt@>bu3G>Sclgu>}>8khxGqQ$`&jy3I7HqJa+t6x@Z`HFG2`O{olDOM)IU>9k_BOOh z^XZfQcF^a)v!UTAXVyB=tcEM6QyT`<@tzVmVg7xGceJtg!dP!XRJ&BZ4221LH$PfY z_S?^qxL&0R4N9cX-{0-64E0AAy{j zCaZq^?$1*TY{Wsj`?-z+13G`R}lMyRY$ByJ^7qZ2akTVug)d zOOw^`lZA@>{QSVIEFxCZQ6&Vzn+I4VY$nTD>hT=GN{>p9yJKqYP_6IZ!PnxQm2JgG zt`z#_=G3O9ro`8}O+WoHs1%f1oGjMcJtg-?(*&KY&z9?Hv}%lxJ6WZW3ZYA+{yj!! z$+@E~au;LnkKDMmN0i2bjiCr* zDN0LcT;=^^dMH^UFIP9Tw|q}5D?fNOuuC+i+ffmA$}2bqgC()3K*-Uon{Vo67|`H9 z-pCdYne%&RxLy{BzC>qXVAw5#Ad@KxUQgT#^|`R0bjm$8SLA$gmL4k$qk z0VC$Dh_D92Y`J>V>|4Q|F)lKLr@cG;8TF-E_|l9SuG%7ILwlc=7L^ghaGR9|5O*^0ek*3xUl|MvS3v^M!NdvH;Uicwa_TkH1&3;cO>MzpQcY zw_WvhExUVQ-QC{vjvrRHUHdK=69ummi-d2&&3zAFd0*;PX?8j_&K*#gO2K0%T{nch zrx6=B(5c$>1s=-PxMI!-+C=9nR@NBxjfHiT>dPvM?c6?UYOGUx79hY_2f1*PX{!Q0 z1J>UdXgnOCJxWN1?czkUWbe>2m%_yOsl3hSTKQ`kBS?lUtVT`Pmx0|@7773~aDCGo zJ+4hF_7MERY!v{YqpqwghNPV36IP3AAPK|2gt91=^6#t>+oY)BT*$~|GFtIsEIC)^ zf}d_BB@Qz-cUY=D%YPXloaE1=&B4A#OCp?f-pXafp%efxx^K01egZ-+<$Z4zVwdz$ zErb|a#m}jr%S^Z)k{<^~aTB7`=`!NKV7g&HA-7Jstado_if0f!z;wn1tz(!)wU0=@ zZM(Z;yu@dE@cbIQ+@*lz`aTs%igkB$`(b4^;(3+RRsd}w52Z__tK-sI09r~H#tJ%k z(p{z3%?W|k-#j@QORD-^hr1A*9#+l4lDL_|JvAe3+7_%caH8|U_gRO$?uUG&OnC7o z*;j|V0oLn`y5a=;?d+u{2V*2Ny~N+;Cb~`-GXiPqfX{_OZMpG)e;`C!Rfr6v@Ya3W zc|B<&#w$bHA4+I&w@iggi49C~t=?9V4snvkTt{Ebr9IWF%CZVxX8G3glAB+q?HM3< zNBK)W1p{@Eig_>CN*2Z3{ z><5oz`Mx4;d)=*%8}2=_ED79Z42Xx~+pX>xdRk+G0b)b=Uq`d3NY(Vb!$ExX&cCjr z6zuCr&p`^v)D={GbDVnShlkt0LsftHutB^`XSNz<)E^}uO2bEW*2|bI=N)3 ze{X8KgkLAMkk-xK`BZ(mJ~5+UJH%TOTW_-y)dJ`|h&g=+CW7r7UXW9oDK3^KU10%^%ZfXdnC zlk%7yjKad5#Z(0o&O29MYslFYw_|Dw^J&@oieHs?C^xn;LWb~|+gYcN=!tSpOis2z>J!*|o%zC7(EXJkZxkxL#XSxUiSV6x&5)dme-O>* z2Sdaycb(gv(>p7j)+aQ@8iGl!W@cK0E()9>J9d29a{e;Gl2DVzOv1Ehs&2u$-_n7I zVme&X_muK(b?ecp->34p*)`9Tj>axID83~8Sj?JHPAZW}sl_5Ik7{oAgj%^s%6quv zNNlUgfc2G7vHQ(F@NS{tl{>6(=7Z(F=@woV1vlL*mO?AjoEHqb-97d_Edwp0D~b7m z$p^7*_Y_LLMw&l_>)yCt7YyTm;uy+rcmOJVkHTzN#dNVjD~k6sVC61Js`5`BSCv*O zyg^MKlhuM{3pjp(LY<6Hp3Apxtq-LjfSGJ0lq|N4bF*{kVy)#auhH9;DAdzb8&}vx zVZ6_I%INa_`X#-c^lZS1gbg2x8A$j}YW0;_E6q*`UP{ebyndo-RRcMGw?CN5|ds_4B0TE%pAO#`+a-Cs@++Cppe~ zsx4Vr z`_M)IYHrCO5a(e9x3kP(^$d~W&@2~x<4iyT3im`iueY(E4|jcfSla!W+IVOBD;P_L zpyKE5FJf0lljoQ$-E2uu;MnE65rXSTLw+>Z*8WagG6c{+a(UUaQh+)%dD4^tm+r9J z&~w%~W|&}|91pdd%iUdraUYF{=&VR(#+Q!%Yzl3JirE~W{b5?@&z*!+HR-VBGHbnS z2i%{|c$D{#KdI|X7U^vuqXqP=>5yTAEf`E=Y+e~wur9Xv?AM|uH9EN2pW)b6gn z95`QLbH0?xyBFKBza9qBg*1Tpn$k|VZpU3gd8oEtOGF5(tL8XLbHM}6cZ@}DpFw>k zn~68R{TP!L0z&!=Qm`PUr7k2iFn+)ys}Up@e4 znsyL^FUjg!Oz7{~)jdm90b@pj2~!EqYkjbb(gKxm(rHe{1oq#{Ez!grKfezEHL#eQ z8y5s?Q%Ob>=8Vx|NI}p<4upV!p!(CH>6s8ylUam{^URT)!r%O0+^sqVoHTW7Ty7WL zA3YcZfHAtj1V^*sW1K#-+{+%@@qxiow5?hKgFQinoTxFiuS>-mI=LQWSe{5cdO2Oq zYEf=gvjH3j)|cN^Lv-&>wx`G77V`R=Yexg5xfiOKHW*VUN(OSMo>g}*jggBJ4G+?U zSChZaalWs1dfXwJJQq+YW?x=(z8hLwN0yXWX4wCSf(e7*lw%}504y7E8|IAQ5zq@J zih;=B(9y*9M4)z^@wYoLy`+D3tL?)xB^%GxPUz&;fv|IE=W5&Hx-%gZj0Uq3_tN>O z`;X;#dMcPZPC{ifz96(e(Gxeq-;>%7WxhMTwNcwTWn@E#7t)t z^0qu@6Z($jo5=r8NJMlrQye4XBHy{u;hix#sg$&^v$d7?q%m}`y?t%a*_GNUnUY77 z6Mz2qY6n=N5)7%_a?8u3{QW%$SWGUu<0)h*uZ;i+5cuB!VNs-E)nXQ`t&~&7B-7tIw(cPo{Bo)Wg&CUTvsRlqiO(!b<#H zye%2}2%6Cb(L0vw1~ujSUbQQ&<~vHN=p7 z32+PH;sjY@9Ak5JPvr}@&4R^NzDZ;faDBaCQR`Ddw0H3D;dnaH^Vp$qNiw-aOcbzb?S`l z!qyu(?NTjfk&myHrMOw=kyz)WN15g-E<3)y%1NtpNBM7)cW8xz?;jRU7Oi%oHLDnZSkguWh=dq#E0YaUUU zfCnk+6(Dz9;37R~k^H*b<61W_wQU(lWf*F&-c|_CWy&$y|MNV=Jd5MtBzmjR1pXB5n06FN5 zrDc+*;*a^SKod7kN%FCQgu{-8o*J)`u13g;k5??{t)4>uS&CMhsHyl@mic|0)4NP7M;2oq|4zp>I;s}$AVP&^_O z?D?-Q8;VY#vT1R4w%xJUpy1MMzq+y#yHyz1X9)Vo^bV=zQnygZ;c+bj@BBQbD`mMR z7Q3cy3}#b1!=VKG7?{yJqsUUv(qd#hz69-$jGx`GYqk_>$De2{*Dv-b)V9EI;pTj} zVrSt?<;~NYWc;1+ljLJFORnz+j&Xhjd!48ZUy_(!N99~|*mP~RF5gftHnp|p!xYBg zx7X6Yk`Lv!2y$?!1Gj;H?N4s9YEd{00+;419j04pqEbFHf~MV83LYUI)*z{%PbAGM zADUtgs()BJEN-#T9q4F*awPD){*(8OkYMCt%!T!@FXv;SttOm7Y&6 zGpNCDKN~?R!+cKXD9HlPlz92N+V4+3N8(!v;W<@^s$Lsm-BJL023^zM{6&P2v$-7S z*O(2FMi9ZP$@4KA;`f62Q>2R4lXTU2i3sNf7hh`DH^YEMYlGqXoR?}=mEzkB8=-pG zu`91#zhy*mG}(ap^+EZ$W}i_G&_KYxvNu6~z~8&(A(b0-zUl`v51_98WS>)69QI+(#1l*~T6o3zDG3@~)RmwDfeA}>8S^O8xs_?( z_Y26Ynw~XydoX{C;WArHi9%{WH4KyJ+1O+yZ3=J+NHGlTULCmd1I(wy;_i7X*Gv!Y>f|1WDkZb=A}CG5@kCCG|TVi50!QCFfCLU3`nT8fX2xC&jfS zl6^_~!20zOb722cs-nTVD{LU2I^hngar|ADDm2My4wEJv4JfR)7^BytT^s(Fcw9b5 zKeDM|3U*^qscSO+%UwWf;|si9JxX<5#b^mP^K=D%M6>PcSFDbPMCSAe^_Zi`qm{(@ zdaGP2!?fe7EXEibzq~#8W7sjH$GArG6q?|1HJs!}%vO}3vn_}$CrDmP+^~_@L9of>T$Px?=B8M3Q2`_*)s>_``VpEYo2xT<`rp~(b6U+ zDw?Z7IK$yN6I1pZm^JS_NqBl8Wdgi$(Blb@^ts=%?)cJbg;TWjX2Q-!*L5wTx71b? z`I-v+01Vy&ULw%@Myp)E#Qh!LjAREMF~7VMs!5=WG^hbC*)e|+1J`f$ctSb0edx~r zoZ=hx#wko~<>7L^KX04rUoiT#)Z^R;j?uJEg(HEL(w{P(01>P@IQG;FdTF@oiy2+q z_=dsu0mm#iQC5zZgS4b_YREYy{T2_FtT9DvgWyRvu$wNWQ!5gmWdU-j^`!IU zO-FZeUP9JC7h@iVyP$4fY*`&X027y_{5IoYD>hbg-#c&QK!iQ}P^>f^lst(K_Qt2g zv4O#qjlV@anEAj*kEt#0)N^W#Sq8#Xo(|sdul;Ar{lzgYw{9IDy`rEpWJVIdssYY$ zE!3ZsHb?jXCPic%AO)7abOQN@cO2k3$8qy#SRhO=XRdvR1P18MVfR7yy{i2}^pW$pl3?G#4`B=RF2V_+T28y6hvU{ zRN6*nh+r0#E0!wHL)xff;7Kll6)pguku@UQGaL#m7W($qbM?T4j{=feZ@N|Perq>!E&UGA_eF2N4BG4WhP59fQolY_n`I2jt;S>j6rdNIwY&C|gdcTSJ= ze^$jVQAd?PN596_)m8RKZ?Jm8aURRPuk^&Lpy)B{XD{SOFP3y(TF*?9kjx*B4v5`i zmO#3wYSc8_w9*bK@}29CTz+ZMXx}9LmJ4WkGP{<`QPAtpe?kL&uVvLYVtDlk%@0&# zH3|yV*}gO+4p+F4J|fT?tv?^W3&UAdw^zjkwK&`zkfbYek_|SWA=|zY%=OC*9kB}# zX@*O(FZ^8&b(q`t=_X9NBpKtJHLLEhX?v1VD!EI^l_})p`uF5X7?fzXKwkX%{hD%l zdUzZQt69Z}%!%S~+{x32f!`YGz?s>KkwlH4dmvdGBNKgAD3nfWQp#_mD_l#kIQ^427Ee$yL5H? ztySQkeP?6m88jDpLYLpnaEaP`NWjlP2yf-P`zI%`1keU1sa~G?=`E{peparhWA8|F zCmVqktqr|2r`F^&T=+fja0plJ7h{N|n)sp8AOBA{^VbeFNc67qRJAqRuXifBTsQVX3fSld-y8C<*6lYP+kce*34t_5dt~$$JZT3Q{2@Kk%J}jp;lWo^!diR^IBZ)&3?)^mCjy8HzYra!?^73yC-1 zCWhg{h~D+#b+qH+d;DvU?RiH?>?sN^FSzhnDw7((yyC_!VJ1ecM>jq{-tl%bZ| zBLeGOJ8NQ#>aXoe`{yi|Se24k`1s-1 zWQ-+3-+@Asl5l%e6qUPN;cp;$0aNvkOXk%AH^Quq8foWRxeSeh2}FrghOR&NDXDHC z6wjH_K#^};T624&Al4q%*JY%EqytdPrAPH8ko7NXXUJ;L0~k)HsUdH1Df?5pwaKWFz^Mc#&Jk$jPC_iSYf!SXJ7B zA{MqBYf25Pc(IX_qw{Cko6h99?YJNlBHS#aFP_h@X00)mY8GJn2SJX{FaOm7)aE+e zI2o-!xtBCRO*57FQNr%(`8w!$$-^eLzcF+&7nw$Wwz{5oji@!NQCVs-?`d?A(SuP@ zvw*bc!Mp{`Lxm6!?Lb2_5{FpO1}V{KHsGcMDs%q<-p^{-G+0vKAmCU<%1!HRK@9?p zPmXD2Q~tGcAc(nexu(Ld2x7^Z@Lio8>+kVD#Oxeq0!xzznNtSDaFU4VMFg=lJi-4e zp^0r%r@G{@^edLB=Fl?X>?AVKO$G~6o7Lo&Kc87C$f#0);(uq4(qc*JA{HnrtvyAw zE6Cys?x9CvFHOsw(%dh4Q;bw(R2$!DS{_*)2l2k_H3dj}U)=1dO7f8JJ^uR4s4mAR z(jC{JNqHyCKb36bNX5)^DOu6vvY9}&EK>1{>g3(nA|_bJQXp-^Q$5egh!sHDe~&v2 zp=Jic^YWVo&msKD^n9%o#5X4rWaW@9ytw}@0zf=&WW?OCDw>k&-B5*SFW6U8zmq}r zhVktJ7V6h~^=pw6 zSg_glogwY@@-cD{I&E1*1X4vs1vpC=83pC)?#|@(>5isDRl;!P+l(x%N+2{ID$r%= zl-s2au0QyxQuHhO%L@_rHO{wAOYKT?r7)xVoY1b&g?{Zg13qMr?$*)fDcbAi&#P8F z=lod3<5-c1-vGXFH`}_XP7w!^vU4|I_?mAb=^h=gRZdls6xB?fT1I#0W5#LYDPe(A zE(f!Pzp`8QxfoF_Amr(b5s$~MIfvc)sOyIJ;BXRcbzR-db&s(^iO?r?lB_^Wiu#9h zGxIHNLcJ$~@r&|Q!-cFC@!Bt^JjvPGR@KJ#6gnBG`(ub`TkfxlZook9H6u#dLG$XC zD;Drq!JbJLy~R0A;j1$w=BHY?td|f+%SW_K?JEL71%$lkZth5GoIjC8Ms5Ob%=}jUOxa4%$qv33U*=UYqa-LaDzoDD8dax|wVW88IpDU3I<_vN1a zyQbzN-RA@Q$q;MIUh;4)e0xRR%->~uzb2XR%bstj+T9&*ZTY9AE&2KgLa0s%%XDym zwgRw|d<^rEmxlDYQ%(9(CdS866%`fh>g%~(&ojALL{lI<2s$?QfRjC2u;JjrY1q1v zYCTF~mHbdntP43sPP|45RS|Yht!g#Raz|y_h2yf7hoH;5#c}QKp9k)!ct>mRqg3EE zH#fJk(h@o6e3SZ{`V+rLWTC{@B1a`}XZFsStb8MT{qF`5V2O)L9*i;LOu+%W)cw&Z*ncn^1U~?CA8t>)t#$q>5LU z3@jV3)cHHqKo^?zboA(x@meh3skw!K7S9&@tsgkIeeg{ztzV*E2kcj9kak$2pmB(? zwWzncnc4_V9mpHm^WhHmV-8!An)4W;=d4yel8h{~<(n97{2Bn5#}j`aBB+h6M3CM~ zdP0i+F24N9ni`qP$m6EBAO!mAziGqfG}%(h{8G4bO3bKp5LM1CT%AlrvpMx*&ckBO zxo&|b-qWXuQJIIR1DKhZe$1C?0n5K9HQ1~;oXpclMn#qAcfL{Gn+N2nNSr!gWuQ-^ z%0F%g*m<2P9X}J+VOW{fy)xg>v`B8y?K~OAu0AF{?VMQ2^H3Q_l1p|pJ?%OgsU%2D z8L15MT1=BGWbqVE^Dr^R5^_5z<@!CDV<90SNkpMP?^#uU>(r9M%R5$xH8-VFy`;v|Z(R+#^L6dZ zk7wUHxj?d$I4b_2)6mgVb0V4~iA4ZJs*TKB4pOo1XHglU+upJH8czkmd04>$yMhKqVPr|#2lxj<{~N&KL)Ev8oD{IB~O(( z(6_W_C4l-d4WO-w6kLrwr1Z=5={{#0I?nw-UOet8tw;u9tY?&}u~WJO3vL*wPDdRa ztj*b@EQpH?V!)31<3~mhw`}&baS}xo|I(GHowsK8c~ssSUm0y!K8VrAY$};flm02} z3%$&j{XL=gJVo5bvjG3GdB^4EKs9)YxJ{_Wd?wohAGJZ^l;>kK8k@wBwXk zf19uMDBrF_wn{^lF85{T2(d8KuV!L7aIx-9vh8vBJexO_hLet56m(w4Kg{^>gD4ap z3ERu5Ro`CHwkQ$Le^=m+%rK_L80mF71Z_AO%}tDBYJY31E`s9Hl;0oPO}ZUvj=2+X z#$&Hf27G*cx-Mg){{IwXJuR zl#}E1{_%5_{In}cMG!fIjOrQ%BzXKo3r5{0&MHvykl~R1H>_XUPzV5S9*DG12y!NH z5@9+BSPFp>;4^#+O$ikUT}O7;U~OfHCFPon&+dV#2G)=+LuF|PlJsLK{cwJsKf|mS zof*gc=40EW@BLPy%N?QATR>Upyu$^5mdwcu!3u}c3d^Xr^3|9&bA!Wn?iYOzZ)DlK z)+3wq_+^MZBTq@%%~1>B|1`V@k^UXzGemZsz2WHqYrA}hy1Aj|?XC~A2 z2Y3ip)RA`7sRBN0`yWP`tIDJ`H7JEUHBd?prdWF%%b=}EL8C=?m+iQF5UvK>ct^n% zx|0L;2v%jvly&v+F|diSHVA# z2;Rzv=bEQ2x1r#avx2;|r*Yi327lNJbTw`IuFJF-8t^X{rB zK#E&jR%P>UfmRC#(9lBEdoZxut0xonIB9gfzl93fW@DB<&82G31QQU@vjs{G)mCW5 z3yT}WKV+L=pyiZ~H%MRaEz@G0q+9%l)Z%OkT8oO(1a)Edm_`U}{x!*MX|5BZ;}~LW?vts?NI2wS>iY);094%I>PyFpdd6G1 z!gdPDVEDCax9QSuB(EzC;GQ_?WL;o^Bc;u~?{f@t3B)@jqT!b2z7>Hjeuq(ez{d_;;;^HUOui!l7 zJeMd=Z@${-NQK!@6Mmj&exq5A5TF>ZGAbtSf11d*!V~X>$T7Z$H&V5`+rG_6PSD?> z)rx6T3n!Tm8GnN4P1Q(zlwQZ&a6IKiC#r0&zScygN7)pIV4^q|Y9w*vW^skd+uPSN zas=1B^Y$K|gyXm*6mquXKIsItkG`Z)v?ZmlK&Y+B*gz`N_`QXiTld;H)|)Z-FJGmO z%Ga8X*b`M6la=2GGr5RQBYYxbwH{w#s0CXoixb)61mwz@1IkWN4KmEw=TInB3|8z% zqnngLuFBXPdcU^1F-AwPX-%Hn40h5UQxOzt6qIPXxLOmx&Z~0&q>ucgQ+R05nb0f> zD`(44=yO!=q`Itf%yK_xL*s4;m*rT(KjK~#+DsK)yhPg*-Z|UW_lWR|?NcT$POqaX z9{|Sln5biL`jcn%_!Sa6W0u)2ujg@w{y~aosky!4tm*-w>f5B*FHyX4>N6Z??Mn7O zi{xZbDaw{rU$x)@J!qdZ+v@&q>r&~{r!m7FoPMgA0ZoY3ir|&J98#@dz@i^3`+rb+ zonCz14A5>5p3PK?6~8H?4oVfoGwP*%Hai{Wj+7${w^u=MF0q}an!Vv)3TVc2%jr64 zgkR*37Vd61zWnhELp}K8r9w{6lbac~hKu+ml0eXC$j|OJuG-`5-Eq1*x)|uJj$fBM zeIM}g2u*f-18>#j(}FR)SYx047n-rEGVB8bs-x1aAXF`}7%JNS>U}rcg=>N`jzSoB zDST!bBJpmzjHHs7LDr;2k;t(&}dVI`)8C;D~ zVm0*zG7=B>%I=HB<)&y|MX$kE)?? z6~@QYMQ^AZ3OPPe4Tz5!i6b85eik&%QCP|Na_gKGpgHpy2H4JJq2vEJCIFkX7g5gl zyoZYNTNpIT2;0ok^^;|3fzVK|ntnF=O3%v?h^>vkjSt&>=-#B7Fsr9raH)g%nwoWF zV~0MqpjN+0Dx3@c8C%ZXI-P`D6%7UUuyUB>aT_akbT^zU(3UblW?AcVK2oAwCG73b zzw6_+wp5CmaoCY*NZ&=e>Kbyv&7if>a4*!a+24^J7-}3R6TU0QO1YDURjGzX_@vf^ zg8^p$5f_GJ(12#4Wr2~5vsO)$k(E29zPP{Af6bXL#GW(BQCQ8X`a>0_62Zjc^JD^z zNJ2vew9`Mfye9wea4R7Z5Lgb36o=oaWGg;yh|c6?O04-csc*u1&J$E!J=zoVHKR$p zR2^|SqhwR7*9zK%;NzsKE<$~>iJ^ObC?T*_kC?GA`#eT#n^MGnSUc`_l!>J3VHLbl zvPS%)q4ofL>o#q(r_*Q4lkICzc$JEqZ>y((vB9BK1BX)&N2sZid`wlIW{w6a8;ywX zQ`}#;71c zzcdUh(s6t!x8%oF{yw^9%{3edPmh?kkO$5|lO%2vUzv=5D-yQOJP|j(3P>!~3fY9o zHm=SbUo1i-vaP9j^+M#KFG{-pH4mex&fwDhP|bDG?CxvoN`N$pol7W}&+tw((}>H-yIMe)SvkY!Fqwmpw}lvdN&% z$fULaTK~5nU$|a^W#i@gBPTaLaCbMiALxP=!O|h7lXeh+C8d$;;N&E>lqLd^$<%>_ zhTeb2qZ(;0*dh2Q?6{ zMh4G6AeZ$@S}sHM5Bf#>#Ht(rgg`%*zaL`9Cfpo>EVopW-rxVVear7s>mIZLB>Z5z zl7=$cU@Z9k+u?jKvo%<sj4Pdpk8=wrXj%@-8YH~|fIp5HzFb6I zk6lIpCv#zwGpbc|+CZylLIu|u5o1~F4T<$0vk4Rjc5{&=vDI93?Xf5<{=@ohqIzxI zgtInQ$ycPATz%*DoWI1y(8J8^W&hyvDwxxt)&7oOP)=d(=xP1eQK@}@m! za=3_^71NT5n811|=Yc0+muQ8jy@?KKB+VLz0NW0Nqmrw{js=}+;;tIv{i>!O?tPo} zUW4M=U0Xx>wQWX(muH6H@&V>LN4z@JB^9et8cPmKnd;5nrl+?2a9lE27_=SlVJ>WSq+4YYS*cD$V@;)! zmfL@Ve7a))194L}OkX&geC_TMV|%`Vf%RaFg_CdRayC_dWvEtFHWiQeC-bGW-#Tsj zc@RkKPfU8m3G4>K$V6aHGbYV#VO;przujvh^)4C0+o_Y6dyPePbOUxcGP4fH?VLL? z6t{51c>Osy6^A3rUAHmct8DPM#6eXBGFbzko;$k-W)W%0BGDY*zNDF6wHfK4z{ZijH zJy%@@()grIqYnJ1$H4#+8ae1$>3px~G0NZ~qvD1WZ*nuQTC|L0q(ULL<$#t*(3q6y zI#*Sq@pbJl8CPd_O1MM(p>-Gikue)$rWYVl+%p``n-_)1)SE;GRRVP5 zm58i*v+2`ohtma#AC?R04o@v;&ooC0Jmw-^?28 z>C+qdzTyRY3N$Y$w~~{vMMQk_yobg1^Fp*gO^th3@Dq%H2a#xnYvH}ABkCERRP)M7 zb?2naDI5KGDl^x(-{IseGcQPO6y5UztJ3SHZV*)4fbS3ns_#QDs!B1D~M?8+{k74dP zqHOl1F%d;i3vE$Ux5WsCmXk01P6GM(?Yq7+>R(lvzRq}B%X-?c(x@2T)*r&=T}9N3;on7hxxe|`vX8-C z^tiv|!kVX!*wwm0 z0L=;wNp@~I{~7EIf`e5q7(sptmdm^BdQrYnc;LRi@migIV5rMLHT_=9Ld?UWpwx`E znVI1XJY)$tSxI4jP=dd^SvTz2zg9LWU2$EN@Fsix00^BX%wUeh8<}uOF|5-$q~@#A zAQn#2=dVn$3%aa8?CP8##sIbvv5rm{;$ifqhh%(GYG1dDIUBO#8gG;4?O(xsBo+O7 zS+V}P$eAuGrySwzh4SaqU?(olWJ*-jD%*k}X(WyPxN<)V7|jtVu-(5`Il;ToOWClQ9RZ*tfnA(ewtV~bVew(V${fl!v%OXbN%9nW1|UMjs3@a9BB zL?E&;k0@Q!2tu|^fxW=5u;PF09G`9~l`{T6g|Ezy)kEaP72{rhx}p}fQ(KD0euXzqoC-}c`4CU#mZ(>YhSRpSMF zF-~>L5vcZ`O@=(JK@STug@`y49R)J??KvKi2oNq=L9uF6Xo<23g-3+=9R^ut{Phbh zHRGqOSb0j;dve1F_ zLix!5-XhX{x9**NgjY?+`SxyeHzuQz`Hgiml1Q;7Y;w`>wT`FBpW%Dxqw}?6*#f4C zYCqmbj*=4SM4z>Drwet2^1=1d%9YU2&Zq00b_S=P7h`#Xt+6v|g!SGH1lnioEX9i- zo!)f1R$x<(>he(6&z@>FERhJFc6Tomm-sH2F=~-^O1O7dXGgK=YULvXlIgxIFgiIlVxQnLym=v5^74G+bD&Nnej|lofQ55#}pn7LutO?OZV& z4@DOh>ekB3jSm{8p<3ZEd#KY>w@fw)*4R{~Z=9#a)6c%0GX;T@s)zgohZJaQDXhnX zyvQvLk?5V;tp0d}y2gDd&tWeXYzZacX3{&H5Q`@QE*ka8JqbEi{gOPN1jk5FQ+Rmj z15<CciH(i;5r!2C`8w;)f~2d0i~%$~C~P3~Mi*hgZH!e@u3K^L9y3PZC%EMyvV zkw5EKY=rl}s;M}B=#p}Jh|E~ay!qK6vu7fZzSl53!e2QWs&}#{x`byZsPr@ky0y|I zhhh&>DF?``7ZgI<)5cZ{-@UBCnKkhqPWnUR5ZWYPSZc)2VPhAZ4Q?Xb4Q~taH5RUUa|}x{tQMz-v3JC{ zXhUrt6TdhyW)1h52Lw>PX>hs13}@h}&_&=2S(ZBFKI18Q*XfbRK+m;PRnFQB6FRG6 zao$&XYBamCBnHr1<>BCu%F^37NCaJps0o=m{0eFFz*9SEE!OeO3|*aIykatApEC7c zUqy9dc2c03DH#*+y91)-=Dycpy12nC zRNp~wdz~x-dE~Q4CB5gXF)vrR1&n21-rU&(WxI%^0sv5?L*#hs{>VsR#xr}9apTB& zk7zliEcr1j#w}QRx}GAmi32Z-A(jmdH6cP;f%0wBV|d1vs8sFemIW)XVi#lQC@jNn z>7MMtgxseVeo|S*6-c6|XnF734$AkuyltThP=&|q8pe4><$aLy2cmm7XQTEmYLQE&81_#`l-kgZ(&R&&T!2?>bl7a~i3ebkpc z_(6`Ssj>J#!`t>!IC1jTv^n|p~VxbxP!Q8KPL>h+E0unHn* zf6Dx?7NCDFja@(Pn-0%b^!rREW{H6aRJ9dS2ntQcY*PL2RZrmwcb^O9rIUH`0V8)B zaC6zq4Wc>pT=5PI)nmj-UL-iR(wDF}r;?0Y)!2ivq6rar&!l?KnUDe`p$Fui&f&Co z>dPz<yxH+Z3t&5 zn$)M?*v5T79~*+WhpFWLBC_^nxk)EWc&smlGMj8ssQ6Q-sz(;1<7k4+I3qKO(S8^b z5J%m$%j?*a@~f+f$SbL(QW*2{_+R+>^N4CXoY&yvm1As1P)9jU4F`liRsFAe^O|Di zxBnL=;vGbzKb_-o7rHf7ll8nUI{##FdVP zO-pR*{zsIuCyHVdXCp#bHA?})OAS?I=?*DpCF^e#Cmoo;kM=GbCN*iZy+RrR$J*Y| z+sLot5Z#Z1ZZg5yZn!GkoWyF%0jHTour8g|BgKYwe6ct>a40{YP8^V{?Ef)v*pB1V z+`fugC#?>J?(es}TtxdG@TAf@y+DW&BMc_?>b1atb|An! zSU|&$k+LW3iN_8>rJro$>Rgw)(d#1L2$=R~#P^C#A4Sgcf6Dsmptzdo%Y-1ogG;av zXRzQd!5xD8-~_kep5ShS+u-glLvXjjo#0Mzhn@U(Yiq0aznOkA^?JJdo_lVe^YDXz zi!0cz$9N~&*R<%kT^RfPgr7ge{~wE-441NZEO568#;C z_>0eJQ%wbc)jWuaw>le|EPY8|<^oskp;P|*l@@|D)K31>2fJ>{HjU6h!!DEM9qeuU z=dZw*@@G|VCjJcW>96~MNJYt^+FP$@61~eV41}fmT@1a9HEhe&G-oGuCYA8$;?b(R z-rC)_0~N>524rLftX0=#&1rjN8Ha@T9H7vh9;mo)?LK zJ~kLsu^-yAqD}fdLS|sJbK;aS5w*>8B!k!@D|fQJ?@+=8?IgW``-cya7Ie_b?8naR z+MPZH>n_KEwsnjOLCtvI2xQBU2lje5`V3~N1go?U2n6ZS9VoB;^EAOrd6$ZJ1x5xp zo{7Dl6W~|%5P2IB>igf!Z~@2{GcbN;=y%e%0uciC&NnCgb}!nKQ#ayjWDQfFUImg8 zO7XJ`CcXF)Nut{2@-ey>UyOx9aiaPr>QTJZ1DL)NdUE&{_iKwc+i=^Z)<;p#X#K{D;svsEbopzf1+PWbc^9#o($qVje0~^QxBMZRMHGiH5?ZJpha8jN6~vE%~iKe&8?)Txfy(Ow=o!5*OPmJ zdLOV3r0u?Wu?a6Y&vOa{E7rz%=uP%j*)U&*p-)>cfXFm-$)usTKk`I>iqb$-4V$WC zx&>VXU(-SlL%m(LL|tc#FfmU^4q3!($*ThJqIhA}3B8Qcoz#025evIV`dmR`nHBUq zDk+_7zI=qnOIlITD#y1SsLET}}?T z=b4v(cWpmAlHY^`Pv-($L%n%Sx~hXjcR{NtKKSYp(wV~vDJ!$v5{d5B0V9{Y7I6Ld zo{les(#@5o(;@yu`}-3m&RBpNzS%W-_YHAEyHD$>0c%;_JS~1F^egksCcRzTe_hBW zTj77yT$dzx!w+2+z_H=V;Fi$tS&VWfl&ipPduR72DR0QHZGyi zgH2{9cR2XO3BOpJP^ih&|7~ZLYTm#4{q3SHztc&1jDV$R2l-};q-zQBS#>X|ES3rr zvruKlRsC_7=`2F4C`xiAA#)LYUCNH(4<0KGVm^Wyoan!e%&G=TFytbur)2tDT*V0S zKA067pJ!i_vlGsw=p8~G3Ez|+&^zTH2%)=dEZO@P>pt(^@)Qp&H8V#vXAX_t$-UnA zw`}@o%I`QxrHyrGZtM=|2z|aKB~xlRFJM=1<@@1YtQoAUeon7+$=?$8!i8UBr#+78 z@u5ST_#OGRKt<-wX5t zvJHxOUnf{7xNlIk+2sx+2o#_>Y4y{0KWun;s^=AoHkmzM=hdL-JpP z1rlN`$)M4USeYaaQW2Wb%$*P$>hi=NsG2sHDAM2~`hEU@_Uu}E#(!6#;4|)i@8-fW zBAPL#S9Q%??)zWFrqZTA>DF6AzlaR*Mpc`_0{=;CR z%>(hW9Ia1(d|X?^Ylk!l-n;i#D^5CsFEbCKU+SHLm?x!8NABg{zecY;53=Q7_mWWx z;@}>BT-N%%JmQua7}%8|%(>KBm-qPq#yR&Up2&6h6($f04@4gZK>msIYUMmmS#srfj%oNKn9Z^2b-V&$b`a6JZ67vWzF9_>={# zCTYfeEER>#Ndpy{E|?9@aCIpY8y-x21VZ8enjUBUj|guxph6#&fx%Mqg7suO#R}N= z$^Y$^#34UR>V|&g!%$}1q1;kj158Aup?fA|^|bI$^kl>MEc@^^Q~v>p>=o04 zxJnX|w~Whms-dsxTXO6lRepXSk2K(UOxI8W7v2$Q{?@Op(?a-H1!iXxBWg#!1L zpIT3@CzWqhVP->Rfu1oUiv~ZiM%#Q#JJZYL>=jMsoUF)QcrrItQ{TIlw_!=!bV)p$ zjZ=LERXC6Iz^XW~y`EEGEeoE!3pfrKKm0YTV3xHh=TO&;m~SBqmO=gb15<>?Sp1`V zKm7Q)T2sm%waIt3<$F{40>ju$*5eYEIwYQXD_Ax0;1xi;?(Ijq4UcQxePkMSms)%-y!l^Oam3daR-Iq79;7LUh_S^y&IklA zutMjeM#u~mH$!K~V4>n%w#nY2y5PX_noQ{5BA8toa0lkqB> zn7qN5pA%`|j89TCvAE4IBc+u|qcuI8kw$%A60w^l&`_&UswXS_Irl$Pi{6oy^f=-hEZ2%X(}C>22(2k^xJ(L#R_ZmYc6eMU zjEQT+ zURATVS^G-pg5^GQ*4L74D%PErngO&p5y`Wy!QrZK_*32fax6|ZjExswr|t=>cgTPw@dZ1$Z3?OdOL zEgEeK{Wd(lIV%e|&pQh4Fr+q3TWub%`Cb@8dbS&9yH82MmhgJpV*rTCN(|`0~ zmD((k6)R5c<~?FiTgIght2>L~Mz>5etDyoiAYQbZch589%j7L?Ov(b(x!DU`cVQ)3 zyiLXHdT`7+Of3cQIt8P+_xh| zK3uI)bf5WS2gJ8(H-4~O4@Xb7XgLBd@lqC4D`&<`jPELB=d$;%JBRci)%r4v<(gnb>-be zZs^e^Pkwo9!R8Up*!S&NQwSU3$<_8#5n?8BGWIugNRWISa!8~=n2SF5r=w+k4K-C; zLFJp9DaFB;Mg>}R%ihk?Eeei!Y{{8+kOm zz$Fo64yO`rJM%eU;YR7wBP9+MHi=fAQm)*d0snNOqqEhVx zigh4=8*{+s@np$VkD|DxD)!ma^#FF0 z^z)&!?aYT}5={dEBi&a9<50Iva*q^cUAMf~x2)ZtyhT+OfuF?k6YS_sEvWFNOMb

HU{k&m%w6VoHjJQ;kJm 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 W6;nPo4tsy&J6TC3i7GLppZ^P;t#1(k literal 0 HcmV?d00001 diff --git a/docs/images/basics_abstractions.tex b/docs/images/basics_abstractions.tex new file mode 100644 index 00000000000..ece06362348 --- /dev/null +++ b/docs/images/basics_abstractions.tex @@ -0,0 +1,41 @@ +\documentclass[12pt,tikz]{standalone} +\pdfinfoomitdate 1 +\pdfsuppressptexinfo 1 +\pdftrailerid{} +\usepackage[utf8]{inputenc} +\usepackage{amsmath} +\usepackage{pgfplots} +\usepackage{tikz} +\pagestyle{empty} + +\begin{document} +\begin{tikzpicture} + \tikzstyle{lvl} = [draw, fill=green!10, rectangle, minimum height=2em, minimum width=15em] + \node[lvl] (sys) {System Level}; + \node[lvl] (hl) [below of=sys] {High Level}; + \node[lvl] (beh) [below of=hl] {Behavioral Level}; + \node[lvl] (rtl) [below of=beh] {Register-Transfer Level (RTL)}; + \node[lvl] (lg) [below of=rtl] {Logical Gate Level}; + \node[lvl] (pg) [below of=lg] {Physical Gate Level}; + \node[lvl] (sw) [below of=pg] {Switch Level}; + + \draw[dotted] (sys.east) -- ++(1,0) coordinate (sysx); + \draw[dotted] (hl.east) -- ++(1,0) coordinate (hlx); + \draw[dotted] (beh.east) -- ++(1,0) coordinate (behx); + \draw[dotted] (rtl.east) -- ++(1,0) coordinate (rtlx); + \draw[dotted] (lg.east) -- ++(1,0) coordinate (lgx); + \draw[dotted] (pg.east) -- ++(1,0) coordinate (pgx); + \draw[dotted] (sw.east) -- ++(1,0) coordinate (swx); + + \draw[gray,|->] (sysx) -- node[right] {System Design} (hlx); + \draw[|->|] (hlx) -- node[right] {High Level Synthesis (HLS)} (behx); + \draw[->|] (behx) -- node[right] {Behavioral Synthesis} (rtlx); + \draw[->|] (rtlx) -- node[right] {RTL Synthesis} (lgx); + \draw[->|] (lgx) -- node[right] {Logic Synthesis} (pgx); + \draw[gray,->|] (pgx) -- node[right] {Cell Library} (swx); + + \draw[dotted] (behx) -- ++(5,0) coordinate (a); + \draw[dotted] (pgx) -- ++(5,0) coordinate (b); + \draw[|->|] (a) -- node[right] {Yosys} (b); +\end{tikzpicture} +\end{document} diff --git a/docs/images/basics_ast.png b/docs/images/basics_ast.png new file mode 100644 index 0000000000000000000000000000000000000000..c2d95c844a93b0284ca934d1716d44d1d42f7cba GIT binary patch literal 9478 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 literal 0 HcmV?d00001 diff --git a/docs/images/basics_ast.tex b/docs/images/basics_ast.tex new file mode 100644 index 00000000000..dac6a8d47d8 --- /dev/null +++ b/docs/images/basics_ast.tex @@ -0,0 +1,30 @@ +\documentclass[12pt,tikz]{standalone} +\pdfinfoomitdate 1 +\pdfsuppressptexinfo 1 +\pdftrailerid{} +\usepackage[utf8]{inputenc} +\usepackage{amsmath} +\usepackage{pgfplots} +\usepackage{tikz} +\usetikzlibrary{shapes.geometric} +\pagestyle{empty} + +\begin{document} +\begin{tikzpicture} + \tikzstyle{node} = [draw, fill=green!10, ellipse, minimum height=2em, minimum width=8em, node distance=10em] + + \draw (+0,+0) node[node] (n1) {\tt ASSIGN}; + + \draw (-2,-2) node[node] (n11) {\tt ID: foo}; + \draw (+2,-2) node[node] (n12) {\tt PLUS}; + + \draw (+0,-4) node[node] (n121) {\tt ID: bar}; + \draw (+4,-4) node[node] (n122) {\tt CONST: 42}; + + \draw[-latex] (n1) -- (n11); + \draw[-latex] (n1) -- (n12); + + \draw[-latex] (n12) -- (n121); + \draw[-latex] (n12) -- (n122); +\end{tikzpicture} +\end{document} diff --git a/docs/images/basics_flow.png b/docs/images/basics_flow.png new file mode 100644 index 0000000000000000000000000000000000000000..a027b5eac3e37db661962a9827dd67212bbcb665 GIT binary patch literal 12540 zcmbWeWmFwav@Ht39fG?BcXxMpcXtcU#$j*V-JKAe;4T{r?!n#NA;BKsIrrWF@BQfR zS~a>>Raehmt7^>IQL4%^D2N1z5D*Y3a7{1--1=3wzMjWDc zisgu$c5};>meg7zFQOW_T9Xffm-RU}WoaN&_#B7FBwzZ28AzoUtam zj4Bi+p5eEGqjh&Bt1Q*i&7P}2XA6AOd{4Q6sU!d1Et}5idC>vLP%`*XvVG7~_y@EY zI<(j*0#+BoXPx*|;kMGJjs6`L#^t|z5;Q5i= zd|{zH|KkGx|DOwBA$)NYXQ`C2ghx-JA`-rJ&BLYpV;!CMBVgvX)M+m<^(C}EQ- zI@goNWD22f!FPp= zZ&3HFi_mqFYJ#Ct--6CA|mVPgDdwfMb`t<;~elh2D#D$fZ zZV|a;a*Buw+JqvglBi-^Gr?zh{q+~JL!f!UE+b!;U^q{eC{F7Q1pWae1{qkHMF9ok zLA9X|e^%;AERh5rVswXapVZwf5B+=gpVqzowFhX72Pd_bp83}Z!W=IO1KqIw8-sU) z`B({?P;acxBTX5PTao|7toVK7j&JVId`R=KuYtV4T}+^<9$qyST7K+}D7&EERne}= z2U{&L_R4tG_2X4v!pU?l!awPgVrq9{Tn zS%A6k=&Ch1iJeykIwv3YM4BPN&7Ig7!@BR%F#rahKvQ?-6Ua}r+P?y5_Pugk@_O*E+@9Vq7M<9S2ealSpsH z-A9aP{&t>n|7PqWnjq1BAfaj6Ty`x78`B8@`RO!@PW$8FkZ*+PVODXiVy3E%iD=qq#rvD_#0m_hYtsqYg#Kxm z1AqwKPwO8iKsi657C_x!b1o74GW~cUt%_rraDTsD)nPImTvV$nHzpZUt2s|&!()DT zs^jqZ>q>T%1|{Qv;|Bme%?$O#)ncju zJ0ZD2&`^&m#%=Us;XCKo_apPfJe@Ba%%m2&8AOi!U*iElYCMs4{DGdkU~g$=lC)#- z_Gf5ipcVNKQIzr$;St=&9o>#|Sb|jJ{t#YS)^#JSl-ds% zF(q4Fl0SqkOxI4oaToN)0py|B%4|^IpFK&%rF?0%HAd!TgK}ejOOrhDRRK-Rq6eWA z5>gA*(pmgTI?WCDQgpS&H~{NLy>Xq|6mzo}6(u;n=)IKLdhOOU+X(B_9 zT!|es$2v!=-6^%AM3O0@-GaX7`4+O6$=eicIu?hqi1e8{Dxf0oIFdA~5sjdBc)G&Z zHNMG9FgKZ%N`&N81peRb*gg4w@@F#7XEud_ftgO9m{8o`-zQ^XL8GUq_qpnRQdL(E z#bMGftf+ujDG#x@_i(#J|~~_EuLT6A%!*4wx$E*8l*3JIGKND6i^{4*siGs}T&Y2t|!@e58py z0q?+~@?R79^Yu+l_gUqYm6g~Y<{b_08*Of3AJg%R3k#AFsKogvO0?9UQLi|@FZXIP zho^wg3#U5k&T8s)u1tZJkuf|u`Rl^M!c3V0?&eA3+phzw(Jx=zud5e^i3AxI*)qdy z6kJ_dgN(dTaB(wi`onz$mN{%zg?w+J;|RF?%IN@0H#ax0ch+mwmK#4cXabEM&#Nkb zGEy#8>v6nuD5`j&>QO5(;#lksM%4+Dk_Y|wS?h=MnQDLS^n0Kmj>QKHm}Xgg92EpT ztEaZN^Iau6eDPw^gGl7_)uW65@;9fSQ^<82f`HSu56YOO*{@l#vgELwEwORG{RMo_$4~kL+bu7==BDUL?lpAtc$3+U97w)B?Yqp z!Gep9QTG!of8><(wz)Yu_o1Ht-W~m=#yh>H{-3EJ0KwP=1qC7Fu?Bl*!=aJvS7`#C zE{!Y}cNUfY_8A2RJY8-)uxB=AV``6)2>EfEoLUn!dY!42NdJ~f<9zA)e8al}Ee&K- zm%y3?BEID5L{-+hm;Z)KQ0zZreetJSa(GEkPR5vyw5|8$Qh?E#?xsa`SRdarAnod4tciL%A()m_}iuNE8l!-MW?31 z@0B{vm(%1Bai5|9aI>mE)Yg zvDp^qON{HPKCcd}Ii;ebi@GYB3S26e#UsqQ7W4afe>1c$gXZVwAILui4_WOKwz9Dp z{ep%8a;4arXR|9RDgFJB)Upen7WwEJb||i-@@Z6NSbK7eD2XXa6kp&*LnQ5UXvMuO zUB^&2PVl`u+Ih@dJ9e1YktMGj=$-)B+L1AJYx1-fI~SD}LJN-sgs1)iPc6Z2F!J{; zS2QPzzv5C+mC@2+ODJd<$^JCofSyRMS`jy6db5$% z-bvyAb8(-s7%boTSxLvHQz+KoIko+7hsHIByL&i{r`h*^_ZDhTq26lz6t8dFN7x`; zHSS$;3$m|Xi^4;rO5>8&?NmDavntK1=|LF+HWU=KKM?2;W82WZ8HC0snmTE*kX}q= z@ew)N_jW1KH8S`I5TBBL=wKg2+X;&CienW^wRFGV)cJPX2DKjqUb??X4GqXdwf^A6 zO(GAxzI~KX#rhG$3sZ!vel71F05u5X&0w3EuB99I2Ys`sf-q7$xF^k%!6#;K+w4Wi zoDtT%t&xtTHV5{H$`?1CWh2iybdv0W_J7%AXu>Jgrd(VQXu#CdZ)O|N6Aw&SEm*m` z9J;oSK&cRw=gH)7@bh53NRL3;8{);+`VBMYFL%I6o$h%{P5pZHX&?ah$@m|CJzXaPabq|`lf zB1x|f&jEWu-MTKJ^i6RceN9ZQm5X1brD11khf#;dvTF+eR9+@bX);w*lxWEaHEnCB z<(%~e1JWFMd5?5wkEHwtj`LsF` z72-cU1@Kt;Qgg&xn<4poL|}UTD`UAzaJQ#(_*CALFRw5Js z%&7eYeL@dwI{RWhuNNIdxYv(7d3nUUsNB|A{S8^A&!74{6r3vDxR*P&c$WW$0bTp5 zWCx3|Lq@S$Dnp~C8St8UfEd}uQVdXdCsh(s%TJH4SDDwBv|m0UaCR#3@fvu}mx0%p_(Al%>n1QiwuGe^AFS4vlz=XD2gPXdp39>fV> zwA8@UAf4b# zY2E63-r_^_jMOg#ezs)}AcQdfp5>(0%V@C+tU_9?BU*6Qg#*T>AAD}7<^)1>Ga<^4 zbo)eo6}DXoW$@L#9rVW6%Jvv{w^<7qZkyD?U@fgJ+*Q_SOpL*m#;tbvZ`fT?52Ll% zu?lqS&AgqHj3z@(Q} zArAFx2fB^9>(xZUYkLnv3gkB#s7d>NHI959>rdfS zd%{B?Y!Aii(*|?N{C!{@Tz&d3JQXsr^BY78e%mXU2AtW~sLOSwu_PEj?+g2SNZ&Nqn?vu(A6 zmaZa&e$py-RI$ffu!d?Ok`pOdcPFc%E^Y5YSN_II1Ppq8UT?5*M*2}@bL@2*^+YVa zb7x_5-Mxg^#_QvXp9O!Oxd&`{O!vvA6t8;Bb32>nNJJ%sT#oky6=kDx@}g+W>(;>w z@m8C}7p?w9w>vI&dbg6?)CPKuG-Pr!p#|E^7nUYRx6Ro-nUP~7Cw}g1r_OehiU}-{F(2!xx_;|mxR-v7JSgG&kvdP*ae?IaxAL42 zV-X~V7K_J6qe=vl+?0Z$oGN^K7FqT>5I{ zCxcArB4{A3f+MWOY^uMd{^}izuUOmG#TO|kzY`5=ErG391-%PAR;d2Sv)kbx$0A?| zt`iaN6LoOfw@&RJErvn$HK}<-^=g*eK->&bsE@QNSZFid_=Asx${Zr`k1p4S7*`Y4 zbl1@8{6R2=L*T0^&kFKbZVB##At9tfSgTE}dar>k8wKDmincFF3o9DK&fDeVR+GdQ% z+w`_*7x8d5!`{0>e9czHZa{5n4N(s&K;nv$Asl|(1*&)=iyA`?h1a>+x%OAeC z?dfHrlsJzm3wi`)zwPNi=+_8$@WYv$V1)j)gzfW!A2X*CgcVjt*IYk7XYDQG_rja( z+oE!jz0IliHS=$Yz7=>o08bbIlK}kX0$8}@dF$b^%7NrQE)C9d!4gU+qkJvmwngl@ z=L0^VRyPgty-J66oRBYHRDl91l@gP4;go8>Ih&S-VI>f^Q41C8(<1Ss6sTk0lb%8! zlsXE|Sp8w^OKB9?1}7xVVOtz}5A4Xft34KRY$4Aam5nU9sDJbTWsZT)MlXGvTKGS+ z(4Gmfph{?XduJm!HZ#zhNIqJJu?k#BLZ&7OV)dM@@Psb^qS_Om z=b3)zA@&Bwn%KkIJjOpBzZlvKvR0G!VwZ2#^hI7y&LsAZ`Z8v@$A?OwBxB|vC-K7k zX;a@kqd?`03p2-NHjwQ?aN5u|wR$Oe-pbDW-i)hqv#-}rjXb{5QVbrz#oW zNn+yfi)ucFrVwU@EZ90ySQmz=ss2l?5S%vHKKGo`>$QCa*=xQAYvyY=FGH_P5)*p* z61G#B96cdU{C+2`GG(!+_EToY!wcM$s)cvCfvw?33zhfJ%rXb-+mXF|!lGQrNc!ph zzh)IM716*yLNM%=ioDY9cS{#O!P5(k;L2cl1S3TW!j-be$-M#02*e*5pLk#-1Jft)VVP4eYVh*R+@cx zcRu#0eSn9Bnueg=SYE@&+ri|A3{%1MxJnMl$7CVhfKn`Zy%2bRL9EO84u55hl5Tou z;yK_N0RYc6tA98TPQ<&~eNWWqvNN{y*^xHuQPevnsP45xkk%)d5)f~?+2t!fcIL*v z&6#b>DK;%E1WdK3e);;yBodhzOL3`(Ln&~`&g|mK{w zgf@}wP*QWslsn@NPBw#m?ZgW5;PZ0-_rtYi%XvWY)#Ssq+RzIV<-3ZxgDPqD76+<| zvU7-zF6tb6Tj6XaCZiH^VQp@B3S^d#iU%aZ2OimhBI87a9@)wWsg5%ZMW@<}B#G%mQ$(dC{rEj*| zdq$lGHDtGkwWk}~0M)P$I6<+07?YUN2i+7dr}6k#Y1x|%jw;s)$7*<|tCa@Fu_wHx zw!qY0<*^ggAtSp?Rohf_J8Y3tXW0Jb&RR)kZ;%gp5fl!FPpu-WLp78Y_@w+~VlR2NZ3i5u_@<>vPNS*|#1GB2b zcML4*hGqw`xWwDdtT;?qzuC3#xLbjDdI-#x7e)yq0l%SX9_&G_`bF!EX1|I!#?=D7 ze$r?CWL30&UBv5JP`qlq8`{-p)U%6Ib*`A3z(o$A4|sPplgL1fsuRaM<-GMX97AEi+)y0iP?p#f!L6IH3+0n}Ardx5UH zY1da|ERtLrp&T65ri*rL;`GRa8lV~A8*j}K<+f*evN=cg!?oxD18A^Thofr|5kdFJ z6lQO>)2%9$Lj`!$M#9?i(C3hKa&h7M+}oGI>j#_DJONqtPR&rm7LLEgAAqUurYYb? zYvWQUvS)Df6L{RfTr@EKn|`2Mg7RoU2eSOx-w2D{r}5FPTibeuCl)-l!84Y&ppKEM z3#-5hOgGkAo2g<=!6w9*Ds+C2*JLv#sNZpXD5`VA>qN~Utd{V{C;v@-41v;Q3kHE} z#-Onsmo-mftyxNpC$F^`>h%WiXDY*lkzFnZFV7CxSG+?LX1xziuZmwAgb#wxHJ4q7~h?&drf@k%4@aID9uUNTVM*P3qcIga(1!bmUoe{7O;5 zy-#|EV}8131g36>D9;7LP`!!Em0I1HixPEFu2)}?(dulpqxT@=SU1~?(~5bCGrsT! zC`XY05}%i2lTYvJp7Px!`A=RiDcll2#Jz&MNOV?T^g#KR;7M0P z+X8|F3QI|6c37+#5>I&Wi=GI7|Aj6$Zr?b1_Y{oR3)OR<9mIlp=*@(ph0u(PA%s3M z9&%M@Z@+nq$f)8L_66J0B;rnlvOU%bL#^7t^?pjqTIkH z(TlPIzRk$ckY<@fdD#1Y=`qt(2iV{x3~=fc@qOci_r8bgFZBlro3o@}p2hA^KJ?K= zC^MG?Q}y=o&>)}v$d}%-t7YBage1-|t4|5ohxy;Bvk#N@!erAqV&x{ryjiSLajaJB zR}2UOqoL)pR^qyp;R%)Fq6V}={YgeM+eFLFQa*=K!nX48^Z+d=BDq-(xxX65&_`7m2mXs8I1Q)I(C2fexe(PCS_tK@!2{v$=$F}&9O}U+j+XBlu za2$e7*xtyiRKPJG%Q@xG(VpBwe*XY$vROZ{DFtw+6yC`2`a1A|W=3PLP*G^w+BZiw zF<m8r)q0ZLYOS7qUOCgKmI&&6r!;wL$o1!Ut6bb^P7m>q zo^Df@j3@?-6@UI)J|#ZS0@sLHWS8cIp;0t5;#+&y; zkM+L2q|z;Iq2s@%oD)dM&{VE<*C8LlN{OyCXseFWKbQDr*L$EW%dfs#_3)KC&dXb( zejj$X9<#<%m_$cZu^N>h58t_dKVDlS@xs?ZPx?(doOJ@_{DgTKDU5eo9a~xrH*>%h z5ZY)EV4SE{C$dnZH&hw*ToQAA_b(>0BMXKJ375BJT2g&P?pgMNVyW(?zd2TMeLMiZ z!OukTrI=@+*CZkb<<{-{B+UIvBgr0rMbV_F0Ox~Y0w$HbEMFVpX2xEkb_L|TTEX_m zc}YEJQdG;2c++izwQQWpaoLYxrFAZ;Yz+fy(xLarH?KhJym_?0toZ}1e+9oD>wpaI zp`0mM(c=7`8&-=C*WhG>UM!_II*B3n+k@U($rpM0>P?ltC#nW8em%6q!d3`GW&8~5 zH3dSvHAC=gjf6)fm`M-yTz<^Cz#A@Juz_chZe#S&-f@PAMSv}qv$cJ{c@yQT&9|bx z{e(iVK%pg~&SC7@EApozywkVxofx!%n>YHY!&_x@C0o+-6@FCW?3RAfm-6e^3uyUN zbywF;9_EqqBGqxM66<%;bIL!adLB@zAOL0U2$o0GMsQ8wN?TewjL}^PYaNu(^x12* zc^!B|L02G%sjF^N(hyVPo_G;zl9?xTFSK@axfMkKs)T%OOlnGqDsw6mNS7dV)9p<+ z$Y#*cdX7Y7%n8Bd!N@jviW6u&V#kCE&UZS($V&u9fP@-cH+^IUb@t$oQW`%|e*oMQx`ZpA&PB z%OyQoa{HWtP;txk-#%6Lckca1rk3X4O3|B@R`WQUxa?kV77ttc=4obTRB_cKR}ZB< zkjoW4gR1P^*WQ-~aMWdK_~d*L zxVX4J^%>I3FORmiuAny%u~}xm;-Ayq&2E6KT#_<=|I~QP(L@&5h2d)&R~pkIjDSn4 z^G0~hA4*ow6w6Nrltmrhk`e93JOSjYfDPN4!<2!SL{9e z?=3re5H>eA2lO9QjWw))oC8pZcvY7bG}BsVo5t$5l@>@e$`#GBXae(3Akla_6BO>kv;8D23W4eS>)!$6zu_BjRprf%jo?pWxWVf}f4##q#%0YyOFkOe zq1H6pd8;SygY@gy0iEVwJ><8@^Qm?#-2iW611}diRHE%>tEcMGdU{o6Q%Y)TP*8-` zv=|1bRS#$bDXhEd<>{&pH+xJ-9G&JAz1ot#N;#u7nRmQqTz-}DsdiK=wk}Lj!tvBRlk_Ymo!*PVr^mj7hLloK=P`I)|XC^^~ayuttc{CvHbmOI-& zG;|OLNY=rvmf?R<{zX!E{sZG2K;uNqQ35(fi?OF2j5p-@+|qV>vP7d@4*{MFs6xxEAHP-q;sDK)m87ysjv~ zOfOkBf6q9CvTB>NlE^A?5jVfbR^Ja3iE!v1MrMVuTQoN{?Gq2>@CWG?ro%XRF}2jY zH%e(27p?;yC>XjMJ{--abss0JvYJ{KHN67MX%sAu7z@lkJz1A9x@#J1Ja(;ow4xj< zN|gURe|603CjI3N;?y#v^BR_ zz^dL7O3ULgz*9t83Cb#Gce2bL^GH1zPqZ7$yp>N zdCiJ<$!VwDM?&0ufUv$kh%-5aSPrs2{w1oqX_g38u{N6P?W<(fF~*r@r)z9de5tOd zFqi6s{eLBjV*3AS7eD2W$vihiyRqm#&i68v+BAxp?ASscK;rOqb*vz~DsRx9TTDpi z>tFOH9Skq@@6mYpwkO>t>0?*F6pl*J}kduw#0vOK}=L%;b&Qmj+{h^XvtAV2UI8} zX7w#YptCY?Ik|->AbcbIRqflDq@FtztK1F;K8hDV+4K?R=Qvepea408+K#b97z2$+ zg)VY-uiS(7$k$F!plcke+^+L+7D&zp0_VtRH+X|fWH4uc)zKxJM{l#v!%VU~_c5%Z zUpo9NoN++vApk%w$sFzka0Z7L5Tn~#Tcb6~9HI9!FH9gm#vA>%Tfq7|3y;pZU(mcl znVTZ)lljmn`aa9lwy8?E`$LFrbpyQ^N@m+rEtEMR#_c2?LHMnnM$#r>*ER}8TiGF` z>P5%&UtQk-SG+2VdKkS3HkUUufJ2ay zKb+)yNE=vgXZ1oFhPGPoAx>`ApOfe=4@Jeng+kRhwSSXiW34BPlh2YWS#wS`n;$5z zK2}Ec=FBwf_LQ+N*F{C@{>y+-gzo0uxx?~~%GqV%dlYb|HCf^H$I3fKa=@I%O+nZL zwH*6eq!C>Mk-O||5~uSIvslk>ePJ~VEC?qLO1bJ8C?aBClmTiqOcKxj#s!QbX`y@{C0Zlj6meLku zyQV(<4FTG3_$;$uZ|ngKE4@!6ILTBP=lA`Z!DFUv(^|uj(`5UR)7!d_h7%XK zsMFXx#}$9!dyI|S@?j%G>nO55f|)_6uA$>9Yu9$9*o8%3Q=jjT>;z6Y+CVPg5L>q7 zFqS^&N8al!|6*%90fd5fki}YvZDfiHMc*l*BGcXQzks;eaxtu~E`JP@8N8h%i&82N z-htV2QsIq9OvBahb>Va4`eJM5b2hc`TV4>eyOz)<_26^2(&J81t9pS$deUGURn$S7 zcyhp{;XTsRVDxqTjQ{?)ogc9sI{9RqFA%hu6l}*?V87jVkh8jb~h|~Z;h6ZnF@2tt(}{nTkig@7`DF* z&AFGLBUVEHs6XeC7iDKB(BN<<4gHvpn0#+EiR-1IT%@;l?{P zsT}iCne{F9+K4w6f*kWl=LM=B1k5|=O9<`d2&-p;;?+Z%{&#^2&ISlhxzu3#Nu(E* zh@Am!HliNSA+Sh1xsnQL!aSu~sRPtqka+zf2hr7uh_s&`9U`icXu2K;)}W1OnFUK` zy?I^_4vFsp__qbYM3p`kStVou9#`CeMub)7Oumqh(tS27$>~u`Kf^wI=w58SsT(1* zOM7I{L^jz~d7<8^8sp<+s9uU-Z8}OgHWhW52j#wmQK5e zj3$)Qs>G2RBV&0W)X%Jzka)GyOK+8hi=n293TrS29YmzZT1QyJPAAS_u)3l$ zC{Xo-FBM4oXLT{dc&htU|4}97QcBN+Uh3YCVhm@8HJA;l{%bE-Pl?Tomq4GHBpCx0 zm~GkMi1Qa6e+sw$SEkQjjq(3Y$X^TbPAcwDf5cP0PWSo80)(8DvSh8eY3Tn0-O@lW literal 0 HcmV?d00001 diff --git a/docs/images/basics_flow.tex b/docs/images/basics_flow.tex new file mode 100644 index 00000000000..53b55548768 --- /dev/null +++ b/docs/images/basics_flow.tex @@ -0,0 +1,44 @@ +\documentclass[12pt,tikz]{standalone} +\pdfinfoomitdate 1 +\pdfsuppressptexinfo 1 +\pdftrailerid{} +\usepackage[utf8]{inputenc} +\usepackage{amsmath} +\usepackage{pgfplots} +\usepackage{tikz} +\pagestyle{empty} + +\begin{document} +\begin{tikzpicture} + \tikzstyle{manual} = [draw, fill=green!10, rectangle, minimum height=2em, minimum width=8em, node distance=10em] + \tikzstyle{auto} = [draw, fill=orange!10, rectangle, minimum height=2em, minimum width=8em, node distance=10em] + + \node[manual] (sys) {\begin{minipage}{8em} + \center + System Level \\ + Model + \end{minipage}}; + \node[manual] (beh) [right of=sys] {\begin{minipage}{8em} + \center + Behavioral \\ + Model + \end{minipage}}; + \node[auto] (rtl) [right of=beh] {\begin{minipage}{8em} + \center + RTL \\ + Model + \end{minipage}}; + \node[auto] (gates) [right of=rtl] {\begin{minipage}{8em} + \center + Gate-Level \\ + Model + \end{minipage}}; + + \draw[-latex] (beh) edge[double, bend left] node[above] {synthesis} (rtl); + \draw[-latex] (rtl) edge[double, bend left] node[above] {synthesis} (gates); + + \draw[latex-latex] (sys) edge[bend right] node[below] {verify} (beh); + \draw[latex-latex] (beh) edge[bend right] node[below] {verify} (rtl); + \draw[latex-latex] (rtl) edge[bend right] node[below] {verify} (gates); +\end{tikzpicture} +\end{document} diff --git a/docs/images/basics_parsetree.png b/docs/images/basics_parsetree.png new file mode 100644 index 0000000000000000000000000000000000000000..ff7a17e2bd2f55c2a53bcc0567f44ca640fccca0 GIT binary patch literal 23196 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 literal 0 HcmV?d00001 diff --git a/docs/images/overview_flow.tex b/docs/images/overview_flow.tex new file mode 100644 index 00000000000..ac0afde5fda --- /dev/null +++ b/docs/images/overview_flow.tex @@ -0,0 +1,37 @@ +\documentclass[12pt,tikz]{standalone} +\pdfinfoomitdate 1 +\pdfsuppressptexinfo 1 +\pdftrailerid{} +\usepackage[utf8]{inputenc} +\usepackage{amsmath} +\usepackage{pgfplots} +\usepackage{tikz} +\usetikzlibrary{shapes.geometric} +\pagestyle{empty} + +\begin{document} +\begin{tikzpicture} + \tikzstyle{process} = [draw, fill=green!10, rectangle, minimum height=3em, minimum width=10em, node distance=15em] + \tikzstyle{data} = [draw, fill=blue!10, ellipse, minimum height=3em, minimum width=7em, node distance=15em] + \node[process] (vlog) {Verilog Frontend}; + \node[process, dashed, fill=green!5] (vhdl) [right of=vlog] {VHDL Frontend}; + \node[process] (ilang) [right of=vhdl] {RTLIL Frontend}; + \node[data] (ast) [below of=vlog, node distance=5em, xshift=7.5em] {AST}; + \node[process] (astfe) [below of=ast, node distance=5em] {AST Frontend}; + \node[data] (rtlil) [below of=astfe, node distance=5em, xshift=7.5em] {RTLIL}; + \node[process] (pass) [right of=rtlil, node distance=5em, xshift=7.5em] {Passes}; + \node[process] (vlbe) [below of=rtlil, node distance=7em, xshift=-13em] {Verilog Backend}; + \node[process] (ilangbe) [below of=rtlil, node distance=7em, xshift=0em] {RTLIL Backend}; + \node[process, dashed, fill=green!5] (otherbe) [below of=rtlil, node distance=7em, xshift=+13em] {Other Backends}; + + \draw[-latex] (vlog) -- (ast); + \draw[-latex] (vhdl) -- (ast); + \draw[-latex] (ast) -- (astfe); + \draw[-latex] (astfe) -- (rtlil); + \draw[-latex] (ilang) -- (rtlil); + \draw[latex-latex] (rtlil) -- (pass); + \draw[-latex] (rtlil) -- (vlbe); + \draw[-latex] (rtlil) -- (ilangbe); + \draw[-latex] (rtlil) -- (otherbe); +\end{tikzpicture} +\end{document} diff --git a/docs/images/overview_rtlil.png b/docs/images/overview_rtlil.png new file mode 100644 index 0000000000000000000000000000000000000000..f79c667e8b4c4c043bca4085c02dd6292dd3dc03 GIT binary patch literal 16034 zcmcJ$Wl)_#uqKQJcXti$?(Ps=gG-Qu6N0-RJP<5EaCd?xxVyVsaCe7&xx2S&_s6Zh zTVH*r3JxzbZ_iB6Oiw@E&qSyy%c39>B0@kwpvcQfsY5_O!2y5o!NUT-BfW0E17DCX z>ar3Lm1D#QzypkxxRN*oL`@vhv*`!m8No^JvkL?SYWMpOWWQta7YGOuUU?~TO%J1! zRRn|ayKT7h6j2VVPd_f9>(#-R=~M+rMEq2j_~U%}1s@7} zzH4??i=Ki(2xuy?N{SC085x>o8~~JW9vp8_91(mlS__qPu9;aVD^BbsO!2!C7Mrk~bSdeuNp(0X^NE7*6Cy^mt1q z1NVRVFwujS6(VlF<2W^{!+xdYBrW1)=~aYr`{Nmr$WBL+t%J1M@8BI`QgekpoX+tNlFb&mjwr!{NqA-ecd)8t-+){ zYGJ+c?iwnl^{Lw(*J2ZcRUWYm6&Ic9cp4rzovzlYzUd$KD2|@hB2yM&%y;#NAu5of zaSYcK`Q556rpW=!uo}B6f-6zI*sl>yAvyQ1>tEXwQUp|~XlucqhGmSBo_MELVLbM0 z{g5ZZFK6p!azva>zTRr|d_mbLgViL*5p$1ICg}w5zvhW%^Cz61_P@1UH84N6t|CL@ zWr+Rug3VQbUrm>@JHshSZO00|JLZA9Y%VyZ{v2?vN7~XA0$~#xeTZI~)fOx>TJGw;@S$hOkPFf$+HE!w zN*n~0x>Q!<)#PSB(?ufWQ?73w@8Kp|sr7)D(m3AJHLK2G{ftPOFQnRsnS}Z-m{nav zgWbFj8JUm^-peZ~aq4(N(lyWY{ytb>;d#f*Ku5ut1;#w)k@Dlw4~R@>oZ$>Yvrg(8 z)yG!8j~_o$844FC{|w3x;rm!X-zigtpr>oOabALTXc`(nNi^|P#3Injiy|VTh>lMf z>^b%@|4&?#_)3zu9;e1mbpF|x*>o-Dd-LQ z(a;XRRwJs5u|ZoJ3%(rcX?k3ecKr?(K94uh>ThZW@*k#H$P$LPGk+R$8g1VrYb-3a z#Yrx8ZtW@{*KkX(Yw08g72-c1z|pmz8v0bNL@Z)5+OK@s%VC; zIo^i6ztuy`?c!R_w=+)Nb(MSBbC4s#3p7`6f7Sy>@*54wNqOSp;)Y>R$pCf*3NQ+b zZHa2cokh>oH;GlTI!E|hWbDt4Gsal=oDYz%S}I|evqrMNBJbkAU+U6N7Dt!Pa$M}^ zSSsXjARAW%Jn3DPCCS$7#N<>JeXipAby4Q=l_9v8|NCyBZp!O)THHt-BcHbrVF|3# zM2!-sr{4y~DfKgD>sY&L|KAUUbEN@w`J&mi1Y6v~R{}5(_14U9(jN3wIMje`8^W5* z*x26(A50ew3;xbn*$Xg=-VBJuOb2Y63NEWrbTYI4S6Ug($oHwJjM#;lj7CTA(1XgI z3IP`OS7{g5t|sSg6BCo{L`*eM2Vf@uP^Mu?(VgGkYAb+?>j2}FOB@vu5uc9LBM+9+ ze0-M^8!?P4?GnU?5f4@%d+!8>b4hN;E==xJ6d?4s5*IDl1;xV^O6{Nz5V*+W_v`_D zs`&$p6U_m6b{L}wxw~Q+wqjBRM1TQrO>8O(EaVTo<05Bxxwrd3=|%7C8U+7gk$+xn zhK*PVKlX0T97WOy24f?-Uo59xS|C4O{X;GOU)-=ztcD*M^xv(#BEP*ddG1uO4kP-c3zv$) zzgYw+3oM{h!m`uExn6{ji6ixyVUME0yNNDKbrkId(O|~scPfQXnv)=nGz`)|Z z3eyS6cnqxLF$kIFnD(9qS^<+*kYTNi&MSy{$LZwis-=Jw3lFEJR^xFdY((=DPeg=@ z&3UUy;$fujPt%`{$zF^Tk|joJ&F`>$sA6)eay8Aq{J{9=X~#Ih(b0*lhD^w5P8)mu zyHPFY*WbE})w-iT5;vi`OS{jXDj?u|w6e7-H*RiQ2!+o4E~gn8p^A==Pq$9_6HM0( z3{rs}7~~iyy1V%Mq$gs%_b#!R9X+RGd0C&Hf^vuyP`0|95U=UQR<?fUcU}E?S4gCF8kR@Y7s?@|_t&KiegPYUa)|N$LBik{ zxee;O>O9|TBA!P?NhM~zcLfpyxyRlO>4`#Es<$uCTTV_{2NqGEFc@AM>BFnZXZ zu9q4gXdVHNn3&0(`XUqd;BM>t_v~--^aF{CWSg0VpURruSwGwIL4pn=;(sP*Yq9+O zl5bT=E?;(R#Bxh;xFceSHr4x>g=)O=@5B1%<%?#oYV2mPlHqc9u?$}HH+RYA`M>6U zZOa451W~;D(IHj%I%BXeLM;=myG}m*qj=Cngq;KVWGy;|n#u9tZcg7#!E8aMq1Ff% z2laL?7Uyw^iU(eK+o2d;yMtL65?M#-ftf&S3pN5-jzl$2XTKlM0zJ0G(h4aRJTZrn20Itx*DztjS-N-RZ$yFl*a%oIuXVoP>$XPsN9X{4U(g~;;r{I+P05?i zimwmSq~6tfOIaolEh!l(w0`5CrVN^(Fl@e4hi?4lIE=z_9qoeOb^3HCq_FfN52BkEYJE+hPWp!N372AwoQWL*L|Vx+;*)+r^%>#p-GnGdW2LMJrM#hG72BM z*Q?N?3*HPYl z^Y;z!rD!aOF8*9O5S8X9yicT9HPQo7MHe+)_*2=)0RixJHG?8d$kQ+tY+QmOl)O{B zAVvi}O@h{?Qh%+3w=epv?=tZoZ!xz69_=40@OpLiscTaj;?v`r*KwP)m$gZYRhT-lf=yoO&WK7ENL1KwI<+j6yyL>h^f>-pT8S|D zN&Fgt-9ZpF<^FN^)5m^V@pdh$RJW_{Ff>BC9SLaUka!%y+>q)I9 zLS@#CxZN0DEFwGd&5{L^Y*GEeh(;s)*3rNIORQ&#-J1LHyLwc?fLz~+lrL8!Tkq<2 z?Pe}uK16LneC#V{wW#P@`9os-G*{CRvG%Ug%p>IarCubRg>G^kS#1lfNnxS#!T?NRgxdYX z63zjw2vmx4|7N8$R*PCQMtQ|@_N|tvM@4IXX2Vxst{OkEq0!lv;T=Jfhdb}?y`2=7 zgUPUyON;+L4i_jP2&MJpymt}q&{H989g4m1vn{gV6GhOoAYJH(;!P7fuyFWjUOhCt ziHHsKSg%9hd7pxK0cxu26`KzuOR(*W8-Bwz)KqC*|G-6qobs61EW_iy;49*Y44U*F zs^d^#&FH+S$&HQ5x6ylqJywgYz1iC8vPDg%bYb*XSmYj)BCiPzRubNnm_YLvQ*bJF z2f~IRA>9!S8EF%G!sW(T z_1C#Iu1DOdKZSehg^Qevj7T)gE*YX@luUG6gS-U9$I)G*Q7#ZmH-A|OvUQpZB##^* zO&2rYv#dZtKQ@T%3^7kGZMh!{zD99qAWTm{56^ja?C+Tnw`9KLt=B1<^7&AFCh&?# zqzgIugY0>z@K|ha7A+8#wpy2#X-a~hJ`?CiT_BbLPJLwf%eo$?SS0lQe$r$_I2l3X zF5ctmS?}2i08Xr)SluhqOsZv{Ym=u^!V;f4R`nwS#JLBO)Ob$6{s<3yNVU)v>Vr>d zAnrNi7fzv|KxJ1ye>n-^Q)5Sz$tv%dIdx6^U+VgJ8f0y0Nn@O&N(`>v+T9Hs7?6u5 z=EwB%N;5t^E{2;YAYvapMNDR1XM8cRn)kH3d?B=|ONTYu$3Du$hrN{*E{0Z(TVT-BH>PJksC!ih=;?C$Zuq;Mp2G;jXAG9SafjWF% zl9%md^9zRqt@&cqn&S31dD)pvvWs-Dg!0esQaatbE8Yd%e{ar0jamhBJzo->li$x} z1S+=7{SZtbP1!m&Q79V#VF016u?O&8Q-e? z{B&<|hH9XrY=(5lDVff5wjJPBegC453^IppbmZO};SB*v9*}X`*4eBf*K=~3T>o`5 zm*wF)i+Q!gSg2)1^~!D7^hW@{<$bB+7j=bIv^11y9Wm5xW5*fG`Xmv>d3Ev7r`zL@ z5#VQ*ap3B+Ed(j(2tJ=ii(;9PY-L1QN(vA~7ZETj11GA6{? z&au`bW>}Dw2}XkJc0RZjz0|fAYIB9$gk#-|YfpmOPTqI2K=pDZgGLK~7cvP6?qOeJy3h zGeo=XEdAzwfA_Du5P}l{`eYcLBLVOEo5B^$D6l>_baA= zh)d8HZ6V=RHk+Aqi7Jw>&MtvRPCDP*Pbw1=O?c_}K6MGIb9agX&*6 z1I`XcSkpIkE?Z`~=Q(cUA#BYQ#%K$Qn{LK?(^lUn6<@JoT6% z`Y1LHjnGea)~P9V4E&~si7H%YSC^#VytcqL^@RHN*GD8A2F>q+L#=f)Tp^)hIL&&3 z?~O?uSN95|^r-oWV|0qGG>bj!f9K`KtO~wV_7Mp+%%f@}%Jq)tv>MxpVr>(PA>{t| zqHkX z^v8rK3yOB;DsJ^LMJM@~{Jv*ntVHBt)Nmeo%rzyXda` zEaGSbfH76oh6|eyxs)H>mVk)Ghp(4g=0yk_xmR;MmI2wUGmL@F8i$u*cdPXprpk9H~$Cr{pCVB zzkgTF5kU%gVNgRrOg2}d5Tra%mFImSX{_olm_HSq6Yw<%SYha(G_0Nn2v6VY1Z$Cr zl@nE_I2|gWNklqcpjkvUKWjg!R$Xns88Ov^E>$tlcZXL_YPS8pX6%SL!Lw2F zkrnwvBH4TWz~V<rdP^Cv8irLvQH8`%vBH}O%2)-Pn3qm-P!Kj&&r&07gd_ab^ zi1WxTB$t3B`}IjWlp9X!gV^!E-niy_wehjZcD@7E5h}a27J{?3r^*!-izs+l%8zZA zLyXo_`3Sa%#RI@f+~IW24B*=uK2?hBx!%f`7GG)Z= z;v`X`!BNsjG3X8nIw$H)fvr%=^&6E57)ZE84;Sq*(MM5T4`{R8`XLF0Ausc@a6!mr_d)e^wLK_G8Zs&| zA*gq}#>pOOCG2}P`oouhTlu;n!SX+7a?JZ<6%cl0fE}n{$Ct`uPk4L0n3t&P0Cv(X zQ7-_-Q`v1exmw?>F7aTxlbdwUc{?tF0{2Xe6!)KIy$iBR`~NMOAWokWpAfJ=?d`Oo z9;vP_H|5uxQ}AQsW|rbP5GLe9bbq*?=$5+$7X}87F*2M*$1mZmji~KVV$^G*&V4mv zKf!Z$SmxI7#M!)U_dQtK2xeDPQYNtJ$bfFHX(dY5-sW^OHW0ayA`_` zfT&9IDueWC=>><>K{PuN14GSOhpAiqIq(m@pj-LWXlED_!hjgeoG`ujQpNIbWm^vx z)E-8phzS;*zF(pNfAlPlC=)?0Vphu{h9Tsh%U@}2;z?{~@S{)Al7gVlH~Pk#?D=ul z3L}~>#ORrj(fm4Bd7HbLq#wnM+&hPUSYd3Kl}9rLbEwDTlf`+IG^bZ43e%FfCxN!M z&lDu3G&#OdGE+bzIOi%#=sCC}_R7^D!`);Up7)IhHqC=jciVJOhe^ClOutYnht2m6 zP>^vR zqJ68c)s8zdjca(>H64@{Hd$|=Piv@`jeDR?vgp}>D`^SmYIoJJU2si$EO4gXvmJe# zM4Qs&cf~XYyDAA4qlOY}rm~>F{m-3THy0AAJIRVXgT6A@XL>;VYaI7nZvMO`zApqNc-)G1KQhf z6bALNv(kd>8f$xm_@Y6QjIZ?|cro+k+^v?!divP@I^9L)vka4)!p=+n!^z0;#uwTf z#ceZQ<%u-^h`PcRd661qDt*`B=BV&G2iXz9!svl0bH#u26h`J*$*bpMA;L`$UG0PY zaxIvF;96VuzHjJrhB}do)n@DEss$0$Yd!07-X>A}Pcq#S^msjEuFfK-pX2-(UiNuO z!i5E7FJ&)48YMm}r2C{BIw65O=$}ZQXez5#LtUmSDK{sGuNzX_RHtG`cZR3G>o1;# zm?=AYFWjLE7R2tq7>3lXKSGkpcRR2+INh#1Un9Q?7S#;2=G9UCaPyiHsHjLco4KsV zr*M-oG}xG$)LWYTVBr6~T6jfRO|`gX zK?LoKxA3v`h%tW|>7vEifJM%G1xAXY+7iOWwoq-#mEyumAKp% z&AA)XS)l0a<>`}!d!B4m5YS^;g*?-~06X4d@Th=_n7Xljbxt~BaeUSIwb6W&6@gIN zbSF~XE*WD5J)XJ*+v0)kzLHUR$9J)jubu%!gDUIG21i`lek5Dmr;i|9Jv*Y%aUN<$ zs;mMuq&=hk*>!ENf&$4JR5)iVH`ASvKYZ(sG&1f!DD^SO*}li02Rq>F%jlpVI;!RI zz8#n$KwIdJqAUHC+e!XgK!_WY26Zuy@pSdIWttV)cP`xA5sb#*&yTIB46T-4XvQLA zGQHNycP$OK(v%Diw>;Y*0(n#|K(6_L{gW)D?bE=ZJK3#p$<2GqY{UyUNL_v}n8&DJ zlcP5He<`qkq=%bLHn2)o_woK-M4LkaWZ20~a4ScmRl9u;x`saT zXM!^9;#C8Fn1({hYWA`t5Z37i&tbMhOfxt+?log$q6x20$pcL}wk-cn5VzBJIk&rC z5TnMG@Gnnhfbhi>>b?w{i1h>{nZG*}hGKvA?7rj_ z=m&{vTE6ZK4Gxcx3MZz#lHMSf=9CU&hA2;p7}!R$$FJvFxiP{U?;djSC2^k>t2A>zd8EJj<&azl#3m@iqsSAclN!2rv--(ONGy)ZPPuRNT!GlBZ7Te*m% zi?BOIZs%;7qD&w%+W$2<77-=h^OlW8=K&9ocf5DSaa^$^2b1*q0Ug(2o1M*)L$7@j zw-t@I_wGl=Z-X(cpKlvvpm0iD{m+Cx>iQSSM1Ru>v-MEorOmQRdR5ce&BLDaHi29s z5L5EG-wbEt;$oUJJX>o`su=I8AW7x?Ef^N|t-tW|YJ40&o2~0FHkTK#k>kfS^=$2V z5Y1dwRzy*+W40t5^s&Gra~Im2tjoh4J7M6OarR1L#X{W|xHi|f4{IVv=veI-KU$~R z1n6LF=k7b?Gux>%9_Lb?dhU)uZ%7#iA)QFZ{W?#LCWD0_kE4BBU4qi+X-dESUMto% z=qOy~t{5WT-#+6=rOl)-L4Rld%ZR5dYX&!2J>;GluepbLf!M`zAOE>iQmjz>=P)z@ z-41b)$0t0uVR!SRhN|-i!Q=_iT7uf3v~I`V{{0<6gv@$gDwAoY=N2zqH}3REi(0tc z`G7$DV@;K%P~y%=cG0}~OX~CeH}(G*^?AW9I8OGycLm4)uoPlBc_~?$J>tzpP#>Mv)_{^|zI8+S-Q#cr~9eFnb&a z*8LSlMLtI$1-3U6$(-y*a$hy$KCkD+Qx!Vs2af-p*G8N<{FW7ovn&$4eRR0F?)Z$z zWsiJi#WGZCa}w*RuWhmziIVy_CTsxyl&HYExv|u5eK)w5+G<8x_*B<>q`tt* zxQBF%e9@n_XpeqM0r}*eLpwlgn`(F6IPd)ODf2jvS=6w1D|7by zV+VR>^AB`yQzV*1V^p{&RwuomPoHs(An~)F`Mnleqjr*tHu^!UuYz(y=8xA0a`N)x zVqy>@BO@DUXL0Ggj<`n-SG%J_b5=QiqCOlmm`V8#2L zErJ8tKK#BL7k@q+mmA_!?Y5Y6YV~vECd6&Em&v-NtE%yi4hSIe`*m+~Gcb+Y*76|} zPxDSDm^YExQ$`YvNq-MAFDuyj-0QZ?dzvM5^E?z!Yg>eh8qw67MX^6L;Xeb-TYQ)F z!jd33J9W6naUX0HI2G}Y0;Gl8oKT;CC6>s;GLKX3+D=(CBqgsDzD26gv;PpKTvB=B zZ9CMEtBet)AKZ}{(9gccR?#sY|?3u|g;3C^C|20+`Y6F}?&Hzg6 z9v?>o_*a*Xa=npLYaEO;Ecl|i2&9T|w1YUV>&tJHX*zZ3s;@t+-Q?vo+WjOkX1qE} zX3H+=P+o9Rf#VrrG|6dVBSxlUR`;XG)gQ}OjM!dZ@7%^H*0~II#7PXS;4n&O8(v-Q zqbMAZ(nX;&Q|{P`6u=3=_Re@^QlM6@^KBeM1mSck$<0BJYPzD zAfsSgXV=fC^Wr0u1<+WOMk1>*srT*i;N{hzL!;Y?9zWY|kr@H1dX+&yQ;zY<&npih zCk~(J29u#CU$9bZ5LKt>AZ>gEO*oZKJ}=cREeu(62zLJF)}#px<2D9u5**w%?M=@D zjt`8End=@Jst8S$EY-J2Y9{7>(<}Nur{o<2jRt;?RdZ;uP%QW-n$ML zZ$zt^*tGIMOO1@_B&xBVVe?@=VR9hL3^VGcF@Ngid!{}KwsEfujd&Kwx5pt$al?=; z@O!Aw(2cXWBW9a&=X=!C?j9{R{?4LA#O&yVovTqG8bJGEw)}hdJZ)a!bm;*2fQ zMWYYEsHAL^-hFjN;~Z(zx_1Q(e9hKc%lu z{#l%xv!eHPq8m1em#Z}MpAO>W(E?Z6m4xt0DMOfY{f*K2!yHoe3v#8$)n?4lvP<1; z3F%SOF%o*Q;yq7{+QNq7UwRnKVUZjBA8K)#I=vfMUz5H%IeqtM>WTB!KJyfJWnC$O zuMlSUwGO&&{3_Q9Jsy_-Qp@K3W@xcbjVZ}~^h0$(V_hIR)Tk{LFV{PSCaY(k8x78Z z?gRg1sqitQVb=~ks4)p60v=>F-PVeeCb%GZwxJfnDA<1e&s(l)9X3{b5d2gIDWE9W zX!IhuT_H0yd3JMyPj-$N=J*In`=%R^+<8@fLreZVUDGrpk4RUd?nm-@ z!l!{DiD7u0yvPtZZ~j@*VIb-?*p-y;^fG*VfzTjU>Gbbh+=Cj40`F#s57&A+YEFLq z*P`r8nhfuw-h|lvF%3EsGspSvmQ4!e*Ss@sDT;bJy_UO_p7(c|n^y=--Um$cfDzi5;L4O2zi z1Su-=BtBTT9SlyUe9ykN8qB4(V_Xea+l$+vVt$&2@c;DHvyHUH>*nyYp9ufK<*#dM zM)ljE>|;)G0O#g{?nQtLkktJ3|{Wv8^O9vshgKMH*- zh4gSzvIXCMTzHzBl{6?_sPd;t zhI)}`o{}D3;7$kq`-(Q7%s?MhoOYY=*pBLN=~wcpylDNd^h?cJmSriBBH%is|8?>J zvUE9ksaI7JELdw8+?~3#Bv$K{Hr7~es+O5uhA8#I%HJgGFH4)V&Obby)S4}p(VrdJ z-V!|jVdJ;VP^u84R|+hEe2$c4W5*54+4`(D&Cfa?s)K2jC!?_GJ=r0aNXpk+1f zHPv!C@#8I)^^8er{WCYO9&*IZVlflZtOj?38mmU;;hm#q@NtD^4ENFRET&dOb{ZMi zuTN}RM>4ymed_Z|R#At!27YQdLalk%gawy{FN^(Mnj)ymz-^U!_a4=vdquc}X4pB4OBW2}ZH zRbG)^hSbyAYHTj0mE@xj2O5=21+<8YVSTx^xbt1iweDv7HAR&j^QSoNat>D}4YcwY zG-uP|zBf45+JyMwXazU6YKlxh7Bh{&m1wUetexeX%+5H}Yt}FQDTPH#5J4+iES+$< z+L_PEWRot<-66QzOx`Oq=I5Z&mPW%s(3? z*MbHu3n-pRH@e+uQr+(RwTffPnD@r3$H&)6cIBn0DikhXG@*+@7 z3@i>TP9&$1rzqWbLOT^ zQ6_zy+bIuQ9!Gv+OTU} z=G$Q7U?lY%8+j!yRjc7gKetDm$ed&%N=qm|dBirfhN5w2+!xcjhy<&dp&8W4*(p|h zX~%}nK=6+oA6_f7*(@B4t!3M}AjOCeufFKgDTcmRAVh==1A0t>gBC}7TttNp;_}7q z%;q!aqjSqA5o={~`v?%jL*L1e{~gZwf6dj7HM`g-0E}*q=hZF{g6{h__(SnHIHl+6 zKsJuF0ti88@Hs>A@bE~#ZWMevXm31TS684DHE8xgaYa7FJ`7H|=f};Qjnbj|NSD7L z>`^k%EpB2$&SKP3{LZF>fuZxI4);iY-s+7?q8O?KQcVLYTiCzO56h}@^&1@kGF?)5 zl!TKLTUS?iBE^sjbA{dz#b36>nQ?Xz5hIZarihk)&+d_tPXt4M)CmCM;~pgy)jQam znbGvreWnBJ@#X%udA`5E=XEg1bo)(>L$>%yibL%~$pZx&JA1r8zBDtj+GlDTAt~91 z_f%jACL{$N9sJQ;#gB1rbXim&fPsvlxeHe9pc#68XSW4KxF7=w!TY=2(R84MCL+L~ zKmq6ZVK1v(c!2huYzHq1l_Z@DTcMQB1CM|}KlS6QA{LMuQU_B6f-m2bLD=SUVhbBTe57*+xCbn`$p1=@E`D<@EG>b=?} ziX^~fRaK@|dyD{IGI4Wj9Y6zVgoplZw*XD(D?SdKP=z z@7adM2HK;+mI(8uZYc|NfM|=;G9**%=L!jH_czMYGVXj7f|0NM0VQSbY4eMgtCM0w+}oQkrTM8*_#K81#1q<0!e#p&8FZ@q4L zIV_M$!q0?!fH>(bHx5KcwHI4u4?!+0SRe!)C$lF61JB>SZ<}+bOxKsaY34wVgqW`# zp>3+Aw&AT3yV&A|v^C(jUk&lPikqan{5!n~14l^McVCB<^#qKf+PEl&>^{N6>wa10rM}%SFSDb_j><3oE8js?=$viN3j+85YB7v9UwOg7!4SZ?j~IDTD16 z(7T#1rBr$7=~X(vyy;Egyi0B=U<1E|$?`jLugvF0*m+>uqFsTS=XGH6WC$TB4e}NQZ>MM`3jt zk+L={AMN|@b}Lw()23Jht6a+WO&+@E%-~?W2`kzqdaTCc9vRgbdC<9PBKB0fqyiD&BZS!w)rmgcW`!v4$>h%d>n=Y27mTA! zp!?@ok?GI+2eQ<+pdG8y&c9>w6oF_C(Si)Mav4Et{L#Lfm&~s)-T$Q z$j{bnf4QFV)Zp?xgIUEmlUm9*%=u`B{2!4V-Hw820Df7Vlzl&_9G?xRxiT`(zk)FC zUXD0*|sY?Aauda~Pm!A%tnrEIOUZ8gQY%8T2e4ZY&E({cKPu#KYN z-!pTW}><@gSYW9O;N6R-vMiFF&@H>l(&{pgd1AWkMD)3rh%ahim znIm#ixjT?J??7%dF_XR1usXCc9sla%J?x9y>rj#~8ZW4P+?b%_BzHUAI}tRa*F#lM zU!bEb=c*m9;G1Dbq>3%~y!U7*$6g~v&+*wYFx1=s_EBApKz+04KET zT*c#i`gGFW{`MNRv0)O8&khCLbU44d>YgdlVE22z-}~!&G)M2U^L|5vL8#E4?O;02 z^!J$ylR#dgMYni6&-qeTtIgffQFwOuCF79l?c%qCU>o*`{fTD5{9vQ(DaPXHOE!l| zgct9dt~!);z280$2LhH`tRzxF9XWrMid3!*w?Qf62Z?ERzH)^g z`t~CIiTgamrf+`43{@l%u_z)PVTy5+D`U8W?Xo6sTha@Bg7D&a{-Fg)p(`*Jc4iR# z&7jof>=c7wir8mw`Ike&xY~5>&3P8{&FM0V=#$oJv)r2>CY3KC&GC z&6}Th#R(#%Hp*&~r~ZM(%qdA}^qGvwuo`oIiZebTF(9!$ zA0+idGNCDwf@BbZzKK;S^I=1!hx#KqJ3FcSn-^0OEjf!;CO*A8=J)Tns_uTEXR=1D z@7Ho^pZVBuccP;wcy)PoL!!A8hSs|+)iQoY^uLMp1;ZM$+n?*U%;zT5U4P1d8z(h7 z)9ITdxH{iyLc&t=W;uP zJgWP6b89KmVOVo=ml);=+MAg^v0r&}5aHqT$d0=;^^E5XvhCna{f8f8aTQ1YG;e3n zLsP}gca?kVP7=W<ZwRcA6P{Uz8&id_rovV`N^+xM@n9;tlGV&Ay&9r zvXzyUsUp4t4r?tD0Ra&2xd`Ao(%A2-^K;eRAu_;q)I2Ap-4dThSlBfpYCJp4DH}&y zU~gejKNIPz*oW6Vs+Ayhrxs9)gmu5L?J=y&sD?taC)>0O@p|sjCQ$c;8Ph%qwr5h>cL)pD7bLXzhOE76&h9bvVrv2s~l=2qD-f*8D%6LcKrLx-BTF6jo!kZFh(~Zt zk|8w4@`MdGU>kKlYd1#Nh!f$>gYV$f^>lFtuL$g(z9I@?8caMtPx$n<7uBN<+;Y4< z!Y}z0k24l6&l&Qocg1eL^qZ^l;+F*$y4S%RgGgLwt7MiK-qoziXnizc_r?-JuO5R1 zc$5%ey^t>T|K$_gP3B62V859_Lq+dD_>Yz+wSx>rfgQ{ncLl`j^x{`ajtgH#O_BKs@=WO zsAye73fs19{%L)}XNSb2>ak#x{*ODRINjoI#p%jY7H$tVRW^o|51MKr&dFcbpH=jOFxH&lL#?zy0n9xy$kUYa}G` zk!Nz!FFlQS(*2wsP9*PMaz2-*#8HwDMM0Kj{v3Sv=-d4W>HFOezv*HXK+%Z@<578< z2$4k<5JZkawAyBkB+)>$7cy)C`h{N}xtc(28CG8VjG8zXuA@8xJeFj>&Ykw(a6KTMD^ zrX!4ap^M`6;VGSxDHdEF_%ihW&zIWz(l=%>7Vhi)ww zsKT-?E?M~5X)yYElB6U^@=UsJ*KI5R?ZoIPhLOp_yERMoK`H_q^x>BVYi)9u2 zrlzk*(5kAcyo2bgkbwqcJ`y6(L`<7ptu(nPtQ71l7a5>f`*Q7~;{rG+{u2Ib;~2W{ z%aEwA^ia8$I0+-^k?-GFt~pv>qxgMz z`uf{DsrkOqV~l!4bn__oauEQF0quNirEuR^UhOsC2X6m>Goa zEl=MyR?bDq{U}P3&gkdqn@!{(t`+TI*q%!3MA4@s{Fad&CbraK%(Fe*73HtZ^?SdHFiJZik+VUUl~d+IG6MKD>i)5wN}i~H zSf7epU*Y4oJJQCx4xU8`u5rTt_^A$QYz(wnlK3(ilH^y-x2z7nOpXnuAJhH7`&jMa=9$aw`}XL*4vdC2sr-*k&}{I+{L&jV_B}bYUnbC6*JWtuBueELEqT?CzoH>2IukK(e_WzEjFCN0wng$2LB{?gI>)<&!S++i_E&}#{2 z%CWFd;#keTnr5-LxA(c07I6}79I5CCR*=|C_~gz2HtvuQ(xoz=%9P79SX@Ov9B zWZ4^R9+Z;nBHOIwsivN*s%XZct31qokUw&-#{#ZHfqnn4xCvYQEiZm-i8-CO2tu|?3UW2UA116NcZZ6i1?G@apu&Q zKd={&%4oEobnS^Kug{M%zuC>vAogkUA%r}53Jj8~^j8^Olsw|&YcVe%&senR{`RCp z!0Xb%w?14v6dTbIestpOr@u$fN1`e{o{jx7p+ssIaeX#u_bI>*IU~PNVRhcYZ)#BB zylX9?V4~l;*_~hq&nCGi-sz1=*KFSC7RE_%U4$QN_%u9Eo3hIdUH$P_J#55mu}lB1 zvTPUOnsN!LX|}%mh^_s1&XkzCRGI1HexS9)>;o}ddch%hMqpp4`m3eB4Q#}wuCYBq zb+@`fIgJyfv-*0z=J{uSWMS6)=S_B0<266*&m42AXi14&mBz{~bU*j!riX)B^<8zb z^NvbQNBXS0SbmQ%L@Yq#q^ei4&CevOOAvBS%b-2e_+VT7P!OUeg5J^0&GGeOp`_D% zTE9|)@GF5+&ZTRVImNrZ&X!V~^6?QW`{uoZ@XM1+%t0au0d@7-)2xL{W9P-@bck8e zM^c@rsHo!!@WtSB(`_2U!? z3}qI}e6Zq_pyF%@NgWH`q4rjWM*Se{`|$AOX(B0O=QfFQOWt&h#^>LyQX(F54jkY= zo0l?2$1mgUTVnPsqMt&RoF_7-cFa6HBwgN3Z`L0mQe6KUDAr-a3sPtu!Yx9gRWs)G zv7+hM*DIHN`fi=@gpN2#j!WDdr((o|Ggn8Ir)P}$8P`^zL<)KJReQvW|J+Vj zKTvWn+YwJ`O+iDP=mAgogpJ7cl-iom+3?#qmwLn6@}9`bayQEf49~XUd9UZo2TXJg z48`j*?Q@)92dcRx%#zYLt;(X1!dY$&`VkLL)w=>0^lOK%wo3`Piw(H>8Q!@DH_j8o zq`8VY<3Pt|Ecf{;rP2zl{x>jJ3(^5yi55BF!9ZuHxPc}^==Z&H@OXV=-#)$Ht@$lm zuvwNQ!?IJYG%-GYtI;AYp(>SB*L-S3@$dgQ#}N>>j*O4z3T|+{H=)p89 zjE3ASNs=MzA+W(1s+nru_ngk$k2gVTUIGWcQ;|ah;<)*q-1^`G!UR>xBw$$TFgO{1 zHo-vEmKI9Yg>8lmjmq`47RefL07KM+7K~V`%4QDq{!Wr6HbUFXEq$jPt$FIFd0W6- zJxe3tY-lbi6lx@;PSs(#l6c#B(+uj}7ZKL1c_Ahd_2;p!J+kvkg#$!4cAKWiQfH~j zl0i>}!bniE_>oC44(x8%n`+gG=Ed-NDb^2?sjXaz`wwQYTm|a(d2`A8ihjbNYh)zG z?n=~-;8gdf$RC=`L75I0dx-1l#maYAIX_VXRY|i#rL0v0Ly=8;P+B4QuTn}^+co-R z+W1UWQeWi?r}qvShHs_l3EIn~u1TnR9t!o@rFC_gt7681>HPgsG8RJT2%$48`T15y z3nO2jCD%%R;h~7K__<2B2>=trgM-B2qVyM3a^76<->h8T(p?+Xfi^mVu_r|dlIPfyKpJvho7b9&k6ti+uzP? ze4yH+x|J~s4MDg>6Gw_p9|tyEL)Z21O^M?5 zTm$7CDqngSJO3I*EWRh%cSfDB);&Y^HnE5)H7#hEz?a6AUI9A@!o(B=IgBTX3n!gf zf8(?#8n`2m4o&?OGn`r6m8~}g&CrP=vWaNgqAKL*lWiRq>kF`yY#MB)<^`k8 zS@ls)A@ZIl(GtWHx20H7YjwvKiF;z-Y*-i-u6)h0evjlTry~n1Tl~R}c8~1M`s3P3 zJ@kpsFDN1HKa8y3+Cn|cAIt}-L4;&gnT8N?JaM%_3L7MFWF(pl5v+3U5<7&ZsWLpCS<6?c!;N9t3Mg_Qvr%JyN{G;- z_gqcFJf_#=K2Fv)1nnW>Pj6%^&$gF{ zIitaS?cDb=*-P2riFWf5$&D)e!f``>91V>|ew_iB}oTtGTLwsORlE`ZUwg?$6HmXnH}6@H27C zxjYQK-R0#7&L$A-dsFYTXnt8k<$reL{~#T^l(cUZYmSUx=txgg#M|L})mWu8$UDsb z3D;cOL=Ms%QN0l{3-8{ETlPvtRBdZ+g4F&aPS2U44c?ko^Ix6vegQNygQsNfcHZA% zymk%X3*Qfa&!zj#nAOdq^gaZ@sUvYw8+H=IVNK*xn(fUw5Z3qX_&zi$m=H=}^eSdT zR>F)u2qNcs4=!JSh7Q=orPPJ1T>k?9`pC>VEK*%Xz&W7>RyeJZUCJwr0?B2zAlcQ( z>`#BLW`9ZQP)p(K9!lQU?Pz14{=}M07ngXC;BJ$na3(9ftTYh&q3iSPTS^oW_3g`Z z&HYNRpUy57d3w~6DYdS~pH(m&XR7;Myz|dP2qaqil6i;5$4SmO^TIwpMlh;Vc7)|C zDT;9J8R$0V&bk?4dn#gI&Csd(d@lm zU+4V1H_pI_4%gekvS0t`{mBtx6fZ`RA1iS<>ZNMlE9(N1(dM*EA`_l-KxqzF{*i6lsftp8T(G95E z44C*nS?bJ36?Gw}Oz&50jg?C;0_dX95qBN(HDfcM_$m2%JLMi-oO z1PT^hlM@XQQ6?pELlXyc*WYCjlZ%aHFIDLZhdM_8nyYgDWdl6fS z_{CBug-Vnc>MPgrr!1vkt+8eg%gfFLNl}zLsCUx@VueQ&kJl#{pBuIYtw+N$jQsA^ z$gIhcqn!WLr3T&Jhbn$KkeR;)_3IX@N{{JDe3&Cx$TQ$-C?&fUiDfLNK<|9>Zl!vM zk=#(!>`d28BBIHjxRPwlGgJNj?ORrtOn+NL>Z(XvD{_tV&WI#CaHbK(dKng+Xayd4 zrMF#FEN9VzXH^{9rwoh~c$DCTVe768o~y~NT);#XBLU8-@u