mirror of
https://github.com/verilator/verilator.git
synced 2025-01-22 14:24:18 +00:00
e4847464d4
V3Partition used to contain 2 conceptually separate set of algorithms - The MTask partitioning/coarsening algorithm used by V3Order. This has been moved to V3OrderParallel.cpp - The lowering of AstExecGraph into per thread functions by packing tasks into threads and creating additional code (V3Partition::finalize). This has been moved to the new V3ExecGraph.cpp This patch is just code movement/rename with minimal fixes required to do so.
63 lines
1.8 KiB
C++
63 lines
1.8 KiB
C++
// -*- mode: C++; c-file-style: "cc-mode" -*-
|
|
//*************************************************************************
|
|
// DESCRIPTION: Verilator: Block code ordering
|
|
//
|
|
// Code available from: https://verilator.org
|
|
//
|
|
//*************************************************************************
|
|
//
|
|
// Copyright 2003-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
|
|
//
|
|
//*************************************************************************
|
|
|
|
#ifndef VERILATOR_V3ORDER_H_
|
|
#define VERILATOR_V3ORDER_H_
|
|
|
|
#include "config_build.h"
|
|
#include "verilatedos.h"
|
|
|
|
#include "V3ThreadSafety.h"
|
|
|
|
#include <functional>
|
|
#include <unordered_map>
|
|
#include <vector>
|
|
|
|
class AstCFunc;
|
|
class AstNetlist;
|
|
class AstSenItem;
|
|
class AstSenTree;
|
|
class AstVarScope;
|
|
|
|
namespace V3Sched {
|
|
struct LogicByScope;
|
|
}; // namespace V3Sched
|
|
|
|
//============================================================================
|
|
|
|
namespace V3Order {
|
|
|
|
// Callable to add extra external Triggers to a variable
|
|
using ExternalDomainsProvider = std::function<void(const AstVarScope*, std::vector<AstSenTree*>&)>;
|
|
// Map from Trigger expression to original Sensitivity tree
|
|
using TrigToSenMap = std::unordered_map<const AstSenItem*, const AstSenTree*>;
|
|
|
|
AstCFunc* order(
|
|
AstNetlist* netlistp, //
|
|
const std::vector<V3Sched::LogicByScope*>& logic, //
|
|
const TrigToSenMap& trigToSen, //
|
|
const string& tag, //
|
|
bool parallel, //
|
|
bool slow, //
|
|
const ExternalDomainsProvider& externalDomains
|
|
= [](const AstVarScope*, std::vector<AstSenTree*>&) {}) VL_MT_DISABLED;
|
|
|
|
void selfTestParallel();
|
|
|
|
}; // namespace V3Order
|
|
|
|
#endif // Guard
|