iVerilog Simulator
Through add_requires("iverilog")
configuration, we can automatically pull the iverilog toolchain package, and then use set_toolchains("@iverilog")
to automatically bind the toolchain to compile the project.
add_requires("iverilog") target("hello") add_rules("iverilog.binary") set_toolchains("@iverilog") add_files("src/*.v")
Set abstract configuration
add_requires("iverilog") target("hello") add_rules("iverilog.binary") set_toolchains("@iverilog") add_files("src/*.v") add_defines("TEST") add_includedirs("inc") set_languages("v1800-2009")
We can use set_languages("v1800-2009")
to set the language standard for switching Verilog.
Currently supported values and mappings are as follows:
["v1364-1995"] = "-g1995" ["v1364-2001"] = "-g2001" ["v1364-2005"] = "-g2005" ["v1800-2005"] = "-g2005-sv" ["v1800-2009"] = "-g2009" ["v1800-2012"] = "-g2012"
Set custom flags
add_requires("iverilog") target("hello") add_rules("iverilog.binary") set_toolchains("@iverilog") add_files("src/*.v") add_values("iverilogs.flags", "-DTEST")
Build the project
$ xmake check iverilog... iverilog check vvp... vvp [50%]: linking.iverilog hello.vvp [100%]: build ok!
Run the program
$ xmake run hello world! LXT2 INFO: dumpfile hello.vcd opened, ready for output. src/main.v:6: $finish called at 0 (1s)
More complete examples: iVerilog Examples
Verilator Simulator
Through add_requires("verilator")
configuration, we can automatically pull the verilator toolchain package, and then use set_toolchains("@verilator")
to automatically bind to the toolchain to compile the project.
add_requires("verilator") target("Hello") add_rules("verilator.binary") set_toolchains("@verilator") add_files("src/*.v") add_files("src/*.cpp")
verilator project, we need an additional sim_main.cpp
file to participate in the compilation, as the entry code of the program.
#include "hello.h" #include "verilated.h" (Simplified Chinese) int main(int argc, char** argv) { VerilatedContext* contextp = new VerilatedContext; contextp->commandArgs(argc, argv); hello* top = new hello{contextp}; while (!contextp->gotFinish()) { top->eval(); } remove top. Remove contextp. returns 0. }
Set abstract configuration
add_requires("verilator") target("Hello") add_rules("verilator.binary") set_toolchains("@verilator") add_files("src/*.v") add_defines("TEST") add_includedirs("inc") set_languages("v1800-2009")
We can use set_languages("v1800-2009")
to set the language standard for switching Verilog.
Currently supported values and mappings are as follows.
--Verilog ["v1364-1995"] = "+1364-1995ext+v". ["v1364-2001"] = "+1364-2001ext+v". ["v1364-2005"] = "+1364-2005ext+v". --system-Verilog ["v1800-2005"] = "+1800-2005ext+v". ["v1800-2009"] = "+1800-2009ext+v". ["v1800-2012"] = "+1800-2012ext+v", ["v1800-2017"] = "+1800-2017ext+v".
Set custom flags
add_requires("verilator") target("Hello") add_rules("verilator.binary") set_toolchains("@verilator") add_files("src/*.v") add_files("src/*.cpp") add_values("verilator.flags", "--trace", "--timing")
Build the project
$ xmake [ 0%]: compiling.verilog src/main.v [ 15%]: cache compiling.release /Users/ruki/.xmake/packages/v/verilator/2023.1.10/cd2268409c1d44799288c7759b3cbd56/share/verilator/include/verilated.cpp [ 15%]: cache compiling.release build/.gens/hello/macosx/x86_64/release/rules/verilator/hello___024root__Slow.cpp [ 15%]: cache compiling.release build/.gens/hello/macosx/x86_64/release/rules/verilator/hello___024root__DepSet_h9053a130__0__Slow.cpp [ 15%]: cache compiling.release build/.gens/hello/macosx/x86_64/release/rules/verilator/hello.cpp [ 15%]: cache compiling.release /Users/ruki/.xmake/packages/v/verilator/2023.1.10/cd2268409c1d44799288c7759b3cbd56/share/verilator/include/verilated_threads.cpp [ 15%]: cache compiling.release build/.gens/hello/macosx/x86_64/release/rules/verilator/hello__Syms.cpp [ 15%]: cache compiling.release build/.gens/hello/macosx/x86_64/release/rules/verilator/hello___024root__DepSet_h07139e86__0.cpp [15%]: cache compiling.release src/sim_main.cpp [ 15%]: cache compiling.release build/.gens/hello/macosx/x86_64/release/rules/verilator/hello___024root__DepSet_h9053a130__0.cpp [84%]: linking. release hello [100%]: build ok!
Run the program
$ xmake run ruki-2:hello ruki$ xmake run hello world! - src/main.v:4:Verilog $finish
A more complete example: Verilator
Compile static library
We also provide verilator.static
rules to compile and generate verilator static libraries.
add_requires("verilator") target("hello") add_rules("verilator.static") set_toolchains("@verilator") add_files("src/*.v") target("test") add_deps("hello") add_files("src/*.cpp")