/***********************************/ /* SPICE Modeling for VPR */ /* Xifan TANG, EPFL/LSI */ /***********************************/ /* Include SPICE support headers*/ #include #include "spice_types.h" #include "linkedlist.h" #include "fpga_x2p_globals.h" #include "spice_globals.h" /* Threshold of max transistor width for each transistor */ float max_width_per_trans = 5.; char* spice_netlist_file_postfix = ".sp"; char* nmos_subckt_name = "vpr_nmos"; char* pmos_subckt_name = "vpr_pmos"; char* io_nmos_subckt_name = "vpr_io_nmos"; char* io_pmos_subckt_name = "vpr_io_pmos"; char* cpt_subckt_name = "cpt"; char* mux_basis_posfix = "_basis"; char* mux_special_basis_posfix = "_special_basis"; char* nmos_pmos_spice_file_name = "nmos_pmos.sp"; char* basics_spice_file_name = "inv_buf_trans_gate.sp"; char* muxes_spice_file_name = "muxes.sp"; char* rram_veriloga_file_name = "rram_behavior.va"; char* wires_spice_file_name = "wires.sp"; char* logic_block_spice_file_name = "grid_header.sp"; char* luts_spice_file_name = "luts.sp"; char* routing_spice_file_name = "routing_header.sp"; char* meas_header_file_name = "meas_params.sp"; char* stimu_header_file_name = "stimulate_params.sp"; char* design_param_header_file_name = "design_params.sp"; /* Prefix for subckt SPICE netlists */ char* grid_spice_file_name_prefix = "grid_"; char* chanx_spice_file_name_prefix = "chanx_"; char* chany_spice_file_name_prefix = "chany_"; char* sb_spice_file_name_prefix = "sb_"; char* cbx_spice_file_name_prefix = "cbx_"; char* cby_spice_file_name_prefix = "cby_"; /* Postfix for circuit design parameters */ char* design_param_postfix_input_buf_size = "_input_buf_size"; char* design_param_postfix_output_buf_size = "_output_buf_size"; char* design_param_postfix_pass_gate_logic_pmos_size = "_pgl_pmos_size"; char* design_param_postfix_pass_gate_logic_nmos_size = "_pgl_nmos_size"; char* design_param_postfix_wire_param_res_val = "_wire_param_res_val"; char* design_param_postfix_wire_param_cap_val = "_wire_param_cap_val"; char* design_param_postfix_rram_ron = "_rram_ron"; char* design_param_postfix_rram_roff = "_rram_roff"; char* design_param_postfix_rram_wprog_set_pmos = "_rram_wprog_set_pmos"; char* design_param_postfix_rram_wprog_set_nmos = "_rram_wprog_set_nmos"; char* design_param_postfix_rram_wprog_reset_pmos = "_rram_wprog_reset_pmos"; char* design_param_postfix_rram_wprog_reset_nmos = "_rram_wprog_reset_nmos"; /* Testbench names */ char* spice_top_testbench_postfix = "_top.sp"; char* spice_grid_testbench_postfix = "_grid_testbench.sp"; char* spice_pb_mux_testbench_postfix = "_pbmux_testbench.sp"; char* spice_cb_mux_testbench_postfix = "_cbmux_testbench.sp"; char* spice_sb_mux_testbench_postfix = "_sbmux_testbench.sp"; char* spice_cb_testbench_postfix = "_cb_testbench.sp"; char* spice_sb_testbench_postfix = "_sb_testbench.sp"; char* spice_lut_testbench_postfix = "_lut_testbench.sp"; char* spice_dff_testbench_postfix = "_dff_testbench.sp"; char* spice_hardlogic_testbench_postfix = "_hardlogic_testbench.sp"; char* spice_io_testbench_postfix = "_io_testbench.sp"; /* SRAM SPICE MODEL should be set as global*/ t_spice_model* sram_spice_model = NULL; enum e_sram_orgz sram_spice_orgz_type = SPICE_SRAM_STANDALONE; t_sram_orgz_info* sram_spice_orgz_info = NULL; /* Input and Output Pad spice model. should be set as global */ t_spice_model* iopad_spice_model = NULL; /* Global counters */ int rram_design_tech = 0; int num_used_grid_mux_tb = 0; int num_used_grid_tb = 0; int num_used_cb_tb = 0; int num_used_sb_tb = 0; int num_used_cb_mux_tb = 0; int num_used_sb_mux_tb = 0; int num_used_lut_tb = 0; int num_used_hardlogic_tb = 0; int num_used_io_tb = 0; /* linked-list for all the testbenches */ t_llist* tb_head = NULL; /* Linked-list that stores submodule Verilog file mames */ t_llist* grid_spice_subckt_file_path_head = NULL; t_llist* routing_spice_subckt_file_path_head = NULL; /* linked-list for heads of scan-chain */ t_llist* scan_chain_heads = NULL; /* Name of global ports used in all netlists */ char* spice_tb_global_vdd_port_name = "gvdd"; char* spice_tb_global_gnd_port_name = "ggnd"; char* spice_tb_global_config_done_port_name = "gconfig_done"; char* spice_tb_global_set_port_name = "gset"; char* spice_tb_global_reset_port_name = "greset"; char* spice_tb_global_vdd_localrouting_port_name = "gvdd_local_interc"; char* spice_tb_global_vdd_direct_port_name = "gvdd_direct_interc"; char* spice_tb_global_vdd_io_port_name = "gvdd_io"; char* spice_tb_global_vdd_hardlogic_port_name = "gvdd_hardlogic"; char* spice_tb_global_vdd_sram_port_name = "gvdd_sram"; char* spice_tb_global_vdd_lut_sram_port_name = "gvdd_sram_luts"; char* spice_tb_global_vdd_localrouting_sram_port_name = "gvdd_sram_local_routing"; char* spice_tb_global_vdd_io_sram_port_name = "gvdd_sram_io"; char* spice_tb_global_vdd_hardlogic_sram_port_name = "gvdd_sram_hardlogic"; char* spice_tb_global_vdd_cb_sram_port_name = "gvdd_sram_cbs"; char* spice_tb_global_vdd_sb_sram_port_name = "gvdd_sram_sbs"; char* spice_tb_global_clock_port_name = "gclock"; char* spice_tb_global_vdd_load_port_name = "gvdd_load"; char* spice_tb_global_port_inv_postfix = "_inv"; int spice_sim_multi_thread_num = 8;