int main(int argc, char** argv) { struct fpga_model model; const char *param_clock_pin, *param_led_pin; int iob_clk_y, iob_clk_x, iob_clk_type_idx; int iob_led_y, iob_led_x, iob_led_type_idx; if (cmdline_help(argc, argv)) { printf("\n"); return 0; } if (!(param_clock_pin = cmdline_strvar(argc, argv, "clock_pin"))) param_clock_pin = "IO_L30N_GCLK0_USERCCLK_2"; if (!(param_led_pin = cmdline_strvar(argc, argv, "led_pin"))) param_led_pin = "IO_L48P_D7_2"; fpga_build_model(&model, cmdline_part(argc, argv), cmdline_package(argc, argv)); fpga_find_iob(&model, xc6_find_pkg_pin(model.pkg, param_clock_pin), &iob_clk_y, &iob_clk_x, &iob_clk_type_idx); fdev_iob_input(&model, iob_clk_y, iob_clk_x, iob_clk_type_idx, IO_LVCMOS33); fpga_find_iob(&model, xc6_find_pkg_pin(model.pkg, param_led_pin), &iob_led_y, &iob_led_x, &iob_led_type_idx); fdev_iob_output(&model, iob_led_y, iob_led_x, iob_led_type_idx, IO_LVCMOS25); fdev_iob_slew(&model, iob_led_y, iob_led_x, iob_led_type_idx, SLEW_QUIETIO); fdev_iob_drive(&model, iob_led_y, iob_led_x, iob_led_type_idx, 8); write_floorplan(stdout, &model, FP_DEFAULT); return fpga_free_model(&model); }
int main(int argc, char** argv) { struct fpga_model model; int param_bits; const char *param_clock_pin, *param_led_pin; int iob_clk_y, iob_clk_x, iob_clk_type_idx; int iob_led_y, iob_led_x, iob_led_type_idx; int logic_y, logic_x, logic_type_idx; struct fpgadev_logic logic_cfg; net_idx_t net; if (cmdline_help(argc, argv)) { printf( " %*s [-Dbits=14|23]\n" " %*s [-Dclock_pin=P55|...]\n" " %*s [-Dled_pin=P48|...]\n" "\n", (int) strlen(*argv), "", (int) strlen(*argv), "", (int) strlen(*argv), ""); return 0; } if (!(param_bits = cmdline_intvar(argc, argv, "bits"))) param_bits = 14; if (!(param_clock_pin = cmdline_strvar(argc, argv, "clock_pin"))) param_clock_pin = "P55"; if (!(param_led_pin = cmdline_strvar(argc, argv, "led_pin"))) param_led_pin = "P48"; fpga_build_model(&model, cmdline_part(argc, argv), cmdline_package(argc, argv)); fpga_find_iob(&model, param_clock_pin, &iob_clk_y, &iob_clk_x, &iob_clk_type_idx); fdev_iob_input(&model, iob_clk_y, iob_clk_x, iob_clk_type_idx, IO_LVCMOS33); fpga_find_iob(&model, param_led_pin, &iob_led_y, &iob_led_x, &iob_led_type_idx); fdev_iob_output(&model, iob_led_y, iob_led_x, iob_led_type_idx, IO_LVCMOS25); fdev_iob_slew(&model, iob_led_y, iob_led_x, iob_led_type_idx, SLEW_QUIETIO); fdev_iob_drive(&model, iob_led_y, iob_led_x, iob_led_type_idx, 8); logic_y = 58; logic_x = 13; logic_type_idx = DEV_LOG_M_OR_L; CLEAR(logic_cfg); logic_cfg.a2d[LUT_A].lut6 = "(A6+~A6)*(~A5)"; logic_cfg.a2d[LUT_A].lut5 = "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 = "0"; 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 = "0"; 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 = "0"; 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; logic_cfg.a2d[LUT_D].ff_srinit = FF_SRINIT0; logic_cfg.clk_inv = CLKINV_CLK; logic_cfg.sync_attr = SYNCATTR_ASYNC; logic_cfg.precyinit = PRECYINIT_0; logic_cfg.cout_used = 1; fdev_logic_setconf(&model, logic_y, logic_x, logic_type_idx, &logic_cfg); logic_y = 57; logic_cfg.precyinit = 0; logic_cfg.a2d[LUT_A].lut6 = "(A6+~A6)*(A5)"; logic_cfg.a2d[LUT_A].lut5 = "0"; fdev_logic_setconf(&model, logic_y, logic_x, logic_type_idx, &logic_cfg); logic_y = 56; fdev_logic_setconf(&model, logic_y, logic_x, logic_type_idx, &logic_cfg); logic_y = 55; logic_cfg.cout_used = 0; logic_cfg.a2d[LUT_C].lut6 = "A5"; logic_cfg.a2d[LUT_C].lut5 = 0; logic_cfg.a2d[LUT_C].cy0 = 0; 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; CLEAR(logic_cfg.a2d[LUT_D]); fdev_logic_setconf(&model, logic_y, logic_x, logic_type_idx, &logic_cfg); // clock to logic devs fnet_new(&model, &net); fnet_add_port(&model, net, iob_clk_y, iob_clk_x, DEV_IOB, iob_clk_type_idx, IOB_OUT_I); fnet_add_port(&model, net, 55, 13, DEV_LOGIC, DEV_LOG_M_OR_L, LI_CLK); fnet_add_port(&model, net, 56, 13, DEV_LOGIC, DEV_LOG_M_OR_L, LI_CLK); fnet_add_port(&model, net, 57, 13, DEV_LOGIC, DEV_LOG_M_OR_L, LI_CLK); fnet_add_port(&model, net, 58, 13, DEV_LOGIC, DEV_LOG_M_OR_L, LI_CLK); fnet_route(&model, net); // vcc to logic devs fnet_new(&model, &net); fnet_add_port(&model, net, 55, 13, DEV_LOGIC, DEV_LOG_M_OR_L, LI_A6); fnet_add_port(&model, net, 55, 13, DEV_LOGIC, DEV_LOG_M_OR_L, LI_B6); fnet_vcc_gnd(&model, net, /*is_vcc*/ 1); fnet_new(&model, &net); fnet_add_port(&model, net, 56, 13, DEV_LOGIC, DEV_LOG_M_OR_L, LI_A6); fnet_add_port(&model, net, 56, 13, DEV_LOGIC, DEV_LOG_M_OR_L, LI_B6); fnet_add_port(&model, net, 56, 13, DEV_LOGIC, DEV_LOG_M_OR_L, LI_C6); fnet_add_port(&model, net, 56, 13, DEV_LOGIC, DEV_LOG_M_OR_L, LI_D6); fnet_vcc_gnd(&model, net, /*is_vcc*/ 1); fnet_new(&model, &net); fnet_add_port(&model, net, 57, 13, DEV_LOGIC, DEV_LOG_M_OR_L, LI_A6); fnet_add_port(&model, net, 57, 13, DEV_LOGIC, DEV_LOG_M_OR_L, LI_B6); fnet_add_port(&model, net, 57, 13, DEV_LOGIC, DEV_LOG_M_OR_L, LI_C6); fnet_add_port(&model, net, 57, 13, DEV_LOGIC, DEV_LOG_M_OR_L, LI_D6); fnet_vcc_gnd(&model, net, /*is_vcc*/ 1); fnet_new(&model, &net); fnet_add_port(&model, net, 58, 13, DEV_LOGIC, DEV_LOG_M_OR_L, LI_A6); fnet_add_port(&model, net, 58, 13, DEV_LOGIC, DEV_LOG_M_OR_L, LI_B6); fnet_add_port(&model, net, 58, 13, DEV_LOGIC, DEV_LOG_M_OR_L, LI_C6); fnet_add_port(&model, net, 58, 13, DEV_LOGIC, DEV_LOG_M_OR_L, LI_D6); fnet_vcc_gnd(&model, net, /*is_vcc*/ 1); // carry chain fnet_new(&model, &net); fnet_add_port(&model, net, 55, 13, DEV_LOGIC, DEV_LOG_M_OR_L, LI_CIN); fnet_add_port(&model, net, 56, 13, DEV_LOGIC, DEV_LOG_M_OR_L, LO_COUT); fnet_route(&model, net); fnet_new(&model, &net); fnet_add_port(&model, net, 56, 13, DEV_LOGIC, DEV_LOG_M_OR_L, LI_CIN); fnet_add_port(&model, net, 57, 13, DEV_LOGIC, DEV_LOG_M_OR_L, LO_COUT); fnet_route(&model, net); fnet_new(&model, &net); fnet_add_port(&model, net, 57, 13, DEV_LOGIC, DEV_LOG_M_OR_L, LI_CIN); fnet_add_port(&model, net, 58, 13, DEV_LOGIC, DEV_LOG_M_OR_L, LO_COUT); fnet_route(&model, net); // bit chain { int out_pin[] = {LO_AQ, LO_BQ, LO_CQ, LO_DQ}; int in_pin[] = {LI_A5, LI_B5, LI_C5, LI_D5}; int cur_y, i; for (cur_y = 58; cur_y >= 55; cur_y--) { for (i = 0; i < 4; i++) { if (cur_y == 55 && i >= 2) break; fnet_new(&model, &net); fnet_add_port(&model, net, cur_y, 13, DEV_LOGIC, DEV_LOG_M_OR_L, out_pin[i]); fnet_add_port(&model, net, cur_y, 13, DEV_LOGIC, DEV_LOG_M_OR_L, in_pin[i]); fnet_route(&model, net); } } } fnet_new(&model, &net); fnet_add_port(&model, net, 55, 13, DEV_LOGIC, DEV_LOG_M_OR_L, LO_CQ); fnet_add_port(&model, net, 55, 13, DEV_LOGIC, DEV_LOG_M_OR_L, LI_C5); fnet_add_port(&model, net, iob_led_y, iob_led_x, DEV_IOB, iob_led_type_idx, IOB_IN_O); fnet_route(&model, net); write_floorplan(stdout, &model, FP_DEFAULT); return fpga_free_model(&model); }
int main(int argc, char** argv) { struct fpga_model model; int iob_inA_y, iob_inA_x, iob_inA_type_idx; int iob_inB_y, iob_inB_x, iob_inB_type_idx; int iob_out_y, iob_out_x, iob_out_type_idx; int logic_y, logic_x, logic_type_idx, rc; struct fpgadev_logic logic_cfg; net_idx_t inA_net, inB_net, out_net; fpga_build_model(&model, XC6SLX9, TQG144); fpga_find_iob(&model, "P45", &iob_inA_y, &iob_inA_x, &iob_inA_type_idx); fdev_iob_input(&model, iob_inA_y, iob_inA_x, iob_inA_type_idx, IO_LVCMOS33); fpga_find_iob(&model, "P46", &iob_inB_y, &iob_inB_x, &iob_inB_type_idx); fdev_iob_input(&model, iob_inB_y, iob_inB_x, iob_inB_type_idx, IO_LVCMOS33); fpga_find_iob(&model, "P48", &iob_out_y, &iob_out_x, &iob_out_type_idx); fdev_iob_output(&model, iob_out_y, iob_out_x, iob_out_type_idx, IO_LVCMOS33); logic_y = 68; logic_x = 13; logic_type_idx = DEV_LOG_X; CLEAR(logic_cfg); logic_cfg.a2d[LUT_D].flags |= OUT_USED | LUT6VAL_SET; if ((rc = bool_str2u64("A3*A5", &logic_cfg.a2d[LUT_D].lut6_val))) RC_FAIL(&model, rc); fdev_logic_setconf(&model, logic_y, logic_x, logic_type_idx, &logic_cfg); fnet_new(&model, &inA_net); fnet_add_port(&model, inA_net, iob_inA_y, iob_inA_x, DEV_IOB, iob_inA_type_idx, IOB_OUT_I); fnet_add_port(&model, inA_net, logic_y, logic_x, DEV_LOGIC, logic_type_idx, LI_D3); fnet_route(&model, inA_net); fnet_new(&model, &inB_net); fnet_add_port(&model, inB_net, iob_inB_y, iob_inB_x, DEV_IOB, iob_inB_type_idx, IOB_OUT_I); fnet_add_port(&model, inB_net, logic_y, logic_x, DEV_LOGIC, logic_type_idx, LI_D5); fnet_route(&model, inB_net); fnet_new(&model, &out_net); fnet_add_port(&model, out_net, logic_y, logic_x, DEV_LOGIC, logic_type_idx, LO_D); fnet_add_port(&model, out_net, iob_out_y, iob_out_x, DEV_IOB, iob_out_type_idx, IOB_IN_O); fnet_route(&model, out_net); write_floorplan(stdout, &model, FP_DEFAULT); return fpga_free_model(&model); }
int main(int argc, char** argv) { struct fpga_model model; int bit_header, bit_regs, bit_crc, fp_header, pull_model, file_arg, flags; int print_swbits, rc = -1; struct fpga_config config; // parameters if (argc < 2) { fprintf(stderr, "\n" "%s - bitstream to floorplan\n" "Usage: %s [--bit-header] [--bit-regs] [--bit-crc] [--no-model]\n" " %*s [--no-fp-header] [--printf-swbits] <bitstream_file>\n" "\n", argv[0], argv[0], (int) strlen(argv[0]), ""); goto fail; } bit_header = 0; bit_regs = 0; bit_crc = 0; pull_model = 1; fp_header = 1; file_arg = 1; print_swbits = 0; while (file_arg < argc && !strncmp(argv[file_arg], "--", 2)) { if (!strcmp(argv[file_arg], "--bit-header")) bit_header = 1; else if (!strcmp(argv[file_arg], "--bit-regs")) bit_regs = 1; else if (!strcmp(argv[file_arg], "--bit-crc")) bit_crc = 1; else if (!strcmp(argv[file_arg], "--no-model")) pull_model = 0; else if (!strcmp(argv[file_arg], "--no-fp-header")) fp_header = 0; else if (!strcmp(argv[file_arg], "--printf-swbits")) print_swbits = 1; else break; file_arg++; } // build model if ((rc = fpga_build_model(&model, XC6SLX9, TQG144))) FAIL(rc); if (print_swbits) { rc = printf_swbits(&model); if (rc) FAIL(rc); return 0; } // read binary configuration file { FILE* fbits = fopen(argv[file_arg], "r"); if (!fbits) { fprintf(stderr, "Error opening %s.\n", argv[file_arg]); goto fail; } rc = read_bitfile(&config, fbits); fclose(fbits); if (rc) FAIL(rc); } // fill model from binary configuration if (pull_model) if ((rc = extract_model(&model, &config.bits))) FAIL(rc); // dump model flags = FP_DEFAULT; if (!fp_header) flags |= FP_NO_HEADER; if ((rc = write_floorplan(stdout, &model, flags))) FAIL(rc); // dump what doesn't fit into the model flags = DUMP_BITS; if (bit_header) flags |= DUMP_HEADER_STR; if (bit_regs) flags |= DUMP_REGS; if (bit_crc) flags |= DUMP_CRC; if ((rc = dump_config(&config, flags))) FAIL(rc); return EXIT_SUCCESS; fail: return rc; }
int main(int argc, char** argv) { struct fpga_model model; int bit_header, bit_regs, bit_crc, fp_header, pull_model, file_arg; int verbose, flags, rc = -1; struct fpga_config config; // parameters if (argc < 2) help_exit(argc, argv); verbose = 0; bit_header = 0; bit_regs = 0; bit_crc = 0; pull_model = 1; fp_header = 1; file_arg = 1; while (file_arg < argc && !strncmp(argv[file_arg], "--", 2)) { if (!strcmp(argv[file_arg], "--help")) help_exit(argc, argv); if (!strcmp(argv[file_arg], "--verbose")) verbose = 1; else if (!strcmp(argv[file_arg], "--bit-header")) bit_header = 1; else if (!strcmp(argv[file_arg], "--bit-regs")) bit_regs = 1; else if (!strcmp(argv[file_arg], "--bit-crc")) bit_crc = 1; else if (!strcmp(argv[file_arg], "--no-model")) pull_model = 0; else if (!strcmp(argv[file_arg], "--no-fp-header")) fp_header = 0; else break; file_arg++; } // read binary configuration file { FILE* fbits = fopen(argv[file_arg], "r"); if (!fbits) { fprintf(stderr, "Error opening %s.\n", argv[file_arg]); goto fail; } rc = read_bitfile(&config, fbits, verbose); fclose(fbits); if (rc) FAIL(rc); } // build model if (config.idcode_reg == -1) FAIL(EINVAL); // todo: scanf package from header string, better default for part // 1. cmd line // 2. header string // 3. part-default if ((rc = fpga_build_model(&model, config.reg[config.idcode_reg].int_v, cmdline_package(argc, argv)))) FAIL(rc); // fill model from binary configuration if (pull_model) if ((rc = extract_model(&model, &config.bits))) FAIL(rc); // dump model flags = FP_DEFAULT; if (!fp_header) flags |= FP_NO_HEADER; if ((rc = write_floorplan(stdout, &model, flags))) FAIL(rc); // dump what doesn't fit into the model flags = DUMP_BITS; if (bit_header) flags |= DUMP_HEADER_STR; if (bit_regs) flags |= DUMP_REGS; if (bit_crc) flags |= DUMP_CRC; if ((rc = dump_config(&config, flags))) FAIL(rc); return EXIT_SUCCESS; fail: return rc; }