fix a critical bug in num_reserved_sram_ports
This commit is contained in:
parent
aaf8d23971
commit
b9e1b1afc4
|
@ -508,6 +508,20 @@ bool DeviceRRChan::valid_module_id(t_rr_type chan_type, size_t module_id) const
|
||||||
/* Member Functions of Class RRSwitchBlock*/
|
/* Member Functions of Class RRSwitchBlock*/
|
||||||
/* Constructor for an empty object */
|
/* Constructor for an empty object */
|
||||||
RRSwitchBlock::RRSwitchBlock() {
|
RRSwitchBlock::RRSwitchBlock() {
|
||||||
|
/* Set a clean start! */
|
||||||
|
coordinator_.set(0, 0);
|
||||||
|
chan_node_direction_.clear();
|
||||||
|
ipin_node_.clear();
|
||||||
|
ipin_node_grid_side_.clear();
|
||||||
|
opin_node_.clear();
|
||||||
|
opin_node_grid_side_.clear();
|
||||||
|
|
||||||
|
reserved_conf_bits_lsb_ = 1;
|
||||||
|
reserved_conf_bits_msb_ = 0;
|
||||||
|
|
||||||
|
conf_bits_lsb_ = 1;
|
||||||
|
conf_bits_msb_ = 0;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -814,28 +828,44 @@ void RRSwitchBlock::get_node_side_and_index(t_rr_node* node,
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t RRSwitchBlock::get_num_reserved_conf_bits() const {
|
size_t RRSwitchBlock::get_num_reserved_conf_bits() const {
|
||||||
assert (validate_num_reserved_conf_bits());
|
if (false == validate_num_reserved_conf_bits()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
return reserved_conf_bits_msb_ - reserved_conf_bits_lsb_ + 1;
|
return reserved_conf_bits_msb_ - reserved_conf_bits_lsb_ + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t RRSwitchBlock::get_reserved_conf_bits_lsb() const {
|
size_t RRSwitchBlock::get_reserved_conf_bits_lsb() const {
|
||||||
|
if (false == validate_num_reserved_conf_bits()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
return reserved_conf_bits_lsb_;
|
return reserved_conf_bits_lsb_;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t RRSwitchBlock::get_reserved_conf_bits_msb() const {
|
size_t RRSwitchBlock::get_reserved_conf_bits_msb() const {
|
||||||
|
if (false == validate_num_reserved_conf_bits()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
return reserved_conf_bits_msb_;
|
return reserved_conf_bits_msb_;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t RRSwitchBlock::get_num_conf_bits() const {
|
size_t RRSwitchBlock::get_num_conf_bits() const {
|
||||||
assert (validate_num_conf_bits());
|
if (false == validate_num_conf_bits()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
return conf_bits_msb_ - conf_bits_lsb_ + 1;
|
return conf_bits_msb_ - conf_bits_lsb_ + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t RRSwitchBlock::get_conf_bits_lsb() const {
|
size_t RRSwitchBlock::get_conf_bits_lsb() const {
|
||||||
|
if (false == validate_num_conf_bits()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
return conf_bits_lsb_;
|
return conf_bits_lsb_;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t RRSwitchBlock::get_conf_bits_msb() const {
|
size_t RRSwitchBlock::get_conf_bits_msb() const {
|
||||||
|
if (false == validate_num_conf_bits()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
return conf_bits_msb_;
|
return conf_bits_msb_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1199,10 +1229,10 @@ void RRSwitchBlock::set(const RRSwitchBlock& src) {
|
||||||
|
|
||||||
/* Copy conf_bits
|
/* Copy conf_bits
|
||||||
* TODO: this will be recovered when num_conf_bits etc will be initialized during FPGA-X2P setup
|
* TODO: this will be recovered when num_conf_bits etc will be initialized during FPGA-X2P setup
|
||||||
|
*/
|
||||||
this->set_num_reserved_conf_bits(src.get_num_reserved_conf_bits());
|
this->set_num_reserved_conf_bits(src.get_num_reserved_conf_bits());
|
||||||
this->set_conf_bits_lsb(src.get_conf_bits_lsb());
|
this->set_conf_bits_lsb(src.get_conf_bits_lsb());
|
||||||
this->set_conf_bits_msb(src.get_conf_bits_msb());
|
this->set_conf_bits_msb(src.get_conf_bits_msb());
|
||||||
*/
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1265,6 +1295,13 @@ void RRSwitchBlock::add_opin_node(t_rr_node* node, enum e_side node_side, enum e
|
||||||
}
|
}
|
||||||
|
|
||||||
void RRSwitchBlock::set_num_reserved_conf_bits(size_t num_reserved_conf_bits) {
|
void RRSwitchBlock::set_num_reserved_conf_bits(size_t num_reserved_conf_bits) {
|
||||||
|
/* For zero bits: make it invalid */
|
||||||
|
if ( 0 == num_reserved_conf_bits ) {
|
||||||
|
reserved_conf_bits_lsb_ = 1;
|
||||||
|
reserved_conf_bits_msb_ = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
reserved_conf_bits_lsb_ = 0;
|
reserved_conf_bits_lsb_ = 0;
|
||||||
reserved_conf_bits_msb_ = num_reserved_conf_bits - 1;
|
reserved_conf_bits_msb_ = num_reserved_conf_bits - 1;
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -38,6 +38,8 @@
|
||||||
#include "verilog_routing.h"
|
#include "verilog_routing.h"
|
||||||
#include "verilog_top_netlist_utils.h"
|
#include "verilog_top_netlist_utils.h"
|
||||||
|
|
||||||
|
#include "verilog_compact_netlist.h"
|
||||||
|
|
||||||
/* ONLY for compact Verilog netlists:
|
/* ONLY for compact Verilog netlists:
|
||||||
* Generate uniformly the prefix of the module name for each grid
|
* Generate uniformly the prefix of the module name for each grid
|
||||||
*/
|
*/
|
||||||
|
@ -275,7 +277,6 @@ void compact_verilog_update_grid_spice_model_and_sram_orgz_info(t_sram_orgz_info
|
||||||
/* Create a Verilog file and dump a module consisting of a I/O block,
|
/* Create a Verilog file and dump a module consisting of a I/O block,
|
||||||
* The pins appear in the port list will depend on the selected border side
|
* The pins appear in the port list will depend on the selected border side
|
||||||
*/
|
*/
|
||||||
static
|
|
||||||
void dump_compact_verilog_one_physical_block(t_sram_orgz_info* cur_sram_orgz_info,
|
void dump_compact_verilog_one_physical_block(t_sram_orgz_info* cur_sram_orgz_info,
|
||||||
char* verilog_dir_path,
|
char* verilog_dir_path,
|
||||||
char* subckt_dir_path,
|
char* subckt_dir_path,
|
||||||
|
@ -672,6 +673,7 @@ void dump_compact_verilog_defined_one_grid(t_sram_orgz_info* cur_sram_orgz_info,
|
||||||
/* Call defined grid
|
/* Call defined grid
|
||||||
* Instance unique submodules (I/O, CLB, Heterogeneous block) for the full grids
|
* Instance unique submodules (I/O, CLB, Heterogeneous block) for the full grids
|
||||||
*/
|
*/
|
||||||
|
static
|
||||||
void dump_compact_verilog_defined_grids(t_sram_orgz_info* cur_sram_orgz_info,
|
void dump_compact_verilog_defined_grids(t_sram_orgz_info* cur_sram_orgz_info,
|
||||||
FILE* fp) {
|
FILE* fp) {
|
||||||
int ix, iy;
|
int ix, iy;
|
||||||
|
@ -795,7 +797,7 @@ void dump_compact_verilog_defined_one_switch_box(t_sram_orgz_info* cur_sram_orgz
|
||||||
rr_sb.get_opin_node(side_manager.get_side(), inode)->xlow,
|
rr_sb.get_opin_node(side_manager.get_side(), inode)->xlow,
|
||||||
rr_sb.get_opin_node(side_manager.get_side(), inode)->ylow,
|
rr_sb.get_opin_node(side_manager.get_side(), inode)->ylow,
|
||||||
FALSE); /* Do not specify the direction of port */
|
FALSE); /* Do not specify the direction of port */
|
||||||
fprintf(fp, ", ");
|
fprintf(fp, ",\n");
|
||||||
}
|
}
|
||||||
fprintf(fp, "\n");
|
fprintf(fp, "\n");
|
||||||
}
|
}
|
||||||
|
@ -803,6 +805,7 @@ void dump_compact_verilog_defined_one_switch_box(t_sram_orgz_info* cur_sram_orgz
|
||||||
/* Configuration ports */
|
/* Configuration ports */
|
||||||
/* output of each configuration bit */
|
/* output of each configuration bit */
|
||||||
/* Reserved sram ports */
|
/* Reserved sram ports */
|
||||||
|
fprintf(fp, "//----- Reserved SRAM ports-----\n");
|
||||||
if (0 < (rr_sb.get_num_reserved_conf_bits())) {
|
if (0 < (rr_sb.get_num_reserved_conf_bits())) {
|
||||||
dump_verilog_reserved_sram_ports(fp, cur_sram_orgz_info,
|
dump_verilog_reserved_sram_ports(fp, cur_sram_orgz_info,
|
||||||
rr_sb.get_reserved_conf_bits_lsb(),
|
rr_sb.get_reserved_conf_bits_lsb(),
|
||||||
|
@ -812,6 +815,7 @@ void dump_compact_verilog_defined_one_switch_box(t_sram_orgz_info* cur_sram_orgz
|
||||||
}
|
}
|
||||||
/* Normal sram ports */
|
/* Normal sram ports */
|
||||||
if (0 < rr_sb.get_num_conf_bits()) {
|
if (0 < rr_sb.get_num_conf_bits()) {
|
||||||
|
fprintf(fp, "//----- Regular SRAM ports-----\n");
|
||||||
dump_verilog_sram_local_ports(fp, cur_sram_orgz_info,
|
dump_verilog_sram_local_ports(fp, cur_sram_orgz_info,
|
||||||
rr_sb.get_conf_bits_lsb(),
|
rr_sb.get_conf_bits_lsb(),
|
||||||
rr_sb.get_conf_bits_msb(),
|
rr_sb.get_conf_bits_msb(),
|
||||||
|
@ -821,6 +825,7 @@ void dump_compact_verilog_defined_one_switch_box(t_sram_orgz_info* cur_sram_orgz
|
||||||
/* Dump ports only visible during formal verification*/
|
/* Dump ports only visible during formal verification*/
|
||||||
if (0 < rr_sb.get_num_conf_bits()) {
|
if (0 < rr_sb.get_num_conf_bits()) {
|
||||||
fprintf(fp, "\n");
|
fprintf(fp, "\n");
|
||||||
|
fprintf(fp, "//----- SRAM ports for formal verification -----\n");
|
||||||
fprintf(fp, "`ifdef %s\n", verilog_formal_verification_preproc_flag);
|
fprintf(fp, "`ifdef %s\n", verilog_formal_verification_preproc_flag);
|
||||||
fprintf(fp, ",\n");
|
fprintf(fp, ",\n");
|
||||||
dump_verilog_formal_verification_sram_ports(fp, cur_sram_orgz_info,
|
dump_verilog_formal_verification_sram_ports(fp, cur_sram_orgz_info,
|
||||||
|
@ -842,7 +847,7 @@ void dump_compact_verilog_defined_one_switch_box(t_sram_orgz_info* cur_sram_orgz
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static
|
||||||
void dump_compact_verilog_defined_switch_boxes(t_sram_orgz_info* cur_sram_orgz_info,
|
void dump_compact_verilog_defined_switch_boxes(t_sram_orgz_info* cur_sram_orgz_info,
|
||||||
FILE* fp) {
|
FILE* fp) {
|
||||||
DeviceCoordinator sb_range = device_rr_switch_block.get_switch_block_range();
|
DeviceCoordinator sb_range = device_rr_switch_block.get_switch_block_range();
|
||||||
|
@ -1005,6 +1010,7 @@ void dump_compact_verilog_defined_one_connection_box(t_sram_orgz_info* cur_sram_
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Call the sub-circuits for connection boxes */
|
/* Call the sub-circuits for connection boxes */
|
||||||
|
static
|
||||||
void dump_compact_verilog_defined_connection_boxes(t_sram_orgz_info* cur_sram_orgz_info,
|
void dump_compact_verilog_defined_connection_boxes(t_sram_orgz_info* cur_sram_orgz_info,
|
||||||
FILE* fp) {
|
FILE* fp) {
|
||||||
int ix, iy;
|
int ix, iy;
|
||||||
|
@ -1164,6 +1170,7 @@ void dump_compact_verilog_defined_one_channel(FILE* fp,
|
||||||
|
|
||||||
|
|
||||||
/* Call the sub-circuits for channels : Channel X and Channel Y*/
|
/* Call the sub-circuits for channels : Channel X and Channel Y*/
|
||||||
|
static
|
||||||
void dump_compact_verilog_defined_channels(FILE* fp) {
|
void dump_compact_verilog_defined_channels(FILE* fp) {
|
||||||
int ix, iy;
|
int ix, iy;
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
#ifndef VERILOG_COMPACT_NETLIST_H
|
||||||
|
#define VERILOG_COMPACT_NETLIST_H
|
||||||
|
|
||||||
void dump_compact_verilog_one_physical_block(t_sram_orgz_info* cur_sram_orgz_info,
|
void dump_compact_verilog_one_physical_block(t_sram_orgz_info* cur_sram_orgz_info,
|
||||||
char* verilog_dir_path,
|
char* verilog_dir_path,
|
||||||
char* subckt_dir_path,
|
char* subckt_dir_path,
|
||||||
|
@ -26,4 +29,4 @@ void dump_compact_verilog_top_netlist(t_sram_orgz_info* cur_sram_orgz_info,
|
||||||
t_syn_verilog_opts fpga_verilog_opts,
|
t_syn_verilog_opts fpga_verilog_opts,
|
||||||
boolean compact_routing_hierarchy,
|
boolean compact_routing_hierarchy,
|
||||||
t_spice verilog);
|
t_spice verilog);
|
||||||
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue