123 double max_frequency_;
124 double current_frequency_;
130 size_t pipeline_stages_;
132 bool has_vector_unit_;
137 void initializeArchitecture();
138 void updatePerformanceMetrics();
202 size_t channel_count_;
205 size_t capacity_per_channel_;
209 void initializeMemoryType();
210 void calculatePerformanceMetrics();
262 size_t compute_units_;
263 double max_frequency_;
264 size_t shader_cores_;
265 size_t memory_bus_width_;
266 double memory_bandwidth_;
268 double texel_fill_rate_;
270 void initializeArchitecture();
315 double max_frequency_;
318 bool has_viterbi_unit_;
321 void initializeArchitecture();
355 double max_data_rate_;
356 double current_data_rate_;
359 std::map<std::string, std::string> protocol_params_;
361 void initializeInterface();
411 std::map<std::string, PowerDomain> power_domains_;
415 void updatePowerMetrics();
423 SoC(
const std::string& name,
const std::string& part_number);
431 void addPMU(std::shared_ptr<PowerManagementUnit> pmu);
451 std::string part_number_;
453 std::vector<std::shared_ptr<ProcessorCore>> processor_cores_;
454 std::vector<std::shared_ptr<MemoryController>> memory_controllers_;
455 std::vector<std::shared_ptr<GPUCore>> gpu_cores_;
456 std::vector<std::shared_ptr<DSPCore>> dsp_cores_;
457 std::vector<std::shared_ptr<CommunicationInterface>> interfaces_;
458 std::vector<std::shared_ptr<PowerManagementUnit>> pmus_;
460 void analyzeInterconnect();
461 void optimizeFloorplan();
470 static std::shared_ptr<ProcessorCore>
createCortexA53(
const std::string& name,
size_t cores = 4);
471 static std::shared_ptr<ProcessorCore>
createCortexA72(
const std::string& name,
size_t cores = 4);
472 static std::shared_ptr<ProcessorCore>
createCortexA78(
const std::string& name,
size_t cores = 4);
483 static std::shared_ptr<GPUCore>
createMaliG78(
const std::string& name,
size_t compute_units = 16);
514 std::shared_ptr<Component>
createCPUDesign(
const std::string& name,
size_t core_count = 4);
std::string getDescription() const override
void setConnected(bool connected)
void setCurrentDataRate(double rate)
InterfaceType getInterfaceType() const
void setMaxDataRate(double rate)
void simulate(double time_step) override
void setProtocolParameter(const std::string ¶m, const std::string &value)
double getCurrentDataRate() const
CommunicationInterface(const std::string &name, InterfaceType type)
std::string getProtocolParameter(const std::string ¶m) const
double getMaxDataRate() const
Component(const std::string &name, ComponentCategory category)
Component library for managing component definitions.
std::string getDescription() const override
DSPCore(const std::string &name, DSPArchitecture arch)
void setFFTUnit(bool has_fft)
void simulate(double time_step) override
DSPArchitecture getArchitecture() const
void setMACUnits(size_t units)
void setGMACS(double gmacs)
size_t getMACUnits() const
void setViterbiUnit(bool has_viterbi)
bool hasViterbiUnit() const
void setMaxFrequency(double freq)
double getMaxFrequency() const
void setGFLOPS(double gflops)
std::string getDescription() const override
void setShaderCores(size_t cores)
void setMaxFrequency(double freq)
double getMaxFrequency() const
void simulate(double time_step) override
void setMemoryBusWidth(size_t width)
size_t getComputeUnits() const
GPUArchitecture getArchitecture() const
size_t getShaderCores() const
double getMemoryBandwidth() const
void setTexelFillRate(double rate)
double getTexelFillRate() const
GPUCore(const std::string &name, GPUArchitecture arch, size_t compute_units=8)
size_t getMemoryBusWidth() const
void setMemoryBandwidth(double bandwidth)
Standard IP Block Factory.
static std::shared_ptr< SoC > createAppleM1(const std::string &name)
static std::shared_ptr< GPUCore > createAdreno640(const std::string &name)
static std::shared_ptr< ProcessorCore > createRISCVCore(const std::string &name, CPUArchitecture arch)
static std::shared_ptr< MemoryController > createDDR4Controller(const std::string &name, size_t channels=2)
static void registerStandardIPBlocks(ComponentLibrary &library)
static std::shared_ptr< CommunicationInterface > createUSB3Interface(const std::string &name)
static std::shared_ptr< SoC > createMediaTekDimensity9000(const std::string &name)
static std::shared_ptr< ProcessorCore > createCortexA78(const std::string &name, size_t cores=4)
static std::shared_ptr< CommunicationInterface > createEthernetInterface(const std::string &name)
static std::shared_ptr< ProcessorCore > createCortexA72(const std::string &name, size_t cores=4)
static std::shared_ptr< ProcessorCore > createCortexM4(const std::string &name)
static std::shared_ptr< SoC > createSnapdragon8Gen1(const std::string &name)
static std::shared_ptr< DSPCore > createTIC6000(const std::string &name)
static std::shared_ptr< SoC > createExynos2200(const std::string &name)
static std::shared_ptr< CommunicationInterface > createPCIe4Interface(const std::string &name)
static std::shared_ptr< MemoryController > createLPDDR5Controller(const std::string &name, size_t channels=4)
static std::shared_ptr< ProcessorCore > createCortexA53(const std::string &name, size_t cores=4)
static std::shared_ptr< DSPCore > createHexagonDSP(const std::string &name)
static std::shared_ptr< MemoryController > createDDR5Controller(const std::string &name, size_t channels=2)
static std::shared_ptr< ProcessorCore > createCortexM7(const std::string &name)
static std::shared_ptr< GPUCore > createAdreno730(const std::string &name)
static std::shared_ptr< GPUCore > createMaliG78(const std::string &name, size_t compute_units=16)
double getPowerConsumption() const
void setTimingParams(const TimingParams ¶ms)
void setCapacityPerChannel(size_t capacity)
MemoryController(const std::string &name, MemoryType type, size_t channels=1)
double getFrequency() const
size_t getDataWidth() const
double getBandwidth() const
std::string getDescription() const override
void setFrequency(double freq)
const TimingParams & getTimingParams() const
double getLatency() const
MemoryType getMemoryType() const
size_t getCapacityPerChannel() const
void simulate(double time_step) override
void setDataWidth(size_t width)
size_t getTotalCapacity() const
size_t getChannelCount() const
std::string getDescription() const override
double getTotalPower() const
void removePowerDomain(const std::string &domain)
double getVoltage(const std::string &domain) const
void setVoltage(const std::string &domain, double voltage)
PowerState getPowerState() const
void setPowerState(PowerState state)
void simulate(double time_step) override
bool isDVFSEnabled() const
void addPowerDomain(const std::string &domain, double voltage, double current)
double getCurrent(const std::string &domain) const
PowerManagementUnit(const std::string &name)
void enableDVFS(bool enable)
void setMaxFrequency(double freq)
void setL2Config(const CacheConfig &config)
void setL1Config(const CacheConfig &config)
void setPipelineStages(size_t stages)
const CacheConfig & getL1Config() const
size_t getPipelineStages() const
const CacheConfig & getL3Config() const
const CacheConfig & getL2Config() const
void setCurrentFrequency(double freq)
void simulate(double time_step) override
double getCurrentFrequency() const
std::string getDescription() const override
bool hasFloatingPoint() const
double getMaxFrequency() const
bool hasVectorUnit() const
CPUArchitecture getArchitecture() const
ProcessorCore(const std::string &name, CPUArchitecture arch, size_t core_count=1)
size_t getCoreCount() const
void setVectorUnit(bool has_vector)
void setDMIPS(double dmips)
void setL3Config(const CacheConfig &config)
void setFloatingPoint(bool has_fpu)
void addMemoryController(std::shared_ptr< MemoryController > controller)
geometry::Rectangle calculateHierarchicalBoundingBox() const override
void addProcessorCore(std::shared_ptr< ProcessorCore > core)
double calculateTotalArea() const override
size_t getTotalGateCount() const override
std::vector< std::string > getCriticalPaths() const
void addGPUCore(std::shared_ptr< GPUCore > gpu)
std::string getDescription() const override
SoC(const std::string &name, const std::string &part_number)
double getTotalPower() const
double getMaxPerformance() const
const std::string & getPartNumber() const
void addDSPCore(std::shared_ptr< DSPCore > dsp)
void addPMU(std::shared_ptr< PowerManagementUnit > pmu)
void simulate(double time_step) override
void addInterface(std::shared_ptr< CommunicationInterface > interface)
Axis-aligned rectangle for bounding boxes and simple EDA components.
Hierarchical EDA Component System.
Digital Logic Circuit Components.
std::shared_ptr< SoC > createSmartphoneSoC()
Create a complete SoC with multiple IP blocks.
Real-world circuit examples for timing optimization.
std::shared_ptr< Component > createGPUDesign(const std::string &name)
Create a graphics processing unit with compute pipelines.
std::shared_ptr< Component > createServerProcessor(const std::string &name)
Create a server processor with multiple cores.
std::shared_ptr< Component > createCPUDesign(const std::string &name, size_t core_count=4)
Create a realistic CPU design with proper timing constraints.
std::shared_ptr< Component > createIoTMicrocontroller(const std::string &name)
Create an IoT microcontroller design.
std::shared_ptr< Component > createMemorySubsystem(const std::string &name)
Create a memory subsystem with realistic timing.
std::shared_ptr< Component > createCommunicationSubsystem(const std::string &name)
Create a communication subsystem with multiple interfaces.
CPUArchitecture
CPU Architecture types.
InterfaceType
Communication interface types.
MemoryHierarchy
Memory hierarchy types.
Main namespace for ZLayout library.