mirror of
https://github.com/verilator/verilator.git
synced 2025-01-01 04:07:34 +00:00
parent
b0992406aa
commit
864a852bca
@ -324,6 +324,7 @@ detailed descriptions of these arguments.
|
|||||||
--clk <signal-name> Mark specified signal as clock
|
--clk <signal-name> Mark specified signal as clock
|
||||||
--no-clk <signal-name> Prevent marking specified signal as clock
|
--no-clk <signal-name> Prevent marking specified signal as clock
|
||||||
--compiler <compiler-name> Tune for specified C++ compiler
|
--compiler <compiler-name> Tune for specified C++ compiler
|
||||||
|
--compiler-include Include additional header in the precompiled one
|
||||||
--converge-limit <loops> Tune convergence settle time
|
--converge-limit <loops> Tune convergence settle time
|
||||||
--coverage Enable all coverage
|
--coverage Enable all coverage
|
||||||
--coverage-line Enable line coverage
|
--coverage-line Enable line coverage
|
||||||
|
@ -222,6 +222,13 @@ Summary:
|
|||||||
expressions into sub-expressions to avoid error C1009, and breaking
|
expressions into sub-expressions to avoid error C1009, and breaking
|
||||||
deep blocks into functions to avoid error C1061.
|
deep blocks into functions to avoid error C1061.
|
||||||
|
|
||||||
|
.. option:: --compiler-include <header-path>
|
||||||
|
|
||||||
|
Specifies additional headers to be included in the final PCH header.
|
||||||
|
It is required to add them to this header, due to compilers'
|
||||||
|
limitation that allow only one precompiled header per compilation.
|
||||||
|
Use this instead of ::vlopt:`-CFLAGS` with `-include <header-path>`.
|
||||||
|
|
||||||
.. option:: --converge-limit <loops>
|
.. option:: --converge-limit <loops>
|
||||||
|
|
||||||
Rarely needed. Specifies the maximum number of runtime iterations
|
Rarely needed. Specifies the maximum number of runtime iterations
|
||||||
|
@ -57,6 +57,11 @@ public:
|
|||||||
of.puts("#include \"" + symClassName() + ".h\"\n");
|
of.puts("#include \"" + symClassName() + ".h\"\n");
|
||||||
of.puts("#include \"" + topClassName() + ".h\"\n");
|
of.puts("#include \"" + topClassName() + ".h\"\n");
|
||||||
|
|
||||||
|
of.puts("\n// Additional include files added using '--compiler-include'\n");
|
||||||
|
for (const string& filename : v3Global.opt.compilerIncludes()) {
|
||||||
|
of.puts("#include \"" + filename + "\"\n");
|
||||||
|
}
|
||||||
|
|
||||||
of.putsEndGuard();
|
of.putsEndGuard();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -361,6 +361,9 @@ void V3Options::checkParameters() {
|
|||||||
|
|
||||||
void V3Options::addCppFile(const string& filename) { m_cppFiles.insert(filename); }
|
void V3Options::addCppFile(const string& filename) { m_cppFiles.insert(filename); }
|
||||||
void V3Options::addCFlags(const string& filename) { m_cFlags.push_back(filename); }
|
void V3Options::addCFlags(const string& filename) { m_cFlags.push_back(filename); }
|
||||||
|
void V3Options::addCompilerIncludes(const string& filename) {
|
||||||
|
m_compilerIncludes.insert(filename);
|
||||||
|
}
|
||||||
void V3Options::addLdLibs(const string& filename) { m_ldLibs.push_back(filename); }
|
void V3Options::addLdLibs(const string& filename) { m_ldLibs.push_back(filename); }
|
||||||
void V3Options::addMakeFlags(const string& filename) { m_makeFlags.push_back(filename); }
|
void V3Options::addMakeFlags(const string& filename) { m_makeFlags.push_back(filename); }
|
||||||
void V3Options::addFuture(const string& flag) { m_futures.insert(flag); }
|
void V3Options::addFuture(const string& flag) { m_futures.insert(flag); }
|
||||||
@ -1186,6 +1189,7 @@ void V3Options::parseOptsList(FileLine* fl, const string& optdir, int argc,
|
|||||||
<< fl->warnMore() << "... Suggest 'clang', 'gcc', or 'msvc'");
|
<< fl->warnMore() << "... Suggest 'clang', 'gcc', or 'msvc'");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
DECL_OPTION("-compiler-include", CbVal, callStrSetter(&V3Options::addCompilerIncludes));
|
||||||
DECL_OPTION("-coverage", CbOnOff, [this](bool flag) { coverage(flag); });
|
DECL_OPTION("-coverage", CbOnOff, [this](bool flag) { coverage(flag); });
|
||||||
DECL_OPTION("-converge-limit", Set, &m_convergeLimit);
|
DECL_OPTION("-converge-limit", Set, &m_convergeLimit);
|
||||||
DECL_OPTION("-coverage-line", OnOff, &m_coverageLine);
|
DECL_OPTION("-coverage-line", OnOff, &m_coverageLine);
|
||||||
|
@ -203,6 +203,7 @@ private:
|
|||||||
V3StringList m_cFlags; // argument: user CFLAGS
|
V3StringList m_cFlags; // argument: user CFLAGS
|
||||||
V3StringList m_ldLibs; // argument: user LDFLAGS
|
V3StringList m_ldLibs; // argument: user LDFLAGS
|
||||||
V3StringList m_makeFlags; // argument: user MAKEFLAGS
|
V3StringList m_makeFlags; // argument: user MAKEFLAGS
|
||||||
|
V3StringSet m_compilerIncludes; // argument: user --compiler-include
|
||||||
V3StringSet m_futures; // argument: -Wfuture- list
|
V3StringSet m_futures; // argument: -Wfuture- list
|
||||||
V3StringSet m_future0s; // argument: -future list
|
V3StringSet m_future0s; // argument: -future list
|
||||||
V3StringSet m_future1s; // argument: -future1 list
|
V3StringSet m_future1s; // argument: -future1 list
|
||||||
@ -435,6 +436,7 @@ public:
|
|||||||
// METHODS
|
// METHODS
|
||||||
void addCppFile(const string& filename);
|
void addCppFile(const string& filename);
|
||||||
void addCFlags(const string& filename);
|
void addCFlags(const string& filename);
|
||||||
|
void addCompilerIncludes(const string& filename);
|
||||||
void addLdLibs(const string& filename);
|
void addLdLibs(const string& filename);
|
||||||
void addMakeFlags(const string& filename);
|
void addMakeFlags(const string& filename);
|
||||||
void addLibraryFile(const string& filename);
|
void addLibraryFile(const string& filename);
|
||||||
@ -628,6 +630,7 @@ public:
|
|||||||
|
|
||||||
const V3StringSet& cppFiles() const { return m_cppFiles; }
|
const V3StringSet& cppFiles() const { return m_cppFiles; }
|
||||||
const V3StringList& cFlags() const { return m_cFlags; }
|
const V3StringList& cFlags() const { return m_cFlags; }
|
||||||
|
const V3StringSet& compilerIncludes() const { return m_compilerIncludes; }
|
||||||
const V3StringList& ldLibs() const { return m_ldLibs; }
|
const V3StringList& ldLibs() const { return m_ldLibs; }
|
||||||
const V3StringList& makeFlags() const { return m_makeFlags; }
|
const V3StringList& makeFlags() const { return m_makeFlags; }
|
||||||
const V3StringSet& libraryFiles() const { return m_libraryFiles; }
|
const V3StringSet& libraryFiles() const { return m_libraryFiles; }
|
||||||
|
42
test_regress/t/t_compiler_include.cpp
Normal file
42
test_regress/t/t_compiler_include.cpp
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
// -*- mode: C++; c-file-style: "cc-mode" -*-
|
||||||
|
//*************************************************************************
|
||||||
|
//
|
||||||
|
// Copyright 2009-2024 by Antmicro. This program is free software; you can
|
||||||
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
|
// Version 2.0.
|
||||||
|
// SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
//
|
||||||
|
//*************************************************************************
|
||||||
|
|
||||||
|
#include "svdpi.h"
|
||||||
|
|
||||||
|
// These require the above. Comment prevents clang-format moving them
|
||||||
|
#include "TestCheck.h"
|
||||||
|
|
||||||
|
//======================================================================
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
|
#if defined(VERILATOR)
|
||||||
|
# include "Vt_compiler_include__Dpi.h"
|
||||||
|
#elif defined(VCS)
|
||||||
|
# include "../vc_hdrs.h"
|
||||||
|
#elif defined(NC)
|
||||||
|
# define NEED_EXTERNS
|
||||||
|
// #elif defined(MS)
|
||||||
|
// # define NEED_EXTERNS
|
||||||
|
#else
|
||||||
|
# error "Unknown simulator for DPI test"
|
||||||
|
#endif
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
|
#ifdef NEED_EXTERNS
|
||||||
|
extern "C" {
|
||||||
|
// If get ncsim: *F,NOFDPI: Function {foo} not found in default libdpi.
|
||||||
|
// Then probably forgot to list a function here.
|
||||||
|
|
||||||
|
extern void dpii_add(int a, int b, int* out);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void dpii_add(int a, int b, int* out) { *out = a + b; }
|
14
test_regress/t/t_compiler_include.h
Normal file
14
test_regress/t/t_compiler_include.h
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
// -*- mode: C++; c-file-style: "cc-mode" -*-
|
||||||
|
//*************************************************************************
|
||||||
|
//
|
||||||
|
// Copyright 2009-2024 by Antmicro. This program is free software; you can
|
||||||
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
|
// Version 2.0.
|
||||||
|
// SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
//
|
||||||
|
//*************************************************************************
|
||||||
|
|
||||||
|
// no header guards to check if included once in pch file
|
||||||
|
|
||||||
|
extern "C" int dpii_add_check(int actual, int expected) { return actual == expected; }
|
23
test_regress/t/t_compiler_include.pl
Executable file
23
test_regress/t/t_compiler_include.pl
Executable file
@ -0,0 +1,23 @@
|
|||||||
|
#!/usr/bin/env perl
|
||||||
|
if (!$::Driver) { use FindBin; exec("$FindBin::Bin/bootstrap.pl", @ARGV, $0); die; }
|
||||||
|
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
||||||
|
#
|
||||||
|
# Copyright 2024 by Wilson Snyder. This program is free software; you
|
||||||
|
# can redistribute it and/or modify it under the terms of either the GNU
|
||||||
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
|
# Version 2.0.
|
||||||
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
|
scenarios(simulator => 1);
|
||||||
|
|
||||||
|
compile(
|
||||||
|
v_flags2 => ["t/t_compiler_include.cpp"],
|
||||||
|
verilator_flags2 => ["-Wall -Wno-DECLFILENAME --compiler-include $Self->{t_dir}/t_compiler_include.h"],
|
||||||
|
);
|
||||||
|
|
||||||
|
execute(
|
||||||
|
check_finished => 1,
|
||||||
|
);
|
||||||
|
|
||||||
|
ok(1);
|
||||||
|
1;
|
31
test_regress/t/t_compiler_include.v
Normal file
31
test_regress/t/t_compiler_include.v
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
// DESCRIPTION: Verilator: Verilog Test module
|
||||||
|
//
|
||||||
|
// Copyright 2024 by Antmicro. This program is free software; you can
|
||||||
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
|
// Version 2.0.
|
||||||
|
// SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
|
module t (/*AUTOARG*/);
|
||||||
|
int a = 123;
|
||||||
|
int b = 321;
|
||||||
|
int out;
|
||||||
|
|
||||||
|
import "DPI-C" function void dpii_add
|
||||||
|
(int a, int b, ref int out);
|
||||||
|
import "DPI-C" function int dpii_add_check
|
||||||
|
(int actual, int expected);
|
||||||
|
|
||||||
|
initial begin
|
||||||
|
dpii_add(a, b, out);
|
||||||
|
if (dpii_add_check(out, (a + b)) != 1) begin
|
||||||
|
$write("%%Error: Failure in DPI tests\n");
|
||||||
|
$stop;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
$write("*-* All Finished *-*\n");
|
||||||
|
$finish;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
endmodule
|
Loading…
Reference in New Issue
Block a user