@@ -851,32 +851,44 @@ static void load_rr_switch_inf(const int num_arch_switches, const float R_minW_n
851
851
// setup device_ctx.switch_fanin_remap, for future swich usage analysis
852
852
device_ctx.switch_fanin_remap [i_arch_switch][fanin] = i_rr_switch;
853
853
854
- /* figure out, by looking at the arch switch's Tdel map, what the delay of the new
855
- rr switch should be */
856
- double rr_switch_Tdel = device_ctx.arch_switch_inf [i_arch_switch].Tdel (fanin);
857
-
858
- /* copy over the arch switch to rr_switch_inf[i_rr_switch], but with the changed Tdel value */
859
- device_ctx.rr_switch_inf [i_rr_switch].set_type (device_ctx.arch_switch_inf [i_arch_switch].type ());
860
- device_ctx.rr_switch_inf [i_rr_switch].R = device_ctx.arch_switch_inf [i_arch_switch].R ;
861
- device_ctx.rr_switch_inf [i_rr_switch].Cin = device_ctx.arch_switch_inf [i_arch_switch].Cin ;
862
- device_ctx.rr_switch_inf [i_rr_switch].Cout = device_ctx.arch_switch_inf [i_arch_switch].Cout ;
863
- device_ctx.rr_switch_inf [i_rr_switch].Tdel = rr_switch_Tdel;
864
- device_ctx.rr_switch_inf [i_rr_switch].mux_trans_size = device_ctx.arch_switch_inf [i_arch_switch].mux_trans_size ;
865
- if (device_ctx.arch_switch_inf [i_arch_switch].buf_size_type == BufferSize::AUTO) {
866
- // Size based on resistance
867
- device_ctx.rr_switch_inf [i_rr_switch].buf_size = trans_per_buf (device_ctx.arch_switch_inf [i_arch_switch].R , R_minW_nmos, R_minW_pmos);
868
- } else {
869
- VTR_ASSERT (device_ctx.arch_switch_inf [i_arch_switch].buf_size_type == BufferSize::ABSOLUTE);
870
- // Use the specified size
871
- device_ctx.rr_switch_inf [i_rr_switch].buf_size = device_ctx.arch_switch_inf [i_arch_switch].buf_size ;
872
- }
873
- device_ctx.rr_switch_inf [i_rr_switch].name = device_ctx.arch_switch_inf [i_arch_switch].name ;
874
- device_ctx.rr_switch_inf [i_rr_switch].power_buffer_type = device_ctx.arch_switch_inf [i_arch_switch].power_buffer_type ;
875
- device_ctx.rr_switch_inf [i_rr_switch].power_buffer_size = device_ctx.arch_switch_inf [i_arch_switch].power_buffer_size ;
854
+ load_rr_switch_from_arch_switch (i_arch_switch, i_rr_switch, fanin, R_minW_nmos, R_minW_pmos);
876
855
}
877
856
}
878
857
}
879
858
859
+ void load_rr_switch_from_arch_switch (
860
+ int arch_switch_idx,
861
+ int rr_switch_idx,
862
+ int fanin,
863
+ const float R_minW_nmos,
864
+ const float R_minW_pmos)
865
+ {
866
+ auto & device_ctx = g_vpr_ctx.mutable_device ();
867
+
868
+ /* figure out, by looking at the arch switch's Tdel map, what the delay of the new
869
+ rr switch should be */
870
+ double rr_switch_Tdel = device_ctx.arch_switch_inf [arch_switch_idx].Tdel (fanin);
871
+
872
+ /* copy over the arch switch to rr_switch_inf[rr_switch_idx], but with the changed Tdel value */
873
+ device_ctx.rr_switch_inf [rr_switch_idx].set_type (device_ctx.arch_switch_inf [arch_switch_idx].type ());
874
+ device_ctx.rr_switch_inf [rr_switch_idx].R = device_ctx.arch_switch_inf [arch_switch_idx].R ;
875
+ device_ctx.rr_switch_inf [rr_switch_idx].Cin = device_ctx.arch_switch_inf [arch_switch_idx].Cin ;
876
+ device_ctx.rr_switch_inf [rr_switch_idx].Cout = device_ctx.arch_switch_inf [arch_switch_idx].Cout ;
877
+ device_ctx.rr_switch_inf [rr_switch_idx].Tdel = rr_switch_Tdel;
878
+ device_ctx.rr_switch_inf [rr_switch_idx].mux_trans_size = device_ctx.arch_switch_inf [arch_switch_idx].mux_trans_size ;
879
+ if (device_ctx.arch_switch_inf [arch_switch_idx].buf_size_type == BufferSize::AUTO) {
880
+ // Size based on resistance
881
+ device_ctx.rr_switch_inf [rr_switch_idx].buf_size = trans_per_buf (device_ctx.arch_switch_inf [arch_switch_idx].R , R_minW_nmos, R_minW_pmos);
882
+ } else {
883
+ VTR_ASSERT (device_ctx.arch_switch_inf [arch_switch_idx].buf_size_type == BufferSize::ABSOLUTE);
884
+ // Use the specified size
885
+ device_ctx.rr_switch_inf [rr_switch_idx].buf_size = device_ctx.arch_switch_inf [arch_switch_idx].buf_size ;
886
+ }
887
+ device_ctx.rr_switch_inf [rr_switch_idx].name = device_ctx.arch_switch_inf [arch_switch_idx].name ;
888
+ device_ctx.rr_switch_inf [rr_switch_idx].power_buffer_type = device_ctx.arch_switch_inf [arch_switch_idx].power_buffer_type ;
889
+ device_ctx.rr_switch_inf [rr_switch_idx].power_buffer_size = device_ctx.arch_switch_inf [arch_switch_idx].power_buffer_size ;
890
+ }
891
+
880
892
/* switch indices of each rr_node original point into the global device_ctx.arch_switch_inf array.
881
893
now we want to remap these indices to point into the global device_ctx.rr_switch_inf array
882
894
which contains switch info at different fan-in values */
0 commit comments