Skip to content
Snippets Groups Projects
Commit 02bebb22 authored by Eric Kooistra's avatar Eric Kooistra
Browse files

Added 100 q) and 100 r). Key hdl_lib_excludes now only applies to synthesis to...

Added 100 q) and 100 r). Key hdl_lib_excludes now only applies to synthesis to avoid Modelsim compile error on library clause in e.g. tech_ddr_stratixiv.vhd.
parent da9bf9bc
No related branches found
No related tags found
No related merge requests found
...@@ -378,7 +378,7 @@ In addition several other files need to be modified to be able to simulate the I ...@@ -378,7 +378,7 @@ In addition several other files need to be modified to be able to simulate the I
- the compile_ip.tcl files need to be updated according to the generated/sim/mentor/msim_setup.tcl - the compile_ip.tcl files need to be updated according to the generated/sim/mentor/msim_setup.tcl
because the IP library name and file names may have changed because the IP library name and file names may have changed
. the copy_hex_files.tcl files need to be updated . the copy_hex_files.tcl files need to be updated
. the IP lirbary name in the hdllib.cfg of the IP needs to be changed . the IP library name in the hdllib.cfg of the IP needs to be changed
This concerned these files: This concerned these files:
...@@ -441,20 +441,6 @@ and the try to simulate a design, eg.: ...@@ -441,20 +441,6 @@ and the try to simulate a design, eg.:
- unb2_minimal - unb2_minimal
The disadvantage of this scheme is that only one version of Quartus can be supported. For a minor version
change it may not be necessary to upgrade, but for a major version change or for a device family change it
probably is. To preserve the old version IP it is best to treat the new version as a new technology. For
example for Arria10 we now use Quartus 15.0 and device family of UniBoard2 v0 and the IP for that is kept
in:
$RADIOHDL/libraries/technology/ip_arria10/
A future version of the IP can be kept in a version sub directory (TBD):
$RADIOHDL/libraries/technology/ip_arria10/v16.x/
3) HDL environment configuration files 3) HDL environment configuration files
...@@ -579,6 +565,10 @@ d) hdllib.cfg key descriptions ...@@ -579,6 +565,10 @@ d) hdllib.cfg key descriptions
IP is instantiated as component. Hence the exclusion works because for a component instance that is not used only the IP is instantiated as component. Hence the exclusion works because for a component instance that is not used only the
component declaration (in the component package) needs to be known by the tools. Hence the exclusion makes use of the same component declaration (in the component package) needs to be known by the tools. Hence the exclusion makes use of the same
VHDL component mechanism as the technology independence. VHDL component mechanism as the technology independence.
The exclusion is only done for synthesis, so not for simulation. The reason is that for simulation it is oke to keep the
library included and also necessary to avoid compile error when the library is mentioned in a LIBRARY clause. For
IP libraries this occurs in the tech_*.vhd to declare IP libraries to ensure default binding in simulation, e.g. like in
tech_ddr_stratixiv.vhd. This IP library clause is ignored by synthesis, so then the exclusion causes no errors.
The difference between this 'hdl_lib_excludes' key and the 'hdl_lib_technology' key is that the HDL libraries with The difference between this 'hdl_lib_excludes' key and the 'hdl_lib_technology' key is that the HDL libraries with
'hdl_lib_technology' key value that does not match the specified technologies are not build. Whereas HDL libraries that 'hdl_lib_technology' key value that does not match the specified technologies are not build. Whereas HDL libraries that
are excluded with 'hdl_lib_excludes' are still created in the build directory, but they are not used for that HDL library are excluded with 'hdl_lib_excludes' are still created in the build directory, but they are not used for that HDL library
...@@ -683,9 +673,10 @@ find the new avs2_eth_coe in $RADIOHDL. ...@@ -683,9 +673,10 @@ find the new avs2_eth_coe in $RADIOHDL.
5) Build directory location 5) Build directory location
The Modelsim and Quartus build location central outside the $RADIOHDL sources directory tree: The Modelsim and Quartus build location central outside the $RADIOHDL sources directory tree, whereby the
subdirectory names are defined by the corresponding keysin the hdltool_<toolset>.cfg:
<build_dir>/<toolset>/<tool_name>/<hdl_lib_name> <build_dir>/<toolset_name>/<hdl_lib_name>
eg. eg.
...@@ -932,6 +923,87 @@ p) Python peripherals ...@@ -932,6 +923,87 @@ p) Python peripherals
may be to use a synbolic link from a central directory to each local Python peripheral. may be to use a synbolic link from a central directory to each local Python peripheral.
q) Improve support IP for multiple FPGA device types and Quartus tool versions
The IP is FPGA type specific (because it needs to be defined in the Qsys source file) and tool version specific
(because some parameters and even port IO may change). Currently there is only one IP directory per FPGA
technology (eg. ip_arria10) so there is no further separation into device family type and tool version. The
disadvantage of this scheme is that only one version of Quartus can be supported. For a minor version
change it may not be necessary to upgrade, but for a major version change or for a device family type (eg. from
engineering sample to production sample) change it probably is. To preserve the old version IP it is best to
treat the both the FPGA device version id and the Quartus tool version as a new technology. For example for
Arria10 we now use Quartus 15.0 and device family of UniBoard2 v0 and the IP for that is kept in:
$RADIOHDL/libraries/technology/ip_arria10/
This can be renamed in:
$RADIOHDL/libraries/technology/ip_arria10_device_10AX115U4F45I3SGES_quartus_15.0/
For a directory name it is allowed to use a '.' instead of a '_'. The directory name is not mandatory, but the name convention is
to define the FPGA technology as a triplet:
ip_<fpga family>_device_<fpga identifier>_quartus_<version>
A future version of the IP can be kept in:
$RADIOHDL/libraries/technology/ip_arria10_device_10AX115U4F45I3SGES_quartus_16.0/
The technology_pkg.vhd then gets;
c_tech_arria10_device_10AX115U4F45I3SGES_quartus_14_1 = ...;
c_tech_arria10_device_10AX115U4F45I3SGES_quartus_15_0 = ...;
c_tech_arria10 = c_tech_arria10_device_10AX115U4F45I3SGES_quartus_15_0; -- optional default
The hdllib.cfg of the specific technology IP library then has key (only one value):
hdl_lib_technology = ip_arria10_device_10AX115U4F45I3SGES_quartus_15_0
The hdltool_<toolset>.cfg can support multiple technologies eg. to be able to simulate a system with more than one FPGA that are
of different technology (eg. an application with Uniboard1 and Uniboard2):
technology_names = ip_stratixiv
ip_arria10_device_10AX115U4F45I3SGES_quartus_15_0
All libraries that have hdl_lib_technology value that is not in the list of technology_names are removed from the dictionary list
by hdl_config.py, so these IP libraries will not be build.
The build directory currently contains:
<build_dir>/<toolset_name>/<hdl_lib_name>
This scheme is probably still sufficent to also support the FPGA technology as a triplet. However it may be necessary to rename the
library key values in the IP hdllib.cfg to contain the full triplet information, so eg.
hdl_lib_name = ip_arria10_fifo
hdl_library_clause_name = ip_arria10_fifo_lib
then becomes:
hdl_lib_name = ip_arria10_device_10AX115U4F45I3SGES_quartus_15_0_fifo
hdl_library_clause_name = ip_arria10_device_10AX115U4F45I3SGES_quartus_15_0_fifo_lib
this is a bit awkward. If only one Quartus version and only one device type are supported per toolset, then all these versions can keep
the same basic hdl_lib_name and hdl_library_clause_name because the IP libraries that are not used can be removed from the build.
Alternatively the hdllib_config.py could support multiple technology version IP libraries that use the same logical library name and use
clause.
The purpose is to be able to handle in parallel different FPGA vendors, different FPGA types and different tool version. We do not have
to support all combinations, but only the combinations that we actually use. Eg. for the FPGA type this implies that we only support the FPGA types
that are actually used on our board. If we make a new board with another FPGA, then we add the technology triplet for that FPGA.
r) Improve toolset scheme
The toolset defines the combination of Modelsim version and Quartus version. Currently there are two toolsets 'unb1' and 'unb2'. This
toolset scheme needs to be improved because:
- for python they are defined by the hdltool_<toolset>.cfg, but for the run_* bash scripts they are defined in set_modelsim and set_quartus,
can they be defined in a common source (eg. base on hdltool_<toolset>.cfg set an environment variable and use that for bash). The bash
script must then be ran from the same terminal as where the python config script was used to set the environment variable, because otherwise
the environment variable is not set or may not be correct.
- the toolsets are tight to a board name 'unb1' (is that oke?) or should we use more general toolset names, or do we need a symbolic toolset names at all?
- there is also a 'site' level in the bash scripts (is that still needed?)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment