bug fixing for heterogeneous blocks. Still we have bugs in 0-driver CHAN nodes in tileable RRG
This commit is contained in:
parent
f0ecc51b51
commit
78578f66c5
|
@ -2432,7 +2432,7 @@ const RRGSB DeviceRRGSB::get_sb_unique_module(size_t index) const {
|
|||
}
|
||||
|
||||
/* Get a rr switch block which a unique mirror */
|
||||
const RRGSB DeviceRRGSB::get_cb_unique_module(t_rr_type cb_type, size_t index) const {
|
||||
const RRGSB& DeviceRRGSB::get_cb_unique_module(t_rr_type cb_type, size_t index) const {
|
||||
assert (validate_cb_unique_module_index(cb_type, index));
|
||||
assert (validate_cb_type(cb_type));
|
||||
switch(cb_type) {
|
||||
|
@ -2449,7 +2449,7 @@ const RRGSB DeviceRRGSB::get_cb_unique_module(t_rr_type cb_type, size_t index) c
|
|||
}
|
||||
|
||||
/* Give a coordinator of a rr switch block, and return its unique mirror */
|
||||
const RRGSB DeviceRRGSB::get_cb_unique_module(t_rr_type cb_type, DeviceCoordinator& coordinator) const {
|
||||
const RRGSB& DeviceRRGSB::get_cb_unique_module(t_rr_type cb_type, DeviceCoordinator& coordinator) const {
|
||||
assert (validate_cb_type(cb_type));
|
||||
assert(validate_coordinator(coordinator));
|
||||
size_t cb_unique_module_id;
|
||||
|
@ -2659,7 +2659,8 @@ void DeviceRRGSB::build_cb_unique_module(t_rr_type cb_type) {
|
|||
|
||||
/* Traverse the unique_mirror list and check it is an mirror of another */
|
||||
for (size_t id = 0; id < get_num_cb_unique_module(cb_type); ++id) {
|
||||
if (true == rr_gsb_[ix][iy].is_cb_mirror(get_cb_unique_module(cb_type, id), cb_type)) {
|
||||
const RRGSB& unique_module = get_cb_unique_module(cb_type, id);
|
||||
if (true == rr_gsb_[ix][iy].is_cb_mirror(unique_module, cb_type)) {
|
||||
/* This is a mirror, raise the flag and we finish */
|
||||
is_unique_module = false;
|
||||
/* Record the id of unique mirror */
|
||||
|
@ -3109,7 +3110,7 @@ bool DeviceRRGSB::validate_cb_unique_module_index(t_rr_type cb_type, size_t inde
|
|||
}
|
||||
return true;
|
||||
case CHANY:
|
||||
if (index >= cbx_unique_module_.size()) {
|
||||
if (index >= cby_unique_module_.size()) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
|
|
@ -339,8 +339,8 @@ class DeviceRRGSB {
|
|||
const RRGSB get_sb_unique_submodule(DeviceCoordinator& coordinator, enum e_side side, size_t seg_id) const; /* Get a rr switch block which a unique mirror */
|
||||
const RRGSB get_sb_unique_module(size_t index) const; /* Get a rr switch block which a unique mirror */
|
||||
const RRGSB get_sb_unique_module(DeviceCoordinator& coordinator) const; /* Get a rr switch block which a unique mirror */
|
||||
const RRGSB get_cb_unique_module(t_rr_type cb_type, size_t index) const; /* Get a rr switch block which a unique mirror */
|
||||
const RRGSB get_cb_unique_module(t_rr_type cb_type, DeviceCoordinator& coordinator) const;
|
||||
const RRGSB& get_cb_unique_module(t_rr_type cb_type, size_t index) const; /* Get a rr switch block which a unique mirror */
|
||||
const RRGSB& get_cb_unique_module(t_rr_type cb_type, DeviceCoordinator& coordinator) const;
|
||||
size_t get_max_num_sides() const; /* Get the maximum number of sides across the switch blocks */
|
||||
size_t get_num_segments() const; /* Get the size of segment_ids */
|
||||
size_t get_segment_id(size_t index) const; /* Get a segment id */
|
||||
|
|
|
@ -1453,6 +1453,10 @@ void dump_verilog_unique_switch_box_interc(t_sram_orgz_info* cur_sram_orgz_info,
|
|||
} else {
|
||||
num_drive_rr_nodes = cur_rr_node->num_drive_rr_nodes;
|
||||
drive_rr_nodes = cur_rr_node->drive_rr_nodes;
|
||||
/* Special: if there are zero-driver nodes. We skip here */
|
||||
if (0 == num_drive_rr_nodes) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (0 == num_drive_rr_nodes) {
|
||||
|
|
Loading…
Reference in New Issue