aboutsummaryrefslogtreecommitdiffstats
path: root/doc/getting.rst
blob: 4abab4530e9a66a936c53a54fc2c68806669fe47 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
.. _PACKAGES:

Getting | Installing
####################

Package managers
****************

Package managers of many popular distributions provide pre-built packages of GHDL. This is the case for `apt`
(Debian/Ubuntu), `dnf` (Fedora), `pacman` (Arch Linux, MSYS2) or `brew` (macOS). Since GHDL supports three different backends
and two library sets (*regular* or *GPL-compatible*), at least six packages with different features might be available in
each package manager.

As a rule of thumb, mcode backend is the fastest for analysis and synthesis. It also allows setting the base simulation time
for speeding up execution. Therefore, it is the recommended pick if available on your platform (x86/amd64, on Windows x86
only). On other platforms, or for using specific features for co-simulation or code coverage, LLVM or GCC need to be used.
See further differences between backends in :ref:`BUILD`.

.. _RELEASE:packages:

Nightly packages
****************

Assets from nightly GHDL builds are available at `github.com/ghdl/ghdl/releases/nightly <https://github.com/ghdl/ghdl/releases/nightly>`__.
These are mostly meant to be used in Continuous Integration (CI) workflows. Precisely, `setup-ghdl-ci <https://github.com/ghdl/setup-ghdl-ci>`__
allows to easily setup nightly assets in GitHub Actions workflows.

However, users on Windows (MSYS2) or Ubuntu might want to download the tarballs/zipfiles and extract/install them locally.

.. _GETTING:PrecompVendor:

Precompile Vendor Primitives
****************************

Vendors like Lattice, Intel (Altera) and Xilinx have their own simulation libraries,
especially for FPGA primitives, soft and hard macros. These libraries cannot
be shipped with GHDL, but GHDL offers prepared compile scripts to pre-compile
these vendor libraries, if the vendor tool is present in the environment. There
are also popular simulation and verification libraries like OSVVM [#f1]_ or
UVVM [#f2]_, which can be pre-compiled, too.

The compilation scripts are writen in the shell languages: *PowerShell* for
*Windows™* and *Bash* for *GNU/Linux*, *MacOS* and *MSYS2*/*MinGW*. The
compile scripts can colorize the GHDL warning and error lines with the help
of ``grc/grcat`` [#f4]_.

.. HINT::
  Vendor precompile scripts for OSVVM and UVVM are tested periodically in `ghdl/extended-tests <https://github.com/ghdl/extended-tests>`__.

Supported Vendors Libraries
===========================

* Lattice (3.6 or later):

  * ``ec``
  * ``ecp``, ``ecp2``, ``ecp3``, ``ecp5u``
  * ``lptm``, ``lptm2``
  * ``machxo``, ``machxo2``, ``machxo3l``, ``machxo3d``
  * ``sc``, ``scm``
  * ``xp``, ``xp2``
  * ...

* Intel (Altera) Quartus (13.0 or later):

  * ``lpm``, ``sgate``
  * ``altera``, ``altera_mf``, ``altera_lnsim``
  * ``arriaii``, ``arriaii_pcie_hip``, ``arriaiigz``
  * ``arriav``, ``arriavgz``, ``arriavgz_pcie_hip``
  * ``cycloneiv``, ``cycloneiv_pcie_hip``, ``cycloneive``
  * ``cyclonev``
  * ``max``, ``maxii``, ``maxv``
  * ``stratixiv``, ``stratixiv_pcie_hip``
  * ``stratixv``, ``stratixv_pcie_hip``
  * ``fiftyfivenm``, ``twentynm``
  * ...

* Xilinx ISE (14.0 or later):

  * ``unisim`` (incl. ``secureip``)
  * ``unimacro``
  * ``simprim`` (incl. ``secureip``)
  * ``xilinxcorelib``

* Xilinx Vivado (2014.1 or later):

  * ``unisim`` (incl. ``secureip``)
  * ``unimacro``

Supported Simulation and Verification Libraries
===============================================

* OSVVM [#f1]_ (for VHDL-2008)
* UVVM [#f2]_ (for VHDL-2008)


---------------------------------------------------------------------

Script Configuration
====================

The vendor library compile scripts need to know where the used / latest vendor
tool chain is installed. Therefore, the scripts implement a default installation
directory search as well as environment variable checks. If a vendor tool cannot
be detected or the script chooses the wrong vendor library source directory,
then it's possible to provide the path via ``--source`` (Bash) or ``-Source``
(PoSh).

The generated output is stored relative to the current working directory. The
scripts create a sub-directory for each vendor. The default output directory can
be overwritten by the parameter ``--output`` (Bash) or ``-Output`` (PoSh).

To compile all source files with GHDL, the simulator executable is searched in
``PATH``. The found default GHDL executable can be overwritten by setting the
environment variable ``GHDL`` or by passing the parameter ``--ghdl`` (Bash) or
``-GHDL`` (PoSh) to the scripts.

If the vendor library compilation is used very often, it's recommend to configure
these parameters in ``config.sh`` (Bash) or ``config.psm1`` (PoSh), so the command
line can be shortened to the essential parts.

---------------------------------------------------------------------

Compiling in Bash
=================

The provided Bash scripts support these environments:

* Linux
* MacOS
* MSYS2 / MinGW
* WSL (Windows Subsystem for Linux)


Follow these steps:

* **Step 0 - Configure the scripts (optional)**

  See the next section for how to configure ``config.sh``.

* **Step 1 - Browse to your simulation working directory**

  .. code-block:: Bash

    $ cd <MySimulationFolder>


* **Step 2 - Start the compilation script(s)**

  Choose one or multiple of the following scripts to run the pre-compilation
  process.

  .. code-block:: Bash

    $ /usr/local/lib/ghdl/vendors/compile-altera.sh --all
    $ /usr/local/lib/ghdl/vendors/compile-intel.sh --all
    $ /usr/local/lib/ghdl/vendors/compile-lattice.sh --all
    $ /usr/local/lib/ghdl/vendors/compile-osvvm.sh --all
    $ /usr/local/lib/ghdl/vendors/compile-uvvm.sh --all
    $ /usr/local/lib/ghdl/vendors/compile-xilinx-ise.sh --all
    $ /usr/local/lib/ghdl/vendors/compile-xilinx-vivado.sh --all


  In most cases GHDL is installed into ``/usr/local/``. The scripts are
  installed into the ``lib\ghdl\vendors`` directory.

* **Step 3 - Viewing the result**

  This creates vendor directories in your current working directory and
  compiles the vendor files into them.


  .. code-block:: Bash

    $ ls -ahl
    ...
    drwxr-xr-x  2 <user> <group>  56K Mar 09 17:41 altera
    drwxr-xr-x  2 <user> <group>  56K Mar 09 17:42 intel
    drwxr-xr-x  2 <user> <group>  56K Mar 09 17:42 lattice
    drwxr-xr-x  2 <user> <group>  56K Mar 09 17:48 osvvm
    drwxr-xr-x  2 <user> <group>  56K Mar 09 17:58 uvvm
    drwxr-xr-x  2 <user> <group>  56K Mar 09 17:58 xilinx-ise
    drwxr-xr-x  2 <user> <group>  56K Mar 09 17:48 xilinx-vivado



---------------------------------------------------------------------

Compiling in PowerShell
=======================

The provided PowerShell scripts support these environments:

* Windows™ 10 (PowerShell 5 and PowerShell 6)


Follow these steps:

* **Step 0 - Configure the scripts (optional)**

  See the next section for how to configure ``config.psm1``.

* **Step 1 - Browse to your simulation working directory**

  .. code-block:: PowerShell

     PS> cd <MySimulationFolder>

* **Step 2 - Start the compilation script(s)**

  Choose one or multiple of the following scripts to run the pre-compilation
  process.

  .. code-block:: PowerShell

     PS> <GHDL>\lib\ghdl\vendors\compile-altera.ps1 -All
     PS> <GHDL>\lib\ghdl\vendors\compile-intel.ps1 -All
     PS> <GHDL>\lib\ghdl\vendors\compile-lattice.ps1 -All
     PS> <GHDL>\lib\ghdl\vendors\compile-osvvm.ps1 -All
     PS> <GHDL>\lib\ghdl\vendors\compile-uvvm.ps1 -All
     PS> <GHDL>\lib\ghdl\vendors\compile-xilinx-ise.ps1 -All
     PS> <GHDL>\lib\ghdl\vendors\compile-xilinx-vivado.ps1 -All

  .. # In most cases GHDL is installed into ``/usr/local/``.

  The scripts are installed into the ``lib\ghdl\vendors`` directory.

* **Step 3 - Viewing the result**

  This creates vendor directories in your current working directory and
  compiles the vendor files into them.

  .. code-block::

     PS> dir
         Directory: D:\temp\ghdl

     Mode           LastWriteTime       Length Name
     ----           -------------       ------ ----
     d----    09.03.2018    19:33        <DIR> altera
     d----    09.03.2018    19:38        <DIR> intel
     d----    09.03.2018    19:38        <DIR> lattice
     d----    09.03.2018    19:38        <DIR> osvvm
     d----    09.03.2018    19:45        <DIR> uvvm
     d----    09.03.2018    19:06        <DIR> xilinx-ise
     d----    09.03.2018    19:40        <DIR> xilinx-vivado


---------------------------------------------------------------------

Configuration Files
===================

For Bash: `config.sh`
---------------------

Please open the ``config.sh`` file and set the dictionary entries for the
installed vendor tools to your tool's installation directories. Use an empty
string ``""`` for not installed tools.

``config.sh``:

.. code-block:: Bash

   declare -A InstallationDirectory
   InstallationDirectory[AlteraQuartus]="/opt/Altera/16.0"
   InstallationDirectory[IntelQuartus]="/opt/intelFPGA/20.1"
   InstallationDirectory[LatticeDiamond]="/opt/Diamond/3.10_x64"
   InstallationDirectory[OSVVM]="/home/<user>/git/GitHub/OSVVM"
   InstallationDirectory[UVVM]="/home/<user>/git/GitHub/UVVM"
   InstallationDirectory[XilinxISE]="/opt/Xilinx/14.7"
   InstallationDirectory[XilinxVivado]="/opt/Xilinx/Vivado/2020.2"


For PowerShell: `config.psm1`
-----------------------------

Please open the ``config.psm1`` file and set the dictionary entries for the
installed vendor tools to your tool's installation
folder. Use an empty string ``""`` for not installed tools.

``config.psm1``:

.. code-block:: PowerShell

   $InstallationDirectory = @{
     "AlteraQuartus" =   "C:\Altera\16.0";
     "IntelQuartus" =    "C:\Altera\20.1";
     "LatticeDiamond" =  "C:\Lattice\Diamond\3.10_x64";
     "XilinxISE" =       "C:\Xilinx\14.7\ISE_DS";
     "XilinxVivado" =    "C:\Xilinx\Vivado\2020.2";
     "OSVVM" =           "C:\git\GitHub\OSVVM";
     "UVVM" =            "C:\git\GitHub\UVVM"
   }


Additional Script Parameters
============================

Each script supports partial compilations e.g. of shared packages and
individual parts. In addition, the amount of printout to the console can be
controlled. Some scripts may offer vendor specific options.


For Bash Scripts:
-----------------

* Common parameters to most scripts:

  .. code-block:: none

     --help, -h            Print the embedded help page(s).
     --clean, -c           Cleanup directory before analyzing.
     --no-warnings, -n     Don't show warnings. Report errors only.
     --skip-existing, -s   Skip already compiled files (an *.o file exists).
     --skip-largefiles, -S Don't compile large entities like DSP and PCIe primitives.
     --halt-on-error, -H   Stop compiling if an error occurred.

* ``compile-altera.sh``

  Selectable libraries:

  .. code-block:: none

     --all, -a             Compile all libraries, including common libraries, packages and device libraries.
     --altera              Compile base libraries like 'altera' and 'altera_mf'
     --max                 Compile device libraries for Max CPLDs
     --arria               Compile device libraries for Arria FPGAs
     --cyclone             Compile device libraries for Cyclone FPGAs
     --stratix             Compile device libraries for Stratix FPGAs

  Compile options:

  .. code-block:: none

     --vhdl93              Compile selected libraries with VHDL-93 (default).
     --vhdl2008            Compile selected libraries with VHDL-2008.

* ``compile-xilinx-ise.sh``

  Selectable libraries:

  .. code-block:: none

     --all, -a             Compile all libraries, including common libraries, packages and device libraries.
     --unisim              Compile the unisim primitives
     --unimacro            Compile the unimacro macros
     --simprim             Compile the simprim primitives
     --corelib             Compile the xilinxcorelib macros
     --secureip            Compile the secureip primitives

  Compile options:

  .. code-block:: none

     --vhdl93              Compile selected libraries with VHDL-93 (default).
     --vhdl2008            Compile selected libraries with VHDL-2008.

* ``compile-xilinx-vivado.sh``

  Selectable libraries:

  .. code-block:: none

     --all, -a             Compile all libraries, including common libraries, packages and device libraries.
     --unisim              Compile the unisim primitives
     --unimacro            Compile the unimacro macros
     --secureip            Compile the secureip primitives

  Compile options:

  .. code-block:: none

     --vhdl93              Compile selected libraries with VHDL-93 (default).
     --vhdl2008            Compile selected libraries with VHDL-2008.

* ``compile-osvvm.sh``

  Selectable libraries:

  .. code-block:: none

     --all, -a             Compile all.
     --osvvm               Compile the OSVVM library.

* ``compile-uvvm.sh``

  Selectable libraries:

  .. code-block:: none

     --all, -a             Compile all.
     --uvvm                Compile the UVVM libraries.


For PowerShell Scripts:
-----------------------

* Common parameters to all scripts:

  .. code-block:: none

     -Help                 Print the embedded help page(s).
     -Clean                Cleanup directory before analyzing.
     -SuppressWarnings     Don't show warnings. Report errors only.

* ``compile-altera.ps1``

  Selectable libraries:

  .. code-block:: none

     -All                  Compile all libraries, including common libraries, packages and device libraries.
     -Altera               Compile base libraries like 'altera' and 'altera_mf'
     -Max                  Compile device libraries for Max CPLDs
     -Arria                Compile device libraries for Arria FPGAs
     -Cyclone              Compile device libraries for Cyclone FPGAs
     -Stratix              Compile device libraries for Stratix FPGAs

  Compile options:

  .. code-block:: none

     -VHDL93               Compile selected libraries with VHDL-93 (default).
     -VHDL2008             Compile selected libraries with VHDL-2008.

* ``compile-xilinx-ise.ps1``

  Selectable libraries:

  .. code-block:: none

     -All                  Compile all libraries, including common libraries, packages and device libraries.
     -Unisim               Compile the unisim primitives
     -Unimacro             Compile the unimacro macros
     -Simprim              Compile the simprim primitives
     -CoreLib              Compile the xilinxcorelib macros
     -Secureip             Compile the secureip primitives

  Compile options:

  .. code-block:: none

     -VHDL93               Compile selected libraries with VHDL-93 (default).
     -VHDL2008             Compile selected libraries with VHDL-2008.

* ``compile-xilinx-vivado.ps1``

  Selectable libraries:

  .. code-block:: none

     -All                  Compile all libraries, including common libraries, packages and device libraries.
     -Unisim               Compile the unisim primitives
     -Unimacro             Compile the unimacro macros
     -Secureip             Compile the secureip primitives

  Compile options:

  .. code-block:: none

     -VHDL93               Compile selected libraries with VHDL-93 (default).
     -VHDL2008             Compile selected libraries with VHDL-2008.

* ``compile-osvvm.ps1``

  Selectable libraries:

  .. code-block:: none

     -All                  Compile all.
     -OSVVM                Compile the OSVVM library.

* ``compile-uvvm.ps1``

  Selectable libraries:

  .. code-block:: none

     -All                  Compile all.
     -UVVM                 Compile the UVVM libraries.

--------------------------------------------------------------------------------

.. container:: footnotes

	 .. rubric:: Footnotes

   .. [#f1] OSVVM http://github.com/OSVVM/OSVVM
   .. [#f2] UVVM https://github.com/UVVM/UVVM_All
   .. [#f4] Generic Colourizer http://kassiopeia.juls.savba.sk/~garabik/software/grc.html