blob: 51c604364489db71bc3fd08c34200a4458512205 [file] [log] [blame]
#ifndef NETLIST_UTILS_H_FUNCTIONS
#define NETLIST_UTILS_H_FUNCTIONS
#include "odin_types.h"
// PROTOTYPES
//
// how to void remap_input_pin_to_new_node(nnode_t *from_node, int from_node_pin, nnode_t *to_node, int to_node_pin)
// remap_int_to_new_node(from_node->input_pins[from_node_pin], to_node, to_node_pin);
//
nnode_t* allocate_nnode();
npin_t* allocate_npin();
npin_t *get_zero_pin(netlist_t *netlist);
npin_t *get_pad_pin(netlist_t *netlist);
npin_t *get_one_pin(netlist_t *netlist);
npin_t* copy_input_npin(npin_t* copy_pin);
npin_t* copy_output_npin(npin_t* copy_pin);
nnet_t* allocate_nnet();
nnode_t* free_nnode(nnode_t *to_free);
npin_t* free_npin(npin_t *to_free);
nnet_t* free_nnet(nnet_t* to_free);
void allocate_more_input_pins(nnode_t *node, int width);
void allocate_more_output_pins(nnode_t *node, int width);
void move_input_pin(nnode_t *node, int old_idx, int new_idx);
void move_output_pin(nnode_t *node, int old_idx, int new_idx);
void add_input_pin_to_node(nnode_t *node, npin_t *pin, int pin_idx);
void add_fanout_pin_to_net(nnet_t *net, npin_t *pin);
void add_output_pin_to_node(nnode_t *node, npin_t *pin, int pin_idx);
void add_driver_pin_to_net(nnet_t *net, npin_t *pin);
void add_output_port_information(nnode_t *node, int port_width);
void add_input_port_information(nnode_t *node, int port_width);
void combine_nets(nnet_t *output_net, nnet_t* input_net, netlist_t *netlist);
void join_nets(nnet_t *net, nnet_t* input_net);
void remap_pin_to_new_net(npin_t *pin, nnet_t *new_net);
void remap_pin_to_new_node(npin_t *pin, nnode_t *new_node, int pin_idx);
void remap_pin_to_new_node_range(npin_t *pin, nnode_t *new_node, int pin_range_start, int pin_range_end);
signal_list_t *init_signal_list();
void add_pin_to_signal_list(signal_list_t *list, npin_t* pin);
void sort_signal_list_alphabetically(signal_list_t *list);
signal_list_t *combine_lists(signal_list_t **signal_lists, int num_signal_lists);
signal_list_t *combine_lists_without_freeing_originals(signal_list_t **signal_lists, int num_signal_lists);
signal_list_t *copy_input_signals(signal_list_t *signalsvar);
signal_list_t *copy_output_signals(signal_list_t *signalsvar);
void free_signal_list(signal_list_t *list);
void hookup_hb_input_pins_from_signal_list(nnode_t *node, int n_start_idx, signal_list_t* input_list, int il_start_idx, int width, netlist_t *netlist) ;
void hookup_input_pins_from_signal_list(nnode_t *node, int n_start_idx, signal_list_t* input_list, int il_start_idx, int width, netlist_t *netlist) ;
void hookup_output_pins_from_signal_list(nnode_t *node, int n_start_idx, signal_list_t* output_list, int ol_start_idx, int width);
signal_list_t *make_output_pins_for_existing_node(nnode_t* node, int width);
void connect_nodes(nnode_t *out_node, int out_idx, nnode_t *in_node, int in_idx);
int count_nodes_in_netlist(netlist_t *netlist);
netlist_t* allocate_netlist();
void free_netlist(netlist_t *to_free);
void add_node_to_netlist(netlist_t *netlist, nnode_t *node, operation_list special_node);
void mark_clock_node ( netlist_t *netlist, const char *clock_name);
int get_output_pin_index_from_mapping(nnode_t *node, const char *name);
int get_output_port_index_from_mapping(nnode_t *node, const char *name);
int get_input_pin_index_from_mapping(nnode_t *node, const char *name);
int get_input_port_index_from_mapping(nnode_t *node, const char *name);
chain_information_t* allocate_chain_info();
void remove_fanout_pins_from_net(nnet_t *net, npin_t *pin, int id);
/* this function prints out the netlist
in the terminal, for debugging purpose */
void print_netlist_for_checking (netlist_t *netlist,char *name);
#endif