add mutators for delay_info

This commit is contained in:
tangxifan 2019-08-07 21:19:16 -06:00
parent 03a64e2ad8
commit 5b0c9572c3
3 changed files with 77 additions and 1 deletions

View File

@ -572,6 +572,62 @@ void CircuitLibrary::set_port_sram_orgz(const CircuitModelId& circuit_model_id,
return;
}
/* Delay information */
/* Add a delay info:
* Check if the delay type is in the range of vector
* if yes, assign values
* if no, resize and assign values
*/
void CircuitLibrary::add_delay_info(const CircuitModelId& circuit_model_id,
const enum spice_model_delay_type& delay_type) {
/* validate the circuit_model_id */
VTR_ASSERT_SAFE(valid_circuit_model_id(circuit_model_id));
/* Check the range of vector */
if (size_t(delay_type) >= delay_types_[circuit_model_id].size()) {
/* Resize */
delay_types_[circuit_model_id].resize(size_t(delay_type) + 1);
delay_in_port_names_[circuit_model_id].resize(size_t(delay_type) + 1);
delay_out_port_names_[circuit_model_id].resize(size_t(delay_type) + 1);
delay_values_[circuit_model_id].resize(size_t(delay_type) + 1);
}
delay_types_[circuit_model_id][size_t(delay_type)] = delay_type;
return;
}
void CircuitLibrary::set_delay_in_port_names(const CircuitModelId& circuit_model_id,
const enum spice_model_delay_type& delay_type,
const std::string& in_port_names) {
/* validate the circuit_model_id */
VTR_ASSERT_SAFE(valid_circuit_model_id(circuit_model_id));
/* Validate delay_type */
VTR_ASSERT_SAFE(valid_delay_type(circuit_model_id, delay_type));
delay_in_port_names_[circuit_model_id][size_t(delay_type)] = in_port_names;
return;
}
void CircuitLibrary::set_delay_out_port_names(const CircuitModelId& circuit_model_id,
const enum spice_model_delay_type& delay_type,
const std::string& out_port_names) {
/* validate the circuit_model_id */
VTR_ASSERT_SAFE(valid_circuit_model_id(circuit_model_id));
/* Validate delay_type */
VTR_ASSERT_SAFE(valid_delay_type(circuit_model_id, delay_type));
delay_out_port_names_[circuit_model_id][size_t(delay_type)] = out_port_names;
return;
}
void CircuitLibrary::set_delay_values(const CircuitModelId& circuit_model_id,
const enum spice_model_delay_type& delay_type,
const std::string& delay_values) {
/* validate the circuit_model_id */
VTR_ASSERT_SAFE(valid_circuit_model_id(circuit_model_id));
/* Validate delay_type */
VTR_ASSERT_SAFE(valid_delay_type(circuit_model_id, delay_type));
delay_values_[circuit_model_id][size_t(delay_type)] = delay_values;
return;
}
/* Buffer/Inverter-related parameters */
/************************************************************************
* Internal Mutators
@ -656,6 +712,12 @@ bool CircuitLibrary::valid_circuit_port_id(const CircuitModelId& circuit_model_i
return ( size_t(circuit_port_id) < port_ids_[circuit_model_id].size() ) && ( circuit_port_id == port_ids_[circuit_model_id][circuit_port_id] );
}
bool CircuitLibrary::valid_delay_type(const CircuitModelId& circuit_model_id, const enum spice_model_delay_type& delay_type) const {
/* validate the circuit_model_id */
VTR_ASSERT_SAFE(valid_circuit_model_id(circuit_model_id));
return ( size_t(delay_type) < delay_types_[circuit_model_id].size() ) && ( delay_type == delay_types_[circuit_model_id][size_t(delay_type)] );
}
/* Invalidators */
/* Empty fast lookup for circuit_models*/
void CircuitLibrary::invalidate_circuit_model_lookup() const {

View File

@ -309,6 +309,18 @@ class CircuitLibrary {
void set_port_sram_orgz(const CircuitModelId& circuit_model_id,
const CircuitPortId& circuit_port_id,
const enum e_sram_orgz& sram_orgz);
/* Delay information */
void add_delay_info(const CircuitModelId& circuit_model_id,
const enum spice_model_delay_type& delay_type);
void set_delay_in_port_names(const CircuitModelId& circuit_model_id,
const enum spice_model_delay_type& delay_type,
const std::string& in_port_names);
void set_delay_out_port_names(const CircuitModelId& circuit_model_id,
const enum spice_model_delay_type& delay_type,
const std::string& out_port_names);
void set_delay_values(const CircuitModelId& circuit_model_id,
const enum spice_model_delay_type& delay_type,
const std::string& delay_values);
public: /* Internal mutators: link circuit_models */
void set_circuit_model_buffer(const CircuitModelId& circuit_model_id, const enum e_buffer_type buffer_type, const bool& existence, const std::string& circuit_model_name);
void set_circuit_model_port_inv_circuit_model(const CircuitModelId& circuit_model_id);
@ -318,6 +330,7 @@ class CircuitLibrary {
/* Validators */
bool valid_circuit_model_id(const CircuitModelId& circuit_model_id) const;
bool valid_circuit_port_id(const CircuitModelId& circuit_model_id, const CircuitPortId& circuit_port_id) const;
bool valid_delay_type(const CircuitModelId& circuit_model_id, const enum spice_model_delay_type& delay_type) const;
/* Invalidators */
void invalidate_circuit_model_lookup() const;
void invalidate_circuit_model_port_lookup(const CircuitModelId& circuit_model_id) const;

View File

@ -12,7 +12,8 @@ enum e_spice_tech_lib_type {
enum spice_model_delay_type {
SPICE_MODEL_DELAY_RISE,
SPICE_MODEL_DELAY_FALL
SPICE_MODEL_DELAY_FALL,
NUM_CIRCUIT_MODEL_DELAY_TYPES
};
/*Struct for a SPICE model of a module*/