developing data structure TechnologyLibrary to store technology-related information
This commit is contained in:
parent
aa070b2a41
commit
771f2d9c37
|
@ -9,26 +9,26 @@
|
|||
-->
|
||||
<openfpga_architecture>
|
||||
<technology_library>
|
||||
<transistors name="logic" type="logic">
|
||||
<device name="logic" type="transistor">
|
||||
<model type="academia" corner="TOP_TT" ref="M" path="${OPENFPGA_PATH}/openfpga_flow/tech/PTM_45nm/45nm.pm"/>
|
||||
<design vdd="0.9" pn_ratio="2"/>
|
||||
<nmos name="nch" chan_length="40e-9" min_width="140e-9" variation="logic_transistor_var"/>
|
||||
<pmos name="pch" chan_length="40e-9" min_width="140e-9" variation="logic_transistor_var"/>
|
||||
</transistors>
|
||||
<transistors name="io" type="io"/>
|
||||
</device>
|
||||
<device name="io" type="transistor"/>
|
||||
<model type="academia" corner="TT" ref="M" path="${OPENFPGA_PATH}/openfpga_flow/tech/PTM_45nm/45nm.pm"/>
|
||||
<design vdd="2.5" pn_ratio="3"/>
|
||||
<nmos name="nch_25" chan_length="270e-9" min_width="320e-9" variation="io_transistor_var"/>
|
||||
<pmos name="pch_25" chan_length="270e-9" min_width="320e-9" variation="io_transistor_var"/>
|
||||
</transistors>
|
||||
<rram name="mem_rram">
|
||||
</device>
|
||||
<device name="mem_rram" type="rram">
|
||||
<model type="academia" ref="X" path="${OPENFPGA_PATH}/openfpga_flow/tech/PTM_45nm/rram.pm"/>
|
||||
<device rlrs="1e4" rhrs="1e5" variation="mem_rram_var"/>
|
||||
</rram>
|
||||
<rram name="logic_rram">
|
||||
<rram rlrs="1e4" rhrs="1e5" variation="mem_rram_var"/>
|
||||
</device>
|
||||
<device name="logic_rram" type="rram">
|
||||
<model type="academia" ref="X" path="${OPENFPGA_PATH}/openfpga_flow/tech/PTM_45nm/rram.pm"/>
|
||||
<device rlrs="5e3" rhrs="20e6" variation="logic_rram_var"/>
|
||||
</rram>
|
||||
<rram rlrs="5e3" rhrs="20e6" variation="logic_rram_var"/>
|
||||
</device>
|
||||
<device_variation>
|
||||
<variation name="logic_transistor_var" abs_variation="0.1" num_sigma="3"/>
|
||||
<variation name="io_transistor_var" abs_variation="0.1" num_sigma="3"/>
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
/********************************************************************
|
||||
* This file include the declaration of technology library
|
||||
*******************************************************************/
|
||||
#include <string>
|
||||
#include "technology_library_fwd.h"
|
||||
|
||||
/********************************************************************
|
||||
* Types for technology library attributes
|
||||
|
@ -16,26 +18,26 @@
|
|||
* PTM is the Predictive Technology Model provided by the Arizona
|
||||
* State University (ASU). Available at ptm.asu.edu
|
||||
*******************************************************************/
|
||||
enum e_tech_lib_type {
|
||||
TECH_LIB_INDUSTRY,
|
||||
TECH_LIB_ACADEMIA,
|
||||
NUM_TECH_LIB_TYPES
|
||||
enum e_tech_lib_model_type {
|
||||
TECH_LIB_MODEL_INDUSTRY,
|
||||
TECH_LIB_MODEL_ACADEMIA,
|
||||
NUM_TECH_LIB_MODEL_TYPES
|
||||
};
|
||||
/* Strings correspond to each technology library type */
|
||||
constexpr std::array<const char*, NUM_TECH_LIB_TYPES> TECH_LIB_TYPE_STRING = {{"industry", "academia"}};
|
||||
constexpr std::array<const char*, NUM_TECH_LIB_MODEL_TYPES> TECH_LIB_MODEL_TYPE_STRING = {{"industry", "academia"}};
|
||||
|
||||
/********************************************************************
|
||||
* Types of transistor groups which may be defined in a technology library
|
||||
* We categorize the transistors in terms of their usage in FPGA architecture
|
||||
* 1. NMOS transistor
|
||||
* 2. PMOS transistor
|
||||
* Types of device which may be defined in a technology library
|
||||
* 1. transistor
|
||||
* 2. RRAM
|
||||
*******************************************************************/
|
||||
enum e_tech_lib_trans_type {
|
||||
TECH_LIB_TRANS_NMOS,
|
||||
TECH_LIB_TRANS_PMOS,
|
||||
enum e_tech_lib_device_type {
|
||||
TECH_LIB_DEVICE_TRANSISTOR,
|
||||
TECH_LIB_DEVICE_RRAM,
|
||||
NUM_TECH_LIB_DEVICE_TYPES
|
||||
};
|
||||
/* Strings correspond to transistor type type */
|
||||
constexpr std::array<const char*, NUM_TECH_LIB_TYPES> TECH_LIB_TRANS_TYPE_STRING = {{"industry", "academia"}};
|
||||
/* Strings correspond to transistor type */
|
||||
constexpr std::array<const char*, NUM_TECH_LIB_DEVICE_TYPES> TECH_LIB_DEVICE_TYPE_STRING = {{"transistor", "rram"}};
|
||||
|
||||
/********************************************************************
|
||||
* Types of transistors which may be defined in a technology library
|
||||
|
@ -43,19 +45,58 @@ constexpr std::array<const char*, NUM_TECH_LIB_TYPES> TECH_LIB_TRANS_TYPE_STRING
|
|||
* 2. PMOS transistor
|
||||
*******************************************************************/
|
||||
enum e_tech_lib_trans_type {
|
||||
TECH_LIB_TRANS_NMOS,
|
||||
TECH_LIB_TRANS_PMOS,
|
||||
TECH_LIB_TRANS_NMOS,
|
||||
NUM_TECH_LIB_TRANS_TYPES
|
||||
};
|
||||
/* Strings correspond to transistor type type */
|
||||
constexpr std::array<const char*, NUM_TECH_LIB_TYPES> TECH_LIB_TRANS_TYPE_STRING = {{"industry", "academia"}};
|
||||
/* Strings correspond to transistor type */
|
||||
constexpr std::array<const char*, NUM_TECH_LIB_TRANS_TYPES> TECH_LIB_TRANS_TYPE_STRING = {{"pmos", "nmos"}};
|
||||
|
||||
/********************************************************************
|
||||
* Process corners supported
|
||||
*******************************************************************/
|
||||
enum e_process_corner {
|
||||
BEST_CORNER,
|
||||
TYPICAL_CORNER,
|
||||
WORST_CORNER
|
||||
TECH_LIB_CORNER_FF,
|
||||
TECH_LIB_CORNER_TT,
|
||||
TECH_LIB_CORNER_SS,
|
||||
NUM_TECH_LIB_CORNER_TYPES
|
||||
};
|
||||
/* Strings correspond to process corner type */
|
||||
constexpr std::array<const char*, NUM_TECH_LIB_CORNER_TYPES> TECH_LIB_CORNER_TYPE_STRING = {{"FF", "TT", "SS"}};
|
||||
|
||||
/********************************************************************
|
||||
* A data structure to describe technology library
|
||||
*******************************************************************/
|
||||
class TechnologyLibrary {
|
||||
private: /* Internal data */
|
||||
/* Transistor-related fundamental information */
|
||||
vtr::vector<TechnologyDeviceId, TechnologyDeviceId> device_ids_;
|
||||
vtr::vector<TechnologyDeviceId, std::string> device_names_;
|
||||
vtr::vector<TechnologyDeviceId, e_tech_lib_device_type> device_types_;
|
||||
vtr::vector<TechnologyDeviceId, e_tech_lib_model_type> device_model_types_;
|
||||
vtr::vector<TechnologyDeviceId, std::string> device_corners_;
|
||||
vtr::vector<TechnologyDeviceId, std::string> device_model_refs_;
|
||||
vtr::vector<TechnologyDeviceId, std::string> device_lib_paths_;
|
||||
vtr::vector<TechnologyDeviceId, float> device_vdds_;
|
||||
vtr::vector<TechnologyDeviceId, float> device_pn_ratios_;
|
||||
|
||||
/* Transistor models stored in vtr::Point data structure. pmos->x, nmos->y */
|
||||
vtr::vector<TechnologyDeviceId, vtr::Point<std::string>> transistor_model_names_;
|
||||
vtr::vector<TechnologyDeviceId, vtr::Point<float>> transistor_model_chan_lengths_;
|
||||
vtr::vector<TechnologyDeviceId, vtr::Point<float>> transistor_model_min_widths_;
|
||||
vtr::vector<TechnologyDeviceId, vtr::Point<std::string>> transistor_model_variation_names_;
|
||||
vtr::vector<TechnologyDeviceId, vtr::Point<TechnologyVariationId>> transistor_model_variation_ids_;
|
||||
|
||||
/* ReRAM-related fundamental information */
|
||||
vtr::vector<TechnologyDeviceId, vtr::Point<float>> rram_resistances_;
|
||||
vtr::vector<TechnologyDeviceId, float> rram_variation_names_;
|
||||
vtr::vector<TechnologyDeviceId, TechnologyVariationId> rram_variation_ids_;
|
||||
|
||||
/* Variation-related fundamental information */
|
||||
vtr::vector<TechnologyVariationId, TechnologyVariationId> variation_ids_;
|
||||
vtr::vector<TechnologyVariationId, std::string> variation_names_;
|
||||
vtr::vector<TechnologyVariationId, std::string> variation_abs_values_;
|
||||
vtr::vector<TechnologyVariationId, std::string> variation_num_sigmas_;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
/************************************************************************
|
||||
* A header file for TechnologyLibrary class, including critical data declaration
|
||||
* Please include this file only for using any TechnologyLibrary data structure
|
||||
* Refer to circuit_library.h for more details
|
||||
***********************************************************************/
|
||||
|
||||
/************************************************************************
|
||||
* Create strong id for TechnologyDevice to avoid illegal type casting
|
||||
***********************************************************************/
|
||||
#ifndef TECHNOLOGY_LIBRARY_FWD_H
|
||||
#define TECHNOLOGY_LIBRARY_FWD_H
|
||||
|
||||
#include "vtr_strong_id.h"
|
||||
|
||||
struct technology_device_id_tag;
|
||||
struct technology_variation_id_tag;
|
||||
|
||||
typedef vtr::StrongId<technology_device_id_tag> TechnologyDeviceId;
|
||||
typedef vtr::StrongId<technology_variation_id_tag> TechnologyVariationId;
|
||||
|
||||
/* Short declaration of class */
|
||||
class TechnologyLibrary;
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue