diff options
Diffstat (limited to 'icetime/icetime.cc')
-rw-r--r-- | icetime/icetime.cc | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/icetime/icetime.cc b/icetime/icetime.cc index cc37625..d730fc6 100644 --- a/icetime/icetime.cc +++ b/icetime/icetime.cc @@ -30,6 +30,7 @@ #include <functional> #include <map> #include <set> +#include <stdexcept> #include <string> #include <tuple> #include <vector> @@ -61,16 +62,16 @@ std::map<int, std::string> net_symbols; bool get_config_bit(int tile_x, int tile_y, int bit_row, int bit_col) { - if (int(config_bits.size()) < tile_x) + if (int(config_bits.size()) <= tile_x) return false; - if (int(config_bits[tile_x].size()) < tile_y) + if (int(config_bits[tile_x].size()) <= tile_y) return false; - if (int(config_bits[tile_x][tile_y].size()) < bit_row) + if (int(config_bits[tile_x][tile_y].size()) <= bit_row) return false; - if (int(config_bits[tile_x][tile_y][bit_row].size()) < bit_col) + if (int(config_bits[tile_x][tile_y][bit_row].size()) <= bit_col) return false; return config_bits[tile_x][tile_y][bit_row][bit_col]; @@ -752,6 +753,7 @@ double get_delay_lp8k(std::string cell_type, std::string in_port, std::string ou double get_delay_hx1k(std::string cell_type, std::string in_port, std::string out_port); double get_delay_hx8k(std::string cell_type, std::string in_port, std::string out_port); double get_delay_up5k(std::string cell_type, std::string in_port, std::string out_port); +double get_delay_u4k(std::string cell_type, std::string in_port, std::string out_port); double get_delay(std::string cell_type, std::string in_port, std::string out_port) { @@ -764,17 +766,20 @@ double get_delay(std::string cell_type, std::string in_port, std::string out_por if (device_type == "lp1k") return get_delay_lp1k(cell_type, in_port, out_port); - if (device_type == "lp8k") + if (device_type == "lp8k" || device_type == "lp4k") return get_delay_lp8k(cell_type, in_port, out_port); if (device_type == "hx1k") return get_delay_hx1k(cell_type, in_port, out_port); - if (device_type == "hx8k") + if (device_type == "hx8k" || device_type == "hx4k") return get_delay_hx8k(cell_type, in_port, out_port); - if (device_type == "up5k") + if (device_type == "up5k" || device_type == "up3k") return get_delay_up5k(cell_type, in_port, out_port); + + if (device_type == "u4k" || device_type == "u1k" || device_type == "u2k") + return get_delay_u4k(cell_type, in_port, out_port); fprintf(stderr, "No built-in timing database for '%s' devices!\n", device_type.c_str()); exit(1); } @@ -1593,7 +1598,7 @@ void make_seg_cell(int net, const net_segment_t &seg) if (sscanf(seg.name.c_str(), "lutff_%d/in_%d", &a, &b) == 2) { //"logic" wires at the side of the device are actually IP or DSP - if(device_type == "up5k" && ((seg.x == 0) || (seg.x == int(config_tile_type.size()) - 1))) { + if((device_type == "up5k" || device_type == "up3k") && ((seg.x == 0) || (seg.x == int(config_tile_type.size()) - 1))) { std::string primnet; auto cell = make_dsp_ip(seg.x, seg.y, seg.name, primnet); if(cell != "") { @@ -2209,7 +2214,7 @@ void help(const char *cmd) printf(" -j <output_file>\n"); printf(" write timing report in json format to the file\n"); printf("\n"); - printf(" -d lp384|lp1k|hx1k|lp8k|hx8k|up5k\n"); + printf(" -d lp384|lp1k|hx1k|lp4k|hx4k|lp8k|hx8k|up3k|up5k|u1k|u2k|u4k\n"); printf(" select the device type (default = lp variant)\n"); printf("\n"); printf(" -C <chipdb-file>\n"); @@ -2366,13 +2371,17 @@ int main(int argc, char **argv) if (config_device != "1k") goto device_chip_mismatch; } else - if (device_type == "lp8k" || device_type == "hx8k") { + if (device_type == "lp8k" || device_type == "hx8k" || device_type == "lp4k" || device_type == "hx4k") { if (config_device != "8k") goto device_chip_mismatch; } else - if (device_type == "up5k") { + if (device_type == "up5k" || device_type == "up3k") { if (config_device != "5k") goto device_chip_mismatch; + } else + if (device_type == "u4k" || device_type == "u1k" || device_type == "u2k") { + if (config_device != "u4k") + goto device_chip_mismatch; } else { fprintf(stderr, "Error: Invalid device type '%s'.\n", device_type.c_str()); exit(1); |