Skip to content

Commit b017a26

Browse files
Merge branch 'master' into pass_actual_fc_to_connect_to_pins
2 parents 3ed789e + 79a5bc8 commit b017a26

File tree

962 files changed

+67565
-22635
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

962 files changed

+67565
-22635
lines changed

.github/workflows/nightly_test.yml

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,24 @@
11
name: NightlyTest
22

33
on:
4+
# We want to run the CI when anything is pushed to master.
5+
# Since master is a protected branch this only happens when a PR is merged.
6+
# This is a double check in case the PR was stale and had some issues.
7+
push:
8+
branches:
9+
- master
10+
paths-ignore: # Prevents from running if only docs are updated
11+
- 'doc/**'
12+
- '**/*README*'
13+
- '**.md'
14+
- '**.rst'
15+
pull_request:
16+
paths-ignore: # Prevents from running if only docs are updated
17+
- 'doc/**'
18+
- '**/*README*'
19+
- '**.md'
20+
- '**.rst'
21+
workflow_dispatch:
422
schedule:
523
- cron: '0 0 * * *' # daily
624

@@ -44,9 +62,9 @@ jobs:
4462
- {test: "vtr_reg_strong", cores: "16", options: "", cmake: "-DVTR_ASSERT_LEVEL=3", extra_pkgs: "libeigen3-dev"}
4563
- {test: "vtr_reg_strong_odin", cores: "16", options: "", cmake: "-DVTR_ASSERT_LEVEL=3 -DWITH_ODIN=ON", extra_pkgs: "libeigen3-dev"}
4664
- {test: "vtr_reg_strong_odin", cores: "16", options: "-skip_qor", cmake: "-DVTR_ASSERT_LEVEL=3 -DVTR_ENABLE_SANITIZE=ON -DWITH_ODIN=ON", extra_pkgs: "libeigen3-dev"}
47-
- {test: "vtr_reg_system_verilog", cores: "16", options: "", cmake: "-DYOSYS_F4PGA_PLUGINS=ON", extra_pkgs: ""}
65+
# - {test: "vtr_reg_system_verilog", cores: "16", options: "", cmake: "-DYOSYS_F4PGA_PLUGINS=ON", extra_pkgs: ""} # Test turned off -> F4PGA conflicts with Yosys (version 42)
4866
- {test: "odin_reg_strong", cores: "16", options: "", cmake: "-DWITH_ODIN=ON", extra_pkgs: ""}
49-
- {test: "parmys_reg_strong", cores: "16", options: "", cmake: "-DYOSYS_F4PGA_PLUGINS=ON", extra_pkgs: ""}
67+
- {test: "parmys_reg_strong", cores: "16", options: "", cmake: "-DYOSYS_F4PGA_PLUGINS=OFF", extra_pkgs: ""}
5068

5169
env:
5270
DEBIAN_FRONTEND: "noninteractive"

CMakeLists.txt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -130,11 +130,6 @@ endif()
130130
# Build type flags
131131
#
132132

133-
set(EXTRA_FLAGS "")
134-
if(VPR_ENABLE_INTERCHANGE)
135-
set(EXTRA_FLAGS "-lz")
136-
endif()
137-
138133
if(NOT MSVC)
139134
# for GCC and Clang
140135
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 -g3")
@@ -298,6 +293,7 @@ endif()
298293
#
299294
# Increased debugging vebosity
300295
#
296+
set(EXTRA_FLAGS "")
301297
if(VTR_ENABLE_VERBOSE)
302298
set(EXTRA_FLAGS "${EXTRA_FLAGS} -DVTR_ENABLE_DEBUG_LOGGING")
303299
message(STATUS "Enabling increased debugging verbosity")

doc/src/arch/index.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ FPGA Architecture Description
44
=============================
55

66
VTR uses an XML-based architecture description language to describe the targeted FPGA architecture.
7-
This flexible description langauge allows the user to describe a large number of hypothetical and commercial-like FPGA architectures.
7+
This flexible description language allows the user to describe a large number of hypothetical and commercial-like FPGA architectures.
88

99
See the :ref:`arch_tutorial` for an introduction to the architecture description langauge.
1010
For a detailed reference on the supported options see the :ref:`arch_reference`.

doc/src/arch/reference.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2036,6 +2036,12 @@ The ``<segment>`` tag and its contents are described below.
20362036
20372037
Tag must be included and ``name`` must be the same as the name you give in ``<switch type="mux" name="...``
20382038
2039+
.. arch:tag:: <mux_inter_die name="string"/>
2040+
2041+
:req_param name: Name of the mux switch type used to drive this segment type when the driver (block outputs and other wires) is located on a different die than the segment. This information is utilized during rr-graph construction.
2042+
2043+
Tag must be included and ``name`` must be the same as the name you give in ``<switch type="mux" name="...``
2044+
20392045
.. arch:tag:: <wire_switch name="string"/>
20402046
20412047
:req_param name: Name of the switch type used by other wires to drive this type of segment by default. This information is used during rr-graph construction, and a custom switch block can override this switch type for specific connections if desired.

doc/src/quickstart/index.rst

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,22 @@
22
VTR Quick Start
33
###############
44

5-
This is a quick introduction to VTR which covers how to run VTR and some if its associated tools (:ref:`VPR`, :ref:`odin_ii`, :ref:`ABC`).
5+
This is a quick introduction to VTR which covers how to run VTR and some of its associated tools (:ref:`VPR`, :ref:`odin_ii`, :ref:`ABC`).
66

77
Setting Up VTR
88
==============
99

1010
Download VTR
1111
------------
1212

13-
The first step is to `download VTR <https://verilogtorouting.org/download/>`_ and extract VTR on your local machine.
13+
The first step is to `download VTR <https://verilogtorouting.org/download/>`_ and extract it on your local machine.
1414

1515
.. note:: Developers planning to modify VTR should clone the `VTR git repository <https://github.com/verilog-to-routing/vtr-verilog-to-routing/>`_.
1616

1717

1818
Environment Setup
1919
-----------------
20-
If you cloned the repository you will need to set up the git submodules (if you downloaded and extracted a release, you can skip this step):
20+
If you cloned the repository, you will need to set up the git submodules (if you downloaded and extracted a release, you can skip this step):
2121

2222
.. code-block:: bash
2323
@@ -77,12 +77,12 @@ For more details on building VTR on various operating systems/platforms see :doc
7777
Running VPR
7878
===========
7979

80-
Lets now try taking a simple pre-synthesized circuit (consisting of LUTs and Flip-Flops) and use the VPR tool to implement it on a specific FPGA architecture.
80+
Let's now try taking a simple pre-synthesized circuit (consisting of LUTs and Flip-Flops) and use the VPR tool to implement it on a specific FPGA architecture.
8181

8282
Running VPR on a Pre-Synthesized Circuit
8383
----------------------------------------
8484

85-
First, lets make a directory in our home directory where we can work:
85+
First, let's make a directory in our home directory where we can work:
8686

8787
.. code-block:: bash
8888
@@ -211,13 +211,13 @@ Running the VTR Flow
211211
In the previous section we have implemented a pre-synthesized circuit onto a pre-existing FPGA architecture using VPR, and visualized the result.
212212
We now turn to how we can implement *our own circuit* on a pre-existing FPGA architecture.
213213

214-
To do this we begin by describing a circuit behaviourly using the Verilog Hardware Description Language (HDL).
214+
To do this, we begin by describing a circuit behaviourally using the Verilog Hardware Description Language (HDL).
215215
This allows us to quickly and consisely define the circuit's behaviour.
216216
We will then use the VTR Flow to synthesize the behavioural Verilog description it into a circuit netlist, and implement it onto an FPGA.
217217

218218
Example Circuit
219219
---------------
220-
We will use the following simple example circuit, which causes it's output to toggle on and off:
220+
We will use the following simple example circuit, which causes its output to toggle on and off:
221221

222222
.. literalinclude:: blink.v
223223
:language: verilog
@@ -230,7 +230,7 @@ If the count is below ``16`` it drives the output (``o_led``) high, otherwise it
230230

231231
Manually Running the VTR Flow
232232
-----------------------------
233-
Lets start by making a fresh directory for us to work in:
233+
Let's start by making a fresh directory for us to work in:
234234

235235
.. code-block:: bash
236236
@@ -241,15 +241,15 @@ Next we need to run the three main sets of tools:
241241

242242
* :ref:`odin_ii` performs 'synthesis' which converts our behavioural Verilog (``.v`` file) into a circuit netlist (``.blif`` file) consisting of logic equations and FPGA architecture primitives (Flip-Flops, adders etc.),
243243
* :ref:`ABC` performs 'logic optimization' which simplifies the circuit logic, and 'technology mapping' which converts logic equations into the Look-Up-Tables (LUTs) available on an FPGA, and
244-
* :ref:`VPR` which performs packing, placement and routing of the circuit to implement it on the targetted FPGA architecture.
244+
* :ref:`VPR` which performs packing, placement and routing of the circuit to implement it on the targeted FPGA architecture.
245245

246246
.. _synthesizing_with_odin_ii:
247247
Synthesizing with ODIN II
248248
~~~~~~~~~~~~~~~~~~~~~~~~~
249249

250250
First we'll run ODIN II on our Verilog file to synthesize it into a circuit netlist, providing the options:
251251

252-
* ``-a $VTR_ROOT/vtr_flow/arch/timing/EArch.xml`` which specifies what FPGA architecture we are targetting,
252+
* ``-a $VTR_ROOT/vtr_flow/arch/timing/EArch.xml`` which specifies what FPGA architecture we are targeting,
253253
* ``-V $VTR_ROOT/doc/src/quickstart/blink.v`` which specifies the verilog file we want to synthesize, and
254254
* ``-o blink.odin.blif`` which specifies the name of the generated ``.blif`` circuit netlist.
255255

@@ -400,7 +400,7 @@ Automatically Running the VTR Flow
400400
Running each stage of the flow manually is time consuming (and potentially error prone).
401401
For convenience, VTR provides a script (:ref:`run_vtr_flow`) which automates this process.
402402

403-
First, make sure you sure you have activated the Python virtual environment created at the beginning of this tutorial:
403+
First, make sure you have activated the Python virtual environment created at the beginning of this tutorial:
404404

405405
.. code-block:: bash
406406

doc/src/vpr/command_line_usage.rst

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1306,6 +1306,15 @@ The following options are only valid when the router is in timing-driven mode (t
13061306

13071307
**Default:** ``1.2``
13081308

1309+
.. option:: --astar_offset <float>
1310+
1311+
Sets how aggressive the directed search used by the timing-driven router is.
1312+
It is a subtractive adjustment to the lookahead heuristic.
1313+
1314+
Values between 0 and 1e-9 are resonable; higher values may increase quality at the expense of run-time.
1315+
1316+
**Default:** ``0.0``
1317+
13091318
.. option:: --router_profiler_astar_fac <float>
13101319

13111320
Controls the directedness of the timing-driven router's exploration when doing router delay profiling of an architecture.

doc/src/vpr/file_formats.rst

Lines changed: 37 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -616,23 +616,32 @@ The io pad is set to inpad mode and is driven by the inpad:
616616

617617
Placement File Format (.place)
618618
------------------------------
619+
The placement file format is used to specify the position of cluster-level blocks in an FPGA design. It includes information about the netlist and architecture files, the size of the logic block array, and the placement details of each block in the CLB netlist..
620+
619621
The first line of the placement file lists the netlist (.net) and architecture (.xml) files used to create this placement.
620-
This information is used to ensure you are warned if you accidentally route this placement with a different architecture or netlist file later.
622+
This information is used to ensure you are warned if you accidentally route this placement with a different architecture or netlist file later.
621623
The second line of the file gives the size of the logic block array used by this placement.
622-
All the following lines have the format::
623624

624-
block_name x y subtile_number
625+
All subsequent lines follow this format:
626+
627+
block_name x y subblk [layer_number] [#block_number]
628+
629+
- **block_name**: Refers to either:
630+
- The name of a clustered block, as given in the input .net formatted netlist.
631+
- The name of a primitive within a clustered block.
632+
633+
- **x** and **y**: Represent the row and column in which the block is placed, respectively.
625634

626-
The ``block_name`` is the name of this block, as given in the input .net formatted netlist.
627-
``x`` and ``y`` are the row and column in which the block is placed, respectively.
635+
- **subblk**: Specifies which of several possible subtile locations in row **x** and column **y** contains this block, which is useful when the tile capacity is greater than 1. The subtile number should be in the range `0` to `(grid[i][j].capacity - 1)`. The subtile numbers for a particular **x, y** location do not have to be used in order.
636+
637+
- **layer_number**: Indicates the layer (or die) on which the block is placed. If omitted, the block is assumed to be placed on layer `0` (a single die system). In 3D FPGA architectures, multiple dies can be stacked, with the bottom die considered as layer `0`.
638+
639+
The placement files output by VPR also include (as a comment) an extra field: the id (number) of the block in the CLB netlist. This is the internal index used by VPR to identify a CLB level block -- it may be useful to know this index if you are modifying VPR and trying to debug something.
628640

629641
.. note:: The blocks in a placement file can be listed in any order.
630642

631-
Since we can have more than one block in a row or column when the block capacity is set to be greater than 1 in the architecture file, the subtile number specifies which of the several possible subtile locations in row x and column y contains this block.
632-
Note that the subtile number used should be in the range 0 to (grid[i][j].capacity - 1). The subtile numbers for a particular x,y location do not have to be used in order.
633643

634-
The placement files output by VPR also include (as a comment) a fifth field: the block number.
635-
This is the internal index used by VPR to identify a block -- it may be useful to know this index if you are modifying VPR and trying to debug something.
644+
.. note:: A `#` character on a line indicates that all text after the `#` to the end of a line is a comment.
636645

637646
.. _fig_fpga_coord_system:
638647

@@ -649,10 +658,10 @@ All pads either have x equal to ``0`` or ``nx + 1`` or y equal to ``0`` or ``ny
649658

650659
Placement File Format Example
651660
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
652-
An example placement file is:
661+
653662

654663
.. code-block:: none
655-
:caption: Example placement file.
664+
:caption: Example 2D Placement File
656665
:linenos:
657666
658667
Netlist file: xor5.net Architecture file: sample.xml
@@ -669,6 +678,23 @@ An example placement file is:
669678
xor5 1 2 0 #6
670679
[1] 1 1 0 #7
671680
681+
.. code-block:: none
682+
:caption: Example 3D Placement File with Layer Column
683+
:linenos:
684+
685+
Netlist file: xor5.net Architecture file: sample.xml
686+
Array size: 2 x 2 logic blocks
687+
688+
#block name x y subblk layer block number
689+
#---------- -- -- ------- ------ -----------
690+
a 0 1 0 0 #0 -- NB: block number is a comment.
691+
b 1 0 0 1 #1
692+
c 0 2 1 0 #2
693+
d 1 3 0 1 #3
694+
e 1 3 1 0 #4
695+
out:xor5 0 2 0 1 #5
696+
xor5 1 2 0 0 #6
697+
[1] 1 1 0 1 #7
672698
673699
.. _vpr_route_file:
674700

doc/src/vpr/vpr_constraints.rst

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ VPR Constraints
22
=========================
33
.. _vpr_constraints:
44

5-
VPR allows users to run the flow with placement constraints that enable primitives to be locked down to a specific region on the chip and global routing constraints that facilitate the routing of global nets through clock networks.
6-
7-
Users can specify these constraints through a constraints file in XML format, as shown in the format below.
5+
Users can specify placement and/or global routing constraints on all or part of a design through a constraints file in XML format, as shown in the format below. These constraints are optional and allow detailed control of the region on the chip in which parts of the design are placed, and of the routing of global nets through dedicated (usually clock) networks.
86

97
.. code-block:: xml
108
:caption: The overall format of a VPR constraints file

libs/EXTERNAL/libtatum/libtatum/tatum/TimingReporter.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -606,7 +606,7 @@ Time TimingReporter::report_timing_data_arrival_subpath(std::ostream& os,
606606

607607
{
608608
//Input constraint
609-
TATUM_ASSERT(subpath.elements().size() > 0);
609+
TATUM_ASSERT(!subpath.elements().empty());
610610
const TimingPathElem& path_elem = *(subpath.elements().begin());
611611

612612
Time input_constraint;
@@ -712,7 +712,7 @@ bool TimingReporter::nearly_equal(const Time& lhs, const Time& rhs) const {
712712

713713
size_t TimingReporter::estimate_point_print_width(const TimingPath& path) const {
714714
size_t width = 60; //default
715-
for(auto subpath : {path.clock_launch_path(), path.data_arrival_path(), path.clock_capture_path()}) {
715+
for(const auto& subpath : {path.clock_launch_path(), path.data_arrival_path(), path.clock_capture_path()}) {
716716
for(auto elem : subpath.elements()) {
717717
//Take the longest typical point name
718718
std::string point = name_resolver_.node_name(elem.node()) + " (" + name_resolver_.node_type_name(elem.node()) + ")";

libs/EXTERNAL/libtatum/libtatum/tatum/tags/TimingTags.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ class TimingTags {
113113
using value_type = T;
114114
using pointer = T*;
115115
using reference = T&;
116+
using const_reference = const T&;
116117

117118
Iterator(): p_(nullptr) {}
118119
Iterator(pointer p): p_(p) {}
@@ -123,7 +124,7 @@ class TimingTags {
123124
friend bool operator!=(Iterator a, Iterator b) { return a.p_ != b.p_; }
124125

125126
reference operator*() { return *p_; }
126-
const reference operator*() const { return *p_; } //Required for MSVC (gcc/clang are fine with only the non-cost version)
127+
const_reference operator*() const { return *p_; } //Required for MSVC (gcc/clang are fine with only the non-cost version)
127128
pointer operator->() { return p_; }
128129
reference operator[](size_t n) { return *(p_ + n); }
129130

libs/librrgraph/src/base/rr_graph_storage.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,9 @@
1515
#include "vtr_memory.h"
1616
#include "vtr_strong_id_range.h"
1717
#include "vtr_array_view.h"
18-
#include<iostream>
18+
#include <iostream>
1919
#include <optional>
20+
#include <cstdint>
2021

2122
/* Main structure describing one routing resource node. Everything in *
2223
* this structure should describe the graph -- information needed only *

libs/librrgraph/src/base/rr_node_types.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include <vector>
88
#include <array>
99
#include <map>
10+
#include <cstdint>
1011
#include "vtr_range.h"
1112
#include "vtr_ndmatrix.h"
1213

libs/librrgraph/src/io/gen/README.gen.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
`rr_graph_uxsdcxx_interface.h` are generated via uxsdcxx and are checked in to
33
avoid requiring python3 and the uxsdcxx depedencies to build VPR.
44

5-
See `vpr/src/route/gen/SCHEMA_GENERATOR.md` for details.
5+
See `$VTR_DIR/libs/librrgraph/src/base/SCHEMA_GENERATOR.md` for details.

0 commit comments

Comments
 (0)