yosys/CodingReadme

236 lines
5.2 KiB
Plaintext
Raw Normal View History

2014-07-23 19:13:37 -05:00
2014-07-23 21:24:47 -05:00
Getting Started
===============
Reading List
------------
To write Yosys C++ code you need to know at least the following classes in kernel/rtlil.h:
RTLIL::Wire
RTLIL::Cell
RTLIL::Module
RTLIL::SigSpec
The following yosys commands are a good starting point if you are looking for examples
of how to use the Yosys API:
passes/opt/wreduce.cc
passes/techmap/maccmap.cc
Notes on the existing codebase
------------------------------
For historical reasons not all parts of Yosys adhere to the current coding
styles. When adding code to existing parts of the system, adhere to this guide
for the new code instead of trying to mimic the style of the surrounding code.
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 Stlye:
https://www.kernel.org/doc/Documentation/CodingStyle
C++ Langugage
-------------
Yosys is written in C++11. At the moment only constructs supported by
gcc 4.6 is allowed in Yosys code. This will change in future releases.
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 by kernel/yosys.h)
Use range-based for loops whenever applicable.
2014-10-17 09:39:24 -05:00
2014-10-18 08:17:33 -05:00
Creating the Visual Studio Template Project
===========================================
2014-10-17 09:39:24 -05:00
2014-10-18 08:17:33 -05:00
1. Create an empty Visual C++ Win32 Console App project
2014-10-17 09:39:24 -05:00
2014-10-18 08:17:33 -05:00
Microsoft Visual Studio Express 2013 for Windows Desktop
Open New Project Wizard (File -> New Project..)
2014-10-17 09:39:24 -05:00
2014-10-18 08:17:33 -05:00
Project Name: YosysVS
Solution Name: YosysVS
[X] Create directory for solution
[ ] Add to source control
2014-10-17 09:39:24 -05:00
2014-10-18 08:17:33 -05:00
[X] Console applications
[X] Empty Projcect
[ ] SDL checks
2014-10-17 09:39:24 -05:00
2014-10-18 08:17:33 -05:00
2. Open YosysVS Project Properties
2014-10-17 09:39:24 -05:00
2014-10-18 08:17:33 -05:00
Select Configuration: All Configurations
2014-10-17 09:39:24 -05:00
C/C++ -> General -> Additional Include Directories
Add: ..\yosys
C/C++ -> Preprocessor -> Preprocessor Definitions
Add: _YOSYS_;_CRT_SECURE_NO_WARNINGS
2014-10-18 08:17:33 -05:00
3. Resulting file system tree:
YosysVS/
YosysVS/YosysVS
YosysVS/YosysVS/YosysVS.vcxproj
YosysVS/YosysVS/YosysVS.vcxproj.filters
YosysVS/YosysVS.sdf
YosysVS/YosysVS.sln
YosysVS/YosysVS.v12.suo
4. Zip YosysVS as YosysVS-Tpl-v1.zip
2014-10-17 09:39:24 -05:00
Checklist for adding internal cell types
========================================
2014-07-23 21:24:47 -05:00
Things to do right away:
- Add to kernel/celltypes.h (incl. eval() handling for non-mem cells)
- Add to InternalCellChecker::check() in kernel/rtlil.cc
- Add to techlibs/common/simlib.v
- Add to techlibs/common/techmap.v
Things to do after finalizing the cell interface:
- Add support to kernel/satgen.h for the new cell type
- Add to manual/CHAPTER_CellLib.tex (or just add a fixme to the bottom)
- Maybe add support to the verilog backend for dumping such cells as expression
Checklist for creating Yosys releases
=====================================
2014-07-23 21:24:47 -05:00
2014-07-23 19:13:37 -05:00
Update the CHANGELOG file:
cd ~yosys
gitk &
vi CHANGELOG
2014-11-07 08:47:18 -06:00
Run all tests with "make config-{clang,gcc,gcc-4.6}":
2014-07-23 19:13:37 -05:00
cd ~yosys
make clean
make test vloghtb
make install
cd ~yosys-bigsim
make clean
make full
cd ~vloghammer
2014-11-07 08:47:18 -06:00
make purge gen_issues gen_samples
make SYN_LIST="yosys" SIM_LIST="icarus yosim verilator" REPORT_FULL=1 world
2014-07-23 19:13:37 -05:00
chromium-browser report.html
2014-07-24 20:18:16 -05:00
Then with default config setting:
2014-07-23 19:13:37 -05:00
2014-07-25 05:16:23 -05:00
cd ~yosys
./yosys -p 'proc; show' tests/simple/fiedler-cooley.v
./yosys -p 'proc; opt; show' tests/simple/fiedler-cooley.v
2014-11-08 03:59:48 -06:00
./yosys -p 'synth; show' tests/simple/fiedler-cooley.v
2014-07-25 05:16:23 -05:00
2014-07-23 19:13:37 -05:00
cd ~yosys
make manual
- sanity check the figures in the appnotes and presentation
- if there are any odd things -> investigate
- make cosmetic changes to the .tex files if necessary
2014-07-24 20:18:16 -05:00
Also with default config setting:
cd ~yosys/techlibs/cmos
bash testbench.sh
cd ~yosys/techlibs/xilinx/example_sim_counter
bash run_sim.sh
cd ~yosys/techlibs/xilinx/example_mojo_counter
bash example.sh
2014-07-23 19:13:37 -05:00
Finally if a current verific library is available:
cd ~yosys
cat frontends/verific/build_amd64.txt
- follow instructions
cd frontends/verific
../../yosys test_navre.ys
Release candiate:
- create branch yosys-x.y.z-rc and push to github
- contact the usual suspects per mail and ask them to test
- post on the reddit and ask people to test
- commit KISS fixes to the -rc branch if necessary
Release:
- set YOSYS_VER to x.y.z in Makefile
- update version string in CHANGELOG
git commit -am "Yosys x.y.z"
- push tag to github
- post changelog on github
- post short release note on reddit
- delete -rc branch from github
Updating the website:
cd ~yosys
make manual
make install
- update pdf files on the website
cd ~yosys-web
make update_cmd
make update_show
git commit -am update
make push
In master branch:
git merge {release-tag}
- set version to x.y.z+ in Makefile
- add section "Yosys x.y.z .. x.y.z+" to CHANGELOG
git commit --amend -am "Yosys x.y.z+"