aboutsummaryrefslogtreecommitdiffstats
path: root/icetime/icetime.cc
diff options
context:
space:
mode:
Diffstat (limited to 'icetime/icetime.cc')
-rw-r--r--icetime/icetime.cc31
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);