Example SystemC Execution¶
This is an example similar to the Example C++ Execution, but using SystemC. We’ll also explicitly run make.
First you need Verilator installed, see Installation. In brief, if you installed Verilator using the package manager of your operating system, or did a make install to place Verilator into your default path, you do not need anything special in your environment, and should not have VERILATOR_ROOT set. However, if you installed Verilator from sources and want to run Verilator out of where you compiled Verilator, you need to point to the kit:
# See above; don't do this if using an OS-distributed Verilator
export VERILATOR_ROOT=/path/to/where/verilator/was/installed
export PATH=$VERILATOR_ROOT/bin:$PATH
Now, let’s create an example Verilog, and SystemC wrapper file:
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:
verilator --sc --exe -Wall sc_main.cpp our.v
This example does not use –build, therefore we need to explicitly compile it:
make -j -C obj_dir -f Vour.mk Vour
And now we run it:
obj_dir/Vour
And we get, after the SystemC banner, the same output as the C++ example:
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 examples
directory in the
distribution.