qflow
- Details
- Last Updated: Monday, 06 May 2019 03:29
- Published: Saturday, 04 May 2019 12:43
- Hits: 2046
Once you have all the pieces ready, we will download, qflow:
Head over to this link: http://opencircuitdesign.com/qflow/index.html
Download latest stable version that is under stable download link. I downloaded "qflow-1.3.13.tgz" (which was the latest version with release date of Mar 19, 2019). Extract it in a dir named "qflow-1.3.13". In this dir, we see a README file, which has all instructions for installing it:
cd qflow-1.3.13 => Now run below 3 cmds in this dir
1. ./configure => This will look for all tools that qflow needs. It shows configuration results at end.
Using yosys verilog synthesis tool at: /usr/local/bin/yosys
Using graywolf placement tool at: /usr/local/bin/graywolf
Using qrouter detail route tool at: /usr/local/bin/qrouter
Using Magic layout tool at: /usr/local/bin/magic
Using Netgen LVS tool at: /usr/local/bin/netgen
Using Vesta STA tool (internal)
Using Vesta STA tool (internal)
If some thing not found in std path, it will show warning: WARNING: Netgen LVS tool not found. Use --with-netgen=<DIR>. We will need to fix this by downloading/installing that tool and specifying an alternate path for that tool (if it exists in some other dir).
2. make => make is run. Last 2 lines indicating successful compilation are:
make[2]: Leaving directory `/home/proj/qflow-1.3.13/tech/gscl45nm'
make[1]: Leaving directory `/home/proj/qflow-1.3.13/tech'
3. sudo make install => This puts qflow executable in correct dir. It shows same last 2 lines as in "make" step above.
/usr/local/bin/qflow => qflow script put here
/usr/local/share/qflow/* => all qflow related scripts, etc put here
Run "which qflow" to make sure it shows "/usr/local/bin/qflow" as the path. Type "qflow" on cmdline, and it should show you a help menu.
Project:
Now, we will setup a "experiment" dir where we will get a small project going.
mkdir test_ex1
cd test_ex1
emacs map9v3.v => this creates a new blank file called map93v3.v. This small file is on tutorials link on qflow page. Copy contents from there to this file.
qflow map9v3 => run qflow on this module named "map9v3". Note we do not provide the name of verilog file, but just the name of top level module. Then it will look for module named "map9v3", which it will find in file named map9v3.v. Screen shows this o/p:
--------------------------------
Qflow project setup
--------------------------------
No technology specified or found; using default technology osu035
No actions specified on command line;
creating qflow script file /home/kailash/Project/test_ex1/qflow_exec.sh only.
Uncomment lines in this file and source the file to run the flow.
The flow created a csh file called qflow_exec.sh file, which is very simple wrapper for calling individual steps in the flow. All of these asteps re commented. We can uncomment lines 1 at a time, and run the script, or copy cmds from this cript, and run that cmd directly on the shell. All output files are generated in same dir. These are the steps, running them 1 by 1:
1. Synthesis => runs synthesis using Yosys and generates verilog gate netlist map9v3.rtlnopwr.v, map9v3.rtl.v, and bunch of other files.
/usr/local/share/qflow/scripts/synthesize.sh /home/Project/test_ex1 map9v3 /home/Project/test_ex1/map9v3.v || exit 1
2. Placement => runs placement using graywolf
/usr/local/share/qflow/scripts/placement.sh -d /home/Project/test_ex1 map9v3 || exit 1
3. Timing => runs timing using vesta. This is initial timing run on placed design (with no routing info)
/usr/local/share/qflow/scripts/vesta.sh /home/Project/test_ex1 map9v3 || exit 1
4. Routing => runs detailed routing using qrouter
/usr/local/share/qflow/scripts/router.sh /home/Project/test_ex1 map9v3 || exit 1
5. Timing => runs timing using vesta. This is final timing run on routed design (with all wire delays included)
/usr/local/share/qflow/scripts/vesta.sh -d /home/Project/test_ex1 map9v3 || exit 1
6. Migrate => runs magic to generate final layout
/usr/local/share/qflow/scripts/migrate.sh /home/Project/test_ex1 map9v3 || exit 1
7. DRC => runs drc using magic on final
/usr/local/share/qflow/scripts/drc.sh /home/Project/test_ex1 map9v3 || exit 1
8. LVS => run lvs using netgen
/usr/local/share/qflow/scripts/lvs.sh /home/Project/test_ex1 map9v3 || exit 1
9. GDS => run magic to generate gds
# /usr/local/share/qflow/scripts/gdsii.sh /home/Project/test_ex1 map9v3 || exit 1
10. cleanup => cleanup script to remove un-needed files
/usr/local/share/qflow/scripts/cleanup.sh /home/Project/test_ex1 map9v3 || exit 1
11. display => display final layout in gds using magic
/usr/local/share/qflow/scripts/display.sh /home/Project/test_ex1 map9v3 || exit 1