mirror of
https://github.com/verilator/verilator.git
synced 2025-01-01 04:07:34 +00:00
Commentary
This commit is contained in:
parent
4a58997604
commit
3525484730
2
Changes
2
Changes
@ -584,7 +584,7 @@ Verilator 5.012 2023-06-13
|
|||||||
* Fix wide structure VL_TOSTRING_W generation (#4188) (#4189). [Aylon Chaim Porat]
|
* Fix wide structure VL_TOSTRING_W generation (#4188) (#4189). [Aylon Chaim Porat]
|
||||||
* Fix references to members of parameterized base classes (#4196). [Ryszard Rozak, Antmicro Ltd]
|
* Fix references to members of parameterized base classes (#4196). [Ryszard Rozak, Antmicro Ltd]
|
||||||
* Fix tracing undefined alignment (#4201) (#4288) [John Wehle]
|
* Fix tracing undefined alignment (#4201) (#4288) [John Wehle]
|
||||||
* Fix class specific same methods for AstVarScope, AstVar, and AstScope (#4203) (#4250). [John Wehle]
|
* Fix class-specific same methods for AstVarScope, AstVar, and AstScope (#4203) (#4250). [John Wehle]
|
||||||
* Fix dotted references in parameterized classes (#4206). [Ryszard Rozak, Antmicro Ltd]
|
* Fix dotted references in parameterized classes (#4206). [Ryszard Rozak, Antmicro Ltd]
|
||||||
* Fix bit selections under parameterized classes (#4210). [Ryszard Rozak, Antmicro Ltd]
|
* Fix bit selections under parameterized classes (#4210). [Ryszard Rozak, Antmicro Ltd]
|
||||||
* Fix duplicate std:: declaration with -I (#4215). [Harald Pretl]
|
* Fix duplicate std:: declaration with -I (#4215). [Harald Pretl]
|
||||||
|
@ -77,7 +77,7 @@ datadir = @datadir@
|
|||||||
# Directory in which to install documentation info files.
|
# Directory in which to install documentation info files.
|
||||||
infodir = @infodir@
|
infodir = @infodir@
|
||||||
|
|
||||||
# Directory in which to install package specific files
|
# Directory in which to install package-specific files
|
||||||
# Generally ${prefix}/share/verilator
|
# Generally ${prefix}/share/verilator
|
||||||
pkgdatadir = @pkgdatadir@
|
pkgdatadir = @pkgdatadir@
|
||||||
|
|
||||||
|
@ -2100,13 +2100,13 @@ driver.py Non-Scenario Arguments
|
|||||||
memory leaks.
|
memory leaks.
|
||||||
|
|
||||||
--site
|
--site
|
||||||
Run site specific tests also.
|
Run site-specific tests also.
|
||||||
|
|
||||||
--stop
|
--stop
|
||||||
Stop on the first error.
|
Stop on the first error.
|
||||||
|
|
||||||
--trace
|
--trace
|
||||||
Set the simulator specific flags to request waveform tracing.
|
Set the simulator-specific flags to request waveform tracing.
|
||||||
|
|
||||||
--valgrind
|
--valgrind
|
||||||
Same as ``verilator --valgrind``: Run Verilator under `Valgrind <https://valgrind.org/>`_.
|
Same as ``verilator --valgrind``: Run Verilator under `Valgrind <https://valgrind.org/>`_.
|
||||||
|
@ -294,7 +294,7 @@ void VerilatedFst::configure(const VerilatedTraceConfig& config) {
|
|||||||
// so always inline them.
|
// so always inline them.
|
||||||
|
|
||||||
VL_ATTR_ALWINLINE
|
VL_ATTR_ALWINLINE
|
||||||
void VerilatedFstBuffer::emitEvent(uint32_t code, const VlEventBase* newval) {
|
void VerilatedFstBuffer::emitEvent(uint32_t code, const VlEventBase* newvalp) {
|
||||||
VL_DEBUG_IFDEF(assert(m_symbolp[code]););
|
VL_DEBUG_IFDEF(assert(m_symbolp[code]););
|
||||||
fstWriterEmitValueChange(m_fst, m_symbolp[code], "1");
|
fstWriterEmitValueChange(m_fst, m_symbolp[code], "1");
|
||||||
}
|
}
|
||||||
|
@ -47,7 +47,7 @@ private:
|
|||||||
friend VerilatedFstBuffer; // Give the buffer access to the private bits
|
friend VerilatedFstBuffer; // Give the buffer access to the private bits
|
||||||
|
|
||||||
//=========================================================================
|
//=========================================================================
|
||||||
// FST specific internals
|
// FST-specific internals
|
||||||
|
|
||||||
void* m_fst = nullptr;
|
void* m_fst = nullptr;
|
||||||
std::map<uint32_t, vlFstHandle> m_code2symbol;
|
std::map<uint32_t, vlFstHandle> m_code2symbol;
|
||||||
@ -177,7 +177,7 @@ class VerilatedFstBuffer VL_NOT_FINAL {
|
|||||||
|
|
||||||
// Implementations of duck-typed methods for VerilatedTraceBuffer. These are
|
// Implementations of duck-typed methods for VerilatedTraceBuffer. These are
|
||||||
// called from only one place (the full* methods), so always inline them.
|
// called from only one place (the full* methods), so always inline them.
|
||||||
VL_ATTR_ALWINLINE void emitEvent(uint32_t code, const VlEventBase* newval);
|
VL_ATTR_ALWINLINE void emitEvent(uint32_t code, const VlEventBase* newvalp);
|
||||||
VL_ATTR_ALWINLINE void emitBit(uint32_t code, CData newval);
|
VL_ATTR_ALWINLINE void emitBit(uint32_t code, CData newval);
|
||||||
VL_ATTR_ALWINLINE void emitCData(uint32_t code, CData newval, int bits);
|
VL_ATTR_ALWINLINE void emitCData(uint32_t code, CData newval, int bits);
|
||||||
VL_ATTR_ALWINLINE void emitSData(uint32_t code, SData newval, int bits);
|
VL_ATTR_ALWINLINE void emitSData(uint32_t code, SData newval, int bits);
|
||||||
|
@ -12,13 +12,13 @@
|
|||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
///
|
///
|
||||||
/// \file
|
/// \file
|
||||||
/// \brief Verilator common target specific intrinsics header
|
/// \brief Verilator common target-specific intrinsics header
|
||||||
///
|
///
|
||||||
/// This file is not part of the Verilated public-facing API.
|
/// This file is not part of the Verilated public-facing API.
|
||||||
///
|
///
|
||||||
/// It is only for internal use; code using machine specific intrinsics for
|
/// It is only for internal use; code using machine-specific intrinsics for
|
||||||
/// optimization should include this header rather than directly including
|
/// optimization should include this header rather than directly including
|
||||||
/// he target specific headers. We provide macros to check for availability
|
/// the target-specific headers. We provide macros to check for availability
|
||||||
/// of instruction sets, and a common mechanism to disable them.
|
/// of instruction sets, and a common mechanism to disable them.
|
||||||
///
|
///
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
|
@ -198,8 +198,8 @@ public:
|
|||||||
//=============================================================================
|
//=============================================================================
|
||||||
// VerilatedTrace
|
// VerilatedTrace
|
||||||
|
|
||||||
// T_Trace is the format specific subclass of VerilatedTrace.
|
// T_Trace is the format-specific subclass of VerilatedTrace.
|
||||||
// T_Buffer is the format specific base class of VerilatedTraceBuffer.
|
// T_Buffer is the format-specific base class of VerilatedTraceBuffer.
|
||||||
template <class T_Trace, class T_Buffer>
|
template <class T_Trace, class T_Buffer>
|
||||||
class VerilatedTrace VL_NOT_FINAL {
|
class VerilatedTrace VL_NOT_FINAL {
|
||||||
public:
|
public:
|
||||||
@ -348,7 +348,7 @@ private:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
//=========================================================================
|
//=========================================================================
|
||||||
// Internals available to format specific implementations
|
// Internals available to format-specific implementations
|
||||||
|
|
||||||
mutable VerilatedMutex m_mutex; // Ensure dump() etc only called from single thread
|
mutable VerilatedMutex m_mutex; // Ensure dump() etc only called from single thread
|
||||||
|
|
||||||
@ -381,7 +381,7 @@ protected:
|
|||||||
}
|
}
|
||||||
|
|
||||||
//=========================================================================
|
//=========================================================================
|
||||||
// Virtual functions to be provided by the format specific implementation
|
// Virtual functions to be provided by the format-specific implementation
|
||||||
|
|
||||||
// Called when the trace moves forward to a new time point
|
// Called when the trace moves forward to a new time point
|
||||||
virtual void emitTimeChange(uint64_t timeui) = 0;
|
virtual void emitTimeChange(uint64_t timeui) = 0;
|
||||||
@ -438,7 +438,7 @@ public:
|
|||||||
//=============================================================================
|
//=============================================================================
|
||||||
// VerilatedTraceBuffer
|
// VerilatedTraceBuffer
|
||||||
|
|
||||||
// T_Buffer is the format specific base class of VerilatedTraceBuffer.
|
// T_Buffer is the format-specific base class of VerilatedTraceBuffer.
|
||||||
// The format-specific hot-path methods use duck-typing via T_Buffer for performance.
|
// The format-specific hot-path methods use duck-typing via T_Buffer for performance.
|
||||||
template <class T_Buffer>
|
template <class T_Buffer>
|
||||||
class VerilatedTraceBuffer VL_NOT_FINAL : public T_Buffer {
|
class VerilatedTraceBuffer VL_NOT_FINAL : public T_Buffer {
|
||||||
@ -464,7 +464,7 @@ public:
|
|||||||
// Hot path internal interface to Verilator generated code
|
// Hot path internal interface to Verilator generated code
|
||||||
|
|
||||||
// Implementation note: We rely on the following duck-typed implementations
|
// Implementation note: We rely on the following duck-typed implementations
|
||||||
// in the derived class T_Derived. These emit* functions record a format
|
// in the derived class T_Derived. These emit* functions record a format-
|
||||||
// specific trace entry. Normally one would use pure virtual functions for
|
// specific trace entry. Normally one would use pure virtual functions for
|
||||||
// these here, but we cannot afford dynamic dispatch for calling these as
|
// these here, but we cannot afford dynamic dispatch for calling these as
|
||||||
// this is very hot code during tracing.
|
// this is very hot code during tracing.
|
||||||
@ -487,7 +487,7 @@ public:
|
|||||||
void fullQData(uint32_t* oldp, QData newval, int bits);
|
void fullQData(uint32_t* oldp, QData newval, int bits);
|
||||||
void fullWData(uint32_t* oldp, const WData* newvalp, int bits);
|
void fullWData(uint32_t* oldp, const WData* newvalp, int bits);
|
||||||
void fullDouble(uint32_t* oldp, double newval);
|
void fullDouble(uint32_t* oldp, double newval);
|
||||||
void fullEvent(uint32_t* oldp, const VlEventBase* newval);
|
void fullEvent(uint32_t* oldp, const VlEventBase* newvalp);
|
||||||
|
|
||||||
// In non-offload mode, these are called directly by the trace callbacks,
|
// In non-offload mode, these are called directly by the trace callbacks,
|
||||||
// and are called chg*. In offload mode, they are called by the worker
|
// and are called chg*. In offload mode, they are called by the worker
|
||||||
@ -524,8 +524,8 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
VL_ATTR_ALWINLINE void chgEvent(uint32_t* oldp, const VlEventBase* newval) {
|
VL_ATTR_ALWINLINE void chgEvent(uint32_t* oldp, const VlEventBase* newvalp) {
|
||||||
fullEvent(oldp, newval);
|
fullEvent(oldp, newvalp);
|
||||||
}
|
}
|
||||||
VL_ATTR_ALWINLINE void chgDouble(uint32_t* oldp, double newval) {
|
VL_ATTR_ALWINLINE void chgDouble(uint32_t* oldp, double newval) {
|
||||||
double old;
|
double old;
|
||||||
@ -537,7 +537,7 @@ public:
|
|||||||
//=============================================================================
|
//=============================================================================
|
||||||
// VerilatedTraceOffloadBuffer
|
// VerilatedTraceOffloadBuffer
|
||||||
|
|
||||||
// T_Buffer is the format specific base class of VerilatedTraceBuffer.
|
// T_Buffer is the format-specific base class of VerilatedTraceBuffer.
|
||||||
// The format-specific hot-path methods use duck-typing via T_Buffer for performance.
|
// The format-specific hot-path methods use duck-typing via T_Buffer for performance.
|
||||||
template <class T_Buffer>
|
template <class T_Buffer>
|
||||||
class VerilatedTraceOffloadBuffer final : public VerilatedTraceBuffer<T_Buffer> {
|
class VerilatedTraceOffloadBuffer final : public VerilatedTraceBuffer<T_Buffer> {
|
||||||
@ -605,7 +605,7 @@ public:
|
|||||||
m_offloadBufferWritep += 4;
|
m_offloadBufferWritep += 4;
|
||||||
VL_DEBUG_IF(assert(m_offloadBufferWritep <= m_offloadBufferEndp););
|
VL_DEBUG_IF(assert(m_offloadBufferWritep <= m_offloadBufferEndp););
|
||||||
}
|
}
|
||||||
void chgEvent(uint32_t code, const VlEventBase* newval) {
|
void chgEvent(uint32_t code, const VlEventBase* newvalp) {
|
||||||
m_offloadBufferWritep[0] = VerilatedTraceOffloadCommand::CHG_EVENT;
|
m_offloadBufferWritep[0] = VerilatedTraceOffloadCommand::CHG_EVENT;
|
||||||
m_offloadBufferWritep[1] = code;
|
m_offloadBufferWritep[1] = code;
|
||||||
m_offloadBufferWritep += 2;
|
m_offloadBufferWritep += 2;
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
//=============================================================================
|
//=============================================================================
|
||||||
//
|
//
|
||||||
// Verilated tracing implementation code template common to all formats.
|
// Verilated tracing implementation code template common to all formats.
|
||||||
// This file is included by the format specific implementations and
|
// This file is included by the format-specific implementations and
|
||||||
// should not be used otherwise.
|
// should not be used otherwise.
|
||||||
//
|
//
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
@ -299,7 +299,7 @@ VerilatedTrace<VL_SUB_T, VL_BUF_T>::~VerilatedTrace() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//=========================================================================
|
//=========================================================================
|
||||||
// Internals available to format specific implementations
|
// Internals available to format-specific implementations
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
void VerilatedTrace<VL_SUB_T, VL_BUF_T>::traceInit() VL_MT_UNSAFE {
|
void VerilatedTrace<VL_SUB_T, VL_BUF_T>::traceInit() VL_MT_UNSAFE {
|
||||||
@ -401,7 +401,7 @@ bool VerilatedTrace<VL_SUB_T, VL_BUF_T>::declCode(uint32_t code, const std::stri
|
|||||||
}
|
}
|
||||||
|
|
||||||
//=========================================================================
|
//=========================================================================
|
||||||
// Internals available to format specific implementations
|
// Internals available to format-specific implementations
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
std::string VerilatedTrace<VL_SUB_T, VL_BUF_T>::timeResStr() const {
|
std::string VerilatedTrace<VL_SUB_T, VL_BUF_T>::timeResStr() const {
|
||||||
@ -543,7 +543,7 @@ void VerilatedTrace<VL_SUB_T, VL_BUF_T>::dump(uint64_t timeui) VL_MT_SAFE_EXCLUD
|
|||||||
|
|
||||||
Verilated::quiesce();
|
Verilated::quiesce();
|
||||||
|
|
||||||
// Call hook for format specific behaviour
|
// Call hook for format-specific behaviour
|
||||||
if (VL_UNLIKELY(m_fullDump)) {
|
if (VL_UNLIKELY(m_fullDump)) {
|
||||||
if (!preFullDump()) return;
|
if (!preFullDump()) return;
|
||||||
} else {
|
} else {
|
||||||
@ -667,7 +667,7 @@ void VerilatedTrace<VL_SUB_T, VL_BUF_T>::addModel(VerilatedModel* modelp)
|
|||||||
VL_FATAL_MT(__FILE__, __LINE__, "", "Cannot use parallel tracing with offloading");
|
VL_FATAL_MT(__FILE__, __LINE__, "", "Cannot use parallel tracing with offloading");
|
||||||
} // LCOV_EXCL_STOP
|
} // LCOV_EXCL_STOP
|
||||||
|
|
||||||
// Configure format specific sub class
|
// Configure format-specific sub class
|
||||||
configure(*(configp.get()));
|
configure(*(configp.get()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -818,8 +818,8 @@ VerilatedTraceBuffer<VL_BUF_T>::VerilatedTraceBuffer(Trace& owner)
|
|||||||
, m_sigs_enabledp{owner.m_sigs_enabledp} {}
|
, m_sigs_enabledp{owner.m_sigs_enabledp} {}
|
||||||
|
|
||||||
// These functions must write the new value back into the old value store,
|
// These functions must write the new value back into the old value store,
|
||||||
// and subsequently call the format specific emit* implementations. Note
|
// and subsequently call the format-specific emit* implementations. Note
|
||||||
// that this file must be included in the format specific implementation, so
|
// that this file must be included in the format-specific implementation, so
|
||||||
// the emit* functions can be inlined for performance.
|
// the emit* functions can be inlined for performance.
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
@ -831,10 +831,10 @@ void VerilatedTraceBuffer<VL_BUF_T>::fullBit(uint32_t* oldp, CData newval) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
void VerilatedTraceBuffer<VL_BUF_T>::fullEvent(uint32_t* oldp, const VlEventBase* newval) {
|
void VerilatedTraceBuffer<VL_BUF_T>::fullEvent(uint32_t* oldp, const VlEventBase* newvalp) {
|
||||||
const uint32_t code = oldp - m_sigs_oldvalp;
|
const uint32_t code = oldp - m_sigs_oldvalp;
|
||||||
*oldp = 1; // Do we really store an "event" ?
|
*oldp = 1; // Do we really store an "event" ?
|
||||||
emitEvent(code, newval);
|
emitEvent(code, newvalp);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
|
@ -573,8 +573,8 @@ void VerilatedVcdBuffer::finishLine(uint32_t code, char* writep) {
|
|||||||
// so always inline them.
|
// so always inline them.
|
||||||
|
|
||||||
VL_ATTR_ALWINLINE
|
VL_ATTR_ALWINLINE
|
||||||
void VerilatedVcdBuffer::emitEvent(uint32_t code, const VlEventBase* newval) {
|
void VerilatedVcdBuffer::emitEvent(uint32_t code, const VlEventBase* newvalp) {
|
||||||
const bool triggered = newval->isTriggered();
|
const bool triggered = newvalp->isTriggered();
|
||||||
// TODO : It seems that untriggered events are not filtered
|
// TODO : It seems that untriggered events are not filtered
|
||||||
// should be tested before this last step
|
// should be tested before this last step
|
||||||
if (triggered) {
|
if (triggered) {
|
||||||
|
@ -43,7 +43,7 @@ private:
|
|||||||
friend VerilatedVcdBuffer; // Give the buffer access to the private bits
|
friend VerilatedVcdBuffer; // Give the buffer access to the private bits
|
||||||
|
|
||||||
//=========================================================================
|
//=========================================================================
|
||||||
// VCD specific internals
|
// VCD-specific internals
|
||||||
|
|
||||||
VerilatedVcdFile* m_filep; // File we're writing to
|
VerilatedVcdFile* m_filep; // File we're writing to
|
||||||
bool m_fileNewed; // m_filep needs destruction
|
bool m_fileNewed; // m_filep needs destruction
|
||||||
@ -214,7 +214,7 @@ class VerilatedVcdBuffer VL_NOT_FINAL {
|
|||||||
// Implementation of VerilatedTraceBuffer interface
|
// Implementation of VerilatedTraceBuffer interface
|
||||||
// Implementations of duck-typed methods for VerilatedTraceBuffer. These are
|
// Implementations of duck-typed methods for VerilatedTraceBuffer. These are
|
||||||
// called from only one place (the full* methods), so always inline them.
|
// called from only one place (the full* methods), so always inline them.
|
||||||
VL_ATTR_ALWINLINE void emitEvent(uint32_t code, const VlEventBase* newval);
|
VL_ATTR_ALWINLINE void emitEvent(uint32_t code, const VlEventBase* newvalp);
|
||||||
VL_ATTR_ALWINLINE void emitBit(uint32_t code, CData newval);
|
VL_ATTR_ALWINLINE void emitBit(uint32_t code, CData newval);
|
||||||
VL_ATTR_ALWINLINE void emitCData(uint32_t code, CData newval, int bits);
|
VL_ATTR_ALWINLINE void emitCData(uint32_t code, CData newval, int bits);
|
||||||
VL_ATTR_ALWINLINE void emitSData(uint32_t code, SData newval, int bits);
|
VL_ATTR_ALWINLINE void emitSData(uint32_t code, SData newval, int bits);
|
||||||
|
@ -593,9 +593,9 @@ static inline double VL_ROUND(double n) {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
//=========================================================================
|
//=========================================================================
|
||||||
// Macros controlling target specific optimizations
|
// Macros controlling target-specific optimizations
|
||||||
|
|
||||||
// Define VL_PORTABLE_ONLY to disable all target specific optimizations
|
// Define VL_PORTABLE_ONLY to disable all target-specific optimizations
|
||||||
#ifndef VL_PORTABLE_ONLY
|
#ifndef VL_PORTABLE_ONLY
|
||||||
# ifdef __x86_64__
|
# ifdef __x86_64__
|
||||||
# define VL_X86_64 1
|
# define VL_X86_64 1
|
||||||
|
@ -49,7 +49,7 @@ prefix = @prefix@
|
|||||||
# Directory in which to install data across multiple architectures
|
# Directory in which to install data across multiple architectures
|
||||||
datarootdir = @datarootdir@
|
datarootdir = @datarootdir@
|
||||||
|
|
||||||
# Directory in which to install package specific files
|
# Directory in which to install package-specific files
|
||||||
# Generally ${prefix}/share/verilator
|
# Generally ${prefix}/share/verilator
|
||||||
pkgdatadir = @pkgdatadir@
|
pkgdatadir = @pkgdatadir@
|
||||||
|
|
||||||
|
@ -2440,7 +2440,7 @@ public:
|
|||||||
static void dumpTreeFileGdb(const AstNode* nodep, const char* filenamep = nullptr);
|
static void dumpTreeFileGdb(const AstNode* nodep, const char* filenamep = nullptr);
|
||||||
void dumpTreeDot(std::ostream& os = std::cout) const;
|
void dumpTreeDot(std::ostream& os = std::cout) const;
|
||||||
void dumpTreeDotFile(const string& filename, bool doDump = true);
|
void dumpTreeDotFile(const string& filename, bool doDump = true);
|
||||||
virtual void dumpJson(std::ostream& os) const { dumpJsonGen(os); }; // node specific fields
|
virtual void dumpJson(std::ostream& os) const { dumpJsonGen(os); }; // node-specific fields
|
||||||
// Generated by 'astgen'. Dumps node-specific pointers and calls 'dumpJson()' of parent class
|
// Generated by 'astgen'. Dumps node-specific pointers and calls 'dumpJson()' of parent class
|
||||||
// Note that we don't make it virtual as it would result in infinite recursion
|
// Note that we don't make it virtual as it would result in infinite recursion
|
||||||
void dumpJsonGen(std::ostream& os) const {};
|
void dumpJsonGen(std::ostream& os) const {};
|
||||||
|
@ -60,7 +60,7 @@ class HasherVisitor final : public VNVisitorConst {
|
|||||||
VL_RESTORER(m_hash);
|
VL_RESTORER(m_hash);
|
||||||
// Reset accumulator
|
// Reset accumulator
|
||||||
m_hash = V3Hash{nodep->type()}; // Node type
|
m_hash = V3Hash{nodep->type()}; // Node type
|
||||||
f(); // Node specific hash
|
f(); // Node-specific hash
|
||||||
if (hashDType && nodep != nodep->dtypep())
|
if (hashDType && nodep != nodep->dtypep())
|
||||||
iterateConstNull(nodep->dtypep()); // Node dtype
|
iterateConstNull(nodep->dtypep()); // Node dtype
|
||||||
if (hashChildren) iterateChildrenConst(nodep); // Children
|
if (hashChildren) iterateChildrenConst(nodep); // Children
|
||||||
@ -74,7 +74,7 @@ class HasherVisitor final : public VNVisitorConst {
|
|||||||
constexpr static bool HASH_DTYPE = true;
|
constexpr static bool HASH_DTYPE = true;
|
||||||
constexpr static bool HASH_CHILDREN = true;
|
constexpr static bool HASH_CHILDREN = true;
|
||||||
|
|
||||||
// Each visitor below contributes to the hash any node specific content
|
// Each visitor below contributes to the hash any node-specific content
|
||||||
// that is not dependent on either of the following, as these are
|
// that is not dependent on either of the following, as these are
|
||||||
// included by default by hashNode:
|
// included by default by hashNode:
|
||||||
// - Node type (as given by AstNode::type())
|
// - Node type (as given by AstNode::type())
|
||||||
|
@ -1024,7 +1024,7 @@ sub lint {
|
|||||||
my $self = (ref $_[0] ? shift : $Self);
|
my $self = (ref $_[0] ? shift : $Self);
|
||||||
my %param = (#
|
my %param = (#
|
||||||
%{$self}, # Default arguments are from $self
|
%{$self}, # Default arguments are from $self
|
||||||
# Lint specific default overrides
|
# Lint-specific default overrides
|
||||||
make_main => 0,
|
make_main => 0,
|
||||||
make_top_shell => 0,
|
make_top_shell => 0,
|
||||||
verilator_flags2 => ["--lint-only"],
|
verilator_flags2 => ["--lint-only"],
|
||||||
|
Loading…
Reference in New Issue
Block a user