File: example_sc.rst

package info (click to toggle)
verilator 5.044-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 69,096 kB
  • sloc: cpp: 152,937; python: 22,624; ansic: 11,002; yacc: 6,111; lex: 2,011; makefile: 1,428; sh: 603; perl: 302
file content (74 lines) | stat: -rw-r--r-- 1,822 bytes parent folder | download
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
.. Copyright 2003-2026 by Wilson Snyder.
.. SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0

.. _example systemc execution:

Example SystemC Execution
=========================

This is an example similar to the :ref:`Example C++ Execution`, but using
SystemC. We'll also explicitly run make.

.. include:: example_common_install.rst

Now, let's create an example Verilog, and SystemC wrapper file:

.. code-block:: bash

   mkdir test_our_sc
   cd test_our_sc

   cat >our.v <<'EOF'
     module our (clk);
        input clk;  // Clock is required to get initial activation
        always @(posedge clk)
           begin $display("Hello World"); $finish; end
     endmodule
   EOF

   cat >sc_main.cpp <<'EOF'
     #include "Vour.h"
     using namespace sc_core;
     int sc_main(int argc, char** argv) {
         Verilated::commandArgs(argc, argv);
         sc_clock clk{"clk", 10, SC_NS, 0.5, 3, SC_NS, true};
         Vour* top = new Vour{"top"};
         top->clk(clk);
         while (!Verilated::gotFinish()) { sc_start(1, SC_NS); }
         delete top;
         return 0;
     }
   EOF

Now we run Verilator on our little example:

.. code-block:: bash

   verilator --sc --exe -Wall sc_main.cpp our.v

This example does not use --build, therefore we need to explicitly compile
it:

.. code-block:: bash

   make -j -C obj_dir -f Vour.mk Vour

And now we run it:

.. code-block:: bash

   obj_dir/Vour

And we get, after the SystemC banner, the same output as the C++ example:

.. code-block:: bash

   SystemC 2.3.3-Accellera

   Hello World
   - our.v:4: Verilog $finish

Really, you're better off using a Makefile to run the steps for you so when
your source changes it will automatically run all of the appropriate steps.
For examples that do this see the :file:`examples` directory in the
distribution.