Contributing to Yosys ===================== .. note:: For information on making a pull request on github, refer to our |CONTRIBUTING|_ file. .. |CONTRIBUTING| replace:: :file:`CONTRIBUTING.md` .. _CONTRIBUTING: https://github.com/YosysHQ/yosys/blob/main/CONTRIBUTING.md Coding Style ------------ Formatting of code ~~~~~~~~~~~~~~~~~~ - Yosys code is using tabs for indentation. Tabs are 8 characters. - A continuation of a statement in the following line is indented by two additional tabs. - Lines are as long as you want them to be. A good rule of thumb is to break lines at about column 150. - Opening braces can be put on the same or next line as the statement opening the block (if, switch, for, while, do). Put the opening brace on its own line for larger blocks, especially blocks that contains blank lines. - Otherwise stick to the `Linux Kernel Coding Style`_. .. _Linux Kernel Coding Style: https://www.kernel.org/doc/Documentation/process/coding-style.rst C++ Language ~~~~~~~~~~~~ Yosys is written in C++17. In general Yosys uses ``int`` instead of ``size_t``. To avoid compiler warnings for implicit type casts, always use ``GetSize(foobar)`` instead of ``foobar.size()``. (``GetSize()`` is defined in :file:`kernel/yosys.h`) Use range-based for loops whenever applicable. Reporting bugs -------------- - use the `bug report template`_ .. _bug report template: https://github.com/YosysHQ/yosys/issues/new?template=bug_report.yml - short title briefly describing the issue, e.g. techmap of wide mux with undefined inputs raises error during synth_xilinx + tells us what's happening ("raises error") + gives the command affected (`techmap`) + an overview of the input design ("wide mux with undefined inputs") + and some context where it was found ("during `synth_xilinx`") Reproduction Steps ~~~~~~~~~~~~~~~~~~ - ideally a code-block (starting and ending with triple backquotes) containing the minimized design (Verilog or RTLIL), followed by a code-block containing the minimized yosys script OR a command line call to yosys with code-formatting (starting and ending with single backquotes) .. code-block:: markdown min.v ```verilog // minimized Verilog design ``` min.ys ``` read_verilog min.v # minimum sequence of commands to reproduce error ``` OR `yosys -p ': minimum sequence of commands;' min.v` - alternatively can provide a single code-block which includes the minimized design as a "here document" followed by the sequence of commands which reproduce the error + see :doc:`/using_yosys/more_scripting/load_design` for more on heredocs. .. code-block:: markdown ``` read_rtlil </path/to/file#L139-L147`` + clicking on "Preview" should reveal a code block containing the lines of source specified, with a link to the source file at the given commit Additional details ~~~~~~~~~~~~~~~~~~ - once you have created the issue, any additional details can be added as a comment on that issue - could include any additional context as to what you were doing when you first encountered the bug - was this issue discovered through the use of a fuzzer - if you've minimized the script, consider including the `bugpoint` script you used, or the original script, e.g. .. code-block:: markdown Minimized with ``` read_verilog design.v # original sequence of commands prior to error bugpoint -script -grep "" write_rtlil min.il ``` OR Minimized from `yosys -p ': original sequence of commands to produce error;' design.v` - if you're able to, it may also help to share the original un-minimized design + if the design is too big for a comment, consider turning it into a `Gist`_ .. _Gist: https://gist.github.com/