variable rename

This commit is contained in:
Wolfgang Spraul 2013-01-27 07:57:33 -05:00
parent 785d809538
commit 7d90449ab4
6 changed files with 103 additions and 103 deletions

View File

@ -1053,14 +1053,14 @@ static int test_logic(struct test_state* tstate, int y, int x, int type_idx,
if (tstate->dry_run) {
for (lut = LUT_A; lut <= LUT_D; lut++) {
if (!logic_cfg->a2d[lut].lut6
&& !logic_cfg->a2d[lut].lut5)
if (!logic_cfg->a2d[lut].lut6_str
&& !logic_cfg->a2d[lut].lut5_str)
continue;
printf("O %c6_lut '%s' %c5_lut '%s'\n",
'A'+lut, logic_cfg->a2d[lut].lut6
? logic_cfg->a2d[lut].lut6 : "-",
'A'+lut, logic_cfg->a2d[lut].lut5
? logic_cfg->a2d[lut].lut5 : "-");
'A'+lut, logic_cfg->a2d[lut].lut6_str
? logic_cfg->a2d[lut].lut6_str : "-",
'A'+lut, logic_cfg->a2d[lut].lut5_str
? logic_cfg->a2d[lut].lut5_str : "-");
}
}
rc = fdev_logic_setconf(tstate->model, y, x, type_idx, logic_cfg);
@ -1113,17 +1113,17 @@ static int test_logic(struct test_state* tstate, int y, int x, int type_idx,
}
}
if ((dev->pinw_req_for_cfg[i] == LI_A6
&& dev->u.logic.a2d[LUT_A].lut5
&& *dev->u.logic.a2d[LUT_A].lut5)
&& dev->u.logic.a2d[LUT_A].lut5_str
&& *dev->u.logic.a2d[LUT_A].lut5_str)
|| (dev->pinw_req_for_cfg[i] == LI_B6
&& dev->u.logic.a2d[LUT_B].lut5
&& *dev->u.logic.a2d[LUT_B].lut5)
&& dev->u.logic.a2d[LUT_B].lut5_str
&& *dev->u.logic.a2d[LUT_B].lut5_str)
|| (dev->pinw_req_for_cfg[i] == LI_C6
&& dev->u.logic.a2d[LUT_C].lut5
&& *dev->u.logic.a2d[LUT_C].lut5)
&& dev->u.logic.a2d[LUT_C].lut5_str
&& *dev->u.logic.a2d[LUT_C].lut5_str)
|| (dev->pinw_req_for_cfg[i] == LI_D6
&& dev->u.logic.a2d[LUT_D].lut5
&& *dev->u.logic.a2d[LUT_D].lut5)
&& dev->u.logic.a2d[LUT_D].lut5_str
&& *dev->u.logic.a2d[LUT_D].lut5_str)
|| (latch_logic
&& (dev->pinw_req_for_cfg[i] == LI_CLK
|| dev->pinw_req_for_cfg[i] == LI_CE))) {
@ -1245,7 +1245,7 @@ static int test_lut_encoding(struct test_state* tstate)
for (type_i = 0; type_i < sizeof(idx_enum)/sizeof(*idx_enum); type_i++) {
for (lut = LUT_A; lut <= LUT_D; lut++) {
memset(&logic_cfg, 0, sizeof(logic_cfg));
logic_cfg.a2d[lut].lut6 = lut6_str;
logic_cfg.a2d[lut].lut6_str = lut6_str;
logic_cfg.a2d[lut].out_used = 1;
// lut6 only
@ -1280,7 +1280,7 @@ static int test_lut_encoding(struct test_state* tstate)
}
// lut6 and lut5 pairs
logic_cfg.a2d[lut].lut5 = lut5_str;
logic_cfg.a2d[lut].lut5_str = lut5_str;
logic_cfg.a2d[lut].out_mux = MUX_O5;
sprintf(lut6_str, "(A6+~A6)*1");
@ -1346,7 +1346,7 @@ static int test_logic_config(struct test_state* tstate)
// lut6, direct-out
memset(&logic_cfg, 0, sizeof(logic_cfg));
logic_cfg.a2d[lut].lut6 = "A1";
logic_cfg.a2d[lut].lut6_str = "A1";
logic_cfg.a2d[lut].out_used = 1;
rc = test_logic(tstate, y, x_enum[x_i],
@ -1358,7 +1358,7 @@ static int test_logic_config(struct test_state* tstate)
// O6 over mux-out seems not supported
// on an X device.
memset(&logic_cfg, 0, sizeof(logic_cfg));
logic_cfg.a2d[lut].lut6 = "A1";
logic_cfg.a2d[lut].lut6_str = "A1";
logic_cfg.a2d[lut].out_mux = MUX_O6;
rc = test_logic(tstate, y, x_enum[x_i],
@ -1397,7 +1397,7 @@ static int test_logic_config(struct test_state* tstate)
// lut6, ff-out
memset(&logic_cfg, 0, sizeof(logic_cfg));
logic_cfg.a2d[lut].lut6 = "A1";
logic_cfg.a2d[lut].lut6_str = "A1";
logic_cfg.a2d[lut].ff = FF_FF;
logic_cfg.a2d[lut].ff_mux = MUX_O6;
logic_cfg.a2d[lut].ff_srinit = FF_SRINIT0;
@ -1440,7 +1440,7 @@ static int test_logic_config(struct test_state* tstate)
// lut6, latch-out
memset(&logic_cfg, 0, sizeof(logic_cfg));
logic_cfg.a2d[lut].lut6 = "A1";
logic_cfg.a2d[lut].lut6_str = "A1";
logic_cfg.a2d[lut].ff = FF_LATCH;
logic_cfg.a2d[lut].ff_mux = MUX_O6;
logic_cfg.a2d[lut].ff_srinit = FF_SRINIT0;
@ -1464,7 +1464,7 @@ static int test_logic_config(struct test_state* tstate)
// lut6, and-latch
memset(&logic_cfg, 0, sizeof(logic_cfg));
logic_cfg.a2d[lut].lut6 = "A1";
logic_cfg.a2d[lut].lut6_str = "A1";
logic_cfg.a2d[lut].ff = FF_AND2L;
logic_cfg.a2d[lut].ff_mux = MUX_O6;
// AND2L requires SRINIT=0
@ -1481,7 +1481,7 @@ static int test_logic_config(struct test_state* tstate)
// lut6, or-latch
memset(&logic_cfg, 0, sizeof(logic_cfg));
logic_cfg.a2d[lut].lut6 = "A1";
logic_cfg.a2d[lut].lut6_str = "A1";
logic_cfg.a2d[lut].ff = FF_OR2L;
logic_cfg.a2d[lut].ff_mux = MUX_O6;
// OR2L requires SRINIT=1
@ -1509,7 +1509,7 @@ static int test_logic_config(struct test_state* tstate)
if (rc) FAIL(rc);
// . o6-direct
logic_cfg.a2d[lut].lut6 = "A1";
logic_cfg.a2d[lut].lut6_str = "A1";
logic_cfg.a2d[lut].out_used = 1;
rc = test_logic(tstate, y, x_enum[x_i],
idx_enum[type_i], &logic_cfg);
@ -1531,9 +1531,9 @@ static int test_logic_config(struct test_state* tstate)
// lut6 direct-out, lut5 mux-out
memset(&logic_cfg, 0, sizeof(logic_cfg));
logic_cfg.a2d[lut].lut6 = "(A6+~A6)*A1";
logic_cfg.a2d[lut].lut6_str = "(A6+~A6)*A1";
logic_cfg.a2d[lut].out_used = 1;
logic_cfg.a2d[lut].lut5 = "A1*A2";
logic_cfg.a2d[lut].lut5_str = "A1*A2";
logic_cfg.a2d[lut].out_mux = MUX_O5;
rc = test_logic(tstate, y, x_enum[x_i],
idx_enum[type_i], &logic_cfg);
@ -1607,29 +1607,29 @@ static int test_logic_config(struct test_state* tstate)
if (idx_enum[type_i] == DEV_LOG_X) {
// minimum-config X device
memset(&logic_cfg, 0, sizeof(logic_cfg));
logic_cfg.a2d[LUT_A].lut6 = "(A6+~A6)*A1";
logic_cfg.a2d[LUT_A].lut5 = "A2";
logic_cfg.a2d[LUT_A].lut6_str = "(A6+~A6)*A1";
logic_cfg.a2d[LUT_A].lut5_str = "A2";
logic_cfg.a2d[LUT_A].out_mux = MUX_5Q;
logic_cfg.a2d[LUT_A].ff5_srinit = FF_SRINIT0;
logic_cfg.a2d[LUT_A].ff = FF_FF;
logic_cfg.a2d[LUT_A].ff_mux = MUX_O6;
logic_cfg.a2d[LUT_A].ff_srinit = FF_SRINIT0;
logic_cfg.a2d[LUT_B].lut6 = "(A6+~A6)*A4";
logic_cfg.a2d[LUT_B].lut5 = "A3";
logic_cfg.a2d[LUT_B].lut6_str = "(A6+~A6)*A4";
logic_cfg.a2d[LUT_B].lut5_str = "A3";
logic_cfg.a2d[LUT_B].out_mux = MUX_5Q;
logic_cfg.a2d[LUT_B].ff5_srinit = FF_SRINIT0;
logic_cfg.a2d[LUT_B].ff = FF_FF;
logic_cfg.a2d[LUT_B].ff_mux = MUX_O6;
logic_cfg.a2d[LUT_B].ff_srinit = FF_SRINIT0;
logic_cfg.a2d[LUT_C].lut6 = "(A6+~A6)*(A2+A5)";
logic_cfg.a2d[LUT_C].lut5 = "A3+A4";
logic_cfg.a2d[LUT_C].lut6_str = "(A6+~A6)*(A2+A5)";
logic_cfg.a2d[LUT_C].lut5_str = "A3+A4";
logic_cfg.a2d[LUT_C].out_mux = MUX_5Q;
logic_cfg.a2d[LUT_C].ff5_srinit = FF_SRINIT0;
logic_cfg.a2d[LUT_C].ff = FF_FF;
logic_cfg.a2d[LUT_C].ff_mux = MUX_O6;
logic_cfg.a2d[LUT_C].ff_srinit = FF_SRINIT0;
logic_cfg.a2d[LUT_D].lut6 = "(A6+~A6)*A3";
logic_cfg.a2d[LUT_D].lut5 = "A3+A5";
logic_cfg.a2d[LUT_D].lut6_str = "(A6+~A6)*A3";
logic_cfg.a2d[LUT_D].lut5_str = "A3+A5";
logic_cfg.a2d[LUT_D].out_mux = MUX_5Q;
logic_cfg.a2d[LUT_D].ff5_srinit = FF_SRINIT0;
logic_cfg.a2d[LUT_D].ff = FF_FF;
@ -1646,26 +1646,26 @@ static int test_logic_config(struct test_state* tstate)
}
// cout
memset(&logic_cfg, 0, sizeof(logic_cfg));
logic_cfg.a2d[LUT_A].lut6 = "(A6+~A6)*(~A5)";
logic_cfg.a2d[LUT_A].lut5 = "1";
logic_cfg.a2d[LUT_A].lut6_str = "(A6+~A6)*(~A5)";
logic_cfg.a2d[LUT_A].lut5_str = "1";
logic_cfg.a2d[LUT_A].cy0 = CY0_O5;
logic_cfg.a2d[LUT_A].ff = FF_FF;
logic_cfg.a2d[LUT_A].ff_mux = MUX_XOR;
logic_cfg.a2d[LUT_A].ff_srinit = FF_SRINIT0;
logic_cfg.a2d[LUT_B].lut6 = "(A6+~A6)*(A5)";
logic_cfg.a2d[LUT_B].lut5 = "1";
logic_cfg.a2d[LUT_B].lut6_str = "(A6+~A6)*(A5)";
logic_cfg.a2d[LUT_B].lut5_str = "1";
logic_cfg.a2d[LUT_B].cy0 = CY0_O5;
logic_cfg.a2d[LUT_B].ff = FF_FF;
logic_cfg.a2d[LUT_B].ff_mux = MUX_XOR;
logic_cfg.a2d[LUT_B].ff_srinit = FF_SRINIT0;
logic_cfg.a2d[LUT_C].lut6 = "(A6+~A6)*(A5)";
logic_cfg.a2d[LUT_C].lut5 = "1";
logic_cfg.a2d[LUT_C].lut6_str = "(A6+~A6)*(A5)";
logic_cfg.a2d[LUT_C].lut5_str = "1";
logic_cfg.a2d[LUT_C].cy0 = CY0_O5;
logic_cfg.a2d[LUT_C].ff = FF_FF;
logic_cfg.a2d[LUT_C].ff_mux = MUX_XOR;
logic_cfg.a2d[LUT_C].ff_srinit = FF_SRINIT0;
logic_cfg.a2d[LUT_D].lut6 = "(A6+~A6)*(A5)";
logic_cfg.a2d[LUT_D].lut5 = "1";
logic_cfg.a2d[LUT_D].lut6_str = "(A6+~A6)*(A5)";
logic_cfg.a2d[LUT_D].lut5_str = "1";
logic_cfg.a2d[LUT_D].cy0 = CY0_O5;
logic_cfg.a2d[LUT_D].ff = FF_FF;
logic_cfg.a2d[LUT_D].ff_mux = MUX_XOR;
@ -1682,10 +1682,10 @@ static int test_logic_config(struct test_state* tstate)
// f8 out-mux
memset(&logic_cfg, 0, sizeof(logic_cfg));
logic_cfg.a2d[LUT_A].lut6 = "~A5";
logic_cfg.a2d[LUT_B].lut6 = "(A5)";
logic_cfg.a2d[LUT_C].lut6 = "A5";
logic_cfg.a2d[LUT_D].lut6 = "((A5))";
logic_cfg.a2d[LUT_A].lut6_str = "~A5";
logic_cfg.a2d[LUT_B].lut6_str = "(A5)";
logic_cfg.a2d[LUT_C].lut6_str = "A5";
logic_cfg.a2d[LUT_D].lut6_str = "((A5))";
logic_cfg.a2d[LUT_B].out_mux = MUX_F8;
rc = test_logic(tstate, y, x_enum[x_i],
idx_enum[type_i], &logic_cfg);
@ -1704,8 +1704,8 @@ static int test_logic_config(struct test_state* tstate)
// f7amux
memset(&logic_cfg, 0, sizeof(logic_cfg));
logic_cfg.a2d[LUT_A].lut6 = "~A5";
logic_cfg.a2d[LUT_B].lut6 = "(A5)";
logic_cfg.a2d[LUT_A].lut6_str = "~A5";
logic_cfg.a2d[LUT_B].lut6_str = "(A5)";
logic_cfg.a2d[LUT_A].out_mux = MUX_F7;
rc = test_logic(tstate, y, x_enum[x_i],
idx_enum[type_i], &logic_cfg);
@ -1724,8 +1724,8 @@ static int test_logic_config(struct test_state* tstate)
// f7bmux
memset(&logic_cfg, 0, sizeof(logic_cfg));
logic_cfg.a2d[LUT_C].lut6 = "~A5";
logic_cfg.a2d[LUT_D].lut6 = "(A5)";
logic_cfg.a2d[LUT_C].lut6_str = "~A5";
logic_cfg.a2d[LUT_D].lut6_str = "(A5)";
logic_cfg.a2d[LUT_C].out_mux = MUX_F7;
rc = test_logic(tstate, y, x_enum[x_i],
idx_enum[type_i], &logic_cfg);

View File

@ -100,20 +100,20 @@ int main(int argc, char** argv)
}
if (!cur_bit) { // first bit
logic_cfg.precyinit = PRECYINIT_0;
logic_cfg.a2d[LUT_A].lut6 = "(A6+~A6)*(~A5)";
logic_cfg.a2d[LUT_A].lut5 = "1";
logic_cfg.a2d[LUT_A].lut6_str = "(A6+~A6)*(~A5)";
logic_cfg.a2d[LUT_A].lut5_str = "1";
logic_cfg.a2d[LUT_A].cy0 = CY0_O5;
logic_cfg.a2d[LUT_A].ff = FF_FF;
logic_cfg.a2d[LUT_A].ff_mux = MUX_XOR;
logic_cfg.a2d[LUT_A].ff_srinit = FF_SRINIT0;
} else if (cur_bit == param_highest_bit) {
logic_cfg.a2d[cur_bit%4].lut6 = "A5";
logic_cfg.a2d[cur_bit%4].lut6_str = "A5";
logic_cfg.a2d[cur_bit%4].ff = FF_FF;
logic_cfg.a2d[cur_bit%4].ff_mux = MUX_XOR;
logic_cfg.a2d[cur_bit%4].ff_srinit = FF_SRINIT0;
} else {
logic_cfg.a2d[cur_bit%4].lut6 = "(A6+~A6)*(A5)";
logic_cfg.a2d[cur_bit%4].lut5 = "0";
logic_cfg.a2d[cur_bit%4].lut6_str = "(A6+~A6)*(A5)";
logic_cfg.a2d[cur_bit%4].lut5_str = "0";
logic_cfg.a2d[cur_bit%4].cy0 = CY0_O5;
logic_cfg.a2d[cur_bit%4].ff = FF_FF;
logic_cfg.a2d[cur_bit%4].ff_mux = MUX_XOR;
@ -139,18 +139,18 @@ int main(int argc, char** argv)
fnet_add_port(&model, clock_net, cur_y, logic_x, DEV_LOGIC, logic_type_idx, LI_CLK);
// lut5 net (drive vcc into A6 to enable lut5)
if (logic_cfg.a2d[LUT_A].lut5
|| logic_cfg.a2d[LUT_B].lut5
|| logic_cfg.a2d[LUT_C].lut5
|| logic_cfg.a2d[LUT_D].lut5) {
if (logic_cfg.a2d[LUT_A].lut5_str
|| logic_cfg.a2d[LUT_B].lut5_str
|| logic_cfg.a2d[LUT_C].lut5_str
|| logic_cfg.a2d[LUT_D].lut5_str) {
fnet_new(&model, &net);
if (logic_cfg.a2d[LUT_A].lut5)
if (logic_cfg.a2d[LUT_A].lut5_str)
fnet_add_port(&model, net, cur_y, logic_x, DEV_LOGIC, logic_type_idx, LI_A6);
if (logic_cfg.a2d[LUT_B].lut5)
if (logic_cfg.a2d[LUT_B].lut5_str)
fnet_add_port(&model, net, cur_y, logic_x, DEV_LOGIC, logic_type_idx, LI_B6);
if (logic_cfg.a2d[LUT_C].lut5)
if (logic_cfg.a2d[LUT_C].lut5_str)
fnet_add_port(&model, net, cur_y, logic_x, DEV_LOGIC, logic_type_idx, LI_C6);
if (logic_cfg.a2d[LUT_D].lut5)
if (logic_cfg.a2d[LUT_D].lut5_str)
fnet_add_port(&model, net, cur_y, logic_x, DEV_LOGIC, logic_type_idx, LI_D6);
fnet_vcc_gnd(&model, net, /*is_vcc*/ 1);
}

View File

@ -1220,8 +1220,8 @@ static int extract_logic(struct extract_state* es)
rc = lut2str(lut_ML[LUT_A], l_col
? XC6_LMAP_XL_L_A : XC6_LMAP_XM_M_A,
lut5_used,
lut6_ml[LUT_A], &cfg_ml.a2d[LUT_A].lut6,
lut5_ml[LUT_A], &cfg_ml.a2d[LUT_A].lut5);
lut6_ml[LUT_A], &cfg_ml.a2d[LUT_A].lut6_str,
lut5_ml[LUT_A], &cfg_ml.a2d[LUT_A].lut5_str);
if (rc) FAIL(rc);
}
// ML-B
@ -1245,8 +1245,8 @@ static int extract_logic(struct extract_state* es)
rc = lut2str(lut_ML[LUT_B], l_col
? XC6_LMAP_XL_L_B : XC6_LMAP_XM_M_B,
lut5_used,
lut6_ml[LUT_B], &cfg_ml.a2d[LUT_B].lut6,
lut5_ml[LUT_B], &cfg_ml.a2d[LUT_B].lut5);
lut6_ml[LUT_B], &cfg_ml.a2d[LUT_B].lut6_str,
lut5_ml[LUT_B], &cfg_ml.a2d[LUT_B].lut5_str);
if (rc) FAIL(rc);
}
// ML-C
@ -1270,8 +1270,8 @@ static int extract_logic(struct extract_state* es)
rc = lut2str(lut_ML[LUT_C], l_col
? XC6_LMAP_XL_L_C : XC6_LMAP_XM_M_C,
lut5_used,
lut6_ml[LUT_C], &cfg_ml.a2d[LUT_C].lut6,
lut5_ml[LUT_C], &cfg_ml.a2d[LUT_C].lut5);
lut6_ml[LUT_C], &cfg_ml.a2d[LUT_C].lut6_str,
lut5_ml[LUT_C], &cfg_ml.a2d[LUT_C].lut5_str);
if (rc) FAIL(rc);
}
// ML-D
@ -1295,8 +1295,8 @@ static int extract_logic(struct extract_state* es)
rc = lut2str(lut_ML[LUT_D], l_col
? XC6_LMAP_XL_L_D : XC6_LMAP_XM_M_D,
lut5_used,
lut6_ml[LUT_D], &cfg_ml.a2d[LUT_D].lut6,
lut5_ml[LUT_D], &cfg_ml.a2d[LUT_D].lut5);
lut6_ml[LUT_D], &cfg_ml.a2d[LUT_D].lut6_str,
lut5_ml[LUT_D], &cfg_ml.a2d[LUT_D].lut5_str);
if (rc) FAIL(rc);
}
// X-A
@ -1309,8 +1309,8 @@ static int extract_logic(struct extract_state* es)
rc = lut2str(lut_X[LUT_A], l_col
? XC6_LMAP_XL_X_A : XC6_LMAP_XM_X_A,
lut5_used,
lut6_x[LUT_A], &cfg_x.a2d[LUT_A].lut6,
lut5_x[LUT_A], &cfg_x.a2d[LUT_A].lut5);
lut6_x[LUT_A], &cfg_x.a2d[LUT_A].lut6_str,
lut5_x[LUT_A], &cfg_x.a2d[LUT_A].lut5_str);
if (rc) FAIL(rc);
}
@ -1324,8 +1324,8 @@ static int extract_logic(struct extract_state* es)
rc = lut2str(lut_X[LUT_B], l_col
? XC6_LMAP_XL_X_B : XC6_LMAP_XM_X_B,
lut5_used,
lut6_x[LUT_B], &cfg_x.a2d[LUT_B].lut6,
lut5_x[LUT_B], &cfg_x.a2d[LUT_B].lut5);
lut6_x[LUT_B], &cfg_x.a2d[LUT_B].lut6_str,
lut5_x[LUT_B], &cfg_x.a2d[LUT_B].lut5_str);
if (rc) FAIL(rc);
}
@ -1339,8 +1339,8 @@ static int extract_logic(struct extract_state* es)
rc = lut2str(lut_X[LUT_C], l_col
? XC6_LMAP_XL_X_C : XC6_LMAP_XM_X_C,
lut5_used,
lut6_x[LUT_C], &cfg_x.a2d[LUT_C].lut6,
lut5_x[LUT_C], &cfg_x.a2d[LUT_C].lut5);
lut6_x[LUT_C], &cfg_x.a2d[LUT_C].lut6_str,
lut5_x[LUT_C], &cfg_x.a2d[LUT_C].lut5_str);
if (rc) FAIL(rc);
}
@ -1354,8 +1354,8 @@ static int extract_logic(struct extract_state* es)
rc = lut2str(lut_X[LUT_D], l_col
? XC6_LMAP_XL_X_D : XC6_LMAP_XM_X_D,
lut5_used,
lut6_x[LUT_D], &cfg_x.a2d[LUT_D].lut6,
lut5_x[LUT_D], &cfg_x.a2d[LUT_D].lut5);
lut6_x[LUT_D], &cfg_x.a2d[LUT_D].lut6_str,
lut5_x[LUT_D], &cfg_x.a2d[LUT_D].lut5_str);
if (rc) FAIL(rc);
}
@ -2765,24 +2765,24 @@ static int str2lut(uint64_t *lut, int lut_pos, const struct fpgadev_logic_a2d *a
int lut6_used, lut5_used, lut_map[64], rc;
uint64_t u64;
lut6_used = a2d->lut6 && a2d->lut6[0];
lut5_used = a2d->lut5 && a2d->lut5[0];
lut6_used = a2d->lut6_str && a2d->lut6_str[0];
lut5_used = a2d->lut5_str && a2d->lut5_str[0];
if (!lut6_used && !lut5_used)
return 0;
if (lut5_used) {
if (!lut6_used) u64 = 0;
else {
rc = bool_str2bits(a2d->lut6, &u64, 32);
rc = bool_str2bits(a2d->lut6_str, &u64, 32);
if (rc) FAIL(rc);
u64 <<= 32;
}
rc = bool_str2bits(a2d->lut5, &u64, 32);
rc = bool_str2bits(a2d->lut5_str, &u64, 32);
if (rc) FAIL(rc);
xc6_lut_bitmap(lut_pos, &lut_map, 32);
} else {
// lut6_used only
rc = bool_str2bits(a2d->lut6, &u64, 64);
rc = bool_str2bits(a2d->lut6_str, &u64, 64);
if (rc) FAIL(rc);
xc6_lut_bitmap(lut_pos, &lut_map, 64);
}

View File

@ -419,14 +419,14 @@ int fdev_logic_setconf(struct fpga_model* model, int y, int x,
for (lut = LUT_A; lut <= LUT_D; lut++) {
if (logic_cfg->a2d[lut].out_used)
dev->u.logic.a2d[lut].out_used = 1;
if (logic_cfg->a2d[lut].lut6) {
if (logic_cfg->a2d[lut].lut6_str) {
rc = fdev_logic_a2d_lut(model, y, x, type_idx,
lut, 6, logic_cfg->a2d[lut].lut6, ZTERM);
lut, 6, logic_cfg->a2d[lut].lut6_str, ZTERM);
if (rc) FAIL(rc);
}
if (logic_cfg->a2d[lut].lut5) {
if (logic_cfg->a2d[lut].lut5_str) {
rc = fdev_logic_a2d_lut(model, y, x, type_idx,
lut, 5, logic_cfg->a2d[lut].lut5, ZTERM);
lut, 5, logic_cfg->a2d[lut].lut5_str, ZTERM);
if (rc) FAIL(rc);
}
if (logic_cfg->a2d[lut].ff) {
@ -500,8 +500,8 @@ int fdev_logic_a2d_lut(struct fpga_model* model, int y, int x, int type_idx,
if (rc) FAIL(rc);
lut_ptr = (lut_5or6 == 5)
? &dev->u.logic.a2d[lut_a2d].lut5
: &dev->u.logic.a2d[lut_a2d].lut6;
? &dev->u.logic.a2d[lut_a2d].lut5_str
: &dev->u.logic.a2d[lut_a2d].lut6_str;
if (*lut_ptr == 0) {
*lut_ptr = malloc(MAX_LUT_LEN);
if (!(*lut_ptr)) FAIL(ENOMEM);
@ -945,17 +945,17 @@ int fdev_set_required_pins(struct fpga_model* model, int y, int x, int type,
// LI_AX..LI_DX are in sequence
add_req_inpin(dev, LI_AX+i);
}
if (dev->u.logic.a2d[i].lut6) {
scan_lut_digits(dev->u.logic.a2d[i].lut6, digits);
if (dev->u.logic.a2d[i].lut6_str) {
scan_lut_digits(dev->u.logic.a2d[i].lut6_str, digits);
for (j = 0; j < 6; j++) {
if (!digits[j]) continue;
add_req_inpin(dev, LI_A1+i*6+j);
}
}
if (dev->u.logic.a2d[i].lut5) {
if (dev->u.logic.a2d[i].lut5_str) {
// A6 must be high/vcc if lut5 is used
add_req_inpin(dev, LI_A6+i*6);
scan_lut_digits(dev->u.logic.a2d[i].lut5, digits);
scan_lut_digits(dev->u.logic.a2d[i].lut5_str, digits);
for (j = 0; j < 6; j++) {
if (!digits[j]) continue;
add_req_inpin(dev, LI_A1+i*6+j);
@ -993,10 +993,10 @@ void fdev_delete(struct fpga_model* model, int y, int x, int type, int type_idx)
dev->pinw_req_in = 0;
if (dev->type == DEV_LOGIC) {
for (i = LUT_A; i <= LUT_D; i++) {
free(dev->u.logic.a2d[i].lut6);
dev->u.logic.a2d[i].lut6 = 0;
free(dev->u.logic.a2d[i].lut5);
dev->u.logic.a2d[i].lut5 = 0;
free(dev->u.logic.a2d[i].lut6_str);
dev->u.logic.a2d[i].lut6_str = 0;
free(dev->u.logic.a2d[i].lut5_str);
dev->u.logic.a2d[i].lut5_str = 0;
}
}
dev->instantiated = 0;

View File

@ -327,12 +327,12 @@ static int printf_LOGIC(FILE* f, struct fpga_model* model,
}
cfg = &tile->devs[i].u.logic;
for (j = LUT_D; j >= LUT_A; j--) {
if (cfg->a2d[j].lut6 && cfg->a2d[j].lut6[0])
if (cfg->a2d[j].lut6_str && cfg->a2d[j].lut6_str[0])
fprintf(f, "%s %c6_lut %s\n", pref, 'A'+j,
cfg->a2d[j].lut6);
if (cfg->a2d[j].lut5 && cfg->a2d[j].lut5[0])
cfg->a2d[j].lut6_str);
if (cfg->a2d[j].lut5_str && cfg->a2d[j].lut5_str[0])
fprintf(f, "%s %c5_lut %s\n", pref, 'A'+j,
cfg->a2d[j].lut5);
cfg->a2d[j].lut5_str);
if (cfg->a2d[j].out_used)
fprintf(f, "%s %c_used\n", pref, 'A'+j);
switch (cfg->a2d[j].ff) {

View File

@ -431,8 +431,8 @@ enum { PRECYINIT_0 = 1, PRECYINIT_1, PRECYINIT_AX };
struct fpgadev_logic_a2d
{
int out_used;
char* lut6;
char* lut5;
char* lut6_str;
char* lut5_str;
int ff_mux; // O6, O5, X, F7(a/c), F8(b), MC31(d), CY, XOR
int ff_srinit; // SRINIT0, SRINIT1
int ff5_srinit; // SRINIT0, SRINIT1