From 5dfe5b123e09313cf4aa71da068ed038b7bb42d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Dausseur?= Date: Tue, 18 Feb 2025 11:36:18 +0100 Subject: [PATCH] compiles and works --- .vscode/launch.json | 4 +- .vscode/settings.json | 6 +- CMakeLists.txt | 6 +- bs/args.c | 30 +- bs/args.h | 2 +- bs/init.c | 104 +- bs/init.h | 5 +- bs/main.c | 87 +- bsdl_files/xilinx/xcku15p_ffve1517.bsd | 4762 +++++++++++++++++++++ modules/config/bs_defines.h | 2 +- modules/config/version.h | 25 +- modules/drivers/CMakeLists.txt | 6 +- modules/drivers/ftdi_jtag/ftdi_jtag_drv.c | 2 +- modules/jtag_core/CMakeLists.txt | 6 +- modules/script/CMakeLists.txt | 3 +- modules/script/script.c | 4041 ++++++++--------- modules/script/script.h | 17 + 17 files changed, 7087 insertions(+), 2021 deletions(-) create mode 100644 bsdl_files/xilinx/xcku15p_ffve1517.bsd diff --git a/.vscode/launch.json b/.vscode/launch.json index 73e9465..69a2cde 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -5,13 +5,13 @@ "version": "0.2.0", "configurations": [ { - "name": "bs list", + "name": "bs", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/build/bs/bs", "args": [], "stopAtEntry": false, - "cwd": "${fileDirname}", + "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb", diff --git a/.vscode/settings.json b/.vscode/settings.json index b26c257..eaeeb04 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,7 +1,7 @@ { "files.associations": { - "*.cpt": "yaml", "*.seq": "yaml", + "*.cpt": "yaml", "os_interface.h": "c", "bsdl_strings.h": "c", "script.h": "c", @@ -13,7 +13,9 @@ "dlfcn.h": "c", "config_script.h": "c", "bs_defines.h": "c", - "jtag_core.h": "c" + "jtag_core.h": "c", + "string.h": "c", + "readline.h": "c" }, "C_Cpp.default.includePath": [ "libs/", diff --git a/CMakeLists.txt b/CMakeLists.txt index cbcdac2..5c75a95 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,11 +4,13 @@ project(BoundaryScanExplorer) # script and jtag_core must be the last linked archive for the application to compile set(BS_MODULES script jtag_core) +set(DIR_MODULES ${CMAKE_SOURCE_DIR}/modules) +set(DIR_LIBS ${CMAKE_SOURCE_DIR}/libs) # We dive into submodules -file(GLOB MODULES_DIRS RELATIVE ${CMAKE_SOURCE_DIR}/modules ${CMAKE_SOURCE_DIR}/modules/*) +file(GLOB MODULES_DIRS RELATIVE ${DIR_MODULES} ${DIR_MODULES}/*) foreach(module ${MODULES_DIRS}) - set(module_path "${CMAKE_SOURCE_DIR}/modules/${module}") + set(module_path "${DIR_MODULES}/${module}") # checks if it is a sub-directory and if it contains a cmake file if(IS_DIRECTORY ${module_path} AND EXISTS "${module_path}/CMakeLists.txt") diff --git a/bs/args.c b/bs/args.c index 8c61ba1..d71e9f8 100644 --- a/bs/args.c +++ b/bs/args.c @@ -74,18 +74,18 @@ // return EXIT_SUCCESS; // } -void parse_command(char *line, int *argc, char **argv) { - *argc = 0; - while (*line != '\0') { - while (*line == ' ' || *line == '\t' || *line == '\n') { - *line++ = '\0'; - } - if (*argc >= MAX_ARGS) break; - (*argc)++; - *argv++ = line; - while (*line != '\0' && *line != ' ' && *line != '\t' && *line != '\n') { - line++; - } - } - *argv = '\0'; -} +// void parse_command(char *line, int *argc, char **argv) { +// *argc = 0; +// while (*line != '\0') { +// while (*line == ' ' || *line == '\t' || *line == '\n') { +// *line++ = '\0'; +// } +// if (*argc >= MAX_ARGS) break; +// (*argc)++; +// *argv++ = line; +// while (*line != '\0' && *line != ' ' && *line != '\t' && *line != '\n') { +// line++; +// } +// } +// *argv = '\0'; +// } diff --git a/bs/args.h b/bs/args.h index 73ae1a0..244e59c 100644 --- a/bs/args.h +++ b/bs/args.h @@ -2,6 +2,6 @@ #define _ARGS_H // int parse_args(struct args *a, int argc, char *argv[]); -void parse_command(char *line, int *argc, char **argv); +// void parse_command(char *line, int *argc, char **argv); #endif diff --git a/bs/init.c b/bs/init.c index 0103535..00ac27c 100644 --- a/bs/init.c +++ b/bs/init.c @@ -19,6 +19,10 @@ Command commands[] = { {NULL, NULL}}; */ +#include +#include +#include + #include "jtag_core/jtag_core.h" #include "config/version.h" #include "script/env.h" @@ -31,55 +35,99 @@ void jprint(jtag_core *jc, const char *msg) printf(msg); } -jtag_core *bsexp_init(void) +int script_print(script_ctx *sctx, enum MSGTYPE typ, char *string, ...) { - jtag_core *jc = NULL; - script_ctx *sctx; + int ret = 0; + char msg[64] = {0}; + va_list args; - /* initialize the JTAG library */ - jc = jtagcore_init(); + switch (typ) + { + case MSG_DEBUG: + strcpy(msg, "DEBUG :"); + break; + case MSG_INFO_1: + strcpy(msg, "INFO :"); + break; + case MSG_WARNING: + strcpy(msg, "WARNING :"); + break; + case MSG_ERROR: + strcpy(msg, "ERROR :"); + break; + case MSG_INFO_0: + default: + strcpy(msg, ""); + break; + } - if (NULL == jc) + va_start(args, string); + ret = printf(msg); + ret += vprintf(string, args); + va_end(args); + return ret; +} + +void bsexp_init(jtag_core **jc, script_ctx **sctx) +{ + // JTAG core initialization + *jc = jtagcore_init(); + if (NULL == *jc) goto end; - jc->envvar = (void *)initEnv(NULL, NULL); + // Environment initialization + (*jc)->envvar = (void *)initEnv(NULL, NULL); + if (NULL == (*jc)->envvar) { + jtagcore_deinit(*jc); + *jc = NULL; + goto end; + } + jtagcore_setEnvVar(*jc, "VERSION", "v" APP_VER_STR(APP_VER)); - jtagcore_setEnvVar(jc, "VERSION", "v" LIB_JTAG_CORE_VERSION); - - sctx = jtagcore_initScript(jc); - - execute_ram_script(sctx, config_script, config_script_len); - - execute_file_script(sctx, "config.script"); + // Scripts initialization + *sctx = jtagcore_initScript(*jc); + if (NULL == *sctx) { + deinitEnv((*jc)->envvar); + jtagcore_deinit(*jc); + *jc = NULL; + goto end; + } + setOutputFunc_script(*sctx, script_print); + execute_ram_script(*sctx, config_script, config_script_len); + execute_file_script(*sctx, "config.script"); /* Log printing callback */ - if (jtagcore_set_logs_callback(jc, jprint) < 0) + if (jtagcore_set_logs_callback(*jc, jprint) < 0) { printf("Impossible to define the logs callback!\n"); } else { - if (jtagcore_getEnvVar(jc, "LOG_MESSAGES_FILTER_LEVEL", NULL)) + if (jtagcore_getEnvVar(*jc, "LOG_MESSAGES_FILTER_LEVEL", NULL)) { - jtagcore_set_logs_level(jc, jtagcore_getEnvVarValue(jc, "LOG_MESSAGES_FILTER_LEVEL")); + jtagcore_set_logs_level(*jc, jtagcore_getEnvVarValue(*jc, "LOG_MESSAGES_FILTER_LEVEL")); } - - if (jtagcore_getEnvVar(jc, "LOG_MESSAGES_FILE_OUTPUT", NULL)) + if (jtagcore_getEnvVar(*jc, "LOG_MESSAGES_FILE_OUTPUT", NULL)) { - jtagcore_set_logs_file(jc, jtagcore_getEnvVar(jc, "LOG_MESSAGES_FILE_OUTPUT", NULL)); + jtagcore_set_logs_file(*jc, jtagcore_getEnvVar(*jc, "LOG_MESSAGES_FILE_OUTPUT", NULL)); } } - deinit_script(sctx); - end: - return jc; + return; } -void bsexp_deinit(jtag_core *jc) +void bsexp_deinit(jtag_core *jc, script_ctx *sctx) { - if (NULL == jc) return; + envvar_entry *env = NULL; - envvar_entry *env = jc->envvar; - deinitEnv(env); - jtagcore_deinit(jc); + if (NULL != jc) + { + deinit_script(sctx); + } + if (NULL != jc) + { + env = jc->envvar; + deinitEnv(env); + jtagcore_deinit(jc); + } } diff --git a/bs/init.h b/bs/init.h index 4cc629e..c19689a 100644 --- a/bs/init.h +++ b/bs/init.h @@ -12,7 +12,8 @@ typedef struct { extern Command commands[]; -jtag_core *bsexp_init(void); -void bsexp_deinit(jtag_core *jc); +int script_print(script_ctx *sctx, enum MSGTYPE typ, char *string, ...); +void bsexp_init(jtag_core **jc, script_ctx **sctx); +void bsexp_deinit(jtag_core *jc, script_ctx *sctx); #endif \ No newline at end of file diff --git a/bs/main.c b/bs/main.c index 0812d4d..49090c2 100644 --- a/bs/main.c +++ b/bs/main.c @@ -2,6 +2,7 @@ #include #include #include +#include #include #include @@ -9,6 +10,7 @@ #include "utils.h" #include "init.h" #include "args.h" +#include "script/script.h" // int main(int argc, char *argv[]) { // int success = 0; @@ -58,63 +60,70 @@ // return error; // } +jtag_core *jc = NULL; +script_ctx *sctx = NULL; -// int execute_command(jtag_core *jc, int argc, char **argv) { -// int error = 0; -// if (argv[0] == NULL) { -// return 0; -// } +// Fonction de gestion du signal +void handle_sigint(int sig) { + bsexp_deinit(jc, sctx); + exit(0); +} -// for (int i = 0; commands[i].name != NULL; i++) { -// if (strcmp(argv[0], commands[i].name) == 0) { -// error = commands[i].cmd_call(jc, argc, argv); -// return error; -// } -// } -// error = -1; -// printf("Command not found\n"); -// } +int execute_command(script_ctx *sctx, char *line) +{ + int error = 0; + error = execute_line_script(sctx, line); + return error; +} -int main() { +int main() +{ char *line = NULL; int error = 0; - int cmd_argc=0; - char *cmd_argv[MAX_ARGS] = {0}; - jtag_core *jc = NULL; + int cmd_argc = 0; - jc = bsexp_init(); - if (NULL == jc) { + bsexp_init(&jc, &sctx); + script_print(sctx, MSG_NONE, "\n"); + if ((NULL == jc) || (NULL == sctx)) + { error = JTAG_CORE_MEM_ERROR; - printf("JTAG Core execution failed"); - goto err; + printf("JTAG Core initialization failed!\n"); + goto err_no_deinit; } - while (1) { + signal(SIGINT, handle_sigint); + while (1) + { line = readline("bs_explorer> "); - if (line == NULL) { + if (line == NULL) + { break; } - if (*line) { + if (*line) + { add_history(line); } - parse_command(line, &cmd_argc, cmd_argv); - if (cmd_argv[0] == NULL) { - continue; - } - if (strcmp(cmd_argv[0], "exit") == 0) { + if (strcmp(line, "exit") == 0) { break; } - // error = execute_command(jc, cmd_argc, cmd_argv); - // printf("\n"); - // if (0 == error) { - // } else { - // printf("Command failed with code: %d", error); - // } + if (strcmp(line, "quit") == 0) { + break; + } + error = execute_command(sctx, line); + if (0 == error) + { + } + else + { + printf("Command failed with code: %d\n", error); + } } - return 0; +err_no_deinit: + exit(error); err: - return error; + printf("Failed with error (%d)", error); end: - bsexp_deinit(jc); + bsexp_deinit(jc, sctx); + exit(error); } \ No newline at end of file diff --git a/bsdl_files/xilinx/xcku15p_ffve1517.bsd b/bsdl_files/xilinx/xcku15p_ffve1517.bsd new file mode 100644 index 0000000..56086b6 --- /dev/null +++ b/bsdl_files/xilinx/xcku15p_ffve1517.bsd @@ -0,0 +1,4762 @@ +-- (c) Copyright 2017 Xilinx, Inc. All rights reserved. +-- +-- This file contains confidential and proprietary information +-- of Xilinx, Inc. and is protected under U.S. and +-- international copyright and other intellectual property +-- laws. +-- +-- DISCLAIMER +-- This disclaimer is not a license and does not grant any +-- rights to the materials distributed herewith. Except as +-- otherwise provided in a valid license issued to you by +-- Xilinx, and to the maximum extent permitted by applicable +-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND +-- WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES +-- AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING +-- BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- +-- INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and +-- (2) Xilinx shall not be liable (whether in contract or tort, +-- including negligence, or under any other theory of +-- liability) for any loss or damage of any kind or nature +-- related to, arising under or in connection with these +-- materials, including for any direct, or any indirect, +-- special, incidental, or consequential loss or damage +-- (including loss of data, profits, goodwill, or any type of +-- loss or damage suffered as a result of any action brought +-- by a third party) even if such damage or loss was +-- reasonably foreseeable or Xilinx had been advised of the +-- possibility of the same. +-- +-- CRITICAL APPLICATIONS +-- Xilinx products are not designed or intended to be fail- +-- safe, or for use in any application requiring fail-safe +-- performance, such as life-support or safety devices or +-- systems, Class III medical devices, nuclear facilities, +-- applications related to the deployment of airbags, or any +-- other applications that could lead to death, personal +-- injury, or severe property or environmental damage +-- (individually and collectively, "Critical +-- Applications"). Customer assumes the sole risk and +-- liability of any use of Xilinx products in Critical +-- Applications, subject only to applicable laws and +-- regulations governing limitations on product liability. +-- +-- THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS +-- PART OF THIS FILE AT ALL TIMES. +-- +-- Device : XCKU15P_FFVE1517 +-- Date : 3/8/2017 +-- Revision : 1.1 +-- Status : Production +-- +-- Production package specifications are released coincident +-- with production release of a particular device. +------------------------------------------------------------------------ +-- Modification History +-- | Date : 3/08/2017 +-- | Revision: 1.1 +-- | Status : Production +-- | Details : Updated from Engineering Sample to Production +------------------------------------------------------------------------ +-- +-- BSDL file for device XCKU15P, package FFVE1517 +-- Generated by BSDLgen RTL +-- Generated on Mon Aug 14, 2017 10:32:46 PDT +-- Package File date = 6/22/2017 10:22:52 +-- +-- For technical support, www.xilinx.com/support.html -> enter text 'bsdl' +-- in the text search box. If none of these Answers resolve the problem, +-- open a service request at www.xilinx.com/support/service-portal.html +-- +-- This BSDL file reflects the pre-configuration JTAG behavior. To reflect +-- the post-configuration JTAG behavior (if any), edit this file as described +-- below. Many of these changes are demonstrated by commented-out template +-- lines preceding the lines they would replace: +-- +-- 1. Enable USER instructions as appropriate (see below). +-- 2. Set disable result of all pads as configured. +-- 3. Set safe state of boundary cells as necessary. +-- 4. Rename entity if necessary to avoid name collisions. +-- 5. Modify USERCODE value in USERCODE_REGISTER declaration. +-- +-- To prevent losing the current configuration, the boundary scan +-- test vectors should keep the PROGRAM_B pin High. +-- +-- PROGRAM_B can only be captured, not updated. The value +-- at the pin is always used by the device. +-- +-- All IOBs prior to configuration, and unused and output-only IOBs following +-- configuration, will sense their pad values during boundary-scan with a CMOS +-- input buffer. In order to properly capture a logic High value at one +-- of these IOBs into its input boundary scan cell, please refer to the +-- data sheet and user guide for proper input levels. +-- +-- For post-configuration boundary scan only: If an IOB is configured to use +-- an input standard that uses VREF pins, then the boundary scan test vectors +-- must keep the used VREF pins 3-stated. + +---------------------------------- + +-- BSDL File for 1149.6 Standard. + +---------------------------------- +-- ---------------------------------------------------------------------- +-- This BSDL file has been checked and verified by JTAG Technologies B.V. +-- on 2017-08-21, for syntactical and semantic compliance with +-- IEEE standards 1149.1 and 1149.6 +-- using bsdl32.dll 1.7.2.2 - 20160128 Win32 +-- copyright (c) 2009 JTAG Technologies B.V., All rights reserved +-- ---------------------------------------------------------------------- + +entity XCKU15P_FFVE1517 is + +-- Generic Parameter + +generic (PHYSICAL_PIN_MAP : string := "FFVE1517" ); + +-- Logical Port Description + +port ( + CCLK_AD23: inout bit; -- CCLK_0 + CFGBVS_AD24: linkage bit; -- + D00_MOSI_AD25: inout bit; -- D00_MOSI_0 + D01_DIN_AD26: inout bit; -- D01_DIN_0 + D02_AE22: inout bit; -- D02_0 + D03_AE23: inout bit; -- D03_0 + DONE_AE24: inout bit; -- DONE_0 + DXN: linkage bit; + DXP: linkage bit; + GND: linkage bit_vector (1 to 498); + GNDADC: linkage bit; + INIT_B_AE26: inout bit; -- INIT_B_0 + IO_A11: inout bit; -- PAD621 + IO_A12: inout bit; -- PAD575 + IO_A13: inout bit; -- PAD576 + IO_A14: inout bit; -- PAD573 + IO_A16: inout bit; -- PAD157 + IO_A17: inout bit; -- PAD159 + IO_A18: inout bit; -- PAD160 + IO_A19: inout bit; -- PAD163 + IO_A21: inout bit; -- PAD215 + IO_A22: inout bit; -- PAD213 + IO_A23: inout bit; -- PAD210 + IO_A24: inout bit; -- PAD209 + IO_A26: inout bit; -- PAD263 + IO_A27: inout bit; -- PAD265 + IO_A28: inout bit; -- PAD262 + IO_A29: inout bit; -- PAD261 + IO_A3: inout bit; -- PAD647 + IO_A31: inout bit; -- PAD267 + IO_A4: inout bit; -- PAD648 + IO_A6: inout bit; -- PAD645 + IO_A7: inout bit; -- PAD627 + IO_A8: inout bit; -- PAD625 + IO_A9: inout bit; -- PAD623 + IO_AH17: inout bit; -- PAD533 + IO_AH18: inout bit; -- PAD524 + IO_AH21: inout bit; -- PAD532 + IO_AH22: inout bit; -- PAD430 + IO_AH23: inout bit; -- PAD434 + IO_AH25: inout bit; -- PAD436 + IO_AH26: inout bit; -- PAD422 + IO_AH27: inout bit; -- PAD421 + IO_AH30: inout bit; -- PAD350 + IO_AH31: inout bit; -- PAD346 + IO_AH32: inout bit; -- PAD345 + IO_AH33: inout bit; -- PAD330 + IO_AH34: inout bit; -- PAD326 + IO_AJ14: inout bit; -- PAD490 + IO_AJ15: inout bit; -- PAD485 + IO_AJ16: inout bit; -- PAD486 + IO_AJ18: inout bit; -- PAD523 + IO_AJ19: inout bit; -- PAD527 + IO_AJ20: inout bit; -- PAD528 + IO_AJ21: inout bit; -- PAD531 + IO_AJ23: inout bit; -- PAD433 + IO_AJ24: inout bit; -- PAD432 + IO_AJ25: inout bit; -- PAD435 + IO_AJ26: inout bit; -- PAD424 + IO_AJ28: inout bit; -- PAD426 + IO_AJ29: inout bit; -- PAD348 + IO_AJ30: inout bit; -- PAD347 + IO_AJ31: inout bit; -- PAD349 + IO_AJ33: inout bit; -- PAD329 + IO_AJ34: inout bit; -- PAD334 + IO_AJ39: inout bit; -- PAD314 + IO_AK14: inout bit; -- PAD489 + IO_AK16: inout bit; -- PAD484 + IO_AK17: inout bit; -- PAD488 + IO_AK18: inout bit; -- PAD525 + IO_AK19: inout bit; -- PAD526 + IO_AK21: inout bit; -- PAD552 + IO_AK22: inout bit; -- PAD438 + IO_AK23: inout bit; -- PAD437 + IO_AK24: inout bit; -- PAD431 + IO_AK26: inout bit; -- PAD423 + IO_AK27: inout bit; -- PAD418 + IO_AK28: inout bit; -- PAD425 + IO_AK29: inout bit; -- PAD351 + IO_AK31: inout bit; -- PAD344 + IO_AK32: inout bit; -- PAD342 + IO_AK33: inout bit; -- PAD338 + IO_AK34: inout bit; -- PAD337 + IO_AK35: inout bit; -- PAD333 + IO_AK36: inout bit; -- PAD325 + IO_AK37: inout bit; -- PAD318 + IO_AK38: inout bit; -- PAD317 + IO_AK39: inout bit; -- PAD313 + IO_AL14: inout bit; -- PAD493 + IO_AL15: inout bit; -- PAD494 + IO_AL16: inout bit; -- PAD483 + IO_AL17: inout bit; -- PAD487 + IO_AL19: inout bit; -- PAD530 + IO_AL20: inout bit; -- PAD548 + IO_AL21: inout bit; -- PAD551 + IO_AL22: inout bit; -- PAD556 + IO_AL24: inout bit; -- PAD440 + IO_AL25: inout bit; -- PAD428 + IO_AL26: inout bit; -- PAD427 + IO_AL27: inout bit; -- PAD417 + IO_AL29: inout bit; -- PAD356 + IO_AL30: inout bit; -- PAD362 + IO_AL31: inout bit; -- PAD343 + IO_AL32: inout bit; -- PAD341 + IO_AL34: inout bit; -- PAD336 + IO_AL35: inout bit; -- PAD328 + IO_AL36: inout bit; -- PAD316 + IO_AL37: inout bit; -- PAD315 + IO_AL39: inout bit; -- PAD322 + IO_AM12: inout bit; -- PAD474 + IO_AM13: inout bit; -- PAD469 + IO_AM14: inout bit; -- PAD470 + IO_AM15: inout bit; -- PAD492 + IO_AM17: inout bit; -- PAD521 + IO_AM18: inout bit; -- PAD522 + IO_AM19: inout bit; -- PAD529 + IO_AM20: inout bit; -- PAD547 + IO_AM22: inout bit; -- PAD555 + IO_AM23: inout bit; -- PAD442 + IO_AM24: inout bit; -- PAD441 + IO_AM25: inout bit; -- PAD439 + IO_AM27: inout bit; -- PAD429 + IO_AM28: inout bit; -- PAD364 + IO_AM29: inout bit; -- PAD355 + IO_AM30: inout bit; -- PAD361 + IO_AM32: inout bit; -- PAD340 + IO_AM33: inout bit; -- PAD339 + IO_AM34: inout bit; -- PAD335 + IO_AM35: inout bit; -- PAD327 + IO_AM37: inout bit; -- PAD324 + IO_AM38: inout bit; -- PAD320 + IO_AM39: inout bit; -- PAD321 + IO_AN12: inout bit; -- PAD473 + IO_AN13: inout bit; -- PAD478 + IO_AN15: inout bit; -- PAD491 + IO_AN16: inout bit; -- PAD482 + IO_AN17: inout bit; -- PAD534 + IO_AN18: inout bit; -- PAD544 + IO_AN20: inout bit; -- PAD549 + IO_AN21: inout bit; -- PAD550 + IO_AN22: inout bit; -- PAD559 + IO_AN23: inout bit; -- PAD450 + IO_AN25: inout bit; -- PAD444 + IO_AN26: inout bit; -- PAD420 + IO_AN27: inout bit; -- PAD419 + IO_AN28: inout bit; -- PAD363 + IO_AN30: inout bit; -- PAD358 + IO_AN31: inout bit; -- PAD357 + IO_AN32: inout bit; -- PAD354 + IO_AN33: inout bit; -- PAD353 + IO_AN35: inout bit; -- PAD332 + IO_AN36: inout bit; -- PAD331 + IO_AN37: inout bit; -- PAD323 + IO_AN38: inout bit; -- PAD319 + IO_AP10: inout bit; -- PAD481 + IO_AP11: inout bit; -- PAD472 + IO_AP13: inout bit; -- PAD477 + IO_AP14: inout bit; -- PAD495 + IO_AP15: inout bit; -- PAD496 + IO_AP16: inout bit; -- PAD500 + IO_AP18: inout bit; -- PAD543 + IO_AP19: inout bit; -- PAD546 + IO_AP20: inout bit; -- PAD553 + IO_AP21: inout bit; -- PAD554 + IO_AP23: inout bit; -- PAD449 + IO_AP24: inout bit; -- PAD446 + IO_AP25: inout bit; -- PAD445 + IO_AP26: inout bit; -- PAD443 + IO_AP28: inout bit; -- PAD360 + IO_AP29: inout bit; -- PAD359 + IO_AP30: inout bit; -- PAD352 + IO_AP31: inout bit; -- PAD378 + IO_AP33: inout bit; -- PAD382 + IO_AP34: inout bit; -- PAD384 + IO_AP35: inout bit; -- PAD383 + IO_AP36: inout bit; -- PAD380 + IO_AP38: inout bit; -- PAD368 + IO_AP39: inout bit; -- PAD367 + IO_AR11: inout bit; -- PAD471 + IO_AR12: inout bit; -- PAD475 + IO_AR13: inout bit; -- PAD476 + IO_AR14: inout bit; -- PAD498 + IO_AR16: inout bit; -- PAD499 + IO_AR17: inout bit; -- PAD535 + IO_AR18: inout bit; -- PAD536 + IO_AR19: inout bit; -- PAD545 + IO_AR21: inout bit; -- PAD557 + IO_AR22: inout bit; -- PAD558 + IO_AR23: inout bit; -- PAD454 + IO_AR24: inout bit; -- PAD453 + IO_AR26: inout bit; -- PAD448 + IO_AR27: inout bit; -- PAD447 + IO_AR29: inout bit; -- PAD404 + IO_AR31: inout bit; -- PAD386 + IO_AR32: inout bit; -- PAD388 + IO_AR33: inout bit; -- PAD381 + IO_AR34: inout bit; -- PAD390 + IO_AR36: inout bit; -- PAD379 + IO_AR37: inout bit; -- PAD376 + IO_AR38: inout bit; -- PAD372 + IO_AR39: inout bit; -- PAD371 + IO_AT10: inout bit; -- PAD508 + IO_AT11: inout bit; -- PAD479 + IO_AT12: inout bit; -- PAD480 + IO_AT14: inout bit; -- PAD497 + IO_AT15: inout bit; -- PAD504 + IO_AT16: inout bit; -- PAD507 + IO_AT17: inout bit; -- PAD540 + IO_AT19: inout bit; -- PAD541 + IO_AT20: inout bit; -- PAD542 + IO_AT21: inout bit; -- PAD563 + IO_AT22: inout bit; -- PAD564 + IO_AT24: inout bit; -- PAD460 + IO_AT25: inout bit; -- PAD452 + IO_AT26: inout bit; -- PAD451 + IO_AT27: inout bit; -- PAD455 + IO_AT29: inout bit; -- PAD408 + IO_AT30: inout bit; -- PAD414 + IO_AT31: inout bit; -- PAD385 + IO_AT32: inout bit; -- PAD387 + IO_AT34: inout bit; -- PAD389 + IO_AT35: inout bit; -- PAD398 + IO_AT36: inout bit; -- PAD397 + IO_AT37: inout bit; -- PAD375 + IO_AT39: inout bit; -- PAD366 + IO_AU10: inout bit; -- PAD514 + IO_AU12: inout bit; -- PAD518 + IO_AU13: inout bit; -- PAD509 + IO_AU14: inout bit; -- PAD510 + IO_AU15: inout bit; -- PAD503 + IO_AU17: inout bit; -- PAD539 + IO_AU18: inout bit; -- PAD537 + IO_AU19: inout bit; -- PAD538 + IO_AU20: inout bit; -- PAD570 + IO_AU22: inout bit; -- PAD572 + IO_AU23: inout bit; -- PAD464 + IO_AU24: inout bit; -- PAD459 + IO_AU25: inout bit; -- PAD462 + IO_AU27: inout bit; -- PAD456 + IO_AU28: inout bit; -- PAD416 + IO_AU29: inout bit; -- PAD407 + IO_AU30: inout bit; -- PAD413 + IO_AU32: inout bit; -- PAD394 + IO_AU33: inout bit; -- PAD393 + IO_AU34: inout bit; -- PAD392 + IO_AU35: inout bit; -- PAD391 + IO_AU37: inout bit; -- PAD374 + IO_AU38: inout bit; -- PAD370 + IO_AU39: inout bit; -- PAD365 + IO_AV10: inout bit; -- PAD513 + IO_AV11: inout bit; -- PAD517 + IO_AV12: inout bit; -- PAD511 + IO_AV13: inout bit; -- PAD512 + IO_AV15: inout bit; -- PAD502 + IO_AV16: inout bit; -- PAD506 + IO_AV17: inout bit; -- PAD560 + IO_AV18: inout bit; -- PAD562 + IO_AV20: inout bit; -- PAD569 + IO_AV21: inout bit; -- PAD568 + IO_AV22: inout bit; -- PAD571 + IO_AV23: inout bit; -- PAD463 + IO_AV25: inout bit; -- PAD461 + IO_AV26: inout bit; -- PAD458 + IO_AV27: inout bit; -- PAD457 + IO_AV28: inout bit; -- PAD415 + IO_AV30: inout bit; -- PAD410 + IO_AV31: inout bit; -- PAD406 + IO_AV32: inout bit; -- PAD396 + IO_AV33: inout bit; -- PAD395 + IO_AV35: inout bit; -- PAD402 + IO_AV36: inout bit; -- PAD401 + IO_AV37: inout bit; -- PAD373 + IO_AV38: inout bit; -- PAD369 + IO_AW10: inout bit; -- PAD519 + IO_AW11: inout bit; -- PAD520 + IO_AW13: inout bit; -- PAD515 + IO_AW14: inout bit; -- PAD516 + IO_AW15: inout bit; -- PAD501 + IO_AW16: inout bit; -- PAD505 + IO_AW18: inout bit; -- PAD561 + IO_AW19: inout bit; -- PAD565 + IO_AW20: inout bit; -- PAD566 + IO_AW21: inout bit; -- PAD567 + IO_AW23: inout bit; -- PAD468 + IO_AW24: inout bit; -- PAD467 + IO_AW25: inout bit; -- PAD466 + IO_AW26: inout bit; -- PAD465 + IO_AW28: inout bit; -- PAD412 + IO_AW29: inout bit; -- PAD411 + IO_AW30: inout bit; -- PAD409 + IO_AW31: inout bit; -- PAD405 + IO_AW33: inout bit; -- PAD403 + IO_AW34: inout bit; -- PAD400 + IO_AW35: inout bit; -- PAD399 + IO_AW36: inout bit; -- PAD377 + IO_B10: inout bit; -- PAD624 + IO_B11: inout bit; -- PAD622 + IO_B12: inout bit; -- PAD577 + IO_B14: inout bit; -- PAD574 + IO_B15: inout bit; -- PAD161 + IO_B16: inout bit; -- PAD162 + IO_B17: inout bit; -- PAD158 + IO_B19: inout bit; -- PAD164 + IO_B2: inout bit; -- PAD651 + IO_B20: inout bit; -- PAD217 + IO_B21: inout bit; -- PAD216 + IO_B22: inout bit; -- PAD214 + IO_B24: inout bit; -- PAD212 + IO_B25: inout bit; -- PAD211 + IO_B26: inout bit; -- PAD264 + IO_B27: inout bit; -- PAD266 + IO_B29: inout bit; -- PAD271 + IO_B30: inout bit; -- PAD273 + IO_B31: inout bit; -- PAD268 + IO_B4: inout bit; -- PAD649 + IO_B5: inout bit; -- PAD650 + IO_B6: inout bit; -- PAD646 + IO_B7: inout bit; -- PAD628 + IO_B9: inout bit; -- PAD626 + IO_C10: inout bit; -- PAD630 + IO_C12: inout bit; -- PAD579 + IO_C13: inout bit; -- PAD578 + IO_C14: inout bit; -- PAD165 + IO_C15: inout bit; -- PAD166 + IO_C17: inout bit; -- PAD167 + IO_C18: inout bit; -- PAD168 + IO_C19: inout bit; -- PAD169 + IO_C2: inout bit; -- PAD652 + IO_C20: inout bit; -- PAD218 + IO_C22: inout bit; -- PAD220 + IO_C23: inout bit; -- PAD219 + IO_C24: inout bit; -- PAD221 + IO_C25: inout bit; -- PAD222 + IO_C27: inout bit; -- PAD270 + IO_C28: inout bit; -- PAD269 + IO_C29: inout bit; -- PAD272 + IO_C3: inout bit; -- PAD655 + IO_C30: inout bit; -- PAD274 + IO_C4: inout bit; -- PAD653 + IO_C5: inout bit; -- PAD654 + IO_C7: inout bit; -- PAD631 + IO_C8: inout bit; -- PAD632 + IO_C9: inout bit; -- PAD629 + IO_D1: inout bit; -- PAD657 + IO_D10: inout bit; -- PAD633 + IO_D11: inout bit; -- PAD634 + IO_D12: inout bit; -- PAD580 + IO_D13: inout bit; -- PAD581 + IO_D15: inout bit; -- PAD171 + IO_D16: inout bit; -- PAD172 + IO_D17: inout bit; -- PAD173 + IO_D18: inout bit; -- PAD174 + IO_D2: inout bit; -- PAD658 + IO_D20: inout bit; -- PAD223 + IO_D21: inout bit; -- PAD225 + IO_D22: inout bit; -- PAD228 + IO_D23: inout bit; -- PAD227 + IO_D25: inout bit; -- PAD229 + IO_D26: inout bit; -- PAD277 + IO_D27: inout bit; -- PAD276 + IO_D28: inout bit; -- PAD275 + IO_D3: inout bit; -- PAD656 + IO_D30: inout bit; -- PAD279 + IO_D31: inout bit; -- PAD281 + IO_D5: inout bit; -- PAD659 + IO_D6: inout bit; -- PAD660 + IO_D7: inout bit; -- PAD635 + IO_D8: inout bit; -- PAD636 + IO_E1: inout bit; -- PAD661 + IO_E10: inout bit; -- PAD638 + IO_E11: inout bit; -- PAD585 + IO_E13: inout bit; -- PAD582 + IO_E14: inout bit; -- PAD170 + IO_E15: inout bit; -- PAD175 + IO_E16: inout bit; -- PAD176 + IO_E18: inout bit; -- PAD177 + IO_E19: inout bit; -- PAD178 + IO_E20: inout bit; -- PAD224 + IO_E21: inout bit; -- PAD226 + IO_E23: inout bit; -- PAD232 + IO_E24: inout bit; -- PAD231 + IO_E25: inout bit; -- PAD230 + IO_E26: inout bit; -- PAD278 + IO_E28: inout bit; -- PAD284 + IO_E29: inout bit; -- PAD283 + IO_E3: inout bit; -- PAD665 + IO_E30: inout bit; -- PAD280 + IO_E31: inout bit; -- PAD282 + IO_E4: inout bit; -- PAD667 + IO_E5: inout bit; -- PAD668 + IO_E6: inout bit; -- PAD643 + IO_E8: inout bit; -- PAD639 + IO_E9: inout bit; -- PAD637 + IO_F1: inout bit; -- PAD662 + IO_F11: inout bit; -- PAD586 + IO_F12: inout bit; -- PAD583 + IO_F13: inout bit; -- PAD584 + IO_F14: inout bit; -- PAD187 + IO_F16: inout bit; -- PAD179 + IO_F17: inout bit; -- PAD180 + IO_F18: inout bit; -- PAD181 + IO_F19: inout bit; -- PAD182 + IO_F2: inout bit; -- PAD663 + IO_F21: inout bit; -- PAD237 + IO_F22: inout bit; -- PAD235 + IO_F23: inout bit; -- PAD234 + IO_F24: inout bit; -- PAD233 + IO_F26: inout bit; -- PAD299 + IO_F27: inout bit; -- PAD289 + IO_F28: inout bit; -- PAD286 + IO_F29: inout bit; -- PAD285 + IO_F3: inout bit; -- PAD664 + IO_F31: inout bit; -- PAD291 + IO_F4: inout bit; -- PAD666 + IO_F6: inout bit; -- PAD644 + IO_F7: inout bit; -- PAD641 + IO_F8: inout bit; -- PAD642 + IO_F9: inout bit; -- PAD640 + IO_G10: inout bit; -- PAD589 + IO_G11: inout bit; -- PAD587 + IO_G12: inout bit; -- PAD588 + IO_G14: inout bit; -- PAD189 + IO_G15: inout bit; -- PAD188 + IO_G16: inout bit; -- PAD185 + IO_G17: inout bit; -- PAD186 + IO_G19: inout bit; -- PAD183 + IO_G20: inout bit; -- PAD239 + IO_G21: inout bit; -- PAD238 + IO_G22: inout bit; -- PAD236 + IO_G24: inout bit; -- PAD241 + IO_G25: inout bit; -- PAD302 + IO_G26: inout bit; -- PAD301 + IO_G27: inout bit; -- PAD290 + IO_G29: inout bit; -- PAD288 + IO_G30: inout bit; -- PAD287 + IO_G31: inout bit; -- PAD292 + IO_H10: inout bit; -- PAD590 + IO_H12: inout bit; -- PAD591 + IO_H13: inout bit; -- PAD592 + IO_H14: inout bit; -- PAD190 + IO_H15: inout bit; -- PAD193 + IO_H17: inout bit; -- PAD191 + IO_H18: inout bit; -- PAD192 + IO_H19: inout bit; -- PAD184 + IO_H20: inout bit; -- PAD240 + IO_H22: inout bit; -- PAD245 + IO_H23: inout bit; -- PAD247 + IO_H24: inout bit; -- PAD242 + IO_H25: inout bit; -- PAD305 + IO_H27: inout bit; -- PAD309 + IO_H28: inout bit; -- PAD293 + IO_H29: inout bit; -- PAD296 + IO_H30: inout bit; -- PAD295 + IO_J10: inout bit; -- PAD593 + IO_J11: inout bit; -- PAD594 + IO_J12: inout bit; -- PAD595 + IO_J13: inout bit; -- PAD596 + IO_J15: inout bit; -- PAD194 + IO_J16: inout bit; -- PAD199 + IO_J17: inout bit; -- PAD196 + IO_J18: inout bit; -- PAD195 + IO_J20: inout bit; -- PAD244 + IO_J21: inout bit; -- PAD243 + IO_J22: inout bit; -- PAD246 + IO_J23: inout bit; -- PAD248 + IO_J25: inout bit; -- PAD306 + IO_J26: inout bit; -- PAD303 + IO_J27: inout bit; -- PAD310 + IO_J28: inout bit; -- PAD294 + IO_J30: inout bit; -- PAD298 + IO_J31: inout bit; -- PAD297 + IO_K10: inout bit; -- PAD597 + IO_K11: inout bit; -- PAD598 + IO_K13: inout bit; -- PAD601 + IO_K14: inout bit; -- PAD197 + IO_K15: inout bit; -- PAD198 + IO_K16: inout bit; -- PAD200 + IO_K18: inout bit; -- PAD203 + IO_K19: inout bit; -- PAD205 + IO_K20: inout bit; -- PAD250 + IO_K21: inout bit; -- PAD249 + IO_K23: inout bit; -- PAD252 + IO_K24: inout bit; -- PAD251 + IO_K25: inout bit; -- PAD300 + IO_K26: inout bit; -- PAD304 + IO_L11: inout bit; -- PAD599 + IO_L12: inout bit; -- PAD600 + IO_L13: inout bit; -- PAD602 + IO_L14: inout bit; -- PAD607 + IO_L16: inout bit; -- PAD201 + IO_L17: inout bit; -- PAD202 + IO_L18: inout bit; -- PAD204 + IO_L19: inout bit; -- PAD206 + IO_L21: inout bit; -- PAD254 + IO_L22: inout bit; -- PAD253 + IO_L23: inout bit; -- PAD256 + IO_L24: inout bit; -- PAD255 + IO_L26: inout bit; -- PAD308 + IO_L27: inout bit; -- PAD307 + IO_M10: inout bit; -- PAD603 + IO_M11: inout bit; -- PAD605 + IO_M12: inout bit; -- PAD606 + IO_M14: inout bit; -- PAD608 + IO_M15: inout bit; -- PAD207 + IO_M16: inout bit; -- PAD208 + IO_M19: inout bit; -- PAD258 + IO_M20: inout bit; -- PAD257 + IO_M21: inout bit; -- PAD260 + IO_M22: inout bit; -- PAD259 + IO_M25: inout bit; -- PAD312 + IO_M26: inout bit; -- PAD311 + IO_N10: inout bit; -- PAD604 + IO_N12: inout bit; -- PAD609 + IO_N13: inout bit; -- PAD610 + IO_N14: inout bit; -- PAD611 + IO_N15: inout bit; -- PAD612 + IO_P10: inout bit; -- PAD613 + IO_P11: inout bit; -- PAD614 + IO_P12: inout bit; -- PAD615 + IO_P13: inout bit; -- PAD616 + IO_P15: inout bit; -- PAD619 + IO_R13: inout bit; -- PAD617 + IO_R14: inout bit; -- PAD618 + IO_R15: inout bit; -- PAD620 + M0_AE27: in bit; -- M0_0 + M1_AF22: in bit; -- M1_0 + M2_AF24: in bit; -- M2_0 + MGTAVCC_L: linkage bit_vector (1 to 11); + MGTAVCC_RN: linkage bit_vector (1 to 4); + MGTAVCC_RS: linkage bit_vector (1 to 4); + MGTAVTTRCAL_L: linkage bit; + MGTAVTTRCAL_R: linkage bit; + MGTAVTT_L: linkage bit_vector (1 to 16); + MGTAVTT_RN: linkage bit_vector (1 to 15); + MGTAVTT_RS: linkage bit_vector (1 to 16); + MGTHRXN0_224: in bit; + MGTHRXN0_225: in bit; + MGTHRXN0_226: in bit; + MGTHRXN0_227: in bit; + MGTHRXN0_228: in bit; + MGTHRXN0_229: in bit; + MGTHRXN0_230: in bit; + MGTHRXN0_231: in bit; + MGTHRXN1_224: in bit; + MGTHRXN1_225: in bit; + MGTHRXN1_226: in bit; + MGTHRXN1_227: in bit; + MGTHRXN1_228: in bit; + MGTHRXN1_229: in bit; + MGTHRXN1_230: in bit; + MGTHRXN1_231: in bit; + MGTHRXN2_224: in bit; + MGTHRXN2_225: in bit; + MGTHRXN2_226: in bit; + MGTHRXN2_227: in bit; + MGTHRXN2_228: in bit; + MGTHRXN2_229: in bit; + MGTHRXN2_230: in bit; + MGTHRXN2_231: in bit; + MGTHRXN3_224: in bit; + MGTHRXN3_225: in bit; + MGTHRXN3_226: in bit; + MGTHRXN3_227: in bit; + MGTHRXN3_228: in bit; + MGTHRXN3_229: in bit; + MGTHRXN3_230: in bit; + MGTHRXN3_231: in bit; + MGTHRXP0_224: in bit; + MGTHRXP0_225: in bit; + MGTHRXP0_226: in bit; + MGTHRXP0_227: in bit; + MGTHRXP0_228: in bit; + MGTHRXP0_229: in bit; + MGTHRXP0_230: in bit; + MGTHRXP0_231: in bit; + MGTHRXP1_224: in bit; + MGTHRXP1_225: in bit; + MGTHRXP1_226: in bit; + MGTHRXP1_227: in bit; + MGTHRXP1_228: in bit; + MGTHRXP1_229: in bit; + MGTHRXP1_230: in bit; + MGTHRXP1_231: in bit; + MGTHRXP2_224: in bit; + MGTHRXP2_225: in bit; + MGTHRXP2_226: in bit; + MGTHRXP2_227: in bit; + MGTHRXP2_228: in bit; + MGTHRXP2_229: in bit; + MGTHRXP2_230: in bit; + MGTHRXP2_231: in bit; + MGTHRXP3_224: in bit; + MGTHRXP3_225: in bit; + MGTHRXP3_226: in bit; + MGTHRXP3_227: in bit; + MGTHRXP3_228: in bit; + MGTHRXP3_229: in bit; + MGTHRXP3_230: in bit; + MGTHRXP3_231: in bit; + MGTHTXN0_224: buffer bit; + MGTHTXN0_225: buffer bit; + MGTHTXN0_226: buffer bit; + MGTHTXN0_227: buffer bit; + MGTHTXN0_228: buffer bit; + MGTHTXN0_229: buffer bit; + MGTHTXN0_230: buffer bit; + MGTHTXN0_231: buffer bit; + MGTHTXN1_224: buffer bit; + MGTHTXN1_225: buffer bit; + MGTHTXN1_226: buffer bit; + MGTHTXN1_227: buffer bit; + MGTHTXN1_228: buffer bit; + MGTHTXN1_229: buffer bit; + MGTHTXN1_230: buffer bit; + MGTHTXN1_231: buffer bit; + MGTHTXN2_224: buffer bit; + MGTHTXN2_225: buffer bit; + MGTHTXN2_226: buffer bit; + MGTHTXN2_227: buffer bit; + MGTHTXN2_228: buffer bit; + MGTHTXN2_229: buffer bit; + MGTHTXN2_230: buffer bit; + MGTHTXN2_231: buffer bit; + MGTHTXN3_224: buffer bit; + MGTHTXN3_225: buffer bit; + MGTHTXN3_226: buffer bit; + MGTHTXN3_227: buffer bit; + MGTHTXN3_228: buffer bit; + MGTHTXN3_229: buffer bit; + MGTHTXN3_230: buffer bit; + MGTHTXN3_231: buffer bit; + MGTHTXP0_224: buffer bit; + MGTHTXP0_225: buffer bit; + MGTHTXP0_226: buffer bit; + MGTHTXP0_227: buffer bit; + MGTHTXP0_228: buffer bit; + MGTHTXP0_229: buffer bit; + MGTHTXP0_230: buffer bit; + MGTHTXP0_231: buffer bit; + MGTHTXP1_224: buffer bit; + MGTHTXP1_225: buffer bit; + MGTHTXP1_226: buffer bit; + MGTHTXP1_227: buffer bit; + MGTHTXP1_228: buffer bit; + MGTHTXP1_229: buffer bit; + MGTHTXP1_230: buffer bit; + MGTHTXP1_231: buffer bit; + MGTHTXP2_224: buffer bit; + MGTHTXP2_225: buffer bit; + MGTHTXP2_226: buffer bit; + MGTHTXP2_227: buffer bit; + MGTHTXP2_228: buffer bit; + MGTHTXP2_229: buffer bit; + MGTHTXP2_230: buffer bit; + MGTHTXP2_231: buffer bit; + MGTHTXP3_224: buffer bit; + MGTHTXP3_225: buffer bit; + MGTHTXP3_226: buffer bit; + MGTHTXP3_227: buffer bit; + MGTHTXP3_228: buffer bit; + MGTHTXP3_229: buffer bit; + MGTHTXP3_230: buffer bit; + MGTHTXP3_231: buffer bit; + MGTREFCLK0N_127: linkage bit; + MGTREFCLK0N_128: linkage bit; + MGTREFCLK0N_129: linkage bit; + MGTREFCLK0N_130: linkage bit; + MGTREFCLK0N_131: linkage bit; + MGTREFCLK0N_132: linkage bit; + MGTREFCLK0N_224: linkage bit; + MGTREFCLK0N_225: linkage bit; + MGTREFCLK0N_226: linkage bit; + MGTREFCLK0N_227: linkage bit; + MGTREFCLK0N_228: linkage bit; + MGTREFCLK0N_229: linkage bit; + MGTREFCLK0N_230: linkage bit; + MGTREFCLK0N_231: linkage bit; + MGTREFCLK0P_127: linkage bit; + MGTREFCLK0P_128: linkage bit; + MGTREFCLK0P_129: linkage bit; + MGTREFCLK0P_130: linkage bit; + MGTREFCLK0P_131: linkage bit; + MGTREFCLK0P_132: linkage bit; + MGTREFCLK0P_224: linkage bit; + MGTREFCLK0P_225: linkage bit; + MGTREFCLK0P_226: linkage bit; + MGTREFCLK0P_227: linkage bit; + MGTREFCLK0P_228: linkage bit; + MGTREFCLK0P_229: linkage bit; + MGTREFCLK0P_230: linkage bit; + MGTREFCLK0P_231: linkage bit; + MGTREFCLK1N_127: linkage bit; + MGTREFCLK1N_128: linkage bit; + MGTREFCLK1N_129: linkage bit; + MGTREFCLK1N_130: linkage bit; + MGTREFCLK1N_131: linkage bit; + MGTREFCLK1N_132: linkage bit; + MGTREFCLK1N_224: linkage bit; + MGTREFCLK1N_225: linkage bit; + MGTREFCLK1N_226: linkage bit; + MGTREFCLK1N_227: linkage bit; + MGTREFCLK1N_228: linkage bit; + MGTREFCLK1N_229: linkage bit; + MGTREFCLK1N_230: linkage bit; + MGTREFCLK1N_231: linkage bit; + MGTREFCLK1P_127: linkage bit; + MGTREFCLK1P_128: linkage bit; + MGTREFCLK1P_129: linkage bit; + MGTREFCLK1P_130: linkage bit; + MGTREFCLK1P_131: linkage bit; + MGTREFCLK1P_132: linkage bit; + MGTREFCLK1P_224: linkage bit; + MGTREFCLK1P_225: linkage bit; + MGTREFCLK1P_226: linkage bit; + MGTREFCLK1P_227: linkage bit; + MGTREFCLK1P_228: linkage bit; + MGTREFCLK1P_229: linkage bit; + MGTREFCLK1P_230: linkage bit; + MGTREFCLK1P_231: linkage bit; + MGTRREF_L: linkage bit; + MGTRREF_R: linkage bit; + MGTVCCAUX_L: linkage bit_vector (1 to 4); + MGTVCCAUX_RN: linkage bit_vector (1 to 3); + MGTVCCAUX_RS: linkage bit_vector (1 to 3); + MGTYRXN0_127: in bit; + MGTYRXN0_128: in bit; + MGTYRXN0_129: in bit; + MGTYRXN0_130: in bit; + MGTYRXN0_131: in bit; + MGTYRXN0_132: in bit; + MGTYRXN1_127: in bit; + MGTYRXN1_128: in bit; + MGTYRXN1_129: in bit; + MGTYRXN1_130: in bit; + MGTYRXN1_131: in bit; + MGTYRXN1_132: in bit; + MGTYRXN2_127: in bit; + MGTYRXN2_128: in bit; + MGTYRXN2_129: in bit; + MGTYRXN2_130: in bit; + MGTYRXN2_131: in bit; + MGTYRXN2_132: in bit; + MGTYRXN3_127: in bit; + MGTYRXN3_128: in bit; + MGTYRXN3_129: in bit; + MGTYRXN3_130: in bit; + MGTYRXN3_131: in bit; + MGTYRXN3_132: in bit; + MGTYRXP0_127: in bit; + MGTYRXP0_128: in bit; + MGTYRXP0_129: in bit; + MGTYRXP0_130: in bit; + MGTYRXP0_131: in bit; + MGTYRXP0_132: in bit; + MGTYRXP1_127: in bit; + MGTYRXP1_128: in bit; + MGTYRXP1_129: in bit; + MGTYRXP1_130: in bit; + MGTYRXP1_131: in bit; + MGTYRXP1_132: in bit; + MGTYRXP2_127: in bit; + MGTYRXP2_128: in bit; + MGTYRXP2_129: in bit; + MGTYRXP2_130: in bit; + MGTYRXP2_131: in bit; + MGTYRXP2_132: in bit; + MGTYRXP3_127: in bit; + MGTYRXP3_128: in bit; + MGTYRXP3_129: in bit; + MGTYRXP3_130: in bit; + MGTYRXP3_131: in bit; + MGTYRXP3_132: in bit; + MGTYTXN0_127: buffer bit; + MGTYTXN0_128: buffer bit; + MGTYTXN0_129: buffer bit; + MGTYTXN0_130: buffer bit; + MGTYTXN0_131: buffer bit; + MGTYTXN0_132: buffer bit; + MGTYTXN1_127: buffer bit; + MGTYTXN1_128: buffer bit; + MGTYTXN1_129: buffer bit; + MGTYTXN1_130: buffer bit; + MGTYTXN1_131: buffer bit; + MGTYTXN1_132: buffer bit; + MGTYTXN2_127: buffer bit; + MGTYTXN2_128: buffer bit; + MGTYTXN2_129: buffer bit; + MGTYTXN2_130: buffer bit; + MGTYTXN2_131: buffer bit; + MGTYTXN2_132: buffer bit; + MGTYTXN3_127: buffer bit; + MGTYTXN3_128: buffer bit; + MGTYTXN3_129: buffer bit; + MGTYTXN3_130: buffer bit; + MGTYTXN3_131: buffer bit; + MGTYTXN3_132: buffer bit; + MGTYTXP0_127: buffer bit; + MGTYTXP0_128: buffer bit; + MGTYTXP0_129: buffer bit; + MGTYTXP0_130: buffer bit; + MGTYTXP0_131: buffer bit; + MGTYTXP0_132: buffer bit; + MGTYTXP1_127: buffer bit; + MGTYTXP1_128: buffer bit; + MGTYTXP1_129: buffer bit; + MGTYTXP1_130: buffer bit; + MGTYTXP1_131: buffer bit; + MGTYTXP1_132: buffer bit; + MGTYTXP2_127: buffer bit; + MGTYTXP2_128: buffer bit; + MGTYTXP2_129: buffer bit; + MGTYTXP2_130: buffer bit; + MGTYTXP2_131: buffer bit; + MGTYTXP2_132: buffer bit; + MGTYTXP3_127: buffer bit; + MGTYTXP3_128: buffer bit; + MGTYTXP3_129: buffer bit; + MGTYTXP3_130: buffer bit; + MGTYTXP3_131: buffer bit; + MGTYTXP3_132: buffer bit; + POR_OVERRIDE: linkage bit; + PROGRAM_B: in bit; -- PROGRAM_B_0 + PUDC_B_AF27: in bit; -- PUDC_B_0 + RDWR_FCS_B_AG22: inout bit; -- RDWR_FCS_B_0 + TCK: in bit; -- TCK_0 + TDI: in bit; -- TDI_0 + TDO: out bit; -- TDO_0 + TMS: in bit; -- TMS_0 + VBATT: linkage bit; + VCCADC: linkage bit; + VCCAUX: linkage bit_vector (1 to 6); + VCCBRAM: linkage bit_vector (1 to 5); + VCCINT: linkage bit_vector (1 to 66); + VCCO_0: linkage bit_vector (1 to 2); + VCCO_64: linkage bit_vector (1 to 3); + VCCO_65: linkage bit_vector (1 to 3); + VCCO_66: linkage bit_vector (1 to 3); + VCCO_67: linkage bit_vector (1 to 3); + VCCO_68: linkage bit_vector (1 to 3); + VCCO_69: linkage bit_vector (1 to 3); + VCCO_70: linkage bit_vector (1 to 3); + VCCO_71: linkage bit_vector (1 to 3); + VCCO_90: linkage bit_vector (1 to 2); + VCCO_91: linkage bit_vector (1 to 2); + VCCO_93: linkage bit_vector (1 to 2); + VCCO_94: linkage bit_vector (1 to 2); + VN: linkage bit; + VP: linkage bit; + VREFW19: linkage bit; -- VREFN + VREFY20: linkage bit; -- VREFP + VREFAH20: linkage bit; -- VREF_T_64 + VREFAH16: linkage bit; -- VREF_T_65 + VREFAG25: linkage bit; -- VREF_T_66 + VREFAR28: linkage bit; -- VREF_T_67 + VREFAH29: linkage bit; -- VREF_T_68 + VREFM27: linkage bit; -- VREF_T_69 + VREFM24: linkage bit; -- VREF_T_70 + VREFM17: linkage bit -- VREF_T_71 + +); --end port list + +-- Use Statements + +use STD_1149_1_2001.all; +use STD_1149_6_2003.all; + +-- Component Conformance Statement(s) + +attribute COMPONENT_CONFORMANCE of XCKU15P_FFVE1517 : entity is + "STD_1149_1_2001"; + +-- Device Package Pin Mappings + +attribute PIN_MAP of XCKU15P_FFVE1517 : entity is PHYSICAL_PIN_MAP; + +constant FFVE1517: PIN_MAP_STRING:= + "CCLK_AD23:AD23," & + "CFGBVS_AD24:AD24," & + "D00_MOSI_AD25:AD25," & + "D01_DIN_AD26:AD26," & + "D02_AE22:AE22," & + "D03_AE23:AE23," & + "DONE_AE24:AE24," & + "DXN:AA19," & + "DXP:AA20," & + "GND:(A10,A15,A2,A20,A25,A30,A32,A35,A36,A37,A38," & + "A5,AA1,AA13,AA14,AA16,AA18,AA2,AA22,AA24,AA26,AA28," & + "AA32,AA35,AA36,AA37,AA5,AA9,AB11,AB13,AB15,AB17,AB19," & + "AB21,AB23,AB25,AB26,AB3,AB30,AB34,AB35,AB38,AB39,AB4," & + "AB7,AC1,AC13,AC14,AC16,AC18,AC2,AC20,AC22,AC24,AC26," & + "AC27,AC28,AC32,AC35,AC36,AC37,AC5,AC9,AD13,AD15,AD17," & + "AD19,AD21,AD27,AD28,AD3,AD30,AD34,AD35,AD38,AD39,AD4," & + "AD7,AE1,AE13,AE16,AE18,AE2,AE20,AE25,AE28,AE32,AE35," & + "AE36,AE37,AE5,AE9,AF11,AF13,AF15,AF17,AF19,AF21,AF28," & + "AF29,AF3,AF30,AF33,AF34,AF35,AF38,AF39,AF4,AF7,AG1," & + "AG13,AG14,AG16,AG18,AG2,AG20,AG29,AG30,AG31,AG32,AG33," & + "AG34,AG35,AG36,AG37,AG5,AG9,AH11,AH13,AH15,AH19,AH24," & + "AH28,AH3,AH35,AH38,AH39,AH4,AH7,AJ1,AJ13,AJ17,AJ2," & + "AJ22,AJ27,AJ32,AJ35,AJ36,AJ37,AJ38,AJ5,AJ9,AK11,AK13," & + "AK3,AK4,AK7,AL1,AL11,AL12,AL13,AL18,AL2,AL23,AL28," & + "AL38,AL5,AL9,AM11,AM16,AM21,AM26,AM3,AM31,AM4,AM7," & + "AN1,AN10,AN11,AN2,AN29,AN34,AN39,AN5,AN9,AP12,AP17," & + "AP22,AP27,AP3,AP32,AP37,AP4,AP7,AP9,AR1,AR10,AR15," & + "AR2,AR20,AR25,AR35,AR5,AR9,AT28,AT3,AT38,AT4,AT7," & + "AT9,AU1,AU11,AU16,AU2,AU21,AU26,AU31,AU5,AU9,AV14," & + "AV19,AV24,AV29,AV3,AV34,AV39,AV4,AV7,AV9,AW12,AW17," & + "AW2,AW22,AW27,AW32,AW37,AW38,AW5,AW9,B1,B3,B32," & + "B34,B37,B38,B39,C1,C11,C16,C21,C26,C31,C32," & + "C36,C37,C6,D14,D19,D24,D29,D32,D34,D37,D38," & + "D39,D4,D9,E12,E32,E36,E37,E7,F15,F20,F25," & + "F30,F32,F34,F37,F38,F39,G1,G18,G2,G23,G28," & + "G3,G32,G35,G36,G37,G4,G5,G6,G7,G8,G9," & + "H11,H3,H31,H32,H34,H35,H38,H39,H4,H7,H8," & + "H9,J1,J14,J19,J2,J24,J29,J32,J35,J36,J37," & + "J5,J9,K17,K22,K27,K28,K29,K3,K30,K31,K32," & + "K34,K35,K38,K39,K4,K7,K9,L1,L10,L15,L2," & + "L20,L25,L28,L31,L32,L35,L36,L37,L5,L9,M13," & + "M18,M23,M28,M29,M3,M30,M34,M35,M38,M39,M4," & + "M7,M9,N1,N16,N18,N2,N20,N22,N24,N26,N27," & + "N28,N32,N35,N36,N37,N5,N9,P14,P17,P19,P21," & + "P23,P25,P26,P3,P30,P34,P35,P38,P39,P4,P7," & + "P9,R1,R10,R11,R12,R16,R18,R2,R20,R22,R24," & + "R26,R28,R32,R35,R36,R37,R5,R9,T11,T12,T13," & + "T15,T17,T19,T21,T23,T25,T26,T3,T30,T34,T35," & + "T38,T39,T4,T7,U1,U13,U14,U16,U18,U2,U20," & + "U22,U24,U26,U28,U32,U35,U36,U37,U5,U9,V11," & + "V13,V15,V17,V21,V23,V25,V26,V3,V30,V34,V35," & + "V38,V39,V4,V7,W1,W13,W14,W16,W18,W2,W22," & + "W24,W26,W28,W32,W35,W36,W37,W5,W9,Y11,Y13," & + "Y15,Y17,Y21,Y23,Y25,Y26,Y3,Y30,Y34,Y35,Y38," & + "Y39,Y4,Y7)," & + "GNDADC:V19," & + "INIT_B_AE26:AE26," & + "IO_A11:A11," & + "IO_A12:A12," & + "IO_A13:A13," & + "IO_A14:A14," & + "IO_A16:A16," & + "IO_A17:A17," & + "IO_A18:A18," & + "IO_A19:A19," & + "IO_A21:A21," & + "IO_A22:A22," & + "IO_A23:A23," & + "IO_A24:A24," & + "IO_A26:A26," & + "IO_A27:A27," & + "IO_A28:A28," & + "IO_A29:A29," & + "IO_A3:A3," & + "IO_A31:A31," & + "IO_A4:A4," & + "IO_A6:A6," & + "IO_A7:A7," & + "IO_A8:A8," & + "IO_A9:A9," & + "IO_AH17:AH17," & + "IO_AH18:AH18," & + "IO_AH21:AH21," & + "IO_AH22:AH22," & + "IO_AH23:AH23," & + "IO_AH25:AH25," & + "IO_AH26:AH26," & + "IO_AH27:AH27," & + "IO_AH30:AH30," & + "IO_AH31:AH31," & + "IO_AH32:AH32," & + "IO_AH33:AH33," & + "IO_AH34:AH34," & + "IO_AJ14:AJ14," & + "IO_AJ15:AJ15," & + "IO_AJ16:AJ16," & + "IO_AJ18:AJ18," & + "IO_AJ19:AJ19," & + "IO_AJ20:AJ20," & + "IO_AJ21:AJ21," & + "IO_AJ23:AJ23," & + "IO_AJ24:AJ24," & + "IO_AJ25:AJ25," & + "IO_AJ26:AJ26," & + "IO_AJ28:AJ28," & + "IO_AJ29:AJ29," & + "IO_AJ30:AJ30," & + "IO_AJ31:AJ31," & + "IO_AJ33:AJ33," & + "IO_AJ34:AJ34," & + "IO_AJ39:AJ39," & + "IO_AK14:AK14," & + "IO_AK16:AK16," & + "IO_AK17:AK17," & + "IO_AK18:AK18," & + "IO_AK19:AK19," & + "IO_AK21:AK21," & + "IO_AK22:AK22," & + "IO_AK23:AK23," & + "IO_AK24:AK24," & + "IO_AK26:AK26," & + "IO_AK27:AK27," & + "IO_AK28:AK28," & + "IO_AK29:AK29," & + "IO_AK31:AK31," & + "IO_AK32:AK32," & + "IO_AK33:AK33," & + "IO_AK34:AK34," & + "IO_AK35:AK35," & + "IO_AK36:AK36," & + "IO_AK37:AK37," & + "IO_AK38:AK38," & + "IO_AK39:AK39," & + "IO_AL14:AL14," & + "IO_AL15:AL15," & + "IO_AL16:AL16," & + "IO_AL17:AL17," & + "IO_AL19:AL19," & + "IO_AL20:AL20," & + "IO_AL21:AL21," & + "IO_AL22:AL22," & + "IO_AL24:AL24," & + "IO_AL25:AL25," & + "IO_AL26:AL26," & + "IO_AL27:AL27," & + "IO_AL29:AL29," & + "IO_AL30:AL30," & + "IO_AL31:AL31," & + "IO_AL32:AL32," & + "IO_AL34:AL34," & + "IO_AL35:AL35," & + "IO_AL36:AL36," & + "IO_AL37:AL37," & + "IO_AL39:AL39," & + "IO_AM12:AM12," & + "IO_AM13:AM13," & + "IO_AM14:AM14," & + "IO_AM15:AM15," & + "IO_AM17:AM17," & + "IO_AM18:AM18," & + "IO_AM19:AM19," & + "IO_AM20:AM20," & + "IO_AM22:AM22," & + "IO_AM23:AM23," & + "IO_AM24:AM24," & + "IO_AM25:AM25," & + "IO_AM27:AM27," & + "IO_AM28:AM28," & + "IO_AM29:AM29," & + "IO_AM30:AM30," & + "IO_AM32:AM32," & + "IO_AM33:AM33," & + "IO_AM34:AM34," & + "IO_AM35:AM35," & + "IO_AM37:AM37," & + "IO_AM38:AM38," & + "IO_AM39:AM39," & + "IO_AN12:AN12," & + "IO_AN13:AN13," & + "IO_AN15:AN15," & + "IO_AN16:AN16," & + "IO_AN17:AN17," & + "IO_AN18:AN18," & + "IO_AN20:AN20," & + "IO_AN21:AN21," & + "IO_AN22:AN22," & + "IO_AN23:AN23," & + "IO_AN25:AN25," & + "IO_AN26:AN26," & + "IO_AN27:AN27," & + "IO_AN28:AN28," & + "IO_AN30:AN30," & + "IO_AN31:AN31," & + "IO_AN32:AN32," & + "IO_AN33:AN33," & + "IO_AN35:AN35," & + "IO_AN36:AN36," & + "IO_AN37:AN37," & + "IO_AN38:AN38," & + "IO_AP10:AP10," & + "IO_AP11:AP11," & + "IO_AP13:AP13," & + "IO_AP14:AP14," & + "IO_AP15:AP15," & + "IO_AP16:AP16," & + "IO_AP18:AP18," & + "IO_AP19:AP19," & + "IO_AP20:AP20," & + "IO_AP21:AP21," & + "IO_AP23:AP23," & + "IO_AP24:AP24," & + "IO_AP25:AP25," & + "IO_AP26:AP26," & + "IO_AP28:AP28," & + "IO_AP29:AP29," & + "IO_AP30:AP30," & + "IO_AP31:AP31," & + "IO_AP33:AP33," & + "IO_AP34:AP34," & + "IO_AP35:AP35," & + "IO_AP36:AP36," & + "IO_AP38:AP38," & + "IO_AP39:AP39," & + "IO_AR11:AR11," & + "IO_AR12:AR12," & + "IO_AR13:AR13," & + "IO_AR14:AR14," & + "IO_AR16:AR16," & + "IO_AR17:AR17," & + "IO_AR18:AR18," & + "IO_AR19:AR19," & + "IO_AR21:AR21," & + "IO_AR22:AR22," & + "IO_AR23:AR23," & + "IO_AR24:AR24," & + "IO_AR26:AR26," & + "IO_AR27:AR27," & + "IO_AR29:AR29," & + "IO_AR31:AR31," & + "IO_AR32:AR32," & + "IO_AR33:AR33," & + "IO_AR34:AR34," & + "IO_AR36:AR36," & + "IO_AR37:AR37," & + "IO_AR38:AR38," & + "IO_AR39:AR39," & + "IO_AT10:AT10," & + "IO_AT11:AT11," & + "IO_AT12:AT12," & + "IO_AT14:AT14," & + "IO_AT15:AT15," & + "IO_AT16:AT16," & + "IO_AT17:AT17," & + "IO_AT19:AT19," & + "IO_AT20:AT20," & + "IO_AT21:AT21," & + "IO_AT22:AT22," & + "IO_AT24:AT24," & + "IO_AT25:AT25," & + "IO_AT26:AT26," & + "IO_AT27:AT27," & + "IO_AT29:AT29," & + "IO_AT30:AT30," & + "IO_AT31:AT31," & + "IO_AT32:AT32," & + "IO_AT34:AT34," & + "IO_AT35:AT35," & + "IO_AT36:AT36," & + "IO_AT37:AT37," & + "IO_AT39:AT39," & + "IO_AU10:AU10," & + "IO_AU12:AU12," & + "IO_AU13:AU13," & + "IO_AU14:AU14," & + "IO_AU15:AU15," & + "IO_AU17:AU17," & + "IO_AU18:AU18," & + "IO_AU19:AU19," & + "IO_AU20:AU20," & + "IO_AU22:AU22," & + "IO_AU23:AU23," & + "IO_AU24:AU24," & + "IO_AU25:AU25," & + "IO_AU27:AU27," & + "IO_AU28:AU28," & + "IO_AU29:AU29," & + "IO_AU30:AU30," & + "IO_AU32:AU32," & + "IO_AU33:AU33," & + "IO_AU34:AU34," & + "IO_AU35:AU35," & + "IO_AU37:AU37," & + "IO_AU38:AU38," & + "IO_AU39:AU39," & + "IO_AV10:AV10," & + "IO_AV11:AV11," & + "IO_AV12:AV12," & + "IO_AV13:AV13," & + "IO_AV15:AV15," & + "IO_AV16:AV16," & + "IO_AV17:AV17," & + "IO_AV18:AV18," & + "IO_AV20:AV20," & + "IO_AV21:AV21," & + "IO_AV22:AV22," & + "IO_AV23:AV23," & + "IO_AV25:AV25," & + "IO_AV26:AV26," & + "IO_AV27:AV27," & + "IO_AV28:AV28," & + "IO_AV30:AV30," & + "IO_AV31:AV31," & + "IO_AV32:AV32," & + "IO_AV33:AV33," & + "IO_AV35:AV35," & + "IO_AV36:AV36," & + "IO_AV37:AV37," & + "IO_AV38:AV38," & + "IO_AW10:AW10," & + "IO_AW11:AW11," & + "IO_AW13:AW13," & + "IO_AW14:AW14," & + "IO_AW15:AW15," & + "IO_AW16:AW16," & + "IO_AW18:AW18," & + "IO_AW19:AW19," & + "IO_AW20:AW20," & + "IO_AW21:AW21," & + "IO_AW23:AW23," & + "IO_AW24:AW24," & + "IO_AW25:AW25," & + "IO_AW26:AW26," & + "IO_AW28:AW28," & + "IO_AW29:AW29," & + "IO_AW30:AW30," & + "IO_AW31:AW31," & + "IO_AW33:AW33," & + "IO_AW34:AW34," & + "IO_AW35:AW35," & + "IO_AW36:AW36," & + "IO_B10:B10," & + "IO_B11:B11," & + "IO_B12:B12," & + "IO_B14:B14," & + "IO_B15:B15," & + "IO_B16:B16," & + "IO_B17:B17," & + "IO_B19:B19," & + "IO_B2:B2," & + "IO_B20:B20," & + "IO_B21:B21," & + "IO_B22:B22," & + "IO_B24:B24," & + "IO_B25:B25," & + "IO_B26:B26," & + "IO_B27:B27," & + "IO_B29:B29," & + "IO_B30:B30," & + "IO_B31:B31," & + "IO_B4:B4," & + "IO_B5:B5," & + "IO_B6:B6," & + "IO_B7:B7," & + "IO_B9:B9," & + "IO_C10:C10," & + "IO_C12:C12," & + "IO_C13:C13," & + "IO_C14:C14," & + "IO_C15:C15," & + "IO_C17:C17," & + "IO_C18:C18," & + "IO_C19:C19," & + "IO_C2:C2," & + "IO_C20:C20," & + "IO_C22:C22," & + "IO_C23:C23," & + "IO_C24:C24," & + "IO_C25:C25," & + "IO_C27:C27," & + "IO_C28:C28," & + "IO_C29:C29," & + "IO_C3:C3," & + "IO_C30:C30," & + "IO_C4:C4," & + "IO_C5:C5," & + "IO_C7:C7," & + "IO_C8:C8," & + "IO_C9:C9," & + "IO_D1:D1," & + "IO_D10:D10," & + "IO_D11:D11," & + "IO_D12:D12," & + "IO_D13:D13," & + "IO_D15:D15," & + "IO_D16:D16," & + "IO_D17:D17," & + "IO_D18:D18," & + "IO_D2:D2," & + "IO_D20:D20," & + "IO_D21:D21," & + "IO_D22:D22," & + "IO_D23:D23," & + "IO_D25:D25," & + "IO_D26:D26," & + "IO_D27:D27," & + "IO_D28:D28," & + "IO_D3:D3," & + "IO_D30:D30," & + "IO_D31:D31," & + "IO_D5:D5," & + "IO_D6:D6," & + "IO_D7:D7," & + "IO_D8:D8," & + "IO_E1:E1," & + "IO_E10:E10," & + "IO_E11:E11," & + "IO_E13:E13," & + "IO_E14:E14," & + "IO_E15:E15," & + "IO_E16:E16," & + "IO_E18:E18," & + "IO_E19:E19," & + "IO_E20:E20," & + "IO_E21:E21," & + "IO_E23:E23," & + "IO_E24:E24," & + "IO_E25:E25," & + "IO_E26:E26," & + "IO_E28:E28," & + "IO_E29:E29," & + "IO_E3:E3," & + "IO_E30:E30," & + "IO_E31:E31," & + "IO_E4:E4," & + "IO_E5:E5," & + "IO_E6:E6," & + "IO_E8:E8," & + "IO_E9:E9," & + "IO_F1:F1," & + "IO_F11:F11," & + "IO_F12:F12," & + "IO_F13:F13," & + "IO_F14:F14," & + "IO_F16:F16," & + "IO_F17:F17," & + "IO_F18:F18," & + "IO_F19:F19," & + "IO_F2:F2," & + "IO_F21:F21," & + "IO_F22:F22," & + "IO_F23:F23," & + "IO_F24:F24," & + "IO_F26:F26," & + "IO_F27:F27," & + "IO_F28:F28," & + "IO_F29:F29," & + "IO_F3:F3," & + "IO_F31:F31," & + "IO_F4:F4," & + "IO_F6:F6," & + "IO_F7:F7," & + "IO_F8:F8," & + "IO_F9:F9," & + "IO_G10:G10," & + "IO_G11:G11," & + "IO_G12:G12," & + "IO_G14:G14," & + "IO_G15:G15," & + "IO_G16:G16," & + "IO_G17:G17," & + "IO_G19:G19," & + "IO_G20:G20," & + "IO_G21:G21," & + "IO_G22:G22," & + "IO_G24:G24," & + "IO_G25:G25," & + "IO_G26:G26," & + "IO_G27:G27," & + "IO_G29:G29," & + "IO_G30:G30," & + "IO_G31:G31," & + "IO_H10:H10," & + "IO_H12:H12," & + "IO_H13:H13," & + "IO_H14:H14," & + "IO_H15:H15," & + "IO_H17:H17," & + "IO_H18:H18," & + "IO_H19:H19," & + "IO_H20:H20," & + "IO_H22:H22," & + "IO_H23:H23," & + "IO_H24:H24," & + "IO_H25:H25," & + "IO_H27:H27," & + "IO_H28:H28," & + "IO_H29:H29," & + "IO_H30:H30," & + "IO_J10:J10," & + "IO_J11:J11," & + "IO_J12:J12," & + "IO_J13:J13," & + "IO_J15:J15," & + "IO_J16:J16," & + "IO_J17:J17," & + "IO_J18:J18," & + "IO_J20:J20," & + "IO_J21:J21," & + "IO_J22:J22," & + "IO_J23:J23," & + "IO_J25:J25," & + "IO_J26:J26," & + "IO_J27:J27," & + "IO_J28:J28," & + "IO_J30:J30," & + "IO_J31:J31," & + "IO_K10:K10," & + "IO_K11:K11," & + "IO_K13:K13," & + "IO_K14:K14," & + "IO_K15:K15," & + "IO_K16:K16," & + "IO_K18:K18," & + "IO_K19:K19," & + "IO_K20:K20," & + "IO_K21:K21," & + "IO_K23:K23," & + "IO_K24:K24," & + "IO_K25:K25," & + "IO_K26:K26," & + "IO_L11:L11," & + "IO_L12:L12," & + "IO_L13:L13," & + "IO_L14:L14," & + "IO_L16:L16," & + "IO_L17:L17," & + "IO_L18:L18," & + "IO_L19:L19," & + "IO_L21:L21," & + "IO_L22:L22," & + "IO_L23:L23," & + "IO_L24:L24," & + "IO_L26:L26," & + "IO_L27:L27," & + "IO_M10:M10," & + "IO_M11:M11," & + "IO_M12:M12," & + "IO_M14:M14," & + "IO_M15:M15," & + "IO_M16:M16," & + "IO_M19:M19," & + "IO_M20:M20," & + "IO_M21:M21," & + "IO_M22:M22," & + "IO_M25:M25," & + "IO_M26:M26," & + "IO_N10:N10," & + "IO_N12:N12," & + "IO_N13:N13," & + "IO_N14:N14," & + "IO_N15:N15," & + "IO_P10:P10," & + "IO_P11:P11," & + "IO_P12:P12," & + "IO_P13:P13," & + "IO_P15:P15," & + "IO_R13:R13," & + "IO_R14:R14," & + "IO_R15:R15," & + "M0_AE27:AE27," & + "M1_AF22:AF22," & + "M2_AF24:AF24," & + "MGTAVCC_L:(AA31,AB29,AC31,AD29,P29,R31,T29,U31,V29,W31,Y29)," & + "MGTAVCC_RN:(AA10,AC10,U10,W10)," & + "MGTAVCC_RS:(AE10,AG10,AJ10,AL10)," & + "MGTAVTTRCAL_L:L30," & + "MGTAVTTRCAL_R:AD11," & + "MGTAVTT_L:(AB33,AD33,AE31,B33,C35,D33,E35,F33,H33,K33,M33," & + "N31,P33,T33,V33,Y33)," & + "MGTAVTT_RN:(AA6,AB8,AC6,J6,K8,L6,M8,N6,P8,R6,T8," & + "U6,V8,W6,Y8)," & + "MGTAVTT_RS:(AD8,AE6,AF8,AG6,AH8,AJ6,AK8,AL6,AM8,AN6,AP8," & + "AR6,AT8,AU6,AV8,AW6)," & + "MGTHRXN0_224:AW3," & + "MGTHRXN0_225:AR3," & + "MGTHRXN0_226:AL3," & + "MGTHRXN0_227:AG3," & + "MGTHRXN0_228:AC3," & + "MGTHRXN0_229:W3," & + "MGTHRXN0_230:R3," & + "MGTHRXN0_231:L3," & + "MGTHRXN1_224:AV1," & + "MGTHRXN1_225:AP1," & + "MGTHRXN1_226:AK1," & + "MGTHRXN1_227:AF1," & + "MGTHRXN1_228:AB1," & + "MGTHRXN1_229:V1," & + "MGTHRXN1_230:P1," & + "MGTHRXN1_231:K1," & + "MGTHRXN2_224:AU3," & + "MGTHRXN2_225:AN3," & + "MGTHRXN2_226:AJ3," & + "MGTHRXN2_227:AE3," & + "MGTHRXN2_228:AA3," & + "MGTHRXN2_229:U3," & + "MGTHRXN2_230:N3," & + "MGTHRXN2_231:J3," & + "MGTHRXN3_224:AT1," & + "MGTHRXN3_225:AM1," & + "MGTHRXN3_226:AH1," & + "MGTHRXN3_227:AD1," & + "MGTHRXN3_228:Y1," & + "MGTHRXN3_229:T1," & + "MGTHRXN3_230:M1," & + "MGTHRXN3_231:H1," & + "MGTHRXP0_224:AW4," & + "MGTHRXP0_225:AR4," & + "MGTHRXP0_226:AL4," & + "MGTHRXP0_227:AG4," & + "MGTHRXP0_228:AC4," & + "MGTHRXP0_229:W4," & + "MGTHRXP0_230:R4," & + "MGTHRXP0_231:L4," & + "MGTHRXP1_224:AV2," & + "MGTHRXP1_225:AP2," & + "MGTHRXP1_226:AK2," & + "MGTHRXP1_227:AF2," & + "MGTHRXP1_228:AB2," & + "MGTHRXP1_229:V2," & + "MGTHRXP1_230:P2," & + "MGTHRXP1_231:K2," & + "MGTHRXP2_224:AU4," & + "MGTHRXP2_225:AN4," & + "MGTHRXP2_226:AJ4," & + "MGTHRXP2_227:AE4," & + "MGTHRXP2_228:AA4," & + "MGTHRXP2_229:U4," & + "MGTHRXP2_230:N4," & + "MGTHRXP2_231:J4," & + "MGTHRXP3_224:AT2," & + "MGTHRXP3_225:AM2," & + "MGTHRXP3_226:AH2," & + "MGTHRXP3_227:AD2," & + "MGTHRXP3_228:Y2," & + "MGTHRXP3_229:T2," & + "MGTHRXP3_230:M2," & + "MGTHRXP3_231:H2," & + "MGTHTXN0_224:AW7," & + "MGTHTXN0_225:AR7," & + "MGTHTXN0_226:AL7," & + "MGTHTXN0_227:AG7," & + "MGTHTXN0_228:AC7," & + "MGTHTXN0_229:W7," & + "MGTHTXN0_230:R7," & + "MGTHTXN0_231:L7," & + "MGTHTXN1_224:AV5," & + "MGTHTXN1_225:AP5," & + "MGTHTXN1_226:AK5," & + "MGTHTXN1_227:AF5," & + "MGTHTXN1_228:AB5," & + "MGTHTXN1_229:V5," & + "MGTHTXN1_230:P5," & + "MGTHTXN1_231:K5," & + "MGTHTXN2_224:AU7," & + "MGTHTXN2_225:AN7," & + "MGTHTXN2_226:AJ7," & + "MGTHTXN2_227:AE7," & + "MGTHTXN2_228:AA7," & + "MGTHTXN2_229:U7," & + "MGTHTXN2_230:N7," & + "MGTHTXN2_231:J7," & + "MGTHTXN3_224:AT5," & + "MGTHTXN3_225:AM5," & + "MGTHTXN3_226:AH5," & + "MGTHTXN3_227:AD5," & + "MGTHTXN3_228:Y5," & + "MGTHTXN3_229:T5," & + "MGTHTXN3_230:M5," & + "MGTHTXN3_231:H5," & + "MGTHTXP0_224:AW8," & + "MGTHTXP0_225:AR8," & + "MGTHTXP0_226:AL8," & + "MGTHTXP0_227:AG8," & + "MGTHTXP0_228:AC8," & + "MGTHTXP0_229:W8," & + "MGTHTXP0_230:R8," & + "MGTHTXP0_231:L8," & + "MGTHTXP1_224:AV6," & + "MGTHTXP1_225:AP6," & + "MGTHTXP1_226:AK6," & + "MGTHTXP1_227:AF6," & + "MGTHTXP1_228:AB6," & + "MGTHTXP1_229:V6," & + "MGTHTXP1_230:P6," & + "MGTHTXP1_231:K6," & + "MGTHTXP2_224:AU8," & + "MGTHTXP2_225:AN8," & + "MGTHTXP2_226:AJ8," & + "MGTHTXP2_227:AE8," & + "MGTHTXP2_228:AA8," & + "MGTHTXP2_229:U8," & + "MGTHTXP2_230:N8," & + "MGTHTXP2_231:J8," & + "MGTHTXP3_224:AT6," & + "MGTHTXP3_225:AM6," & + "MGTHTXP3_226:AH6," & + "MGTHTXP3_227:AD6," & + "MGTHTXP3_228:Y6," & + "MGTHTXP3_229:T6," & + "MGTHTXP3_230:M6," & + "MGTHTXP3_231:H6," & + "MGTREFCLK0N_127:AE30," & + "MGTREFCLK0N_128:AB28," & + "MGTREFCLK0N_129:Y28," & + "MGTREFCLK0N_130:V28," & + "MGTREFCLK0N_131:T28," & + "MGTREFCLK0N_132:P28," & + "MGTREFCLK0N_224:AM9," & + "MGTREFCLK0N_225:AJ11," & + "MGTREFCLK0N_226:AG11," & + "MGTREFCLK0N_227:AE11," & + "MGTREFCLK0N_228:AC11," & + "MGTREFCLK0N_229:AA11," & + "MGTREFCLK0N_230:W11," & + "MGTREFCLK0N_231:U11," & + "MGTREFCLK0P_127:AE29," & + "MGTREFCLK0P_128:AB27," & + "MGTREFCLK0P_129:Y27," & + "MGTREFCLK0P_130:V27," & + "MGTREFCLK0P_131:T27," & + "MGTREFCLK0P_132:P27," & + "MGTREFCLK0P_224:AM10," & + "MGTREFCLK0P_225:AJ12," & + "MGTREFCLK0P_226:AG12," & + "MGTREFCLK0P_227:AE12," & + "MGTREFCLK0P_228:AC12," & + "MGTREFCLK0P_229:AA12," & + "MGTREFCLK0P_230:W12," & + "MGTREFCLK0P_231:U12," & + "MGTREFCLK1N_127:AC30," & + "MGTREFCLK1N_128:AA30," & + "MGTREFCLK1N_129:W30," & + "MGTREFCLK1N_130:U30," & + "MGTREFCLK1N_131:R30," & + "MGTREFCLK1N_132:N30," & + "MGTREFCLK1N_224:AK9," & + "MGTREFCLK1N_225:AH9," & + "MGTREFCLK1N_226:AF9," & + "MGTREFCLK1N_227:AD9," & + "MGTREFCLK1N_228:AB9," & + "MGTREFCLK1N_229:Y9," & + "MGTREFCLK1N_230:V9," & + "MGTREFCLK1N_231:T9," & + "MGTREFCLK1P_127:AC29," & + "MGTREFCLK1P_128:AA29," & + "MGTREFCLK1P_129:W29," & + "MGTREFCLK1P_130:U29," & + "MGTREFCLK1P_131:R29," & + "MGTREFCLK1P_132:N29," & + "MGTREFCLK1P_224:AK10," & + "MGTREFCLK1P_225:AH10," & + "MGTREFCLK1P_226:AF10," & + "MGTREFCLK1P_227:AD10," & + "MGTREFCLK1P_228:AB10," & + "MGTREFCLK1P_229:Y10," & + "MGTREFCLK1P_230:V10," & + "MGTREFCLK1P_231:T10," & + "MGTRREF_L:L29," & + "MGTRREF_R:AD12," & + "MGTVCCAUX_L:(AA27,R27,U27,W27)," & + "MGTVCCAUX_RN:(AB12,V12,Y12)," & + "MGTVCCAUX_RS:(AF12,AH12,AK12)," & + "MGTYRXN0_127:AH37," & + "MGTYRXN0_128:AD37," & + "MGTYRXN0_129:Y37," & + "MGTYRXN0_130:T37," & + "MGTYRXN0_131:M37," & + "MGTYRXN0_132:H37," & + "MGTYRXN1_127:AG39," & + "MGTYRXN1_128:AC39," & + "MGTYRXN1_129:W39," & + "MGTYRXN1_130:R39," & + "MGTYRXN1_131:L39," & + "MGTYRXN1_132:G39," & + "MGTYRXN2_127:AF37," & + "MGTYRXN2_128:AB37," & + "MGTYRXN2_129:V37," & + "MGTYRXN2_130:P37," & + "MGTYRXN2_131:K37," & + "MGTYRXN2_132:E39," & + "MGTYRXN3_127:AE39," & + "MGTYRXN3_128:AA39," & + "MGTYRXN3_129:U39," & + "MGTYRXN3_130:N39," & + "MGTYRXN3_131:J39," & + "MGTYRXN3_132:C39," & + "MGTYRXP0_127:AH36," & + "MGTYRXP0_128:AD36," & + "MGTYRXP0_129:Y36," & + "MGTYRXP0_130:T36," & + "MGTYRXP0_131:M36," & + "MGTYRXP0_132:H36," & + "MGTYRXP1_127:AG38," & + "MGTYRXP1_128:AC38," & + "MGTYRXP1_129:W38," & + "MGTYRXP1_130:R38," & + "MGTYRXP1_131:L38," & + "MGTYRXP1_132:G38," & + "MGTYRXP2_127:AF36," & + "MGTYRXP2_128:AB36," & + "MGTYRXP2_129:V36," & + "MGTYRXP2_130:P36," & + "MGTYRXP2_131:K36," & + "MGTYRXP2_132:E38," & + "MGTYRXP3_127:AE38," & + "MGTYRXP3_128:AA38," & + "MGTYRXP3_129:U38," & + "MGTYRXP3_130:N38," & + "MGTYRXP3_131:J38," & + "MGTYRXP3_132:C38," & + "MGTYTXN0_127:AF32," & + "MGTYTXN0_128:AB32," & + "MGTYTXN0_129:V32," & + "MGTYTXN0_130:P32," & + "MGTYTXN0_131:J34," & + "MGTYTXN0_132:D36," & + "MGTYTXN1_127:AE34," & + "MGTYTXN1_128:AA34," & + "MGTYTXN1_129:U34," & + "MGTYTXN1_130:N34," & + "MGTYTXN1_131:G34," & + "MGTYTXN1_132:C34," & + "MGTYTXN2_127:AD32," & + "MGTYTXN2_128:Y32," & + "MGTYTXN2_129:T32," & + "MGTYTXN2_130:M32," & + "MGTYTXN2_131:F36," & + "MGTYTXN2_132:B36," & + "MGTYTXN3_127:AC34," & + "MGTYTXN3_128:W34," & + "MGTYTXN3_129:R34," & + "MGTYTXN3_130:L34," & + "MGTYTXN3_131:E34," & + "MGTYTXN3_132:A34," & + "MGTYTXP0_127:AF31," & + "MGTYTXP0_128:AB31," & + "MGTYTXP0_129:V31," & + "MGTYTXP0_130:P31," & + "MGTYTXP0_131:J33," & + "MGTYTXP0_132:D35," & + "MGTYTXP1_127:AE33," & + "MGTYTXP1_128:AA33," & + "MGTYTXP1_129:U33," & + "MGTYTXP1_130:N33," & + "MGTYTXP1_131:G33," & + "MGTYTXP1_132:C33," & + "MGTYTXP2_127:AD31," & + "MGTYTXP2_128:Y31," & + "MGTYTXP2_129:T31," & + "MGTYTXP2_130:M31," & + "MGTYTXP2_131:F35," & + "MGTYTXP2_132:B35," & + "MGTYTXP3_127:AC33," & + "MGTYTXP3_128:W33," & + "MGTYTXP3_129:R33," & + "MGTYTXP3_130:L33," & + "MGTYTXP3_131:E33," & + "MGTYTXP3_132:A33," & + "POR_OVERRIDE:AF25," & + "PROGRAM_B:AF26," & + "PUDC_B_AF27:AF27," & + "RDWR_FCS_B_AG22:AG22," & + "TCK:AG23," & + "TDI:AG24," & + "TDO:AG27," & + "TMS:AD22," & + "VBATT:AG28," & + "VCCADC:V20," & + "VCCAUX:(AA15,AB16,T14,U15,V14,W15)," & + "VCCBRAM:(AE14,AE15,AF14,AG15,AH14)," & + "VCCINT:(AA17,AA21,AA23,AA25,AB14,AB18,AB20,AB22,AB24,AC15,AC17," & + "AC19,AC21,AC23,AC25,AD14,AD16,AD18,AD20,AE17,AE19,AE21," & + "AF16,AF18,AF20,AG17,AG19,AG21,N17,N19,N21,N23,N25," & + "P16,P18,P20,P22,P24,R17,R19,R21,R23,R25,T16," & + "T18,T20,T22,T24,U17,U19,U21,U23,U25,V16,V18," & + "V22,V24,W17,W21,W23,W25,Y14,Y16,Y18,Y22,Y24)," & + "VCCO_0:(AF23,AG26)," & + "VCCO_64:(AK20,AN19,AT18)," & + "VCCO_65:(AK15,AN14,AT13)," & + "VCCO_66:(AK25,AN24,AT23)," & + "VCCO_67:(AR30,AT33,AU36)," & + "VCCO_68:(AK30,AL33,AM36)," & + "VCCO_69:(B28,E27,H26)," & + "VCCO_70:(B23,E22,H21)," & + "VCCO_71:(B18,E17,H16)," & + "VCCO_90:(E2,F5)," & + "VCCO_91:(B8,F10)," & + "VCCO_93:(K12,N11)," & + "VCCO_94:(B13,G13)," & + "VN:Y19," & + "VP:W20," & + "VREFW19:W19," & + "VREFY20:Y20," & + "VREFAH20:AH20," & + "VREFAH16:AH16," & + "VREFAG25:AG25," & + "VREFAR28:AR28," & + "VREFAH29:AH29," & + "VREFM27:M27," & + "VREFM24:M24," & + "VREFM17:M17"; + + +-- Grouped Port Identification + +attribute PORT_GROUPING of XCKU15P_FFVE1517 : entity is +"DIFFERENTIAL_VOLTAGE (" & +"(MGTHRXP0_224, MGTHRXN0_224), " & +"(MGTHRXP0_225, MGTHRXN0_225), " & +"(MGTHRXP0_226, MGTHRXN0_226), " & +"(MGTHRXP0_227, MGTHRXN0_227), " & +"(MGTHRXP0_228, MGTHRXN0_228), " & +"(MGTHRXP0_229, MGTHRXN0_229), " & +"(MGTHRXP0_230, MGTHRXN0_230), " & +"(MGTHRXP0_231, MGTHRXN0_231), " & +"(MGTHRXP1_224, MGTHRXN1_224), " & +"(MGTHRXP1_225, MGTHRXN1_225), " & +"(MGTHRXP1_226, MGTHRXN1_226), " & +"(MGTHRXP1_227, MGTHRXN1_227), " & +"(MGTHRXP1_228, MGTHRXN1_228), " & +"(MGTHRXP1_229, MGTHRXN1_229), " & +"(MGTHRXP1_230, MGTHRXN1_230), " & +"(MGTHRXP1_231, MGTHRXN1_231), " & +"(MGTHRXP2_224, MGTHRXN2_224), " & +"(MGTHRXP2_225, MGTHRXN2_225), " & +"(MGTHRXP2_226, MGTHRXN2_226), " & +"(MGTHRXP2_227, MGTHRXN2_227), " & +"(MGTHRXP2_228, MGTHRXN2_228), " & +"(MGTHRXP2_229, MGTHRXN2_229), " & +"(MGTHRXP2_230, MGTHRXN2_230), " & +"(MGTHRXP2_231, MGTHRXN2_231), " & +"(MGTHRXP3_224, MGTHRXN3_224), " & +"(MGTHRXP3_225, MGTHRXN3_225), " & +"(MGTHRXP3_226, MGTHRXN3_226), " & +"(MGTHRXP3_227, MGTHRXN3_227), " & +"(MGTHRXP3_228, MGTHRXN3_228), " & +"(MGTHRXP3_229, MGTHRXN3_229), " & +"(MGTHRXP3_230, MGTHRXN3_230), " & +"(MGTHRXP3_231, MGTHRXN3_231), " & +"(MGTHTXP0_224, MGTHTXN0_224), " & +"(MGTHTXP0_225, MGTHTXN0_225), " & +"(MGTHTXP0_226, MGTHTXN0_226), " & +"(MGTHTXP0_227, MGTHTXN0_227), " & +"(MGTHTXP0_228, MGTHTXN0_228), " & +"(MGTHTXP0_229, MGTHTXN0_229), " & +"(MGTHTXP0_230, MGTHTXN0_230), " & +"(MGTHTXP0_231, MGTHTXN0_231), " & +"(MGTHTXP1_224, MGTHTXN1_224), " & +"(MGTHTXP1_225, MGTHTXN1_225), " & +"(MGTHTXP1_226, MGTHTXN1_226), " & +"(MGTHTXP1_227, MGTHTXN1_227), " & +"(MGTHTXP1_228, MGTHTXN1_228), " & +"(MGTHTXP1_229, MGTHTXN1_229), " & +"(MGTHTXP1_230, MGTHTXN1_230), " & +"(MGTHTXP1_231, MGTHTXN1_231), " & +"(MGTHTXP2_224, MGTHTXN2_224), " & +"(MGTHTXP2_225, MGTHTXN2_225), " & +"(MGTHTXP2_226, MGTHTXN2_226), " & +"(MGTHTXP2_227, MGTHTXN2_227), " & +"(MGTHTXP2_228, MGTHTXN2_228), " & +"(MGTHTXP2_229, MGTHTXN2_229), " & +"(MGTHTXP2_230, MGTHTXN2_230), " & +"(MGTHTXP2_231, MGTHTXN2_231), " & +"(MGTHTXP3_224, MGTHTXN3_224), " & +"(MGTHTXP3_225, MGTHTXN3_225), " & +"(MGTHTXP3_226, MGTHTXN3_226), " & +"(MGTHTXP3_227, MGTHTXN3_227), " & +"(MGTHTXP3_228, MGTHTXN3_228), " & +"(MGTHTXP3_229, MGTHTXN3_229), " & +"(MGTHTXP3_230, MGTHTXN3_230), " & +"(MGTHTXP3_231, MGTHTXN3_231), " & +"(MGTYRXP0_127, MGTYRXN0_127), " & +"(MGTYRXP0_128, MGTYRXN0_128), " & +"(MGTYRXP0_129, MGTYRXN0_129), " & +"(MGTYRXP0_130, MGTYRXN0_130), " & +"(MGTYRXP0_131, MGTYRXN0_131), " & +"(MGTYRXP0_132, MGTYRXN0_132), " & +"(MGTYRXP1_127, MGTYRXN1_127), " & +"(MGTYRXP1_128, MGTYRXN1_128), " & +"(MGTYRXP1_129, MGTYRXN1_129), " & +"(MGTYRXP1_130, MGTYRXN1_130), " & +"(MGTYRXP1_131, MGTYRXN1_131), " & +"(MGTYRXP1_132, MGTYRXN1_132), " & +"(MGTYRXP2_127, MGTYRXN2_127), " & +"(MGTYRXP2_128, MGTYRXN2_128), " & +"(MGTYRXP2_129, MGTYRXN2_129), " & +"(MGTYRXP2_130, MGTYRXN2_130), " & +"(MGTYRXP2_131, MGTYRXN2_131), " & +"(MGTYRXP2_132, MGTYRXN2_132), " & +"(MGTYRXP3_127, MGTYRXN3_127), " & +"(MGTYRXP3_128, MGTYRXN3_128), " & +"(MGTYRXP3_129, MGTYRXN3_129), " & +"(MGTYRXP3_130, MGTYRXN3_130), " & +"(MGTYRXP3_131, MGTYRXN3_131), " & +"(MGTYRXP3_132, MGTYRXN3_132), " & +"(MGTYTXP0_127, MGTYTXN0_127), " & +"(MGTYTXP0_128, MGTYTXN0_128), " & +"(MGTYTXP0_129, MGTYTXN0_129), " & +"(MGTYTXP0_130, MGTYTXN0_130), " & +"(MGTYTXP0_131, MGTYTXN0_131), " & +"(MGTYTXP0_132, MGTYTXN0_132), " & +"(MGTYTXP1_127, MGTYTXN1_127), " & +"(MGTYTXP1_128, MGTYTXN1_128), " & +"(MGTYTXP1_129, MGTYTXN1_129), " & +"(MGTYTXP1_130, MGTYTXN1_130), " & +"(MGTYTXP1_131, MGTYTXN1_131), " & +"(MGTYTXP1_132, MGTYTXN1_132), " & +"(MGTYTXP2_127, MGTYTXN2_127), " & +"(MGTYTXP2_128, MGTYTXN2_128), " & +"(MGTYTXP2_129, MGTYTXN2_129), " & +"(MGTYTXP2_130, MGTYTXN2_130), " & +"(MGTYTXP2_131, MGTYTXN2_131), " & +"(MGTYTXP2_132, MGTYTXN2_132), " & +"(MGTYTXP3_127, MGTYTXN3_127), " & +"(MGTYTXP3_128, MGTYTXN3_128), " & +"(MGTYTXP3_129, MGTYTXN3_129), " & +"(MGTYTXP3_130, MGTYTXN3_130), " & +"(MGTYTXP3_131, MGTYTXN3_131), " & +"(MGTYTXP3_132, MGTYTXN3_132))"; + +-- Scan Port Identification + +attribute TAP_SCAN_IN of TDI : signal is true; +attribute TAP_SCAN_MODE of TMS : signal is true; +attribute TAP_SCAN_OUT of TDO : signal is true; +attribute TAP_SCAN_CLOCK of TCK : signal is (66.0e6, BOTH); + +-- Compliance-Enable Description + +attribute COMPLIANCE_PATTERNS of XCKU15P_FFVE1517 : entity is + "(PROGRAM_B) (1)"; + +-- Instruction Register Description + +attribute INSTRUCTION_LENGTH of XCKU15P_FFVE1517 : entity is 6; + +attribute INSTRUCTION_OPCODE of XCKU15P_FFVE1517 : entity is + "IDCODE (001001)," & -- DEVICE_ID reg + "BYPASS (111111)," & -- BYPASS reg + "EXTEST (100110)," & -- BOUNDARY reg + "SAMPLE (000001)," & -- BOUNDARY reg + "PRELOAD (000001)," & -- BOUNDARY reg, Same as SAMPLE + "USERCODE (001000)," & -- DEVICE_ID reg + "HIGHZ_IO (001010)," & -- PRIVATE, BYPASS reg + "EXTEST_PULSE (111100)," & -- BOUNDARY reg + "EXTEST_TRAIN (111101)," & -- BOUNDARY reg + "ISC_ENABLE (010000)," & -- PRIVATE, ISC_CONFIG + "ISC_PROGRAM (010001)," & -- PRIVATE, ISC_PDATA + "ISC_PROG_SEC (010010)," & -- PRIVATE + "ISC_NOOP (010100)," & -- PRIVATE, ISC_DEFAULT + "ISC_READ (010101)," & -- PRIVATE, ISC_DEFAULT + "ISC_DISABLE (010110)," & -- PRIVATE, ISC_CONFIG + "XSC_DNA (010111)," & -- PRIVATE, DNA reg + "CFG_OUT (000100)," & -- PRIVATE + "CFG_IN (000101)," & -- PRIVATE + "JPROGRAM (001011)," & -- PRIVATE + "JSTART (001100)," & -- PRIVATE + "JSHUTDOWN (001101)," & -- PRIVATE + "FUSE_CTS (110000)," & -- PRIVATE + "FUSE_KEY (110001)," & -- PRIVATE + "FUSE_DNA (110010)," & -- PRIVATE + "FUSE_CNTL (110100)," & -- PRIVATE + "FUSE_USER (110011)," & -- PRIVATE + "FUSE_USER_128 (011001)," & -- PRIVATE + "JSTATUS (100001)," & -- PRIVATE + "USER1 (000010)," & -- PRIVATE, Not available until after configuration + "USER2 (000011)," & -- PRIVATE, Not available until after configuration + "USER3 (100010)," & -- PRIVATE, Not available until after configuration + "USER4 (100011)," & -- PRIVATE, Not available until after configuration + "SYSMON_DRP (110111)"; -- PRIVATE + +attribute INSTRUCTION_CAPTURE of XCKU15P_FFVE1517 : entity is +-- Bit 5 is 1 when DONE is released (part of startup sequence) +-- Bit 4 is 1 if house-cleaning is complete +-- Bit 3 is ISC_Enabled +-- Bit 2 is ISC_Done + "XXXX01"; + +attribute INSTRUCTION_PRIVATE of XCKU15P_FFVE1517 : entity is +-- If the device is configured, and a USER instruction is implemented +-- and not private to the designer, then it should be removed +-- from INSTRUCTION_PRIVATE, and the target register should be defined +-- in REGISTER_ACCESS. + "HIGHZ_IO," & + "ISC_ENABLE," & + "ISC_PROGRAM," & + "ISC_NOOP," & + "ISC_READ," & + "ISC_DISABLE," & + "ISC_PROG_SEC," & + "XSC_DNA," & + "CFG_OUT," & + "CFG_IN," & + "JPROGRAM," & + "JSTART," & + "JSHUTDOWN," & + "FUSE_CTS," & + "FUSE_KEY," & + "FUSE_DNA," & + "FUSE_CNTL," & + "FUSE_USER," & + "FUSE_USER_128," & + "JSTATUS," & + "USER1," & + "USER2," & + "USER3," & + "USER4," & + "SYSMON_DRP"; + +-- Optional Register Description + +attribute IDCODE_REGISTER of XCKU15P_FFVE1517 : entity is + "XXXX" & -- version + "0100101" & -- family + "001010110" & -- array size + "00001001001" & -- manufacturer + "1"; -- required by 1149.1 + + +attribute USERCODE_REGISTER of XCKU15P_FFVE1517 : entity is + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; + +-- Register Access Description + +attribute REGISTER_ACCESS of XCKU15P_FFVE1517 : entity is +-- "[] (USER1)," & +-- "[] (USER2)," & +-- "[] (USER3)," & +-- "[] (USER4)," & + "DNA[96] (XSC_DNA)," & + "BYPASS (HIGHZ_IO,BYPASS)," & + "DEVICE_ID (USERCODE,IDCODE)," & + "BOUNDARY (SAMPLE,PRELOAD,EXTEST,EXTEST_PULSE,EXTEST_TRAIN)"; + +-- Boundary-Scan Register Description + +attribute BOUNDARY_LENGTH of XCKU15P_FFVE1517 : entity is 2466; + +attribute BOUNDARY_REGISTER of XCKU15P_FFVE1517 : entity is +-- cellnum (type, port, function, safe[, ccell, disval, disrslt]) + " 0 (BC_2, *, internal, X)," & + " 1 (BC_2, *, internal, X)," & + " 2 (BC_2, *, internal, X)," & + " 3 (BC_2, *, internal, X)," & + " 4 (BC_2, *, internal, X)," & + " 5 (BC_2, *, internal, X)," & + " 6 (BC_2, *, internal, X)," & + " 7 (BC_2, *, internal, X)," & + " 8 (BC_2, *, internal, X)," & + " 9 (BC_2, *, internal, X)," & + " 10 (BC_2, *, controlr, 1)," & + " 11 (BC_2, CCLK_AD23, output3, X, 10, 1, Z)," & -- CCLK_0 + " 12 (BC_2, CCLK_AD23, input, X)," & -- CCLK_0 + " 13 (BC_2, *, internal, X)," & + " 14 (BC_2, *, controlr, 1)," & + " 15 (BC_2, D02_AE22, output3, X, 14, 1, Z)," & -- D02_0 + " 16 (BC_2, D02_AE22, input, X)," & -- D02_0 + " 17 (BC_2, *, controlr, 1)," & + " 18 (BC_2, D01_DIN_AD26, output3, X, 17, 1, Z)," & -- D01_DIN_0 + " 19 (BC_2, D01_DIN_AD26, input, X)," & -- D01_DIN_0 + " 20 (BC_2, *, controlr, 1)," & + " 21 (BC_2, D03_AE23, output3, X, 20, 1, Z)," & -- D03_0 + " 22 (BC_2, D03_AE23, input, X)," & -- D03_0 + " 23 (BC_2, *, controlr, 1)," & + " 24 (BC_2, D00_MOSI_AD25, output3, X, 23, 1, Z)," & -- D00_MOSI_0 + " 25 (BC_2, D00_MOSI_AD25, input, X)," & -- D00_MOSI_0 + " 26 (BC_2, *, controlr, 1)," & + " 27 (BC_2, RDWR_FCS_B_AG22, output3, X, 26, 1, Z)," & -- RDWR_FCS_B_0 + " 28 (BC_2, RDWR_FCS_B_AG22, input, X)," & -- RDWR_FCS_B_0 + " 29 (BC_2, *, controlr, 1)," & + " 30 (BC_2, DONE_AE24, output3, X, 29, 1, Z)," & -- DONE_0 + " 31 (BC_2, DONE_AE24, input, X)," & -- DONE_0 + " 32 (BC_2, *, internal, 1)," & -- PROGRAM_B + " 33 (BC_2, PUDC_B_AF27, input, X)," & + " 34 (BC_2, *, controlr, 1)," & + " 35 (BC_2, INIT_B_AE26, output3, X, 34, 1, Z)," & -- INIT_B_0 + " 36 (BC_2, INIT_B_AE26, input, X)," & -- INIT_B_0 + " 37 (BC_2, M1_AF22, input, X)," & + " 38 (BC_2, M2_AF24, input, X)," & + " 39 (BC_2, M0_AE27, input, X)," & + " 40 (BC_2, *, internal, X)," & + " 41 (BC_2, *, internal, X)," & + " 42 (BC_2, *, internal, X)," & + " 43 (BC_2, *, internal, X)," & + " 44 (BC_2, *, internal, X)," & + " 45 (BC_2, *, internal, X)," & + " 46 (BC_2, *, controlr, 1)," & + " 47 (BC_2, IO_E5, output3, X, 46, 1, Z)," & -- PAD668 + " 48 (BC_2, IO_E5, input, X)," & -- PAD668 + " 49 (BC_2, *, controlr, 1)," & + " 50 (BC_2, IO_E4, output3, X, 49, 1, Z)," & -- PAD667 + " 51 (BC_2, IO_E4, input, X)," & -- PAD667 + " 52 (BC_2, *, controlr, 1)," & + " 53 (BC_2, IO_F4, output3, X, 52, 1, Z)," & -- PAD666 + " 54 (BC_2, IO_F4, input, X)," & -- PAD666 + " 55 (BC_2, *, controlr, 1)," & + " 56 (BC_2, IO_E3, output3, X, 55, 1, Z)," & -- PAD665 + " 57 (BC_2, IO_E3, input, X)," & -- PAD665 + " 58 (BC_2, *, controlr, 1)," & + " 59 (BC_2, IO_F3, output3, X, 58, 1, Z)," & -- PAD664 + " 60 (BC_2, IO_F3, input, X)," & -- PAD664 + " 61 (BC_2, *, controlr, 1)," & + " 62 (BC_2, IO_F2, output3, X, 61, 1, Z)," & -- PAD663 + " 63 (BC_2, IO_F2, input, X)," & -- PAD663 + " 64 (BC_2, *, controlr, 1)," & + " 65 (BC_2, IO_F1, output3, X, 64, 1, Z)," & -- PAD662 + " 66 (BC_2, IO_F1, input, X)," & -- PAD662 + " 67 (BC_2, *, controlr, 1)," & + " 68 (BC_2, IO_E1, output3, X, 67, 1, Z)," & -- PAD661 + " 69 (BC_2, IO_E1, input, X)," & -- PAD661 + " 70 (BC_2, *, controlr, 1)," & + " 71 (BC_2, IO_D6, output3, X, 70, 1, Z)," & -- PAD660 + " 72 (BC_2, IO_D6, input, X)," & -- PAD660 + " 73 (BC_2, *, controlr, 1)," & + " 74 (BC_2, IO_D5, output3, X, 73, 1, Z)," & -- PAD659 + " 75 (BC_2, IO_D5, input, X)," & -- PAD659 + " 76 (BC_2, *, controlr, 1)," & + " 77 (BC_2, IO_D2, output3, X, 76, 1, Z)," & -- PAD658 + " 78 (BC_2, IO_D2, input, X)," & -- PAD658 + " 79 (BC_2, *, controlr, 1)," & + " 80 (BC_2, IO_D1, output3, X, 79, 1, Z)," & -- PAD657 + " 81 (BC_2, IO_D1, input, X)," & -- PAD657 + " 82 (BC_2, *, controlr, 1)," & + " 83 (BC_2, IO_D3, output3, X, 82, 1, Z)," & -- PAD656 + " 84 (BC_2, IO_D3, input, X)," & -- PAD656 + " 85 (BC_2, *, controlr, 1)," & + " 86 (BC_2, IO_C3, output3, X, 85, 1, Z)," & -- PAD655 + " 87 (BC_2, IO_C3, input, X)," & -- PAD655 + " 88 (BC_2, *, controlr, 1)," & + " 89 (BC_2, IO_C5, output3, X, 88, 1, Z)," & -- PAD654 + " 90 (BC_2, IO_C5, input, X)," & -- PAD654 + " 91 (BC_2, *, controlr, 1)," & + " 92 (BC_2, IO_C4, output3, X, 91, 1, Z)," & -- PAD653 + " 93 (BC_2, IO_C4, input, X)," & -- PAD653 + " 94 (BC_2, *, controlr, 1)," & + " 95 (BC_2, IO_C2, output3, X, 94, 1, Z)," & -- PAD652 + " 96 (BC_2, IO_C2, input, X)," & -- PAD652 + " 97 (BC_2, *, controlr, 1)," & + " 98 (BC_2, IO_B2, output3, X, 97, 1, Z)," & -- PAD651 + " 99 (BC_2, IO_B2, input, X)," & -- PAD651 + " 100 (BC_2, *, controlr, 1)," & + " 101 (BC_2, IO_B5, output3, X, 100, 1, Z)," & -- PAD650 + " 102 (BC_2, IO_B5, input, X)," & -- PAD650 + " 103 (BC_2, *, controlr, 1)," & + " 104 (BC_2, IO_B4, output3, X, 103, 1, Z)," & -- PAD649 + " 105 (BC_2, IO_B4, input, X)," & -- PAD649 + " 106 (BC_2, *, controlr, 1)," & + " 107 (BC_2, IO_A4, output3, X, 106, 1, Z)," & -- PAD648 + " 108 (BC_2, IO_A4, input, X)," & -- PAD648 + " 109 (BC_2, *, controlr, 1)," & + " 110 (BC_2, IO_A3, output3, X, 109, 1, Z)," & -- PAD647 + " 111 (BC_2, IO_A3, input, X)," & -- PAD647 + " 112 (BC_2, *, controlr, 1)," & + " 113 (BC_2, IO_B6, output3, X, 112, 1, Z)," & -- PAD646 + " 114 (BC_2, IO_B6, input, X)," & -- PAD646 + " 115 (BC_2, *, controlr, 1)," & + " 116 (BC_2, IO_A6, output3, X, 115, 1, Z)," & -- PAD645 + " 117 (BC_2, IO_A6, input, X)," & -- PAD645 + " 118 (BC_2, *, internal, X)," & + " 119 (BC_2, *, controlr, 1)," & + " 120 (BC_2, IO_F6, output3, X, 119, 1, Z)," & -- PAD644 + " 121 (BC_2, IO_F6, input, X)," & -- PAD644 + " 122 (BC_2, *, controlr, 1)," & + " 123 (BC_2, IO_E6, output3, X, 122, 1, Z)," & -- PAD643 + " 124 (BC_2, IO_E6, input, X)," & -- PAD643 + " 125 (BC_2, *, controlr, 1)," & + " 126 (BC_2, IO_F8, output3, X, 125, 1, Z)," & -- PAD642 + " 127 (BC_2, IO_F8, input, X)," & -- PAD642 + " 128 (BC_2, *, controlr, 1)," & + " 129 (BC_2, IO_F7, output3, X, 128, 1, Z)," & -- PAD641 + " 130 (BC_2, IO_F7, input, X)," & -- PAD641 + " 131 (BC_2, *, controlr, 1)," & + " 132 (BC_2, IO_F9, output3, X, 131, 1, Z)," & -- PAD640 + " 133 (BC_2, IO_F9, input, X)," & -- PAD640 + " 134 (BC_2, *, controlr, 1)," & + " 135 (BC_2, IO_E8, output3, X, 134, 1, Z)," & -- PAD639 + " 136 (BC_2, IO_E8, input, X)," & -- PAD639 + " 137 (BC_2, *, controlr, 1)," & + " 138 (BC_2, IO_E10, output3, X, 137, 1, Z)," & -- PAD638 + " 139 (BC_2, IO_E10, input, X)," & -- PAD638 + " 140 (BC_2, *, controlr, 1)," & + " 141 (BC_2, IO_E9, output3, X, 140, 1, Z)," & -- PAD637 + " 142 (BC_2, IO_E9, input, X)," & -- PAD637 + " 143 (BC_2, *, controlr, 1)," & + " 144 (BC_2, IO_D8, output3, X, 143, 1, Z)," & -- PAD636 + " 145 (BC_2, IO_D8, input, X)," & -- PAD636 + " 146 (BC_2, *, controlr, 1)," & + " 147 (BC_2, IO_D7, output3, X, 146, 1, Z)," & -- PAD635 + " 148 (BC_2, IO_D7, input, X)," & -- PAD635 + " 149 (BC_2, *, controlr, 1)," & + " 150 (BC_2, IO_D11, output3, X, 149, 1, Z)," & -- PAD634 + " 151 (BC_2, IO_D11, input, X)," & -- PAD634 + " 152 (BC_2, *, controlr, 1)," & + " 153 (BC_2, IO_D10, output3, X, 152, 1, Z)," & -- PAD633 + " 154 (BC_2, IO_D10, input, X)," & -- PAD633 + " 155 (BC_2, *, controlr, 1)," & + " 156 (BC_2, IO_C8, output3, X, 155, 1, Z)," & -- PAD632 + " 157 (BC_2, IO_C8, input, X)," & -- PAD632 + " 158 (BC_2, *, controlr, 1)," & + " 159 (BC_2, IO_C7, output3, X, 158, 1, Z)," & -- PAD631 + " 160 (BC_2, IO_C7, input, X)," & -- PAD631 + " 161 (BC_2, *, controlr, 1)," & + " 162 (BC_2, IO_C10, output3, X, 161, 1, Z)," & -- PAD630 + " 163 (BC_2, IO_C10, input, X)," & -- PAD630 + " 164 (BC_2, *, controlr, 1)," & + " 165 (BC_2, IO_C9, output3, X, 164, 1, Z)," & -- PAD629 + " 166 (BC_2, IO_C9, input, X)," & -- PAD629 + " 167 (BC_2, *, controlr, 1)," & + " 168 (BC_2, IO_B7, output3, X, 167, 1, Z)," & -- PAD628 + " 169 (BC_2, IO_B7, input, X)," & -- PAD628 + " 170 (BC_2, *, controlr, 1)," & + " 171 (BC_2, IO_A7, output3, X, 170, 1, Z)," & -- PAD627 + " 172 (BC_2, IO_A7, input, X)," & -- PAD627 + " 173 (BC_2, *, controlr, 1)," & + " 174 (BC_2, IO_B9, output3, X, 173, 1, Z)," & -- PAD626 + " 175 (BC_2, IO_B9, input, X)," & -- PAD626 + " 176 (BC_2, *, controlr, 1)," & + " 177 (BC_2, IO_A8, output3, X, 176, 1, Z)," & -- PAD625 + " 178 (BC_2, IO_A8, input, X)," & -- PAD625 + " 179 (BC_2, *, controlr, 1)," & + " 180 (BC_2, IO_B10, output3, X, 179, 1, Z)," & -- PAD624 + " 181 (BC_2, IO_B10, input, X)," & -- PAD624 + " 182 (BC_2, *, controlr, 1)," & + " 183 (BC_2, IO_A9, output3, X, 182, 1, Z)," & -- PAD623 + " 184 (BC_2, IO_A9, input, X)," & -- PAD623 + " 185 (BC_2, *, controlr, 1)," & + " 186 (BC_2, IO_B11, output3, X, 185, 1, Z)," & -- PAD622 + " 187 (BC_2, IO_B11, input, X)," & -- PAD622 + " 188 (BC_2, *, controlr, 1)," & + " 189 (BC_2, IO_A11, output3, X, 188, 1, Z)," & -- PAD621 + " 190 (BC_2, IO_A11, input, X)," & -- PAD621 + " 191 (BC_2, *, internal, X)," & + " 192 (BC_2, *, internal, X)," & + " 193 (BC_2, *, internal, X)," & + " 194 (BC_2, *, internal, X)," & + " 195 (BC_2, *, controlr, 1)," & + " 196 (BC_2, IO_R15, output3, X, 195, 1, Z)," & -- PAD620 + " 197 (BC_2, IO_R15, input, X)," & -- PAD620 + " 198 (BC_2, *, controlr, 1)," & + " 199 (BC_2, IO_P15, output3, X, 198, 1, Z)," & -- PAD619 + " 200 (BC_2, IO_P15, input, X)," & -- PAD619 + " 201 (BC_2, *, controlr, 1)," & + " 202 (BC_2, IO_R14, output3, X, 201, 1, Z)," & -- PAD618 + " 203 (BC_2, IO_R14, input, X)," & -- PAD618 + " 204 (BC_2, *, controlr, 1)," & + " 205 (BC_2, IO_R13, output3, X, 204, 1, Z)," & -- PAD617 + " 206 (BC_2, IO_R13, input, X)," & -- PAD617 + " 207 (BC_2, *, controlr, 1)," & + " 208 (BC_2, IO_P13, output3, X, 207, 1, Z)," & -- PAD616 + " 209 (BC_2, IO_P13, input, X)," & -- PAD616 + " 210 (BC_2, *, controlr, 1)," & + " 211 (BC_2, IO_P12, output3, X, 210, 1, Z)," & -- PAD615 + " 212 (BC_2, IO_P12, input, X)," & -- PAD615 + " 213 (BC_2, *, controlr, 1)," & + " 214 (BC_2, IO_P11, output3, X, 213, 1, Z)," & -- PAD614 + " 215 (BC_2, IO_P11, input, X)," & -- PAD614 + " 216 (BC_2, *, controlr, 1)," & + " 217 (BC_2, IO_P10, output3, X, 216, 1, Z)," & -- PAD613 + " 218 (BC_2, IO_P10, input, X)," & -- PAD613 + " 219 (BC_2, *, controlr, 1)," & + " 220 (BC_2, IO_N15, output3, X, 219, 1, Z)," & -- PAD612 + " 221 (BC_2, IO_N15, input, X)," & -- PAD612 + " 222 (BC_2, *, controlr, 1)," & + " 223 (BC_2, IO_N14, output3, X, 222, 1, Z)," & -- PAD611 + " 224 (BC_2, IO_N14, input, X)," & -- PAD611 + " 225 (BC_2, *, controlr, 1)," & + " 226 (BC_2, IO_N13, output3, X, 225, 1, Z)," & -- PAD610 + " 227 (BC_2, IO_N13, input, X)," & -- PAD610 + " 228 (BC_2, *, controlr, 1)," & + " 229 (BC_2, IO_N12, output3, X, 228, 1, Z)," & -- PAD609 + " 230 (BC_2, IO_N12, input, X)," & -- PAD609 + " 231 (BC_2, *, controlr, 1)," & + " 232 (BC_2, IO_M14, output3, X, 231, 1, Z)," & -- PAD608 + " 233 (BC_2, IO_M14, input, X)," & -- PAD608 + " 234 (BC_2, *, controlr, 1)," & + " 235 (BC_2, IO_L14, output3, X, 234, 1, Z)," & -- PAD607 + " 236 (BC_2, IO_L14, input, X)," & -- PAD607 + " 237 (BC_2, *, controlr, 1)," & + " 238 (BC_2, IO_M12, output3, X, 237, 1, Z)," & -- PAD606 + " 239 (BC_2, IO_M12, input, X)," & -- PAD606 + " 240 (BC_2, *, controlr, 1)," & + " 241 (BC_2, IO_M11, output3, X, 240, 1, Z)," & -- PAD605 + " 242 (BC_2, IO_M11, input, X)," & -- PAD605 + " 243 (BC_2, *, controlr, 1)," & + " 244 (BC_2, IO_N10, output3, X, 243, 1, Z)," & -- PAD604 + " 245 (BC_2, IO_N10, input, X)," & -- PAD604 + " 246 (BC_2, *, controlr, 1)," & + " 247 (BC_2, IO_M10, output3, X, 246, 1, Z)," & -- PAD603 + " 248 (BC_2, IO_M10, input, X)," & -- PAD603 + " 249 (BC_2, *, controlr, 1)," & + " 250 (BC_2, IO_L13, output3, X, 249, 1, Z)," & -- PAD602 + " 251 (BC_2, IO_L13, input, X)," & -- PAD602 + " 252 (BC_2, *, controlr, 1)," & + " 253 (BC_2, IO_K13, output3, X, 252, 1, Z)," & -- PAD601 + " 254 (BC_2, IO_K13, input, X)," & -- PAD601 + " 255 (BC_2, *, controlr, 1)," & + " 256 (BC_2, IO_L12, output3, X, 255, 1, Z)," & -- PAD600 + " 257 (BC_2, IO_L12, input, X)," & -- PAD600 + " 258 (BC_2, *, controlr, 1)," & + " 259 (BC_2, IO_L11, output3, X, 258, 1, Z)," & -- PAD599 + " 260 (BC_2, IO_L11, input, X)," & -- PAD599 + " 261 (BC_2, *, controlr, 1)," & + " 262 (BC_2, IO_K11, output3, X, 261, 1, Z)," & -- PAD598 + " 263 (BC_2, IO_K11, input, X)," & -- PAD598 + " 264 (BC_2, *, controlr, 1)," & + " 265 (BC_2, IO_K10, output3, X, 264, 1, Z)," & -- PAD597 + " 266 (BC_2, IO_K10, input, X)," & -- PAD597 + " 267 (BC_2, *, internal, X)," & + " 268 (BC_2, *, controlr, 1)," & + " 269 (BC_2, IO_J13, output3, X, 268, 1, Z)," & -- PAD596 + " 270 (BC_2, IO_J13, input, X)," & -- PAD596 + " 271 (BC_2, *, controlr, 1)," & + " 272 (BC_2, IO_J12, output3, X, 271, 1, Z)," & -- PAD595 + " 273 (BC_2, IO_J12, input, X)," & -- PAD595 + " 274 (BC_2, *, controlr, 1)," & + " 275 (BC_2, IO_J11, output3, X, 274, 1, Z)," & -- PAD594 + " 276 (BC_2, IO_J11, input, X)," & -- PAD594 + " 277 (BC_2, *, controlr, 1)," & + " 278 (BC_2, IO_J10, output3, X, 277, 1, Z)," & -- PAD593 + " 279 (BC_2, IO_J10, input, X)," & -- PAD593 + " 280 (BC_2, *, controlr, 1)," & + " 281 (BC_2, IO_H13, output3, X, 280, 1, Z)," & -- PAD592 + " 282 (BC_2, IO_H13, input, X)," & -- PAD592 + " 283 (BC_2, *, controlr, 1)," & + " 284 (BC_2, IO_H12, output3, X, 283, 1, Z)," & -- PAD591 + " 285 (BC_2, IO_H12, input, X)," & -- PAD591 + " 286 (BC_2, *, controlr, 1)," & + " 287 (BC_2, IO_H10, output3, X, 286, 1, Z)," & -- PAD590 + " 288 (BC_2, IO_H10, input, X)," & -- PAD590 + " 289 (BC_2, *, controlr, 1)," & + " 290 (BC_2, IO_G10, output3, X, 289, 1, Z)," & -- PAD589 + " 291 (BC_2, IO_G10, input, X)," & -- PAD589 + " 292 (BC_2, *, controlr, 1)," & + " 293 (BC_2, IO_G12, output3, X, 292, 1, Z)," & -- PAD588 + " 294 (BC_2, IO_G12, input, X)," & -- PAD588 + " 295 (BC_2, *, controlr, 1)," & + " 296 (BC_2, IO_G11, output3, X, 295, 1, Z)," & -- PAD587 + " 297 (BC_2, IO_G11, input, X)," & -- PAD587 + " 298 (BC_2, *, controlr, 1)," & + " 299 (BC_2, IO_F11, output3, X, 298, 1, Z)," & -- PAD586 + " 300 (BC_2, IO_F11, input, X)," & -- PAD586 + " 301 (BC_2, *, controlr, 1)," & + " 302 (BC_2, IO_E11, output3, X, 301, 1, Z)," & -- PAD585 + " 303 (BC_2, IO_E11, input, X)," & -- PAD585 + " 304 (BC_2, *, controlr, 1)," & + " 305 (BC_2, IO_F13, output3, X, 304, 1, Z)," & -- PAD584 + " 306 (BC_2, IO_F13, input, X)," & -- PAD584 + " 307 (BC_2, *, controlr, 1)," & + " 308 (BC_2, IO_F12, output3, X, 307, 1, Z)," & -- PAD583 + " 309 (BC_2, IO_F12, input, X)," & -- PAD583 + " 310 (BC_2, *, controlr, 1)," & + " 311 (BC_2, IO_E13, output3, X, 310, 1, Z)," & -- PAD582 + " 312 (BC_2, IO_E13, input, X)," & -- PAD582 + " 313 (BC_2, *, controlr, 1)," & + " 314 (BC_2, IO_D13, output3, X, 313, 1, Z)," & -- PAD581 + " 315 (BC_2, IO_D13, input, X)," & -- PAD581 + " 316 (BC_2, *, controlr, 1)," & + " 317 (BC_2, IO_D12, output3, X, 316, 1, Z)," & -- PAD580 + " 318 (BC_2, IO_D12, input, X)," & -- PAD580 + " 319 (BC_2, *, controlr, 1)," & + " 320 (BC_2, IO_C12, output3, X, 319, 1, Z)," & -- PAD579 + " 321 (BC_2, IO_C12, input, X)," & -- PAD579 + " 322 (BC_2, *, controlr, 1)," & + " 323 (BC_2, IO_C13, output3, X, 322, 1, Z)," & -- PAD578 + " 324 (BC_2, IO_C13, input, X)," & -- PAD578 + " 325 (BC_2, *, controlr, 1)," & + " 326 (BC_2, IO_B12, output3, X, 325, 1, Z)," & -- PAD577 + " 327 (BC_2, IO_B12, input, X)," & -- PAD577 + " 328 (BC_2, *, controlr, 1)," & + " 329 (BC_2, IO_A13, output3, X, 328, 1, Z)," & -- PAD576 + " 330 (BC_2, IO_A13, input, X)," & -- PAD576 + " 331 (BC_2, *, controlr, 1)," & + " 332 (BC_2, IO_A12, output3, X, 331, 1, Z)," & -- PAD575 + " 333 (BC_2, IO_A12, input, X)," & -- PAD575 + " 334 (BC_2, *, controlr, 1)," & + " 335 (BC_2, IO_B14, output3, X, 334, 1, Z)," & -- PAD574 + " 336 (BC_2, IO_B14, input, X)," & -- PAD574 + " 337 (BC_2, *, controlr, 1)," & + " 338 (BC_2, IO_A14, output3, X, 337, 1, Z)," & -- PAD573 + " 339 (BC_2, IO_A14, input, X)," & -- PAD573 + " 340 (BC_2, *, internal, X)," & + " 341 (BC_2, *, internal, X)," & + " 342 (BC_2, *, internal, X)," & + " 343 (BC_2, *, internal, X)," & + " 344 (BC_2, *, internal, X)," & + " 345 (BC_2, *, internal, X)," & + " 346 (BC_2, *, internal, X)," & + " 347 (BC_2, *, internal, X)," & + " 348 (BC_2, *, internal, X)," & + " 349 (BC_2, *, internal, X)," & + " 350 (BC_2, *, internal, X)," & + " 351 (BC_2, *, internal, X)," & + " 352 (BC_2, *, internal, X)," & + " 353 (BC_2, *, internal, X)," & + " 354 (BC_2, *, internal, X)," & + " 355 (BC_2, *, internal, X)," & + " 356 (BC_4, MGTHRXN0_224, OBSERVE_ONLY, X)," & + " 357 (BC_4, MGTHRXP0_224, OBSERVE_ONLY, X)," & + " 358 (AC_2, MGTHTXP0_224, OUTPUT2, X)," & + " 359 (BC_4, MGTHRXN1_224, OBSERVE_ONLY, X)," & + " 360 (BC_4, MGTHRXP1_224, OBSERVE_ONLY, X)," & + " 361 (AC_2, MGTHTXP1_224, OUTPUT2, X)," & + " 362 (BC_2, *, internal, 0)," & + " 363 (BC_4, MGTHRXN2_224, OBSERVE_ONLY, X)," & + " 364 (BC_4, MGTHRXP2_224, OBSERVE_ONLY, X)," & + " 365 (AC_2, MGTHTXP2_224, OUTPUT2, X)," & + " 366 (BC_4, MGTHRXN3_224, OBSERVE_ONLY, X)," & + " 367 (BC_4, MGTHRXP3_224, OBSERVE_ONLY, X)," & + " 368 (AC_2, MGTHTXP3_224, OUTPUT2, X)," & + " 369 (BC_2, *, internal, X)," & + " 370 (BC_4, MGTHRXN0_225, OBSERVE_ONLY, X)," & + " 371 (BC_4, MGTHRXP0_225, OBSERVE_ONLY, X)," & + " 372 (AC_2, MGTHTXP0_225, OUTPUT2, X)," & + " 373 (BC_4, MGTHRXN1_225, OBSERVE_ONLY, X)," & + " 374 (BC_4, MGTHRXP1_225, OBSERVE_ONLY, X)," & + " 375 (AC_2, MGTHTXP1_225, OUTPUT2, X)," & + " 376 (BC_2, *, internal, 0)," & + " 377 (BC_4, MGTHRXN2_225, OBSERVE_ONLY, X)," & + " 378 (BC_4, MGTHRXP2_225, OBSERVE_ONLY, X)," & + " 379 (AC_2, MGTHTXP2_225, OUTPUT2, X)," & + " 380 (BC_4, MGTHRXN3_225, OBSERVE_ONLY, X)," & + " 381 (BC_4, MGTHRXP3_225, OBSERVE_ONLY, X)," & + " 382 (AC_2, MGTHTXP3_225, OUTPUT2, X)," & + " 383 (BC_2, *, internal, X)," & + " 384 (BC_4, MGTHRXN0_226, OBSERVE_ONLY, X)," & + " 385 (BC_4, MGTHRXP0_226, OBSERVE_ONLY, X)," & + " 386 (AC_2, MGTHTXP0_226, OUTPUT2, X)," & + " 387 (BC_4, MGTHRXN1_226, OBSERVE_ONLY, X)," & + " 388 (BC_4, MGTHRXP1_226, OBSERVE_ONLY, X)," & + " 389 (AC_2, MGTHTXP1_226, OUTPUT2, X)," & + " 390 (BC_2, *, internal, 0)," & + " 391 (BC_4, MGTHRXN2_226, OBSERVE_ONLY, X)," & + " 392 (BC_4, MGTHRXP2_226, OBSERVE_ONLY, X)," & + " 393 (AC_2, MGTHTXP2_226, OUTPUT2, X)," & + " 394 (BC_4, MGTHRXN3_226, OBSERVE_ONLY, X)," & + " 395 (BC_4, MGTHRXP3_226, OBSERVE_ONLY, X)," & + " 396 (AC_2, MGTHTXP3_226, OUTPUT2, X)," & + " 397 (BC_2, *, internal, X)," & + " 398 (BC_4, MGTHRXN0_227, OBSERVE_ONLY, X)," & + " 399 (BC_4, MGTHRXP0_227, OBSERVE_ONLY, X)," & + " 400 (AC_2, MGTHTXP0_227, OUTPUT2, X)," & + " 401 (BC_4, MGTHRXN1_227, OBSERVE_ONLY, X)," & + " 402 (BC_4, MGTHRXP1_227, OBSERVE_ONLY, X)," & + " 403 (AC_2, MGTHTXP1_227, OUTPUT2, X)," & + " 404 (BC_2, *, internal, 0)," & + " 405 (BC_4, MGTHRXN2_227, OBSERVE_ONLY, X)," & + " 406 (BC_4, MGTHRXP2_227, OBSERVE_ONLY, X)," & + " 407 (AC_2, MGTHTXP2_227, OUTPUT2, X)," & + " 408 (BC_4, MGTHRXN3_227, OBSERVE_ONLY, X)," & + " 409 (BC_4, MGTHRXP3_227, OBSERVE_ONLY, X)," & + " 410 (AC_2, MGTHTXP3_227, OUTPUT2, X)," & + " 411 (BC_2, *, internal, X)," & + " 412 (BC_4, MGTHRXN0_228, OBSERVE_ONLY, X)," & + " 413 (BC_4, MGTHRXP0_228, OBSERVE_ONLY, X)," & + " 414 (AC_2, MGTHTXP0_228, OUTPUT2, X)," & + " 415 (BC_4, MGTHRXN1_228, OBSERVE_ONLY, X)," & + " 416 (BC_4, MGTHRXP1_228, OBSERVE_ONLY, X)," & + " 417 (AC_2, MGTHTXP1_228, OUTPUT2, X)," & + " 418 (BC_2, *, internal, 0)," & + " 419 (BC_4, MGTHRXN2_228, OBSERVE_ONLY, X)," & + " 420 (BC_4, MGTHRXP2_228, OBSERVE_ONLY, X)," & + " 421 (AC_2, MGTHTXP2_228, OUTPUT2, X)," & + " 422 (BC_4, MGTHRXN3_228, OBSERVE_ONLY, X)," & + " 423 (BC_4, MGTHRXP3_228, OBSERVE_ONLY, X)," & + " 424 (AC_2, MGTHTXP3_228, OUTPUT2, X)," & + " 425 (BC_2, *, internal, X)," & + " 426 (BC_4, MGTHRXN0_229, OBSERVE_ONLY, X)," & + " 427 (BC_4, MGTHRXP0_229, OBSERVE_ONLY, X)," & + " 428 (AC_2, MGTHTXP0_229, OUTPUT2, X)," & + " 429 (BC_4, MGTHRXN1_229, OBSERVE_ONLY, X)," & + " 430 (BC_4, MGTHRXP1_229, OBSERVE_ONLY, X)," & + " 431 (AC_2, MGTHTXP1_229, OUTPUT2, X)," & + " 432 (BC_2, *, internal, 0)," & + " 433 (BC_4, MGTHRXN2_229, OBSERVE_ONLY, X)," & + " 434 (BC_4, MGTHRXP2_229, OBSERVE_ONLY, X)," & + " 435 (AC_2, MGTHTXP2_229, OUTPUT2, X)," & + " 436 (BC_4, MGTHRXN3_229, OBSERVE_ONLY, X)," & + " 437 (BC_4, MGTHRXP3_229, OBSERVE_ONLY, X)," & + " 438 (AC_2, MGTHTXP3_229, OUTPUT2, X)," & + " 439 (BC_2, *, internal, X)," & + " 440 (BC_4, MGTHRXN0_230, OBSERVE_ONLY, X)," & + " 441 (BC_4, MGTHRXP0_230, OBSERVE_ONLY, X)," & + " 442 (AC_2, MGTHTXP0_230, OUTPUT2, X)," & + " 443 (BC_4, MGTHRXN1_230, OBSERVE_ONLY, X)," & + " 444 (BC_4, MGTHRXP1_230, OBSERVE_ONLY, X)," & + " 445 (AC_2, MGTHTXP1_230, OUTPUT2, X)," & + " 446 (BC_2, *, internal, 0)," & + " 447 (BC_4, MGTHRXN2_230, OBSERVE_ONLY, X)," & + " 448 (BC_4, MGTHRXP2_230, OBSERVE_ONLY, X)," & + " 449 (AC_2, MGTHTXP2_230, OUTPUT2, X)," & + " 450 (BC_4, MGTHRXN3_230, OBSERVE_ONLY, X)," & + " 451 (BC_4, MGTHRXP3_230, OBSERVE_ONLY, X)," & + " 452 (AC_2, MGTHTXP3_230, OUTPUT2, X)," & + " 453 (BC_2, *, internal, X)," & + " 454 (BC_4, MGTHRXN0_231, OBSERVE_ONLY, X)," & + " 455 (BC_4, MGTHRXP0_231, OBSERVE_ONLY, X)," & + " 456 (AC_2, MGTHTXP0_231, OUTPUT2, X)," & + " 457 (BC_4, MGTHRXN1_231, OBSERVE_ONLY, X)," & + " 458 (BC_4, MGTHRXP1_231, OBSERVE_ONLY, X)," & + " 459 (AC_2, MGTHTXP1_231, OUTPUT2, X)," & + " 460 (BC_2, *, internal, 0)," & + " 461 (BC_4, MGTHRXN2_231, OBSERVE_ONLY, X)," & + " 462 (BC_4, MGTHRXP2_231, OBSERVE_ONLY, X)," & + " 463 (AC_2, MGTHTXP2_231, OUTPUT2, X)," & + " 464 (BC_4, MGTHRXN3_231, OBSERVE_ONLY, X)," & + " 465 (BC_4, MGTHRXP3_231, OBSERVE_ONLY, X)," & + " 466 (AC_2, MGTHTXP3_231, OUTPUT2, X)," & + " 467 (BC_2, *, internal, X)," & + " 468 (BC_4, *, internal, X)," & + " 469 (BC_4, *, internal, X)," & + " 470 (BC_4, *, internal, X)," & + " 471 (BC_4, *, internal, X)," & + " 472 (BC_4, *, internal, X)," & + " 473 (BC_4, *, internal, X)," & + " 474 (BC_2, *, internal, 0)," & + " 475 (BC_4, *, internal, X)," & + " 476 (BC_4, *, internal, X)," & + " 477 (BC_4, *, internal, X)," & + " 478 (BC_4, *, internal, X)," & + " 479 (BC_4, *, internal, X)," & + " 480 (BC_4, *, internal, X)," & + " 481 (BC_2, *, internal, X)," & + " 482 (BC_4, *, internal, X)," & + " 483 (BC_4, *, internal, X)," & + " 484 (BC_4, *, internal, X)," & + " 485 (BC_4, *, internal, X)," & + " 486 (BC_4, *, internal, X)," & + " 487 (BC_4, *, internal, X)," & + " 488 (BC_2, *, internal, 0)," & + " 489 (BC_4, *, internal, X)," & + " 490 (BC_4, *, internal, X)," & + " 491 (BC_4, *, internal, X)," & + " 492 (BC_4, *, internal, X)," & + " 493 (BC_4, *, internal, X)," & + " 494 (BC_4, *, internal, X)," & + " 495 (BC_2, *, internal, X)," & + " 496 (BC_4, *, internal, X)," & + " 497 (BC_4, *, internal, X)," & + " 498 (BC_4, *, internal, X)," & + " 499 (BC_4, *, internal, X)," & + " 500 (BC_4, *, internal, X)," & + " 501 (BC_4, *, internal, X)," & + " 502 (BC_2, *, internal, 0)," & + " 503 (BC_4, *, internal, X)," & + " 504 (BC_4, *, internal, X)," & + " 505 (BC_4, *, internal, X)," & + " 506 (BC_4, *, internal, X)," & + " 507 (BC_4, *, internal, X)," & + " 508 (BC_4, *, internal, X)," & + " 509 (BC_2, *, internal, X)," & + " 510 (BC_2, *, internal, X)," & + " 511 (BC_2, *, internal, X)," & + " 512 (BC_2, *, internal, X)," & + " 513 (BC_2, *, internal, X)," & + " 514 (BC_2, *, internal, X)," & + " 515 (BC_2, *, internal, X)," & + " 516 (BC_2, *, internal, X)," & + " 517 (BC_2, *, internal, X)," & + " 518 (BC_2, *, internal, X)," & + " 519 (BC_2, *, internal, X)," & + " 520 (BC_2, *, internal, X)," & + " 521 (BC_2, *, internal, X)," & + " 522 (BC_2, *, internal, X)," & + " 523 (BC_2, *, internal, X)," & + " 524 (BC_2, *, internal, X)," & + " 525 (BC_2, *, internal, X)," & + " 526 (BC_2, *, internal, X)," & + " 527 (BC_2, *, internal, X)," & + " 528 (BC_2, *, internal, X)," & + " 529 (BC_2, *, internal, X)," & + " 530 (BC_2, *, internal, X)," & + " 531 (BC_2, *, internal, X)," & + " 532 (BC_2, *, internal, X)," & + " 533 (BC_2, *, internal, X)," & + " 534 (BC_2, *, internal, X)," & + " 535 (BC_2, *, internal, X)," & + " 536 (BC_2, *, internal, X)," & + " 537 (BC_2, *, internal, X)," & + " 538 (BC_2, *, controlr, 1)," & + " 539 (BC_2, IO_AU20, output3, X, 538, 1, Z)," & -- PAD570 + " 540 (BC_2, IO_AU20, input, X)," & -- PAD570 + " 541 (BC_2, *, controlr, 1)," & + " 542 (BC_2, IO_AU22, output3, X, 541, 1, Z)," & -- PAD572 + " 543 (BC_2, IO_AU22, input, X)," & -- PAD572 + " 544 (BC_2, *, controlr, 1)," & + " 545 (BC_2, IO_AV22, output3, X, 544, 1, Z)," & -- PAD571 + " 546 (BC_2, IO_AV22, input, X)," & -- PAD571 + " 547 (BC_2, *, controlr, 1)," & + " 548 (BC_2, IO_AV20, output3, X, 547, 1, Z)," & -- PAD569 + " 549 (BC_2, IO_AV20, input, X)," & -- PAD569 + " 550 (BC_2, *, controlr, 1)," & + " 551 (BC_2, IO_AW20, output3, X, 550, 1, Z)," & -- PAD566 + " 552 (BC_2, IO_AW20, input, X)," & -- PAD566 + " 553 (BC_2, *, controlr, 1)," & + " 554 (BC_2, IO_AV21, output3, X, 553, 1, Z)," & -- PAD568 + " 555 (BC_2, IO_AV21, input, X)," & -- PAD568 + " 556 (BC_2, *, controlr, 1)," & + " 557 (BC_2, IO_AW21, output3, X, 556, 1, Z)," & -- PAD567 + " 558 (BC_2, IO_AW21, input, X)," & -- PAD567 + " 559 (BC_2, *, controlr, 1)," & + " 560 (BC_2, IO_AW19, output3, X, 559, 1, Z)," & -- PAD565 + " 561 (BC_2, IO_AW19, input, X)," & -- PAD565 + " 562 (BC_2, *, controlr, 1)," & + " 563 (BC_2, IO_AV18, output3, X, 562, 1, Z)," & -- PAD562 + " 564 (BC_2, IO_AV18, input, X)," & -- PAD562 + " 565 (BC_2, *, controlr, 1)," & + " 566 (BC_2, IO_AT22, output3, X, 565, 1, Z)," & -- PAD564 + " 567 (BC_2, IO_AT22, input, X)," & -- PAD564 + " 568 (BC_2, *, controlr, 1)," & + " 569 (BC_2, IO_AT21, output3, X, 568, 1, Z)," & -- PAD563 + " 570 (BC_2, IO_AT21, input, X)," & -- PAD563 + " 571 (BC_2, *, controlr, 1)," & + " 572 (BC_2, IO_AW18, output3, X, 571, 1, Z)," & -- PAD561 + " 573 (BC_2, IO_AW18, input, X)," & -- PAD561 + " 574 (BC_2, *, controlr, 1)," & + " 575 (BC_2, IO_AV17, output3, X, 574, 1, Z)," & -- PAD560 + " 576 (BC_2, IO_AV17, input, X)," & -- PAD560 + " 577 (BC_2, *, controlr, 1)," & + " 578 (BC_2, IO_AN22, output3, X, 577, 1, Z)," & -- PAD559 + " 579 (BC_2, IO_AN22, input, X)," & -- PAD559 + " 580 (BC_2, *, controlr, 1)," & + " 581 (BC_2, IO_AL22, output3, X, 580, 1, Z)," & -- PAD556 + " 582 (BC_2, IO_AL22, input, X)," & -- PAD556 + " 583 (BC_2, *, controlr, 1)," & + " 584 (BC_2, IO_AR22, output3, X, 583, 1, Z)," & -- PAD558 + " 585 (BC_2, IO_AR22, input, X)," & -- PAD558 + " 586 (BC_2, *, controlr, 1)," & + " 587 (BC_2, IO_AR21, output3, X, 586, 1, Z)," & -- PAD557 + " 588 (BC_2, IO_AR21, input, X)," & -- PAD557 + " 589 (BC_2, *, controlr, 1)," & + " 590 (BC_2, IO_AM22, output3, X, 589, 1, Z)," & -- PAD555 + " 591 (BC_2, IO_AM22, input, X)," & -- PAD555 + " 592 (BC_2, *, controlr, 1)," & + " 593 (BC_2, IO_AK21, output3, X, 592, 1, Z)," & -- PAD552 + " 594 (BC_2, IO_AK21, input, X)," & -- PAD552 + " 595 (BC_2, *, controlr, 1)," & + " 596 (BC_2, IO_AP21, output3, X, 595, 1, Z)," & -- PAD554 + " 597 (BC_2, IO_AP21, input, X)," & -- PAD554 + " 598 (BC_2, *, controlr, 1)," & + " 599 (BC_2, IO_AP20, output3, X, 598, 1, Z)," & -- PAD553 + " 600 (BC_2, IO_AP20, input, X)," & -- PAD553 + " 601 (BC_2, *, controlr, 1)," & + " 602 (BC_2, IO_AL21, output3, X, 601, 1, Z)," & -- PAD551 + " 603 (BC_2, IO_AL21, input, X)," & -- PAD551 + " 604 (BC_2, *, controlr, 1)," & + " 605 (BC_2, IO_AL20, output3, X, 604, 1, Z)," & -- PAD548 + " 606 (BC_2, IO_AL20, input, X)," & -- PAD548 + " 607 (BC_2, *, controlr, 1)," & + " 608 (BC_2, IO_AN21, output3, X, 607, 1, Z)," & -- PAD550 + " 609 (BC_2, IO_AN21, input, X)," & -- PAD550 + " 610 (BC_2, *, controlr, 1)," & + " 611 (BC_2, IO_AN20, output3, X, 610, 1, Z)," & -- PAD549 + " 612 (BC_2, IO_AN20, input, X)," & -- PAD549 + " 613 (BC_2, *, controlr, 1)," & + " 614 (BC_2, IO_AM20, output3, X, 613, 1, Z)," & -- PAD547 + " 615 (BC_2, IO_AM20, input, X)," & -- PAD547 + " 616 (BC_2, *, controlr, 1)," & + " 617 (BC_2, IO_AN18, output3, X, 616, 1, Z)," & -- PAD544 + " 618 (BC_2, IO_AN18, input, X)," & -- PAD544 + " 619 (BC_2, *, controlr, 1)," & + " 620 (BC_2, IO_AP19, output3, X, 619, 1, Z)," & -- PAD546 + " 621 (BC_2, IO_AP19, input, X)," & -- PAD546 + " 622 (BC_2, *, controlr, 1)," & + " 623 (BC_2, IO_AR19, output3, X, 622, 1, Z)," & -- PAD545 + " 624 (BC_2, IO_AR19, input, X)," & -- PAD545 + " 625 (BC_2, *, controlr, 1)," & + " 626 (BC_2, IO_AP18, output3, X, 625, 1, Z)," & -- PAD543 + " 627 (BC_2, IO_AP18, input, X)," & -- PAD543 + " 628 (BC_2, *, controlr, 1)," & + " 629 (BC_2, IO_AT17, output3, X, 628, 1, Z)," & -- PAD540 + " 630 (BC_2, IO_AT17, input, X)," & -- PAD540 + " 631 (BC_2, *, controlr, 1)," & + " 632 (BC_2, IO_AT20, output3, X, 631, 1, Z)," & -- PAD542 + " 633 (BC_2, IO_AT20, input, X)," & -- PAD542 + " 634 (BC_2, *, controlr, 1)," & + " 635 (BC_2, IO_AT19, output3, X, 634, 1, Z)," & -- PAD541 + " 636 (BC_2, IO_AT19, input, X)," & -- PAD541 + " 637 (BC_2, *, controlr, 1)," & + " 638 (BC_2, IO_AU17, output3, X, 637, 1, Z)," & -- PAD539 + " 639 (BC_2, IO_AU17, input, X)," & -- PAD539 + " 640 (BC_2, *, controlr, 1)," & + " 641 (BC_2, IO_AR18, output3, X, 640, 1, Z)," & -- PAD536 + " 642 (BC_2, IO_AR18, input, X)," & -- PAD536 + " 643 (BC_2, *, controlr, 1)," & + " 644 (BC_2, IO_AU19, output3, X, 643, 1, Z)," & -- PAD538 + " 645 (BC_2, IO_AU19, input, X)," & -- PAD538 + " 646 (BC_2, *, controlr, 1)," & + " 647 (BC_2, IO_AU18, output3, X, 646, 1, Z)," & -- PAD537 + " 648 (BC_2, IO_AU18, input, X)," & -- PAD537 + " 649 (BC_2, *, controlr, 1)," & + " 650 (BC_2, IO_AR17, output3, X, 649, 1, Z)," & -- PAD535 + " 651 (BC_2, IO_AR17, input, X)," & -- PAD535 + " 652 (BC_2, *, controlr, 1)," & + " 653 (BC_2, IO_AN17, output3, X, 652, 1, Z)," & -- PAD534 + " 654 (BC_2, IO_AN17, input, X)," & -- PAD534 + " 655 (BC_2, *, controlr, 1)," & + " 656 (BC_2, IO_AH17, output3, X, 655, 1, Z)," & -- PAD533 + " 657 (BC_2, IO_AH17, input, X)," & -- PAD533 + " 658 (BC_2, *, controlr, 1)," & + " 659 (BC_2, IO_AL19, output3, X, 658, 1, Z)," & -- PAD530 + " 660 (BC_2, IO_AL19, input, X)," & -- PAD530 + " 661 (BC_2, *, controlr, 1)," & + " 662 (BC_2, IO_AH21, output3, X, 661, 1, Z)," & -- PAD532 + " 663 (BC_2, IO_AH21, input, X)," & -- PAD532 + " 664 (BC_2, *, controlr, 1)," & + " 665 (BC_2, IO_AJ21, output3, X, 664, 1, Z)," & -- PAD531 + " 666 (BC_2, IO_AJ21, input, X)," & -- PAD531 + " 667 (BC_2, *, controlr, 1)," & + " 668 (BC_2, IO_AM19, output3, X, 667, 1, Z)," & -- PAD529 + " 669 (BC_2, IO_AM19, input, X)," & -- PAD529 + " 670 (BC_2, *, controlr, 1)," & + " 671 (BC_2, IO_AK19, output3, X, 670, 1, Z)," & -- PAD526 + " 672 (BC_2, IO_AK19, input, X)," & -- PAD526 + " 673 (BC_2, *, controlr, 1)," & + " 674 (BC_2, IO_AJ20, output3, X, 673, 1, Z)," & -- PAD528 + " 675 (BC_2, IO_AJ20, input, X)," & -- PAD528 + " 676 (BC_2, *, controlr, 1)," & + " 677 (BC_2, IO_AJ19, output3, X, 676, 1, Z)," & -- PAD527 + " 678 (BC_2, IO_AJ19, input, X)," & -- PAD527 + " 679 (BC_2, *, controlr, 1)," & + " 680 (BC_2, IO_AK18, output3, X, 679, 1, Z)," & -- PAD525 + " 681 (BC_2, IO_AK18, input, X)," & -- PAD525 + " 682 (BC_2, *, controlr, 1)," & + " 683 (BC_2, IO_AM18, output3, X, 682, 1, Z)," & -- PAD522 + " 684 (BC_2, IO_AM18, input, X)," & -- PAD522 + " 685 (BC_2, *, controlr, 1)," & + " 686 (BC_2, IO_AH18, output3, X, 685, 1, Z)," & -- PAD524 + " 687 (BC_2, IO_AH18, input, X)," & -- PAD524 + " 688 (BC_2, *, controlr, 1)," & + " 689 (BC_2, IO_AJ18, output3, X, 688, 1, Z)," & -- PAD523 + " 690 (BC_2, IO_AJ18, input, X)," & -- PAD523 + " 691 (BC_2, *, controlr, 1)," & + " 692 (BC_2, IO_AM17, output3, X, 691, 1, Z)," & -- PAD521 + " 693 (BC_2, IO_AM17, input, X)," & -- PAD521 + " 694 (BC_2, *, internal, X)," & + " 695 (BC_2, *, controlr, 1)," & + " 696 (BC_2, IO_AU12, output3, X, 695, 1, Z)," & -- PAD518 + " 697 (BC_2, IO_AU12, input, X)," & -- PAD518 + " 698 (BC_2, *, controlr, 1)," & + " 699 (BC_2, IO_AW11, output3, X, 698, 1, Z)," & -- PAD520 + " 700 (BC_2, IO_AW11, input, X)," & -- PAD520 + " 701 (BC_2, *, controlr, 1)," & + " 702 (BC_2, IO_AW10, output3, X, 701, 1, Z)," & -- PAD519 + " 703 (BC_2, IO_AW10, input, X)," & -- PAD519 + " 704 (BC_2, *, controlr, 1)," & + " 705 (BC_2, IO_AV11, output3, X, 704, 1, Z)," & -- PAD517 + " 706 (BC_2, IO_AV11, input, X)," & -- PAD517 + " 707 (BC_2, *, controlr, 1)," & + " 708 (BC_2, IO_AU10, output3, X, 707, 1, Z)," & -- PAD514 + " 709 (BC_2, IO_AU10, input, X)," & -- PAD514 + " 710 (BC_2, *, controlr, 1)," & + " 711 (BC_2, IO_AW14, output3, X, 710, 1, Z)," & -- PAD516 + " 712 (BC_2, IO_AW14, input, X)," & -- PAD516 + " 713 (BC_2, *, controlr, 1)," & + " 714 (BC_2, IO_AW13, output3, X, 713, 1, Z)," & -- PAD515 + " 715 (BC_2, IO_AW13, input, X)," & -- PAD515 + " 716 (BC_2, *, controlr, 1)," & + " 717 (BC_2, IO_AV10, output3, X, 716, 1, Z)," & -- PAD513 + " 718 (BC_2, IO_AV10, input, X)," & -- PAD513 + " 719 (BC_2, *, controlr, 1)," & + " 720 (BC_2, IO_AU14, output3, X, 719, 1, Z)," & -- PAD510 + " 721 (BC_2, IO_AU14, input, X)," & -- PAD510 + " 722 (BC_2, *, controlr, 1)," & + " 723 (BC_2, IO_AV13, output3, X, 722, 1, Z)," & -- PAD512 + " 724 (BC_2, IO_AV13, input, X)," & -- PAD512 + " 725 (BC_2, *, controlr, 1)," & + " 726 (BC_2, IO_AV12, output3, X, 725, 1, Z)," & -- PAD511 + " 727 (BC_2, IO_AV12, input, X)," & -- PAD511 + " 728 (BC_2, *, controlr, 1)," & + " 729 (BC_2, IO_AU13, output3, X, 728, 1, Z)," & -- PAD509 + " 730 (BC_2, IO_AU13, input, X)," & -- PAD509 + " 731 (BC_2, *, controlr, 1)," & + " 732 (BC_2, IO_AT10, output3, X, 731, 1, Z)," & -- PAD508 + " 733 (BC_2, IO_AT10, input, X)," & -- PAD508 + " 734 (BC_2, *, controlr, 1)," & + " 735 (BC_2, IO_AT16, output3, X, 734, 1, Z)," & -- PAD507 + " 736 (BC_2, IO_AT16, input, X)," & -- PAD507 + " 737 (BC_2, *, controlr, 1)," & + " 738 (BC_2, IO_AT15, output3, X, 737, 1, Z)," & -- PAD504 + " 739 (BC_2, IO_AT15, input, X)," & -- PAD504 + " 740 (BC_2, *, controlr, 1)," & + " 741 (BC_2, IO_AV16, output3, X, 740, 1, Z)," & -- PAD506 + " 742 (BC_2, IO_AV16, input, X)," & -- PAD506 + " 743 (BC_2, *, controlr, 1)," & + " 744 (BC_2, IO_AW16, output3, X, 743, 1, Z)," & -- PAD505 + " 745 (BC_2, IO_AW16, input, X)," & -- PAD505 + " 746 (BC_2, *, controlr, 1)," & + " 747 (BC_2, IO_AU15, output3, X, 746, 1, Z)," & -- PAD503 + " 748 (BC_2, IO_AU15, input, X)," & -- PAD503 + " 749 (BC_2, *, controlr, 1)," & + " 750 (BC_2, IO_AP16, output3, X, 749, 1, Z)," & -- PAD500 + " 751 (BC_2, IO_AP16, input, X)," & -- PAD500 + " 752 (BC_2, *, controlr, 1)," & + " 753 (BC_2, IO_AV15, output3, X, 752, 1, Z)," & -- PAD502 + " 754 (BC_2, IO_AV15, input, X)," & -- PAD502 + " 755 (BC_2, *, controlr, 1)," & + " 756 (BC_2, IO_AW15, output3, X, 755, 1, Z)," & -- PAD501 + " 757 (BC_2, IO_AW15, input, X)," & -- PAD501 + " 758 (BC_2, *, controlr, 1)," & + " 759 (BC_2, IO_AR16, output3, X, 758, 1, Z)," & -- PAD499 + " 760 (BC_2, IO_AR16, input, X)," & -- PAD499 + " 761 (BC_2, *, controlr, 1)," & + " 762 (BC_2, IO_AP15, output3, X, 761, 1, Z)," & -- PAD496 + " 763 (BC_2, IO_AP15, input, X)," & -- PAD496 + " 764 (BC_2, *, controlr, 1)," & + " 765 (BC_2, IO_AR14, output3, X, 764, 1, Z)," & -- PAD498 + " 766 (BC_2, IO_AR14, input, X)," & -- PAD498 + " 767 (BC_2, *, controlr, 1)," & + " 768 (BC_2, IO_AT14, output3, X, 767, 1, Z)," & -- PAD497 + " 769 (BC_2, IO_AT14, input, X)," & -- PAD497 + " 770 (BC_2, *, controlr, 1)," & + " 771 (BC_2, IO_AP14, output3, X, 770, 1, Z)," & -- PAD495 + " 772 (BC_2, IO_AP14, input, X)," & -- PAD495 + " 773 (BC_2, *, controlr, 1)," & + " 774 (BC_2, IO_AM15, output3, X, 773, 1, Z)," & -- PAD492 + " 775 (BC_2, IO_AM15, input, X)," & -- PAD492 + " 776 (BC_2, *, controlr, 1)," & + " 777 (BC_2, IO_AL15, output3, X, 776, 1, Z)," & -- PAD494 + " 778 (BC_2, IO_AL15, input, X)," & -- PAD494 + " 779 (BC_2, *, controlr, 1)," & + " 780 (BC_2, IO_AL14, output3, X, 779, 1, Z)," & -- PAD493 + " 781 (BC_2, IO_AL14, input, X)," & -- PAD493 + " 782 (BC_2, *, controlr, 1)," & + " 783 (BC_2, IO_AN15, output3, X, 782, 1, Z)," & -- PAD491 + " 784 (BC_2, IO_AN15, input, X)," & -- PAD491 + " 785 (BC_2, *, controlr, 1)," & + " 786 (BC_2, IO_AK17, output3, X, 785, 1, Z)," & -- PAD488 + " 787 (BC_2, IO_AK17, input, X)," & -- PAD488 + " 788 (BC_2, *, controlr, 1)," & + " 789 (BC_2, IO_AJ14, output3, X, 788, 1, Z)," & -- PAD490 + " 790 (BC_2, IO_AJ14, input, X)," & -- PAD490 + " 791 (BC_2, *, controlr, 1)," & + " 792 (BC_2, IO_AK14, output3, X, 791, 1, Z)," & -- PAD489 + " 793 (BC_2, IO_AK14, input, X)," & -- PAD489 + " 794 (BC_2, *, controlr, 1)," & + " 795 (BC_2, IO_AL17, output3, X, 794, 1, Z)," & -- PAD487 + " 796 (BC_2, IO_AL17, input, X)," & -- PAD487 + " 797 (BC_2, *, controlr, 1)," & + " 798 (BC_2, IO_AK16, output3, X, 797, 1, Z)," & -- PAD484 + " 799 (BC_2, IO_AK16, input, X)," & -- PAD484 + " 800 (BC_2, *, controlr, 1)," & + " 801 (BC_2, IO_AJ16, output3, X, 800, 1, Z)," & -- PAD486 + " 802 (BC_2, IO_AJ16, input, X)," & -- PAD486 + " 803 (BC_2, *, controlr, 1)," & + " 804 (BC_2, IO_AJ15, output3, X, 803, 1, Z)," & -- PAD485 + " 805 (BC_2, IO_AJ15, input, X)," & -- PAD485 + " 806 (BC_2, *, controlr, 1)," & + " 807 (BC_2, IO_AL16, output3, X, 806, 1, Z)," & -- PAD483 + " 808 (BC_2, IO_AL16, input, X)," & -- PAD483 + " 809 (BC_2, *, controlr, 1)," & + " 810 (BC_2, IO_AN16, output3, X, 809, 1, Z)," & -- PAD482 + " 811 (BC_2, IO_AN16, input, X)," & -- PAD482 + " 812 (BC_2, *, controlr, 1)," & + " 813 (BC_2, IO_AP10, output3, X, 812, 1, Z)," & -- PAD481 + " 814 (BC_2, IO_AP10, input, X)," & -- PAD481 + " 815 (BC_2, *, controlr, 1)," & + " 816 (BC_2, IO_AN13, output3, X, 815, 1, Z)," & -- PAD478 + " 817 (BC_2, IO_AN13, input, X)," & -- PAD478 + " 818 (BC_2, *, controlr, 1)," & + " 819 (BC_2, IO_AT12, output3, X, 818, 1, Z)," & -- PAD480 + " 820 (BC_2, IO_AT12, input, X)," & -- PAD480 + " 821 (BC_2, *, controlr, 1)," & + " 822 (BC_2, IO_AT11, output3, X, 821, 1, Z)," & -- PAD479 + " 823 (BC_2, IO_AT11, input, X)," & -- PAD479 + " 824 (BC_2, *, controlr, 1)," & + " 825 (BC_2, IO_AP13, output3, X, 824, 1, Z)," & -- PAD477 + " 826 (BC_2, IO_AP13, input, X)," & -- PAD477 + " 827 (BC_2, *, controlr, 1)," & + " 828 (BC_2, IO_AM12, output3, X, 827, 1, Z)," & -- PAD474 + " 829 (BC_2, IO_AM12, input, X)," & -- PAD474 + " 830 (BC_2, *, controlr, 1)," & + " 831 (BC_2, IO_AR13, output3, X, 830, 1, Z)," & -- PAD476 + " 832 (BC_2, IO_AR13, input, X)," & -- PAD476 + " 833 (BC_2, *, controlr, 1)," & + " 834 (BC_2, IO_AR12, output3, X, 833, 1, Z)," & -- PAD475 + " 835 (BC_2, IO_AR12, input, X)," & -- PAD475 + " 836 (BC_2, *, controlr, 1)," & + " 837 (BC_2, IO_AN12, output3, X, 836, 1, Z)," & -- PAD473 + " 838 (BC_2, IO_AN12, input, X)," & -- PAD473 + " 839 (BC_2, *, controlr, 1)," & + " 840 (BC_2, IO_AM14, output3, X, 839, 1, Z)," & -- PAD470 + " 841 (BC_2, IO_AM14, input, X)," & -- PAD470 + " 842 (BC_2, *, controlr, 1)," & + " 843 (BC_2, IO_AP11, output3, X, 842, 1, Z)," & -- PAD472 + " 844 (BC_2, IO_AP11, input, X)," & -- PAD472 + " 845 (BC_2, *, controlr, 1)," & + " 846 (BC_2, IO_AR11, output3, X, 845, 1, Z)," & -- PAD471 + " 847 (BC_2, IO_AR11, input, X)," & -- PAD471 + " 848 (BC_2, *, controlr, 1)," & + " 849 (BC_2, IO_AM13, output3, X, 848, 1, Z)," & -- PAD469 + " 850 (BC_2, IO_AM13, input, X)," & -- PAD469 + " 851 (BC_2, *, internal, X)," & + " 852 (BC_2, *, controlr, 1)," & + " 853 (BC_2, IO_AW25, output3, X, 852, 1, Z)," & -- PAD466 + " 854 (BC_2, IO_AW25, input, X)," & -- PAD466 + " 855 (BC_2, *, controlr, 1)," & + " 856 (BC_2, IO_AW23, output3, X, 855, 1, Z)," & -- PAD468 + " 857 (BC_2, IO_AW23, input, X)," & -- PAD468 + " 858 (BC_2, *, controlr, 1)," & + " 859 (BC_2, IO_AW24, output3, X, 858, 1, Z)," & -- PAD467 + " 860 (BC_2, IO_AW24, input, X)," & -- PAD467 + " 861 (BC_2, *, controlr, 1)," & + " 862 (BC_2, IO_AW26, output3, X, 861, 1, Z)," & -- PAD465 + " 863 (BC_2, IO_AW26, input, X)," & -- PAD465 + " 864 (BC_2, *, controlr, 1)," & + " 865 (BC_2, IO_AU25, output3, X, 864, 1, Z)," & -- PAD462 + " 866 (BC_2, IO_AU25, input, X)," & -- PAD462 + " 867 (BC_2, *, controlr, 1)," & + " 868 (BC_2, IO_AU23, output3, X, 867, 1, Z)," & -- PAD464 + " 869 (BC_2, IO_AU23, input, X)," & -- PAD464 + " 870 (BC_2, *, controlr, 1)," & + " 871 (BC_2, IO_AV23, output3, X, 870, 1, Z)," & -- PAD463 + " 872 (BC_2, IO_AV23, input, X)," & -- PAD463 + " 873 (BC_2, *, controlr, 1)," & + " 874 (BC_2, IO_AV25, output3, X, 873, 1, Z)," & -- PAD461 + " 875 (BC_2, IO_AV25, input, X)," & -- PAD461 + " 876 (BC_2, *, controlr, 1)," & + " 877 (BC_2, IO_AV26, output3, X, 876, 1, Z)," & -- PAD458 + " 878 (BC_2, IO_AV26, input, X)," & -- PAD458 + " 879 (BC_2, *, controlr, 1)," & + " 880 (BC_2, IO_AT24, output3, X, 879, 1, Z)," & -- PAD460 + " 881 (BC_2, IO_AT24, input, X)," & -- PAD460 + " 882 (BC_2, *, controlr, 1)," & + " 883 (BC_2, IO_AU24, output3, X, 882, 1, Z)," & -- PAD459 + " 884 (BC_2, IO_AU24, input, X)," & -- PAD459 + " 885 (BC_2, *, controlr, 1)," & + " 886 (BC_2, IO_AV27, output3, X, 885, 1, Z)," & -- PAD457 + " 887 (BC_2, IO_AV27, input, X)," & -- PAD457 + " 888 (BC_2, *, controlr, 1)," & + " 889 (BC_2, IO_AU27, output3, X, 888, 1, Z)," & -- PAD456 + " 890 (BC_2, IO_AU27, input, X)," & -- PAD456 + " 891 (BC_2, *, controlr, 1)," & + " 892 (BC_2, IO_AT27, output3, X, 891, 1, Z)," & -- PAD455 + " 893 (BC_2, IO_AT27, input, X)," & -- PAD455 + " 894 (BC_2, *, controlr, 1)," & + " 895 (BC_2, IO_AT25, output3, X, 894, 1, Z)," & -- PAD452 + " 896 (BC_2, IO_AT25, input, X)," & -- PAD452 + " 897 (BC_2, *, controlr, 1)," & + " 898 (BC_2, IO_AR23, output3, X, 897, 1, Z)," & -- PAD454 + " 899 (BC_2, IO_AR23, input, X)," & -- PAD454 + " 900 (BC_2, *, controlr, 1)," & + " 901 (BC_2, IO_AR24, output3, X, 900, 1, Z)," & -- PAD453 + " 902 (BC_2, IO_AR24, input, X)," & -- PAD453 + " 903 (BC_2, *, controlr, 1)," & + " 904 (BC_2, IO_AT26, output3, X, 903, 1, Z)," & -- PAD451 + " 905 (BC_2, IO_AT26, input, X)," & -- PAD451 + " 906 (BC_2, *, controlr, 1)," & + " 907 (BC_2, IO_AR26, output3, X, 906, 1, Z)," & -- PAD448 + " 908 (BC_2, IO_AR26, input, X)," & -- PAD448 + " 909 (BC_2, *, controlr, 1)," & + " 910 (BC_2, IO_AN23, output3, X, 909, 1, Z)," & -- PAD450 + " 911 (BC_2, IO_AN23, input, X)," & -- PAD450 + " 912 (BC_2, *, controlr, 1)," & + " 913 (BC_2, IO_AP23, output3, X, 912, 1, Z)," & -- PAD449 + " 914 (BC_2, IO_AP23, input, X)," & -- PAD449 + " 915 (BC_2, *, controlr, 1)," & + " 916 (BC_2, IO_AR27, output3, X, 915, 1, Z)," & -- PAD447 + " 917 (BC_2, IO_AR27, input, X)," & -- PAD447 + " 918 (BC_2, *, controlr, 1)," & + " 919 (BC_2, IO_AN25, output3, X, 918, 1, Z)," & -- PAD444 + " 920 (BC_2, IO_AN25, input, X)," & -- PAD444 + " 921 (BC_2, *, controlr, 1)," & + " 922 (BC_2, IO_AP24, output3, X, 921, 1, Z)," & -- PAD446 + " 923 (BC_2, IO_AP24, input, X)," & -- PAD446 + " 924 (BC_2, *, controlr, 1)," & + " 925 (BC_2, IO_AP25, output3, X, 924, 1, Z)," & -- PAD445 + " 926 (BC_2, IO_AP25, input, X)," & -- PAD445 + " 927 (BC_2, *, controlr, 1)," & + " 928 (BC_2, IO_AP26, output3, X, 927, 1, Z)," & -- PAD443 + " 929 (BC_2, IO_AP26, input, X)," & -- PAD443 + " 930 (BC_2, *, controlr, 1)," & + " 931 (BC_2, IO_AL24, output3, X, 930, 1, Z)," & -- PAD440 + " 932 (BC_2, IO_AL24, input, X)," & -- PAD440 + " 933 (BC_2, *, controlr, 1)," & + " 934 (BC_2, IO_AM23, output3, X, 933, 1, Z)," & -- PAD442 + " 935 (BC_2, IO_AM23, input, X)," & -- PAD442 + " 936 (BC_2, *, controlr, 1)," & + " 937 (BC_2, IO_AM24, output3, X, 936, 1, Z)," & -- PAD441 + " 938 (BC_2, IO_AM24, input, X)," & -- PAD441 + " 939 (BC_2, *, controlr, 1)," & + " 940 (BC_2, IO_AM25, output3, X, 939, 1, Z)," & -- PAD439 + " 941 (BC_2, IO_AM25, input, X)," & -- PAD439 + " 942 (BC_2, *, controlr, 1)," & + " 943 (BC_2, IO_AH25, output3, X, 942, 1, Z)," & -- PAD436 + " 944 (BC_2, IO_AH25, input, X)," & -- PAD436 + " 945 (BC_2, *, controlr, 1)," & + " 946 (BC_2, IO_AK22, output3, X, 945, 1, Z)," & -- PAD438 + " 947 (BC_2, IO_AK22, input, X)," & -- PAD438 + " 948 (BC_2, *, controlr, 1)," & + " 949 (BC_2, IO_AK23, output3, X, 948, 1, Z)," & -- PAD437 + " 950 (BC_2, IO_AK23, input, X)," & -- PAD437 + " 951 (BC_2, *, controlr, 1)," & + " 952 (BC_2, IO_AJ25, output3, X, 951, 1, Z)," & -- PAD435 + " 953 (BC_2, IO_AJ25, input, X)," & -- PAD435 + " 954 (BC_2, *, controlr, 1)," & + " 955 (BC_2, IO_AJ24, output3, X, 954, 1, Z)," & -- PAD432 + " 956 (BC_2, IO_AJ24, input, X)," & -- PAD432 + " 957 (BC_2, *, controlr, 1)," & + " 958 (BC_2, IO_AH23, output3, X, 957, 1, Z)," & -- PAD434 + " 959 (BC_2, IO_AH23, input, X)," & -- PAD434 + " 960 (BC_2, *, controlr, 1)," & + " 961 (BC_2, IO_AJ23, output3, X, 960, 1, Z)," & -- PAD433 + " 962 (BC_2, IO_AJ23, input, X)," & -- PAD433 + " 963 (BC_2, *, controlr, 1)," & + " 964 (BC_2, IO_AK24, output3, X, 963, 1, Z)," & -- PAD431 + " 965 (BC_2, IO_AK24, input, X)," & -- PAD431 + " 966 (BC_2, *, controlr, 1)," & + " 967 (BC_2, IO_AH22, output3, X, 966, 1, Z)," & -- PAD430 + " 968 (BC_2, IO_AH22, input, X)," & -- PAD430 + " 969 (BC_2, *, controlr, 1)," & + " 970 (BC_2, IO_AM27, output3, X, 969, 1, Z)," & -- PAD429 + " 971 (BC_2, IO_AM27, input, X)," & -- PAD429 + " 972 (BC_2, *, controlr, 1)," & + " 973 (BC_2, IO_AJ28, output3, X, 972, 1, Z)," & -- PAD426 + " 974 (BC_2, IO_AJ28, input, X)," & -- PAD426 + " 975 (BC_2, *, controlr, 1)," & + " 976 (BC_2, IO_AL25, output3, X, 975, 1, Z)," & -- PAD428 + " 977 (BC_2, IO_AL25, input, X)," & -- PAD428 + " 978 (BC_2, *, controlr, 1)," & + " 979 (BC_2, IO_AL26, output3, X, 978, 1, Z)," & -- PAD427 + " 980 (BC_2, IO_AL26, input, X)," & -- PAD427 + " 981 (BC_2, *, controlr, 1)," & + " 982 (BC_2, IO_AK28, output3, X, 981, 1, Z)," & -- PAD425 + " 983 (BC_2, IO_AK28, input, X)," & -- PAD425 + " 984 (BC_2, *, controlr, 1)," & + " 985 (BC_2, IO_AH26, output3, X, 984, 1, Z)," & -- PAD422 + " 986 (BC_2, IO_AH26, input, X)," & -- PAD422 + " 987 (BC_2, *, controlr, 1)," & + " 988 (BC_2, IO_AJ26, output3, X, 987, 1, Z)," & -- PAD424 + " 989 (BC_2, IO_AJ26, input, X)," & -- PAD424 + " 990 (BC_2, *, controlr, 1)," & + " 991 (BC_2, IO_AK26, output3, X, 990, 1, Z)," & -- PAD423 + " 992 (BC_2, IO_AK26, input, X)," & -- PAD423 + " 993 (BC_2, *, controlr, 1)," & + " 994 (BC_2, IO_AH27, output3, X, 993, 1, Z)," & -- PAD421 + " 995 (BC_2, IO_AH27, input, X)," & -- PAD421 + " 996 (BC_2, *, controlr, 1)," & + " 997 (BC_2, IO_AK27, output3, X, 996, 1, Z)," & -- PAD418 + " 998 (BC_2, IO_AK27, input, X)," & -- PAD418 + " 999 (BC_2, *, controlr, 1)," & + "1000 (BC_2, IO_AN26, output3, X, 999, 1, Z)," & -- PAD420 + "1001 (BC_2, IO_AN26, input, X)," & -- PAD420 + "1002 (BC_2, *, controlr, 1)," & + "1003 (BC_2, IO_AN27, output3, X, 1002, 1, Z)," & -- PAD419 + "1004 (BC_2, IO_AN27, input, X)," & -- PAD419 + "1005 (BC_2, *, controlr, 1)," & + "1006 (BC_2, IO_AL27, output3, X, 1005, 1, Z)," & -- PAD417 + "1007 (BC_2, IO_AL27, input, X)," & -- PAD417 + "1008 (BC_2, *, internal, X)," & + "1009 (BC_2, *, controlr, 1)," & + "1010 (BC_2, IO_AT30, output3, X, 1009, 1, Z)," & -- PAD414 + "1011 (BC_2, IO_AT30, input, X)," & -- PAD414 + "1012 (BC_2, *, controlr, 1)," & + "1013 (BC_2, IO_AU28, output3, X, 1012, 1, Z)," & -- PAD416 + "1014 (BC_2, IO_AU28, input, X)," & -- PAD416 + "1015 (BC_2, *, controlr, 1)," & + "1016 (BC_2, IO_AV28, output3, X, 1015, 1, Z)," & -- PAD415 + "1017 (BC_2, IO_AV28, input, X)," & -- PAD415 + "1018 (BC_2, *, controlr, 1)," & + "1019 (BC_2, IO_AU30, output3, X, 1018, 1, Z)," & -- PAD413 + "1020 (BC_2, IO_AU30, input, X)," & -- PAD413 + "1021 (BC_2, *, controlr, 1)," & + "1022 (BC_2, IO_AV30, output3, X, 1021, 1, Z)," & -- PAD410 + "1023 (BC_2, IO_AV30, input, X)," & -- PAD410 + "1024 (BC_2, *, controlr, 1)," & + "1025 (BC_2, IO_AW28, output3, X, 1024, 1, Z)," & -- PAD412 + "1026 (BC_2, IO_AW28, input, X)," & -- PAD412 + "1027 (BC_2, *, controlr, 1)," & + "1028 (BC_2, IO_AW29, output3, X, 1027, 1, Z)," & -- PAD411 + "1029 (BC_2, IO_AW29, input, X)," & -- PAD411 + "1030 (BC_2, *, controlr, 1)," & + "1031 (BC_2, IO_AW30, output3, X, 1030, 1, Z)," & -- PAD409 + "1032 (BC_2, IO_AW30, input, X)," & -- PAD409 + "1033 (BC_2, *, controlr, 1)," & + "1034 (BC_2, IO_AV31, output3, X, 1033, 1, Z)," & -- PAD406 + "1035 (BC_2, IO_AV31, input, X)," & -- PAD406 + "1036 (BC_2, *, controlr, 1)," & + "1037 (BC_2, IO_AT29, output3, X, 1036, 1, Z)," & -- PAD408 + "1038 (BC_2, IO_AT29, input, X)," & -- PAD408 + "1039 (BC_2, *, controlr, 1)," & + "1040 (BC_2, IO_AU29, output3, X, 1039, 1, Z)," & -- PAD407 + "1041 (BC_2, IO_AU29, input, X)," & -- PAD407 + "1042 (BC_2, *, controlr, 1)," & + "1043 (BC_2, IO_AW31, output3, X, 1042, 1, Z)," & -- PAD405 + "1044 (BC_2, IO_AW31, input, X)," & -- PAD405 + "1045 (BC_2, *, controlr, 1)," & + "1046 (BC_2, IO_AR29, output3, X, 1045, 1, Z)," & -- PAD404 + "1047 (BC_2, IO_AR29, input, X)," & -- PAD404 + "1048 (BC_2, *, controlr, 1)," & + "1049 (BC_2, IO_AW33, output3, X, 1048, 1, Z)," & -- PAD403 + "1050 (BC_2, IO_AW33, input, X)," & -- PAD403 + "1051 (BC_2, *, controlr, 1)," & + "1052 (BC_2, IO_AW34, output3, X, 1051, 1, Z)," & -- PAD400 + "1053 (BC_2, IO_AW34, input, X)," & -- PAD400 + "1054 (BC_2, *, controlr, 1)," & + "1055 (BC_2, IO_AV35, output3, X, 1054, 1, Z)," & -- PAD402 + "1056 (BC_2, IO_AV35, input, X)," & -- PAD402 + "1057 (BC_2, *, controlr, 1)," & + "1058 (BC_2, IO_AV36, output3, X, 1057, 1, Z)," & -- PAD401 + "1059 (BC_2, IO_AV36, input, X)," & -- PAD401 + "1060 (BC_2, *, controlr, 1)," & + "1061 (BC_2, IO_AW35, output3, X, 1060, 1, Z)," & -- PAD399 + "1062 (BC_2, IO_AW35, input, X)," & -- PAD399 + "1063 (BC_2, *, controlr, 1)," & + "1064 (BC_2, IO_AV32, output3, X, 1063, 1, Z)," & -- PAD396 + "1065 (BC_2, IO_AV32, input, X)," & -- PAD396 + "1066 (BC_2, *, controlr, 1)," & + "1067 (BC_2, IO_AT35, output3, X, 1066, 1, Z)," & -- PAD398 + "1068 (BC_2, IO_AT35, input, X)," & -- PAD398 + "1069 (BC_2, *, controlr, 1)," & + "1070 (BC_2, IO_AT36, output3, X, 1069, 1, Z)," & -- PAD397 + "1071 (BC_2, IO_AT36, input, X)," & -- PAD397 + "1072 (BC_2, *, controlr, 1)," & + "1073 (BC_2, IO_AV33, output3, X, 1072, 1, Z)," & -- PAD395 + "1074 (BC_2, IO_AV33, input, X)," & -- PAD395 + "1075 (BC_2, *, controlr, 1)," & + "1076 (BC_2, IO_AU34, output3, X, 1075, 1, Z)," & -- PAD392 + "1077 (BC_2, IO_AU34, input, X)," & -- PAD392 + "1078 (BC_2, *, controlr, 1)," & + "1079 (BC_2, IO_AU32, output3, X, 1078, 1, Z)," & -- PAD394 + "1080 (BC_2, IO_AU32, input, X)," & -- PAD394 + "1081 (BC_2, *, controlr, 1)," & + "1082 (BC_2, IO_AU33, output3, X, 1081, 1, Z)," & -- PAD393 + "1083 (BC_2, IO_AU33, input, X)," & -- PAD393 + "1084 (BC_2, *, controlr, 1)," & + "1085 (BC_2, IO_AU35, output3, X, 1084, 1, Z)," & -- PAD391 + "1086 (BC_2, IO_AU35, input, X)," & -- PAD391 + "1087 (BC_2, *, controlr, 1)," & + "1088 (BC_2, IO_AR32, output3, X, 1087, 1, Z)," & -- PAD388 + "1089 (BC_2, IO_AR32, input, X)," & -- PAD388 + "1090 (BC_2, *, controlr, 1)," & + "1091 (BC_2, IO_AR34, output3, X, 1090, 1, Z)," & -- PAD390 + "1092 (BC_2, IO_AR34, input, X)," & -- PAD390 + "1093 (BC_2, *, controlr, 1)," & + "1094 (BC_2, IO_AT34, output3, X, 1093, 1, Z)," & -- PAD389 + "1095 (BC_2, IO_AT34, input, X)," & -- PAD389 + "1096 (BC_2, *, controlr, 1)," & + "1097 (BC_2, IO_AT32, output3, X, 1096, 1, Z)," & -- PAD387 + "1098 (BC_2, IO_AT32, input, X)," & -- PAD387 + "1099 (BC_2, *, controlr, 1)," & + "1100 (BC_2, IO_AP34, output3, X, 1099, 1, Z)," & -- PAD384 + "1101 (BC_2, IO_AP34, input, X)," & -- PAD384 + "1102 (BC_2, *, controlr, 1)," & + "1103 (BC_2, IO_AR31, output3, X, 1102, 1, Z)," & -- PAD386 + "1104 (BC_2, IO_AR31, input, X)," & -- PAD386 + "1105 (BC_2, *, controlr, 1)," & + "1106 (BC_2, IO_AT31, output3, X, 1105, 1, Z)," & -- PAD385 + "1107 (BC_2, IO_AT31, input, X)," & -- PAD385 + "1108 (BC_2, *, controlr, 1)," & + "1109 (BC_2, IO_AP35, output3, X, 1108, 1, Z)," & -- PAD383 + "1110 (BC_2, IO_AP35, input, X)," & -- PAD383 + "1111 (BC_2, *, controlr, 1)," & + "1112 (BC_2, IO_AP36, output3, X, 1111, 1, Z)," & -- PAD380 + "1113 (BC_2, IO_AP36, input, X)," & -- PAD380 + "1114 (BC_2, *, controlr, 1)," & + "1115 (BC_2, IO_AP33, output3, X, 1114, 1, Z)," & -- PAD382 + "1116 (BC_2, IO_AP33, input, X)," & -- PAD382 + "1117 (BC_2, *, controlr, 1)," & + "1118 (BC_2, IO_AR33, output3, X, 1117, 1, Z)," & -- PAD381 + "1119 (BC_2, IO_AR33, input, X)," & -- PAD381 + "1120 (BC_2, *, controlr, 1)," & + "1121 (BC_2, IO_AR36, output3, X, 1120, 1, Z)," & -- PAD379 + "1122 (BC_2, IO_AR36, input, X)," & -- PAD379 + "1123 (BC_2, *, controlr, 1)," & + "1124 (BC_2, IO_AP31, output3, X, 1123, 1, Z)," & -- PAD378 + "1125 (BC_2, IO_AP31, input, X)," & -- PAD378 + "1126 (BC_2, *, controlr, 1)," & + "1127 (BC_2, IO_AW36, output3, X, 1126, 1, Z)," & -- PAD377 + "1128 (BC_2, IO_AW36, input, X)," & -- PAD377 + "1129 (BC_2, *, controlr, 1)," & + "1130 (BC_2, IO_AU37, output3, X, 1129, 1, Z)," & -- PAD374 + "1131 (BC_2, IO_AU37, input, X)," & -- PAD374 + "1132 (BC_2, *, controlr, 1)," & + "1133 (BC_2, IO_AR37, output3, X, 1132, 1, Z)," & -- PAD376 + "1134 (BC_2, IO_AR37, input, X)," & -- PAD376 + "1135 (BC_2, *, controlr, 1)," & + "1136 (BC_2, IO_AT37, output3, X, 1135, 1, Z)," & -- PAD375 + "1137 (BC_2, IO_AT37, input, X)," & -- PAD375 + "1138 (BC_2, *, controlr, 1)," & + "1139 (BC_2, IO_AV37, output3, X, 1138, 1, Z)," & -- PAD373 + "1140 (BC_2, IO_AV37, input, X)," & -- PAD373 + "1141 (BC_2, *, controlr, 1)," & + "1142 (BC_2, IO_AU38, output3, X, 1141, 1, Z)," & -- PAD370 + "1143 (BC_2, IO_AU38, input, X)," & -- PAD370 + "1144 (BC_2, *, controlr, 1)," & + "1145 (BC_2, IO_AR38, output3, X, 1144, 1, Z)," & -- PAD372 + "1146 (BC_2, IO_AR38, input, X)," & -- PAD372 + "1147 (BC_2, *, controlr, 1)," & + "1148 (BC_2, IO_AR39, output3, X, 1147, 1, Z)," & -- PAD371 + "1149 (BC_2, IO_AR39, input, X)," & -- PAD371 + "1150 (BC_2, *, controlr, 1)," & + "1151 (BC_2, IO_AV38, output3, X, 1150, 1, Z)," & -- PAD369 + "1152 (BC_2, IO_AV38, input, X)," & -- PAD369 + "1153 (BC_2, *, controlr, 1)," & + "1154 (BC_2, IO_AT39, output3, X, 1153, 1, Z)," & -- PAD366 + "1155 (BC_2, IO_AT39, input, X)," & -- PAD366 + "1156 (BC_2, *, controlr, 1)," & + "1157 (BC_2, IO_AP38, output3, X, 1156, 1, Z)," & -- PAD368 + "1158 (BC_2, IO_AP38, input, X)," & -- PAD368 + "1159 (BC_2, *, controlr, 1)," & + "1160 (BC_2, IO_AP39, output3, X, 1159, 1, Z)," & -- PAD367 + "1161 (BC_2, IO_AP39, input, X)," & -- PAD367 + "1162 (BC_2, *, controlr, 1)," & + "1163 (BC_2, IO_AU39, output3, X, 1162, 1, Z)," & -- PAD365 + "1164 (BC_2, IO_AU39, input, X)," & -- PAD365 + "1165 (BC_2, *, internal, X)," & + "1166 (BC_2, *, controlr, 1)," & + "1167 (BC_2, IO_AL30, output3, X, 1166, 1, Z)," & -- PAD362 + "1168 (BC_2, IO_AL30, input, X)," & -- PAD362 + "1169 (BC_2, *, controlr, 1)," & + "1170 (BC_2, IO_AM28, output3, X, 1169, 1, Z)," & -- PAD364 + "1171 (BC_2, IO_AM28, input, X)," & -- PAD364 + "1172 (BC_2, *, controlr, 1)," & + "1173 (BC_2, IO_AN28, output3, X, 1172, 1, Z)," & -- PAD363 + "1174 (BC_2, IO_AN28, input, X)," & -- PAD363 + "1175 (BC_2, *, controlr, 1)," & + "1176 (BC_2, IO_AM30, output3, X, 1175, 1, Z)," & -- PAD361 + "1177 (BC_2, IO_AM30, input, X)," & -- PAD361 + "1178 (BC_2, *, controlr, 1)," & + "1179 (BC_2, IO_AN30, output3, X, 1178, 1, Z)," & -- PAD358 + "1180 (BC_2, IO_AN30, input, X)," & -- PAD358 + "1181 (BC_2, *, controlr, 1)," & + "1182 (BC_2, IO_AP28, output3, X, 1181, 1, Z)," & -- PAD360 + "1183 (BC_2, IO_AP28, input, X)," & -- PAD360 + "1184 (BC_2, *, controlr, 1)," & + "1185 (BC_2, IO_AP29, output3, X, 1184, 1, Z)," & -- PAD359 + "1186 (BC_2, IO_AP29, input, X)," & -- PAD359 + "1187 (BC_2, *, controlr, 1)," & + "1188 (BC_2, IO_AN31, output3, X, 1187, 1, Z)," & -- PAD357 + "1189 (BC_2, IO_AN31, input, X)," & -- PAD357 + "1190 (BC_2, *, controlr, 1)," & + "1191 (BC_2, IO_AN32, output3, X, 1190, 1, Z)," & -- PAD354 + "1192 (BC_2, IO_AN32, input, X)," & -- PAD354 + "1193 (BC_2, *, controlr, 1)," & + "1194 (BC_2, IO_AL29, output3, X, 1193, 1, Z)," & -- PAD356 + "1195 (BC_2, IO_AL29, input, X)," & -- PAD356 + "1196 (BC_2, *, controlr, 1)," & + "1197 (BC_2, IO_AM29, output3, X, 1196, 1, Z)," & -- PAD355 + "1198 (BC_2, IO_AM29, input, X)," & -- PAD355 + "1199 (BC_2, *, controlr, 1)," & + "1200 (BC_2, IO_AN33, output3, X, 1199, 1, Z)," & -- PAD353 + "1201 (BC_2, IO_AN33, input, X)," & -- PAD353 + "1202 (BC_2, *, controlr, 1)," & + "1203 (BC_2, IO_AP30, output3, X, 1202, 1, Z)," & -- PAD352 + "1204 (BC_2, IO_AP30, input, X)," & -- PAD352 + "1205 (BC_2, *, controlr, 1)," & + "1206 (BC_2, IO_AK29, output3, X, 1205, 1, Z)," & -- PAD351 + "1207 (BC_2, IO_AK29, input, X)," & -- PAD351 + "1208 (BC_2, *, controlr, 1)," & + "1209 (BC_2, IO_AJ29, output3, X, 1208, 1, Z)," & -- PAD348 + "1210 (BC_2, IO_AJ29, input, X)," & -- PAD348 + "1211 (BC_2, *, controlr, 1)," & + "1212 (BC_2, IO_AH30, output3, X, 1211, 1, Z)," & -- PAD350 + "1213 (BC_2, IO_AH30, input, X)," & -- PAD350 + "1214 (BC_2, *, controlr, 1)," & + "1215 (BC_2, IO_AJ31, output3, X, 1214, 1, Z)," & -- PAD349 + "1216 (BC_2, IO_AJ31, input, X)," & -- PAD349 + "1217 (BC_2, *, controlr, 1)," & + "1218 (BC_2, IO_AJ30, output3, X, 1217, 1, Z)," & -- PAD347 + "1219 (BC_2, IO_AJ30, input, X)," & -- PAD347 + "1220 (BC_2, *, controlr, 1)," & + "1221 (BC_2, IO_AK31, output3, X, 1220, 1, Z)," & -- PAD344 + "1222 (BC_2, IO_AK31, input, X)," & -- PAD344 + "1223 (BC_2, *, controlr, 1)," & + "1224 (BC_2, IO_AH31, output3, X, 1223, 1, Z)," & -- PAD346 + "1225 (BC_2, IO_AH31, input, X)," & -- PAD346 + "1226 (BC_2, *, controlr, 1)," & + "1227 (BC_2, IO_AH32, output3, X, 1226, 1, Z)," & -- PAD345 + "1228 (BC_2, IO_AH32, input, X)," & -- PAD345 + "1229 (BC_2, *, controlr, 1)," & + "1230 (BC_2, IO_AL31, output3, X, 1229, 1, Z)," & -- PAD343 + "1231 (BC_2, IO_AL31, input, X)," & -- PAD343 + "1232 (BC_2, *, controlr, 1)," & + "1233 (BC_2, IO_AM32, output3, X, 1232, 1, Z)," & -- PAD340 + "1234 (BC_2, IO_AM32, input, X)," & -- PAD340 + "1235 (BC_2, *, controlr, 1)," & + "1236 (BC_2, IO_AK32, output3, X, 1235, 1, Z)," & -- PAD342 + "1237 (BC_2, IO_AK32, input, X)," & -- PAD342 + "1238 (BC_2, *, controlr, 1)," & + "1239 (BC_2, IO_AL32, output3, X, 1238, 1, Z)," & -- PAD341 + "1240 (BC_2, IO_AL32, input, X)," & -- PAD341 + "1241 (BC_2, *, controlr, 1)," & + "1242 (BC_2, IO_AM33, output3, X, 1241, 1, Z)," & -- PAD339 + "1243 (BC_2, IO_AM33, input, X)," & -- PAD339 + "1244 (BC_2, *, controlr, 1)," & + "1245 (BC_2, IO_AL34, output3, X, 1244, 1, Z)," & -- PAD336 + "1246 (BC_2, IO_AL34, input, X)," & -- PAD336 + "1247 (BC_2, *, controlr, 1)," & + "1248 (BC_2, IO_AK33, output3, X, 1247, 1, Z)," & -- PAD338 + "1249 (BC_2, IO_AK33, input, X)," & -- PAD338 + "1250 (BC_2, *, controlr, 1)," & + "1251 (BC_2, IO_AK34, output3, X, 1250, 1, Z)," & -- PAD337 + "1252 (BC_2, IO_AK34, input, X)," & -- PAD337 + "1253 (BC_2, *, controlr, 1)," & + "1254 (BC_2, IO_AM34, output3, X, 1253, 1, Z)," & -- PAD335 + "1255 (BC_2, IO_AM34, input, X)," & -- PAD335 + "1256 (BC_2, *, controlr, 1)," & + "1257 (BC_2, IO_AN35, output3, X, 1256, 1, Z)," & -- PAD332 + "1258 (BC_2, IO_AN35, input, X)," & -- PAD332 + "1259 (BC_2, *, controlr, 1)," & + "1260 (BC_2, IO_AJ34, output3, X, 1259, 1, Z)," & -- PAD334 + "1261 (BC_2, IO_AJ34, input, X)," & -- PAD334 + "1262 (BC_2, *, controlr, 1)," & + "1263 (BC_2, IO_AK35, output3, X, 1262, 1, Z)," & -- PAD333 + "1264 (BC_2, IO_AK35, input, X)," & -- PAD333 + "1265 (BC_2, *, controlr, 1)," & + "1266 (BC_2, IO_AN36, output3, X, 1265, 1, Z)," & -- PAD331 + "1267 (BC_2, IO_AN36, input, X)," & -- PAD331 + "1268 (BC_2, *, controlr, 1)," & + "1269 (BC_2, IO_AL35, output3, X, 1268, 1, Z)," & -- PAD328 + "1270 (BC_2, IO_AL35, input, X)," & -- PAD328 + "1271 (BC_2, *, controlr, 1)," & + "1272 (BC_2, IO_AH33, output3, X, 1271, 1, Z)," & -- PAD330 + "1273 (BC_2, IO_AH33, input, X)," & -- PAD330 + "1274 (BC_2, *, controlr, 1)," & + "1275 (BC_2, IO_AJ33, output3, X, 1274, 1, Z)," & -- PAD329 + "1276 (BC_2, IO_AJ33, input, X)," & -- PAD329 + "1277 (BC_2, *, controlr, 1)," & + "1278 (BC_2, IO_AM35, output3, X, 1277, 1, Z)," & -- PAD327 + "1279 (BC_2, IO_AM35, input, X)," & -- PAD327 + "1280 (BC_2, *, controlr, 1)," & + "1281 (BC_2, IO_AH34, output3, X, 1280, 1, Z)," & -- PAD326 + "1282 (BC_2, IO_AH34, input, X)," & -- PAD326 + "1283 (BC_2, *, controlr, 1)," & + "1284 (BC_2, IO_AK36, output3, X, 1283, 1, Z)," & -- PAD325 + "1285 (BC_2, IO_AK36, input, X)," & -- PAD325 + "1286 (BC_2, *, controlr, 1)," & + "1287 (BC_2, IO_AL39, output3, X, 1286, 1, Z)," & -- PAD322 + "1288 (BC_2, IO_AL39, input, X)," & -- PAD322 + "1289 (BC_2, *, controlr, 1)," & + "1290 (BC_2, IO_AM37, output3, X, 1289, 1, Z)," & -- PAD324 + "1291 (BC_2, IO_AM37, input, X)," & -- PAD324 + "1292 (BC_2, *, controlr, 1)," & + "1293 (BC_2, IO_AN37, output3, X, 1292, 1, Z)," & -- PAD323 + "1294 (BC_2, IO_AN37, input, X)," & -- PAD323 + "1295 (BC_2, *, controlr, 1)," & + "1296 (BC_2, IO_AM39, output3, X, 1295, 1, Z)," & -- PAD321 + "1297 (BC_2, IO_AM39, input, X)," & -- PAD321 + "1298 (BC_2, *, controlr, 1)," & + "1299 (BC_2, IO_AK37, output3, X, 1298, 1, Z)," & -- PAD318 + "1300 (BC_2, IO_AK37, input, X)," & -- PAD318 + "1301 (BC_2, *, controlr, 1)," & + "1302 (BC_2, IO_AM38, output3, X, 1301, 1, Z)," & -- PAD320 + "1303 (BC_2, IO_AM38, input, X)," & -- PAD320 + "1304 (BC_2, *, controlr, 1)," & + "1305 (BC_2, IO_AN38, output3, X, 1304, 1, Z)," & -- PAD319 + "1306 (BC_2, IO_AN38, input, X)," & -- PAD319 + "1307 (BC_2, *, controlr, 1)," & + "1308 (BC_2, IO_AK38, output3, X, 1307, 1, Z)," & -- PAD317 + "1309 (BC_2, IO_AK38, input, X)," & -- PAD317 + "1310 (BC_2, *, controlr, 1)," & + "1311 (BC_2, IO_AJ39, output3, X, 1310, 1, Z)," & -- PAD314 + "1312 (BC_2, IO_AJ39, input, X)," & -- PAD314 + "1313 (BC_2, *, controlr, 1)," & + "1314 (BC_2, IO_AL36, output3, X, 1313, 1, Z)," & -- PAD316 + "1315 (BC_2, IO_AL36, input, X)," & -- PAD316 + "1316 (BC_2, *, controlr, 1)," & + "1317 (BC_2, IO_AL37, output3, X, 1316, 1, Z)," & -- PAD315 + "1318 (BC_2, IO_AL37, input, X)," & -- PAD315 + "1319 (BC_2, *, controlr, 1)," & + "1320 (BC_2, IO_AK39, output3, X, 1319, 1, Z)," & -- PAD313 + "1321 (BC_2, IO_AK39, input, X)," & -- PAD313 + "1322 (BC_2, *, internal, X)," & + "1323 (BC_2, *, controlr, 1)," & + "1324 (BC_2, IO_J27, output3, X, 1323, 1, Z)," & -- PAD310 + "1325 (BC_2, IO_J27, input, X)," & -- PAD310 + "1326 (BC_2, *, controlr, 1)," & + "1327 (BC_2, IO_M25, output3, X, 1326, 1, Z)," & -- PAD312 + "1328 (BC_2, IO_M25, input, X)," & -- PAD312 + "1329 (BC_2, *, controlr, 1)," & + "1330 (BC_2, IO_M26, output3, X, 1329, 1, Z)," & -- PAD311 + "1331 (BC_2, IO_M26, input, X)," & -- PAD311 + "1332 (BC_2, *, controlr, 1)," & + "1333 (BC_2, IO_H27, output3, X, 1332, 1, Z)," & -- PAD309 + "1334 (BC_2, IO_H27, input, X)," & -- PAD309 + "1335 (BC_2, *, controlr, 1)," & + "1336 (BC_2, IO_J25, output3, X, 1335, 1, Z)," & -- PAD306 + "1337 (BC_2, IO_J25, input, X)," & -- PAD306 + "1338 (BC_2, *, controlr, 1)," & + "1339 (BC_2, IO_L26, output3, X, 1338, 1, Z)," & -- PAD308 + "1340 (BC_2, IO_L26, input, X)," & -- PAD308 + "1341 (BC_2, *, controlr, 1)," & + "1342 (BC_2, IO_L27, output3, X, 1341, 1, Z)," & -- PAD307 + "1343 (BC_2, IO_L27, input, X)," & -- PAD307 + "1344 (BC_2, *, controlr, 1)," & + "1345 (BC_2, IO_H25, output3, X, 1344, 1, Z)," & -- PAD305 + "1346 (BC_2, IO_H25, input, X)," & -- PAD305 + "1347 (BC_2, *, controlr, 1)," & + "1348 (BC_2, IO_G25, output3, X, 1347, 1, Z)," & -- PAD302 + "1349 (BC_2, IO_G25, input, X)," & -- PAD302 + "1350 (BC_2, *, controlr, 1)," & + "1351 (BC_2, IO_K26, output3, X, 1350, 1, Z)," & -- PAD304 + "1352 (BC_2, IO_K26, input, X)," & -- PAD304 + "1353 (BC_2, *, controlr, 1)," & + "1354 (BC_2, IO_J26, output3, X, 1353, 1, Z)," & -- PAD303 + "1355 (BC_2, IO_J26, input, X)," & -- PAD303 + "1356 (BC_2, *, controlr, 1)," & + "1357 (BC_2, IO_G26, output3, X, 1356, 1, Z)," & -- PAD301 + "1358 (BC_2, IO_G26, input, X)," & -- PAD301 + "1359 (BC_2, *, controlr, 1)," & + "1360 (BC_2, IO_K25, output3, X, 1359, 1, Z)," & -- PAD300 + "1361 (BC_2, IO_K25, input, X)," & -- PAD300 + "1362 (BC_2, *, controlr, 1)," & + "1363 (BC_2, IO_F26, output3, X, 1362, 1, Z)," & -- PAD299 + "1364 (BC_2, IO_F26, input, X)," & -- PAD299 + "1365 (BC_2, *, controlr, 1)," & + "1366 (BC_2, IO_H29, output3, X, 1365, 1, Z)," & -- PAD296 + "1367 (BC_2, IO_H29, input, X)," & -- PAD296 + "1368 (BC_2, *, controlr, 1)," & + "1369 (BC_2, IO_J30, output3, X, 1368, 1, Z)," & -- PAD298 + "1370 (BC_2, IO_J30, input, X)," & -- PAD298 + "1371 (BC_2, *, controlr, 1)," & + "1372 (BC_2, IO_J31, output3, X, 1371, 1, Z)," & -- PAD297 + "1373 (BC_2, IO_J31, input, X)," & -- PAD297 + "1374 (BC_2, *, controlr, 1)," & + "1375 (BC_2, IO_H30, output3, X, 1374, 1, Z)," & -- PAD295 + "1376 (BC_2, IO_H30, input, X)," & -- PAD295 + "1377 (BC_2, *, controlr, 1)," & + "1378 (BC_2, IO_G31, output3, X, 1377, 1, Z)," & -- PAD292 + "1379 (BC_2, IO_G31, input, X)," & -- PAD292 + "1380 (BC_2, *, controlr, 1)," & + "1381 (BC_2, IO_J28, output3, X, 1380, 1, Z)," & -- PAD294 + "1382 (BC_2, IO_J28, input, X)," & -- PAD294 + "1383 (BC_2, *, controlr, 1)," & + "1384 (BC_2, IO_H28, output3, X, 1383, 1, Z)," & -- PAD293 + "1385 (BC_2, IO_H28, input, X)," & -- PAD293 + "1386 (BC_2, *, controlr, 1)," & + "1387 (BC_2, IO_F31, output3, X, 1386, 1, Z)," & -- PAD291 + "1388 (BC_2, IO_F31, input, X)," & -- PAD291 + "1389 (BC_2, *, controlr, 1)," & + "1390 (BC_2, IO_G29, output3, X, 1389, 1, Z)," & -- PAD288 + "1391 (BC_2, IO_G29, input, X)," & -- PAD288 + "1392 (BC_2, *, controlr, 1)," & + "1393 (BC_2, IO_G27, output3, X, 1392, 1, Z)," & -- PAD290 + "1394 (BC_2, IO_G27, input, X)," & -- PAD290 + "1395 (BC_2, *, controlr, 1)," & + "1396 (BC_2, IO_F27, output3, X, 1395, 1, Z)," & -- PAD289 + "1397 (BC_2, IO_F27, input, X)," & -- PAD289 + "1398 (BC_2, *, controlr, 1)," & + "1399 (BC_2, IO_G30, output3, X, 1398, 1, Z)," & -- PAD287 + "1400 (BC_2, IO_G30, input, X)," & -- PAD287 + "1401 (BC_2, *, controlr, 1)," & + "1402 (BC_2, IO_E28, output3, X, 1401, 1, Z)," & -- PAD284 + "1403 (BC_2, IO_E28, input, X)," & -- PAD284 + "1404 (BC_2, *, controlr, 1)," & + "1405 (BC_2, IO_F28, output3, X, 1404, 1, Z)," & -- PAD286 + "1406 (BC_2, IO_F28, input, X)," & -- PAD286 + "1407 (BC_2, *, controlr, 1)," & + "1408 (BC_2, IO_F29, output3, X, 1407, 1, Z)," & -- PAD285 + "1409 (BC_2, IO_F29, input, X)," & -- PAD285 + "1410 (BC_2, *, controlr, 1)," & + "1411 (BC_2, IO_E29, output3, X, 1410, 1, Z)," & -- PAD283 + "1412 (BC_2, IO_E29, input, X)," & -- PAD283 + "1413 (BC_2, *, controlr, 1)," & + "1414 (BC_2, IO_E30, output3, X, 1413, 1, Z)," & -- PAD280 + "1415 (BC_2, IO_E30, input, X)," & -- PAD280 + "1416 (BC_2, *, controlr, 1)," & + "1417 (BC_2, IO_E31, output3, X, 1416, 1, Z)," & -- PAD282 + "1418 (BC_2, IO_E31, input, X)," & -- PAD282 + "1419 (BC_2, *, controlr, 1)," & + "1420 (BC_2, IO_D31, output3, X, 1419, 1, Z)," & -- PAD281 + "1421 (BC_2, IO_D31, input, X)," & -- PAD281 + "1422 (BC_2, *, controlr, 1)," & + "1423 (BC_2, IO_D30, output3, X, 1422, 1, Z)," & -- PAD279 + "1424 (BC_2, IO_D30, input, X)," & -- PAD279 + "1425 (BC_2, *, controlr, 1)," & + "1426 (BC_2, IO_D27, output3, X, 1425, 1, Z)," & -- PAD276 + "1427 (BC_2, IO_D27, input, X)," & -- PAD276 + "1428 (BC_2, *, controlr, 1)," & + "1429 (BC_2, IO_E26, output3, X, 1428, 1, Z)," & -- PAD278 + "1430 (BC_2, IO_E26, input, X)," & -- PAD278 + "1431 (BC_2, *, controlr, 1)," & + "1432 (BC_2, IO_D26, output3, X, 1431, 1, Z)," & -- PAD277 + "1433 (BC_2, IO_D26, input, X)," & -- PAD277 + "1434 (BC_2, *, controlr, 1)," & + "1435 (BC_2, IO_D28, output3, X, 1434, 1, Z)," & -- PAD275 + "1436 (BC_2, IO_D28, input, X)," & -- PAD275 + "1437 (BC_2, *, controlr, 1)," & + "1438 (BC_2, IO_C30, output3, X, 1437, 1, Z)," & -- PAD274 + "1439 (BC_2, IO_C30, input, X)," & -- PAD274 + "1440 (BC_2, *, controlr, 1)," & + "1441 (BC_2, IO_B30, output3, X, 1440, 1, Z)," & -- PAD273 + "1442 (BC_2, IO_B30, input, X)," & -- PAD273 + "1443 (BC_2, *, controlr, 1)," & + "1444 (BC_2, IO_C27, output3, X, 1443, 1, Z)," & -- PAD270 + "1445 (BC_2, IO_C27, input, X)," & -- PAD270 + "1446 (BC_2, *, controlr, 1)," & + "1447 (BC_2, IO_C29, output3, X, 1446, 1, Z)," & -- PAD272 + "1448 (BC_2, IO_C29, input, X)," & -- PAD272 + "1449 (BC_2, *, controlr, 1)," & + "1450 (BC_2, IO_B29, output3, X, 1449, 1, Z)," & -- PAD271 + "1451 (BC_2, IO_B29, input, X)," & -- PAD271 + "1452 (BC_2, *, controlr, 1)," & + "1453 (BC_2, IO_C28, output3, X, 1452, 1, Z)," & -- PAD269 + "1454 (BC_2, IO_C28, input, X)," & -- PAD269 + "1455 (BC_2, *, controlr, 1)," & + "1456 (BC_2, IO_B27, output3, X, 1455, 1, Z)," & -- PAD266 + "1457 (BC_2, IO_B27, input, X)," & -- PAD266 + "1458 (BC_2, *, controlr, 1)," & + "1459 (BC_2, IO_B31, output3, X, 1458, 1, Z)," & -- PAD268 + "1460 (BC_2, IO_B31, input, X)," & -- PAD268 + "1461 (BC_2, *, controlr, 1)," & + "1462 (BC_2, IO_A31, output3, X, 1461, 1, Z)," & -- PAD267 + "1463 (BC_2, IO_A31, input, X)," & -- PAD267 + "1464 (BC_2, *, controlr, 1)," & + "1465 (BC_2, IO_A27, output3, X, 1464, 1, Z)," & -- PAD265 + "1466 (BC_2, IO_A27, input, X)," & -- PAD265 + "1467 (BC_2, *, controlr, 1)," & + "1468 (BC_2, IO_A28, output3, X, 1467, 1, Z)," & -- PAD262 + "1469 (BC_2, IO_A28, input, X)," & -- PAD262 + "1470 (BC_2, *, controlr, 1)," & + "1471 (BC_2, IO_B26, output3, X, 1470, 1, Z)," & -- PAD264 + "1472 (BC_2, IO_B26, input, X)," & -- PAD264 + "1473 (BC_2, *, controlr, 1)," & + "1474 (BC_2, IO_A26, output3, X, 1473, 1, Z)," & -- PAD263 + "1475 (BC_2, IO_A26, input, X)," & -- PAD263 + "1476 (BC_2, *, controlr, 1)," & + "1477 (BC_2, IO_A29, output3, X, 1476, 1, Z)," & -- PAD261 + "1478 (BC_2, IO_A29, input, X)," & -- PAD261 + "1479 (BC_2, *, internal, X)," & + "1480 (BC_2, *, controlr, 1)," & + "1481 (BC_2, IO_M19, output3, X, 1480, 1, Z)," & -- PAD258 + "1482 (BC_2, IO_M19, input, X)," & -- PAD258 + "1483 (BC_2, *, controlr, 1)," & + "1484 (BC_2, IO_M21, output3, X, 1483, 1, Z)," & -- PAD260 + "1485 (BC_2, IO_M21, input, X)," & -- PAD260 + "1486 (BC_2, *, controlr, 1)," & + "1487 (BC_2, IO_M22, output3, X, 1486, 1, Z)," & -- PAD259 + "1488 (BC_2, IO_M22, input, X)," & -- PAD259 + "1489 (BC_2, *, controlr, 1)," & + "1490 (BC_2, IO_M20, output3, X, 1489, 1, Z)," & -- PAD257 + "1491 (BC_2, IO_M20, input, X)," & -- PAD257 + "1492 (BC_2, *, controlr, 1)," & + "1493 (BC_2, IO_L21, output3, X, 1492, 1, Z)," & -- PAD254 + "1494 (BC_2, IO_L21, input, X)," & -- PAD254 + "1495 (BC_2, *, controlr, 1)," & + "1496 (BC_2, IO_L23, output3, X, 1495, 1, Z)," & -- PAD256 + "1497 (BC_2, IO_L23, input, X)," & -- PAD256 + "1498 (BC_2, *, controlr, 1)," & + "1499 (BC_2, IO_L24, output3, X, 1498, 1, Z)," & -- PAD255 + "1500 (BC_2, IO_L24, input, X)," & -- PAD255 + "1501 (BC_2, *, controlr, 1)," & + "1502 (BC_2, IO_L22, output3, X, 1501, 1, Z)," & -- PAD253 + "1503 (BC_2, IO_L22, input, X)," & -- PAD253 + "1504 (BC_2, *, controlr, 1)," & + "1505 (BC_2, IO_K20, output3, X, 1504, 1, Z)," & -- PAD250 + "1506 (BC_2, IO_K20, input, X)," & -- PAD250 + "1507 (BC_2, *, controlr, 1)," & + "1508 (BC_2, IO_K23, output3, X, 1507, 1, Z)," & -- PAD252 + "1509 (BC_2, IO_K23, input, X)," & -- PAD252 + "1510 (BC_2, *, controlr, 1)," & + "1511 (BC_2, IO_K24, output3, X, 1510, 1, Z)," & -- PAD251 + "1512 (BC_2, IO_K24, input, X)," & -- PAD251 + "1513 (BC_2, *, controlr, 1)," & + "1514 (BC_2, IO_K21, output3, X, 1513, 1, Z)," & -- PAD249 + "1515 (BC_2, IO_K21, input, X)," & -- PAD249 + "1516 (BC_2, *, controlr, 1)," & + "1517 (BC_2, IO_J23, output3, X, 1516, 1, Z)," & -- PAD248 + "1518 (BC_2, IO_J23, input, X)," & -- PAD248 + "1519 (BC_2, *, controlr, 1)," & + "1520 (BC_2, IO_H23, output3, X, 1519, 1, Z)," & -- PAD247 + "1521 (BC_2, IO_H23, input, X)," & -- PAD247 + "1522 (BC_2, *, controlr, 1)," & + "1523 (BC_2, IO_J20, output3, X, 1522, 1, Z)," & -- PAD244 + "1524 (BC_2, IO_J20, input, X)," & -- PAD244 + "1525 (BC_2, *, controlr, 1)," & + "1526 (BC_2, IO_J22, output3, X, 1525, 1, Z)," & -- PAD246 + "1527 (BC_2, IO_J22, input, X)," & -- PAD246 + "1528 (BC_2, *, controlr, 1)," & + "1529 (BC_2, IO_H22, output3, X, 1528, 1, Z)," & -- PAD245 + "1530 (BC_2, IO_H22, input, X)," & -- PAD245 + "1531 (BC_2, *, controlr, 1)," & + "1532 (BC_2, IO_J21, output3, X, 1531, 1, Z)," & -- PAD243 + "1533 (BC_2, IO_J21, input, X)," & -- PAD243 + "1534 (BC_2, *, controlr, 1)," & + "1535 (BC_2, IO_H20, output3, X, 1534, 1, Z)," & -- PAD240 + "1536 (BC_2, IO_H20, input, X)," & -- PAD240 + "1537 (BC_2, *, controlr, 1)," & + "1538 (BC_2, IO_H24, output3, X, 1537, 1, Z)," & -- PAD242 + "1539 (BC_2, IO_H24, input, X)," & -- PAD242 + "1540 (BC_2, *, controlr, 1)," & + "1541 (BC_2, IO_G24, output3, X, 1540, 1, Z)," & -- PAD241 + "1542 (BC_2, IO_G24, input, X)," & -- PAD241 + "1543 (BC_2, *, controlr, 1)," & + "1544 (BC_2, IO_G20, output3, X, 1543, 1, Z)," & -- PAD239 + "1545 (BC_2, IO_G20, input, X)," & -- PAD239 + "1546 (BC_2, *, controlr, 1)," & + "1547 (BC_2, IO_G22, output3, X, 1546, 1, Z)," & -- PAD236 + "1548 (BC_2, IO_G22, input, X)," & -- PAD236 + "1549 (BC_2, *, controlr, 1)," & + "1550 (BC_2, IO_G21, output3, X, 1549, 1, Z)," & -- PAD238 + "1551 (BC_2, IO_G21, input, X)," & -- PAD238 + "1552 (BC_2, *, controlr, 1)," & + "1553 (BC_2, IO_F21, output3, X, 1552, 1, Z)," & -- PAD237 + "1554 (BC_2, IO_F21, input, X)," & -- PAD237 + "1555 (BC_2, *, controlr, 1)," & + "1556 (BC_2, IO_F22, output3, X, 1555, 1, Z)," & -- PAD235 + "1557 (BC_2, IO_F22, input, X)," & -- PAD235 + "1558 (BC_2, *, controlr, 1)," & + "1559 (BC_2, IO_E23, output3, X, 1558, 1, Z)," & -- PAD232 + "1560 (BC_2, IO_E23, input, X)," & -- PAD232 + "1561 (BC_2, *, controlr, 1)," & + "1562 (BC_2, IO_F23, output3, X, 1561, 1, Z)," & -- PAD234 + "1563 (BC_2, IO_F23, input, X)," & -- PAD234 + "1564 (BC_2, *, controlr, 1)," & + "1565 (BC_2, IO_F24, output3, X, 1564, 1, Z)," & -- PAD233 + "1566 (BC_2, IO_F24, input, X)," & -- PAD233 + "1567 (BC_2, *, controlr, 1)," & + "1568 (BC_2, IO_E24, output3, X, 1567, 1, Z)," & -- PAD231 + "1569 (BC_2, IO_E24, input, X)," & -- PAD231 + "1570 (BC_2, *, controlr, 1)," & + "1571 (BC_2, IO_D22, output3, X, 1570, 1, Z)," & -- PAD228 + "1572 (BC_2, IO_D22, input, X)," & -- PAD228 + "1573 (BC_2, *, controlr, 1)," & + "1574 (BC_2, IO_E25, output3, X, 1573, 1, Z)," & -- PAD230 + "1575 (BC_2, IO_E25, input, X)," & -- PAD230 + "1576 (BC_2, *, controlr, 1)," & + "1577 (BC_2, IO_D25, output3, X, 1576, 1, Z)," & -- PAD229 + "1578 (BC_2, IO_D25, input, X)," & -- PAD229 + "1579 (BC_2, *, controlr, 1)," & + "1580 (BC_2, IO_D23, output3, X, 1579, 1, Z)," & -- PAD227 + "1581 (BC_2, IO_D23, input, X)," & -- PAD227 + "1582 (BC_2, *, controlr, 1)," & + "1583 (BC_2, IO_E20, output3, X, 1582, 1, Z)," & -- PAD224 + "1584 (BC_2, IO_E20, input, X)," & -- PAD224 + "1585 (BC_2, *, controlr, 1)," & + "1586 (BC_2, IO_E21, output3, X, 1585, 1, Z)," & -- PAD226 + "1587 (BC_2, IO_E21, input, X)," & -- PAD226 + "1588 (BC_2, *, controlr, 1)," & + "1589 (BC_2, IO_D21, output3, X, 1588, 1, Z)," & -- PAD225 + "1590 (BC_2, IO_D21, input, X)," & -- PAD225 + "1591 (BC_2, *, controlr, 1)," & + "1592 (BC_2, IO_D20, output3, X, 1591, 1, Z)," & -- PAD223 + "1593 (BC_2, IO_D20, input, X)," & -- PAD223 + "1594 (BC_2, *, controlr, 1)," & + "1595 (BC_2, IO_C25, output3, X, 1594, 1, Z)," & -- PAD222 + "1596 (BC_2, IO_C25, input, X)," & -- PAD222 + "1597 (BC_2, *, controlr, 1)," & + "1598 (BC_2, IO_C24, output3, X, 1597, 1, Z)," & -- PAD221 + "1599 (BC_2, IO_C24, input, X)," & -- PAD221 + "1600 (BC_2, *, controlr, 1)," & + "1601 (BC_2, IO_C20, output3, X, 1600, 1, Z)," & -- PAD218 + "1602 (BC_2, IO_C20, input, X)," & -- PAD218 + "1603 (BC_2, *, controlr, 1)," & + "1604 (BC_2, IO_C22, output3, X, 1603, 1, Z)," & -- PAD220 + "1605 (BC_2, IO_C22, input, X)," & -- PAD220 + "1606 (BC_2, *, controlr, 1)," & + "1607 (BC_2, IO_C23, output3, X, 1606, 1, Z)," & -- PAD219 + "1608 (BC_2, IO_C23, input, X)," & -- PAD219 + "1609 (BC_2, *, controlr, 1)," & + "1610 (BC_2, IO_B20, output3, X, 1609, 1, Z)," & -- PAD217 + "1611 (BC_2, IO_B20, input, X)," & -- PAD217 + "1612 (BC_2, *, controlr, 1)," & + "1613 (BC_2, IO_B22, output3, X, 1612, 1, Z)," & -- PAD214 + "1614 (BC_2, IO_B22, input, X)," & -- PAD214 + "1615 (BC_2, *, controlr, 1)," & + "1616 (BC_2, IO_B21, output3, X, 1615, 1, Z)," & -- PAD216 + "1617 (BC_2, IO_B21, input, X)," & -- PAD216 + "1618 (BC_2, *, controlr, 1)," & + "1619 (BC_2, IO_A21, output3, X, 1618, 1, Z)," & -- PAD215 + "1620 (BC_2, IO_A21, input, X)," & -- PAD215 + "1621 (BC_2, *, controlr, 1)," & + "1622 (BC_2, IO_A22, output3, X, 1621, 1, Z)," & -- PAD213 + "1623 (BC_2, IO_A22, input, X)," & -- PAD213 + "1624 (BC_2, *, controlr, 1)," & + "1625 (BC_2, IO_A23, output3, X, 1624, 1, Z)," & -- PAD210 + "1626 (BC_2, IO_A23, input, X)," & -- PAD210 + "1627 (BC_2, *, controlr, 1)," & + "1628 (BC_2, IO_B24, output3, X, 1627, 1, Z)," & -- PAD212 + "1629 (BC_2, IO_B24, input, X)," & -- PAD212 + "1630 (BC_2, *, controlr, 1)," & + "1631 (BC_2, IO_B25, output3, X, 1630, 1, Z)," & -- PAD211 + "1632 (BC_2, IO_B25, input, X)," & -- PAD211 + "1633 (BC_2, *, controlr, 1)," & + "1634 (BC_2, IO_A24, output3, X, 1633, 1, Z)," & -- PAD209 + "1635 (BC_2, IO_A24, input, X)," & -- PAD209 + "1636 (BC_2, *, internal, X)," & + "1637 (BC_2, *, controlr, 1)," & + "1638 (BC_2, IO_L19, output3, X, 1637, 1, Z)," & -- PAD206 + "1639 (BC_2, IO_L19, input, X)," & -- PAD206 + "1640 (BC_2, *, controlr, 1)," & + "1641 (BC_2, IO_M16, output3, X, 1640, 1, Z)," & -- PAD208 + "1642 (BC_2, IO_M16, input, X)," & -- PAD208 + "1643 (BC_2, *, controlr, 1)," & + "1644 (BC_2, IO_M15, output3, X, 1643, 1, Z)," & -- PAD207 + "1645 (BC_2, IO_M15, input, X)," & -- PAD207 + "1646 (BC_2, *, controlr, 1)," & + "1647 (BC_2, IO_K19, output3, X, 1646, 1, Z)," & -- PAD205 + "1648 (BC_2, IO_K19, input, X)," & -- PAD205 + "1649 (BC_2, *, controlr, 1)," & + "1650 (BC_2, IO_L17, output3, X, 1649, 1, Z)," & -- PAD202 + "1651 (BC_2, IO_L17, input, X)," & -- PAD202 + "1652 (BC_2, *, controlr, 1)," & + "1653 (BC_2, IO_L18, output3, X, 1652, 1, Z)," & -- PAD204 + "1654 (BC_2, IO_L18, input, X)," & -- PAD204 + "1655 (BC_2, *, controlr, 1)," & + "1656 (BC_2, IO_K18, output3, X, 1655, 1, Z)," & -- PAD203 + "1657 (BC_2, IO_K18, input, X)," & -- PAD203 + "1658 (BC_2, *, controlr, 1)," & + "1659 (BC_2, IO_L16, output3, X, 1658, 1, Z)," & -- PAD201 + "1660 (BC_2, IO_L16, input, X)," & -- PAD201 + "1661 (BC_2, *, controlr, 1)," & + "1662 (BC_2, IO_K15, output3, X, 1661, 1, Z)," & -- PAD198 + "1663 (BC_2, IO_K15, input, X)," & -- PAD198 + "1664 (BC_2, *, controlr, 1)," & + "1665 (BC_2, IO_K16, output3, X, 1664, 1, Z)," & -- PAD200 + "1666 (BC_2, IO_K16, input, X)," & -- PAD200 + "1667 (BC_2, *, controlr, 1)," & + "1668 (BC_2, IO_J16, output3, X, 1667, 1, Z)," & -- PAD199 + "1669 (BC_2, IO_J16, input, X)," & -- PAD199 + "1670 (BC_2, *, controlr, 1)," & + "1671 (BC_2, IO_K14, output3, X, 1670, 1, Z)," & -- PAD197 + "1672 (BC_2, IO_K14, input, X)," & -- PAD197 + "1673 (BC_2, *, controlr, 1)," & + "1674 (BC_2, IO_J17, output3, X, 1673, 1, Z)," & -- PAD196 + "1675 (BC_2, IO_J17, input, X)," & -- PAD196 + "1676 (BC_2, *, controlr, 1)," & + "1677 (BC_2, IO_J18, output3, X, 1676, 1, Z)," & -- PAD195 + "1678 (BC_2, IO_J18, input, X)," & -- PAD195 + "1679 (BC_2, *, controlr, 1)," & + "1680 (BC_2, IO_H18, output3, X, 1679, 1, Z)," & -- PAD192 + "1681 (BC_2, IO_H18, input, X)," & -- PAD192 + "1682 (BC_2, *, controlr, 1)," & + "1683 (BC_2, IO_J15, output3, X, 1682, 1, Z)," & -- PAD194 + "1684 (BC_2, IO_J15, input, X)," & -- PAD194 + "1685 (BC_2, *, controlr, 1)," & + "1686 (BC_2, IO_H15, output3, X, 1685, 1, Z)," & -- PAD193 + "1687 (BC_2, IO_H15, input, X)," & -- PAD193 + "1688 (BC_2, *, controlr, 1)," & + "1689 (BC_2, IO_H17, output3, X, 1688, 1, Z)," & -- PAD191 + "1690 (BC_2, IO_H17, input, X)," & -- PAD191 + "1691 (BC_2, *, controlr, 1)," & + "1692 (BC_2, IO_G15, output3, X, 1691, 1, Z)," & -- PAD188 + "1693 (BC_2, IO_G15, input, X)," & -- PAD188 + "1694 (BC_2, *, controlr, 1)," & + "1695 (BC_2, IO_H14, output3, X, 1694, 1, Z)," & -- PAD190 + "1696 (BC_2, IO_H14, input, X)," & -- PAD190 + "1697 (BC_2, *, controlr, 1)," & + "1698 (BC_2, IO_G14, output3, X, 1697, 1, Z)," & -- PAD189 + "1699 (BC_2, IO_G14, input, X)," & -- PAD189 + "1700 (BC_2, *, controlr, 1)," & + "1701 (BC_2, IO_F14, output3, X, 1700, 1, Z)," & -- PAD187 + "1702 (BC_2, IO_F14, input, X)," & -- PAD187 + "1703 (BC_2, *, controlr, 1)," & + "1704 (BC_2, IO_H19, output3, X, 1703, 1, Z)," & -- PAD184 + "1705 (BC_2, IO_H19, input, X)," & -- PAD184 + "1706 (BC_2, *, controlr, 1)," & + "1707 (BC_2, IO_G17, output3, X, 1706, 1, Z)," & -- PAD186 + "1708 (BC_2, IO_G17, input, X)," & -- PAD186 + "1709 (BC_2, *, controlr, 1)," & + "1710 (BC_2, IO_G16, output3, X, 1709, 1, Z)," & -- PAD185 + "1711 (BC_2, IO_G16, input, X)," & -- PAD185 + "1712 (BC_2, *, controlr, 1)," & + "1713 (BC_2, IO_G19, output3, X, 1712, 1, Z)," & -- PAD183 + "1714 (BC_2, IO_G19, input, X)," & -- PAD183 + "1715 (BC_2, *, controlr, 1)," & + "1716 (BC_2, IO_F17, output3, X, 1715, 1, Z)," & -- PAD180 + "1717 (BC_2, IO_F17, input, X)," & -- PAD180 + "1718 (BC_2, *, controlr, 1)," & + "1719 (BC_2, IO_F19, output3, X, 1718, 1, Z)," & -- PAD182 + "1720 (BC_2, IO_F19, input, X)," & -- PAD182 + "1721 (BC_2, *, controlr, 1)," & + "1722 (BC_2, IO_F18, output3, X, 1721, 1, Z)," & -- PAD181 + "1723 (BC_2, IO_F18, input, X)," & -- PAD181 + "1724 (BC_2, *, controlr, 1)," & + "1725 (BC_2, IO_F16, output3, X, 1724, 1, Z)," & -- PAD179 + "1726 (BC_2, IO_F16, input, X)," & -- PAD179 + "1727 (BC_2, *, controlr, 1)," & + "1728 (BC_2, IO_E16, output3, X, 1727, 1, Z)," & -- PAD176 + "1729 (BC_2, IO_E16, input, X)," & -- PAD176 + "1730 (BC_2, *, controlr, 1)," & + "1731 (BC_2, IO_E19, output3, X, 1730, 1, Z)," & -- PAD178 + "1732 (BC_2, IO_E19, input, X)," & -- PAD178 + "1733 (BC_2, *, controlr, 1)," & + "1734 (BC_2, IO_E18, output3, X, 1733, 1, Z)," & -- PAD177 + "1735 (BC_2, IO_E18, input, X)," & -- PAD177 + "1736 (BC_2, *, controlr, 1)," & + "1737 (BC_2, IO_E15, output3, X, 1736, 1, Z)," & -- PAD175 + "1738 (BC_2, IO_E15, input, X)," & -- PAD175 + "1739 (BC_2, *, controlr, 1)," & + "1740 (BC_2, IO_D16, output3, X, 1739, 1, Z)," & -- PAD172 + "1741 (BC_2, IO_D16, input, X)," & -- PAD172 + "1742 (BC_2, *, controlr, 1)," & + "1743 (BC_2, IO_D18, output3, X, 1742, 1, Z)," & -- PAD174 + "1744 (BC_2, IO_D18, input, X)," & -- PAD174 + "1745 (BC_2, *, controlr, 1)," & + "1746 (BC_2, IO_D17, output3, X, 1745, 1, Z)," & -- PAD173 + "1747 (BC_2, IO_D17, input, X)," & -- PAD173 + "1748 (BC_2, *, controlr, 1)," & + "1749 (BC_2, IO_D15, output3, X, 1748, 1, Z)," & -- PAD171 + "1750 (BC_2, IO_D15, input, X)," & -- PAD171 + "1751 (BC_2, *, controlr, 1)," & + "1752 (BC_2, IO_E14, output3, X, 1751, 1, Z)," & -- PAD170 + "1753 (BC_2, IO_E14, input, X)," & -- PAD170 + "1754 (BC_2, *, controlr, 1)," & + "1755 (BC_2, IO_C19, output3, X, 1754, 1, Z)," & -- PAD169 + "1756 (BC_2, IO_C19, input, X)," & -- PAD169 + "1757 (BC_2, *, controlr, 1)," & + "1758 (BC_2, IO_C15, output3, X, 1757, 1, Z)," & -- PAD166 + "1759 (BC_2, IO_C15, input, X)," & -- PAD166 + "1760 (BC_2, *, controlr, 1)," & + "1761 (BC_2, IO_C18, output3, X, 1760, 1, Z)," & -- PAD168 + "1762 (BC_2, IO_C18, input, X)," & -- PAD168 + "1763 (BC_2, *, controlr, 1)," & + "1764 (BC_2, IO_C17, output3, X, 1763, 1, Z)," & -- PAD167 + "1765 (BC_2, IO_C17, input, X)," & -- PAD167 + "1766 (BC_2, *, controlr, 1)," & + "1767 (BC_2, IO_C14, output3, X, 1766, 1, Z)," & -- PAD165 + "1768 (BC_2, IO_C14, input, X)," & -- PAD165 + "1769 (BC_2, *, controlr, 1)," & + "1770 (BC_2, IO_B16, output3, X, 1769, 1, Z)," & -- PAD162 + "1771 (BC_2, IO_B16, input, X)," & -- PAD162 + "1772 (BC_2, *, controlr, 1)," & + "1773 (BC_2, IO_B19, output3, X, 1772, 1, Z)," & -- PAD164 + "1774 (BC_2, IO_B19, input, X)," & -- PAD164 + "1775 (BC_2, *, controlr, 1)," & + "1776 (BC_2, IO_A19, output3, X, 1775, 1, Z)," & -- PAD163 + "1777 (BC_2, IO_A19, input, X)," & -- PAD163 + "1778 (BC_2, *, controlr, 1)," & + "1779 (BC_2, IO_B15, output3, X, 1778, 1, Z)," & -- PAD161 + "1780 (BC_2, IO_B15, input, X)," & -- PAD161 + "1781 (BC_2, *, controlr, 1)," & + "1782 (BC_2, IO_B17, output3, X, 1781, 1, Z)," & -- PAD158 + "1783 (BC_2, IO_B17, input, X)," & -- PAD158 + "1784 (BC_2, *, controlr, 1)," & + "1785 (BC_2, IO_A18, output3, X, 1784, 1, Z)," & -- PAD160 + "1786 (BC_2, IO_A18, input, X)," & -- PAD160 + "1787 (BC_2, *, controlr, 1)," & + "1788 (BC_2, IO_A17, output3, X, 1787, 1, Z)," & -- PAD159 + "1789 (BC_2, IO_A17, input, X)," & -- PAD159 + "1790 (BC_2, *, controlr, 1)," & + "1791 (BC_2, IO_A16, output3, X, 1790, 1, Z)," & -- PAD157 + "1792 (BC_2, IO_A16, input, X)," & -- PAD157 + "1793 (BC_2, *, internal, X)," & + "1794 (BC_2, *, internal, 1)," & -- UNBONDED1153.T + "1795 (BC_2, *, internal, X)," & -- UNBONDED1153.O + "1796 (BC_2, *, internal, X)," & -- UNBONDED1153.I + "1797 (BC_2, *, internal, 1)," & -- UNBONDED1155.T + "1798 (BC_2, *, internal, X)," & -- UNBONDED1155.O + "1799 (BC_2, *, internal, X)," & -- UNBONDED1155.I + "1800 (BC_2, *, internal, 1)," & -- UNBONDED1154.T + "1801 (BC_2, *, internal, X)," & -- UNBONDED1154.O + "1802 (BC_2, *, internal, X)," & -- UNBONDED1154.I + "1803 (BC_2, *, internal, 1)," & -- UNBONDED1152.T + "1804 (BC_2, *, internal, X)," & -- UNBONDED1152.O + "1805 (BC_2, *, internal, X)," & -- UNBONDED1152.I + "1806 (BC_2, *, internal, 1)," & -- UNBONDED1149.T + "1807 (BC_2, *, internal, X)," & -- UNBONDED1149.O + "1808 (BC_2, *, internal, X)," & -- UNBONDED1149.I + "1809 (BC_2, *, internal, 1)," & -- UNBONDED1151.T + "1810 (BC_2, *, internal, X)," & -- UNBONDED1151.O + "1811 (BC_2, *, internal, X)," & -- UNBONDED1151.I + "1812 (BC_2, *, internal, 1)," & -- UNBONDED1150.T + "1813 (BC_2, *, internal, X)," & -- UNBONDED1150.O + "1814 (BC_2, *, internal, X)," & -- UNBONDED1150.I + "1815 (BC_2, *, internal, 1)," & -- UNBONDED1148.T + "1816 (BC_2, *, internal, X)," & -- UNBONDED1148.O + "1817 (BC_2, *, internal, X)," & -- UNBONDED1148.I + "1818 (BC_2, *, internal, 1)," & -- UNBONDED1145.T + "1819 (BC_2, *, internal, X)," & -- UNBONDED1145.O + "1820 (BC_2, *, internal, X)," & -- UNBONDED1145.I + "1821 (BC_2, *, internal, 1)," & -- UNBONDED1147.T + "1822 (BC_2, *, internal, X)," & -- UNBONDED1147.O + "1823 (BC_2, *, internal, X)," & -- UNBONDED1147.I + "1824 (BC_2, *, internal, 1)," & -- UNBONDED1146.T + "1825 (BC_2, *, internal, X)," & -- UNBONDED1146.O + "1826 (BC_2, *, internal, X)," & -- UNBONDED1146.I + "1827 (BC_2, *, internal, 1)," & -- UNBONDED1144.T + "1828 (BC_2, *, internal, X)," & -- UNBONDED1144.O + "1829 (BC_2, *, internal, X)," & -- UNBONDED1144.I + "1830 (BC_2, *, internal, 1)," & -- UNBONDED1143.T + "1831 (BC_2, *, internal, X)," & -- UNBONDED1143.O + "1832 (BC_2, *, internal, X)," & -- UNBONDED1143.I + "1833 (BC_2, *, internal, 1)," & -- UNBONDED1142.T + "1834 (BC_2, *, internal, X)," & -- UNBONDED1142.O + "1835 (BC_2, *, internal, X)," & -- UNBONDED1142.I + "1836 (BC_2, *, internal, 1)," & -- UNBONDED1139.T + "1837 (BC_2, *, internal, X)," & -- UNBONDED1139.O + "1838 (BC_2, *, internal, X)," & -- UNBONDED1139.I + "1839 (BC_2, *, internal, 1)," & -- UNBONDED1141.T + "1840 (BC_2, *, internal, X)," & -- UNBONDED1141.O + "1841 (BC_2, *, internal, X)," & -- UNBONDED1141.I + "1842 (BC_2, *, internal, 1)," & -- UNBONDED1140.T + "1843 (BC_2, *, internal, X)," & -- UNBONDED1140.O + "1844 (BC_2, *, internal, X)," & -- UNBONDED1140.I + "1845 (BC_2, *, internal, 1)," & -- UNBONDED1138.T + "1846 (BC_2, *, internal, X)," & -- UNBONDED1138.O + "1847 (BC_2, *, internal, X)," & -- UNBONDED1138.I + "1848 (BC_2, *, internal, 1)," & -- UNBONDED1135.T + "1849 (BC_2, *, internal, X)," & -- UNBONDED1135.O + "1850 (BC_2, *, internal, X)," & -- UNBONDED1135.I + "1851 (BC_2, *, internal, 1)," & -- UNBONDED1137.T + "1852 (BC_2, *, internal, X)," & -- UNBONDED1137.O + "1853 (BC_2, *, internal, X)," & -- UNBONDED1137.I + "1854 (BC_2, *, internal, 1)," & -- UNBONDED1136.T + "1855 (BC_2, *, internal, X)," & -- UNBONDED1136.O + "1856 (BC_2, *, internal, X)," & -- UNBONDED1136.I + "1857 (BC_2, *, internal, 1)," & -- UNBONDED1134.T + "1858 (BC_2, *, internal, X)," & -- UNBONDED1134.O + "1859 (BC_2, *, internal, X)," & -- UNBONDED1134.I + "1860 (BC_2, *, internal, 1)," & -- UNBONDED1131.T + "1861 (BC_2, *, internal, X)," & -- UNBONDED1131.O + "1862 (BC_2, *, internal, X)," & -- UNBONDED1131.I + "1863 (BC_2, *, internal, 1)," & -- UNBONDED1133.T + "1864 (BC_2, *, internal, X)," & -- UNBONDED1133.O + "1865 (BC_2, *, internal, X)," & -- UNBONDED1133.I + "1866 (BC_2, *, internal, 1)," & -- UNBONDED1132.T + "1867 (BC_2, *, internal, X)," & -- UNBONDED1132.O + "1868 (BC_2, *, internal, X)," & -- UNBONDED1132.I + "1869 (BC_2, *, internal, 1)," & -- UNBONDED1130.T + "1870 (BC_2, *, internal, X)," & -- UNBONDED1130.O + "1871 (BC_2, *, internal, X)," & -- UNBONDED1130.I + "1872 (BC_2, *, internal, 1)," & -- UNBONDED1127.T + "1873 (BC_2, *, internal, X)," & -- UNBONDED1127.O + "1874 (BC_2, *, internal, X)," & -- UNBONDED1127.I + "1875 (BC_2, *, internal, 1)," & -- UNBONDED1129.T + "1876 (BC_2, *, internal, X)," & -- UNBONDED1129.O + "1877 (BC_2, *, internal, X)," & -- UNBONDED1129.I + "1878 (BC_2, *, internal, 1)," & -- UNBONDED1128.T + "1879 (BC_2, *, internal, X)," & -- UNBONDED1128.O + "1880 (BC_2, *, internal, X)," & -- UNBONDED1128.I + "1881 (BC_2, *, internal, 1)," & -- UNBONDED1126.T + "1882 (BC_2, *, internal, X)," & -- UNBONDED1126.O + "1883 (BC_2, *, internal, X)," & -- UNBONDED1126.I + "1884 (BC_2, *, internal, 1)," & -- UNBONDED1123.T + "1885 (BC_2, *, internal, X)," & -- UNBONDED1123.O + "1886 (BC_2, *, internal, X)," & -- UNBONDED1123.I + "1887 (BC_2, *, internal, 1)," & -- UNBONDED1125.T + "1888 (BC_2, *, internal, X)," & -- UNBONDED1125.O + "1889 (BC_2, *, internal, X)," & -- UNBONDED1125.I + "1890 (BC_2, *, internal, 1)," & -- UNBONDED1124.T + "1891 (BC_2, *, internal, X)," & -- UNBONDED1124.O + "1892 (BC_2, *, internal, X)," & -- UNBONDED1124.I + "1893 (BC_2, *, internal, 1)," & -- UNBONDED1122.T + "1894 (BC_2, *, internal, X)," & -- UNBONDED1122.O + "1895 (BC_2, *, internal, X)," & -- UNBONDED1122.I + "1896 (BC_2, *, internal, 1)," & -- UNBONDED1119.T + "1897 (BC_2, *, internal, X)," & -- UNBONDED1119.O + "1898 (BC_2, *, internal, X)," & -- UNBONDED1119.I + "1899 (BC_2, *, internal, 1)," & -- UNBONDED1121.T + "1900 (BC_2, *, internal, X)," & -- UNBONDED1121.O + "1901 (BC_2, *, internal, X)," & -- UNBONDED1121.I + "1902 (BC_2, *, internal, 1)," & -- UNBONDED1120.T + "1903 (BC_2, *, internal, X)," & -- UNBONDED1120.O + "1904 (BC_2, *, internal, X)," & -- UNBONDED1120.I + "1905 (BC_2, *, internal, 1)," & -- UNBONDED1118.T + "1906 (BC_2, *, internal, X)," & -- UNBONDED1118.O + "1907 (BC_2, *, internal, X)," & -- UNBONDED1118.I + "1908 (BC_2, *, internal, 1)," & -- UNBONDED1117.T + "1909 (BC_2, *, internal, X)," & -- UNBONDED1117.O + "1910 (BC_2, *, internal, X)," & -- UNBONDED1117.I + "1911 (BC_2, *, internal, 1)," & -- UNBONDED1116.T + "1912 (BC_2, *, internal, X)," & -- UNBONDED1116.O + "1913 (BC_2, *, internal, X)," & -- UNBONDED1116.I + "1914 (BC_2, *, internal, 1)," & -- UNBONDED1113.T + "1915 (BC_2, *, internal, X)," & -- UNBONDED1113.O + "1916 (BC_2, *, internal, X)," & -- UNBONDED1113.I + "1917 (BC_2, *, internal, 1)," & -- UNBONDED1115.T + "1918 (BC_2, *, internal, X)," & -- UNBONDED1115.O + "1919 (BC_2, *, internal, X)," & -- UNBONDED1115.I + "1920 (BC_2, *, internal, 1)," & -- UNBONDED1114.T + "1921 (BC_2, *, internal, X)," & -- UNBONDED1114.O + "1922 (BC_2, *, internal, X)," & -- UNBONDED1114.I + "1923 (BC_2, *, internal, 1)," & -- UNBONDED1112.T + "1924 (BC_2, *, internal, X)," & -- UNBONDED1112.O + "1925 (BC_2, *, internal, X)," & -- UNBONDED1112.I + "1926 (BC_2, *, internal, 1)," & -- UNBONDED1109.T + "1927 (BC_2, *, internal, X)," & -- UNBONDED1109.O + "1928 (BC_2, *, internal, X)," & -- UNBONDED1109.I + "1929 (BC_2, *, internal, 1)," & -- UNBONDED1111.T + "1930 (BC_2, *, internal, X)," & -- UNBONDED1111.O + "1931 (BC_2, *, internal, X)," & -- UNBONDED1111.I + "1932 (BC_2, *, internal, 1)," & -- UNBONDED1110.T + "1933 (BC_2, *, internal, X)," & -- UNBONDED1110.O + "1934 (BC_2, *, internal, X)," & -- UNBONDED1110.I + "1935 (BC_2, *, internal, 1)," & -- UNBONDED1108.T + "1936 (BC_2, *, internal, X)," & -- UNBONDED1108.O + "1937 (BC_2, *, internal, X)," & -- UNBONDED1108.I + "1938 (BC_2, *, internal, 1)," & -- UNBONDED1105.T + "1939 (BC_2, *, internal, X)," & -- UNBONDED1105.O + "1940 (BC_2, *, internal, X)," & -- UNBONDED1105.I + "1941 (BC_2, *, internal, 1)," & -- UNBONDED1107.T + "1942 (BC_2, *, internal, X)," & -- UNBONDED1107.O + "1943 (BC_2, *, internal, X)," & -- UNBONDED1107.I + "1944 (BC_2, *, internal, 1)," & -- UNBONDED1106.T + "1945 (BC_2, *, internal, X)," & -- UNBONDED1106.O + "1946 (BC_2, *, internal, X)," & -- UNBONDED1106.I + "1947 (BC_2, *, internal, 1)," & -- UNBONDED1104.T + "1948 (BC_2, *, internal, X)," & -- UNBONDED1104.O + "1949 (BC_2, *, internal, X)," & -- UNBONDED1104.I + "1950 (BC_2, *, internal, X)," & + "1951 (BC_2, *, internal, 1)," & -- UNBONDED1101.T + "1952 (BC_2, *, internal, X)," & -- UNBONDED1101.O + "1953 (BC_2, *, internal, X)," & -- UNBONDED1101.I + "1954 (BC_2, *, internal, 1)," & -- UNBONDED1103.T + "1955 (BC_2, *, internal, X)," & -- UNBONDED1103.O + "1956 (BC_2, *, internal, X)," & -- UNBONDED1103.I + "1957 (BC_2, *, internal, 1)," & -- UNBONDED1102.T + "1958 (BC_2, *, internal, X)," & -- UNBONDED1102.O + "1959 (BC_2, *, internal, X)," & -- UNBONDED1102.I + "1960 (BC_2, *, internal, 1)," & -- UNBONDED1100.T + "1961 (BC_2, *, internal, X)," & -- UNBONDED1100.O + "1962 (BC_2, *, internal, X)," & -- UNBONDED1100.I + "1963 (BC_2, *, internal, 1)," & -- UNBONDED197.T + "1964 (BC_2, *, internal, X)," & -- UNBONDED197.O + "1965 (BC_2, *, internal, X)," & -- UNBONDED197.I + "1966 (BC_2, *, internal, 1)," & -- UNBONDED199.T + "1967 (BC_2, *, internal, X)," & -- UNBONDED199.O + "1968 (BC_2, *, internal, X)," & -- UNBONDED199.I + "1969 (BC_2, *, internal, 1)," & -- UNBONDED198.T + "1970 (BC_2, *, internal, X)," & -- UNBONDED198.O + "1971 (BC_2, *, internal, X)," & -- UNBONDED198.I + "1972 (BC_2, *, internal, 1)," & -- UNBONDED196.T + "1973 (BC_2, *, internal, X)," & -- UNBONDED196.O + "1974 (BC_2, *, internal, X)," & -- UNBONDED196.I + "1975 (BC_2, *, internal, 1)," & -- UNBONDED193.T + "1976 (BC_2, *, internal, X)," & -- UNBONDED193.O + "1977 (BC_2, *, internal, X)," & -- UNBONDED193.I + "1978 (BC_2, *, internal, 1)," & -- UNBONDED195.T + "1979 (BC_2, *, internal, X)," & -- UNBONDED195.O + "1980 (BC_2, *, internal, X)," & -- UNBONDED195.I + "1981 (BC_2, *, internal, 1)," & -- UNBONDED194.T + "1982 (BC_2, *, internal, X)," & -- UNBONDED194.O + "1983 (BC_2, *, internal, X)," & -- UNBONDED194.I + "1984 (BC_2, *, internal, 1)," & -- UNBONDED192.T + "1985 (BC_2, *, internal, X)," & -- UNBONDED192.O + "1986 (BC_2, *, internal, X)," & -- UNBONDED192.I + "1987 (BC_2, *, internal, 1)," & -- UNBONDED191.T + "1988 (BC_2, *, internal, X)," & -- UNBONDED191.O + "1989 (BC_2, *, internal, X)," & -- UNBONDED191.I + "1990 (BC_2, *, internal, 1)," & -- UNBONDED190.T + "1991 (BC_2, *, internal, X)," & -- UNBONDED190.O + "1992 (BC_2, *, internal, X)," & -- UNBONDED190.I + "1993 (BC_2, *, internal, 1)," & -- UNBONDED187.T + "1994 (BC_2, *, internal, X)," & -- UNBONDED187.O + "1995 (BC_2, *, internal, X)," & -- UNBONDED187.I + "1996 (BC_2, *, internal, 1)," & -- UNBONDED189.T + "1997 (BC_2, *, internal, X)," & -- UNBONDED189.O + "1998 (BC_2, *, internal, X)," & -- UNBONDED189.I + "1999 (BC_2, *, internal, 1)," & -- UNBONDED188.T + "2000 (BC_2, *, internal, X)," & -- UNBONDED188.O + "2001 (BC_2, *, internal, X)," & -- UNBONDED188.I + "2002 (BC_2, *, internal, 1)," & -- UNBONDED186.T + "2003 (BC_2, *, internal, X)," & -- UNBONDED186.O + "2004 (BC_2, *, internal, X)," & -- UNBONDED186.I + "2005 (BC_2, *, internal, 1)," & -- UNBONDED183.T + "2006 (BC_2, *, internal, X)," & -- UNBONDED183.O + "2007 (BC_2, *, internal, X)," & -- UNBONDED183.I + "2008 (BC_2, *, internal, 1)," & -- UNBONDED185.T + "2009 (BC_2, *, internal, X)," & -- UNBONDED185.O + "2010 (BC_2, *, internal, X)," & -- UNBONDED185.I + "2011 (BC_2, *, internal, 1)," & -- UNBONDED184.T + "2012 (BC_2, *, internal, X)," & -- UNBONDED184.O + "2013 (BC_2, *, internal, X)," & -- UNBONDED184.I + "2014 (BC_2, *, internal, 1)," & -- UNBONDED182.T + "2015 (BC_2, *, internal, X)," & -- UNBONDED182.O + "2016 (BC_2, *, internal, X)," & -- UNBONDED182.I + "2017 (BC_2, *, internal, 1)," & -- UNBONDED179.T + "2018 (BC_2, *, internal, X)," & -- UNBONDED179.O + "2019 (BC_2, *, internal, X)," & -- UNBONDED179.I + "2020 (BC_2, *, internal, 1)," & -- UNBONDED181.T + "2021 (BC_2, *, internal, X)," & -- UNBONDED181.O + "2022 (BC_2, *, internal, X)," & -- UNBONDED181.I + "2023 (BC_2, *, internal, 1)," & -- UNBONDED180.T + "2024 (BC_2, *, internal, X)," & -- UNBONDED180.O + "2025 (BC_2, *, internal, X)," & -- UNBONDED180.I + "2026 (BC_2, *, internal, 1)," & -- UNBONDED178.T + "2027 (BC_2, *, internal, X)," & -- UNBONDED178.O + "2028 (BC_2, *, internal, X)," & -- UNBONDED178.I + "2029 (BC_2, *, internal, 1)," & -- UNBONDED175.T + "2030 (BC_2, *, internal, X)," & -- UNBONDED175.O + "2031 (BC_2, *, internal, X)," & -- UNBONDED175.I + "2032 (BC_2, *, internal, 1)," & -- UNBONDED177.T + "2033 (BC_2, *, internal, X)," & -- UNBONDED177.O + "2034 (BC_2, *, internal, X)," & -- UNBONDED177.I + "2035 (BC_2, *, internal, 1)," & -- UNBONDED176.T + "2036 (BC_2, *, internal, X)," & -- UNBONDED176.O + "2037 (BC_2, *, internal, X)," & -- UNBONDED176.I + "2038 (BC_2, *, internal, 1)," & -- UNBONDED174.T + "2039 (BC_2, *, internal, X)," & -- UNBONDED174.O + "2040 (BC_2, *, internal, X)," & -- UNBONDED174.I + "2041 (BC_2, *, internal, 1)," & -- UNBONDED171.T + "2042 (BC_2, *, internal, X)," & -- UNBONDED171.O + "2043 (BC_2, *, internal, X)," & -- UNBONDED171.I + "2044 (BC_2, *, internal, 1)," & -- UNBONDED173.T + "2045 (BC_2, *, internal, X)," & -- UNBONDED173.O + "2046 (BC_2, *, internal, X)," & -- UNBONDED173.I + "2047 (BC_2, *, internal, 1)," & -- UNBONDED172.T + "2048 (BC_2, *, internal, X)," & -- UNBONDED172.O + "2049 (BC_2, *, internal, X)," & -- UNBONDED172.I + "2050 (BC_2, *, internal, 1)," & -- UNBONDED170.T + "2051 (BC_2, *, internal, X)," & -- UNBONDED170.O + "2052 (BC_2, *, internal, X)," & -- UNBONDED170.I + "2053 (BC_2, *, internal, 1)," & -- UNBONDED167.T + "2054 (BC_2, *, internal, X)," & -- UNBONDED167.O + "2055 (BC_2, *, internal, X)," & -- UNBONDED167.I + "2056 (BC_2, *, internal, 1)," & -- UNBONDED169.T + "2057 (BC_2, *, internal, X)," & -- UNBONDED169.O + "2058 (BC_2, *, internal, X)," & -- UNBONDED169.I + "2059 (BC_2, *, internal, 1)," & -- UNBONDED168.T + "2060 (BC_2, *, internal, X)," & -- UNBONDED168.O + "2061 (BC_2, *, internal, X)," & -- UNBONDED168.I + "2062 (BC_2, *, internal, 1)," & -- UNBONDED166.T + "2063 (BC_2, *, internal, X)," & -- UNBONDED166.O + "2064 (BC_2, *, internal, X)," & -- UNBONDED166.I + "2065 (BC_2, *, internal, 1)," & -- UNBONDED165.T + "2066 (BC_2, *, internal, X)," & -- UNBONDED165.O + "2067 (BC_2, *, internal, X)," & -- UNBONDED165.I + "2068 (BC_2, *, internal, 1)," & -- UNBONDED164.T + "2069 (BC_2, *, internal, X)," & -- UNBONDED164.O + "2070 (BC_2, *, internal, X)," & -- UNBONDED164.I + "2071 (BC_2, *, internal, 1)," & -- UNBONDED161.T + "2072 (BC_2, *, internal, X)," & -- UNBONDED161.O + "2073 (BC_2, *, internal, X)," & -- UNBONDED161.I + "2074 (BC_2, *, internal, 1)," & -- UNBONDED163.T + "2075 (BC_2, *, internal, X)," & -- UNBONDED163.O + "2076 (BC_2, *, internal, X)," & -- UNBONDED163.I + "2077 (BC_2, *, internal, 1)," & -- UNBONDED162.T + "2078 (BC_2, *, internal, X)," & -- UNBONDED162.O + "2079 (BC_2, *, internal, X)," & -- UNBONDED162.I + "2080 (BC_2, *, internal, 1)," & -- UNBONDED160.T + "2081 (BC_2, *, internal, X)," & -- UNBONDED160.O + "2082 (BC_2, *, internal, X)," & -- UNBONDED160.I + "2083 (BC_2, *, internal, 1)," & -- UNBONDED157.T + "2084 (BC_2, *, internal, X)," & -- UNBONDED157.O + "2085 (BC_2, *, internal, X)," & -- UNBONDED157.I + "2086 (BC_2, *, internal, 1)," & -- UNBONDED159.T + "2087 (BC_2, *, internal, X)," & -- UNBONDED159.O + "2088 (BC_2, *, internal, X)," & -- UNBONDED159.I + "2089 (BC_2, *, internal, 1)," & -- UNBONDED158.T + "2090 (BC_2, *, internal, X)," & -- UNBONDED158.O + "2091 (BC_2, *, internal, X)," & -- UNBONDED158.I + "2092 (BC_2, *, internal, 1)," & -- UNBONDED156.T + "2093 (BC_2, *, internal, X)," & -- UNBONDED156.O + "2094 (BC_2, *, internal, X)," & -- UNBONDED156.I + "2095 (BC_2, *, internal, 1)," & -- UNBONDED153.T + "2096 (BC_2, *, internal, X)," & -- UNBONDED153.O + "2097 (BC_2, *, internal, X)," & -- UNBONDED153.I + "2098 (BC_2, *, internal, 1)," & -- UNBONDED155.T + "2099 (BC_2, *, internal, X)," & -- UNBONDED155.O + "2100 (BC_2, *, internal, X)," & -- UNBONDED155.I + "2101 (BC_2, *, internal, 1)," & -- UNBONDED154.T + "2102 (BC_2, *, internal, X)," & -- UNBONDED154.O + "2103 (BC_2, *, internal, X)," & -- UNBONDED154.I + "2104 (BC_2, *, internal, 1)," & -- UNBONDED152.T + "2105 (BC_2, *, internal, X)," & -- UNBONDED152.O + "2106 (BC_2, *, internal, X)," & -- UNBONDED152.I + "2107 (BC_2, *, internal, X)," & + "2108 (BC_2, *, internal, 1)," & -- UNBONDED149.T + "2109 (BC_2, *, internal, X)," & -- UNBONDED149.O + "2110 (BC_2, *, internal, X)," & -- UNBONDED149.I + "2111 (BC_2, *, internal, 1)," & -- UNBONDED151.T + "2112 (BC_2, *, internal, X)," & -- UNBONDED151.O + "2113 (BC_2, *, internal, X)," & -- UNBONDED151.I + "2114 (BC_2, *, internal, 1)," & -- UNBONDED150.T + "2115 (BC_2, *, internal, X)," & -- UNBONDED150.O + "2116 (BC_2, *, internal, X)," & -- UNBONDED150.I + "2117 (BC_2, *, internal, 1)," & -- UNBONDED148.T + "2118 (BC_2, *, internal, X)," & -- UNBONDED148.O + "2119 (BC_2, *, internal, X)," & -- UNBONDED148.I + "2120 (BC_2, *, internal, 1)," & -- UNBONDED145.T + "2121 (BC_2, *, internal, X)," & -- UNBONDED145.O + "2122 (BC_2, *, internal, X)," & -- UNBONDED145.I + "2123 (BC_2, *, internal, 1)," & -- UNBONDED147.T + "2124 (BC_2, *, internal, X)," & -- UNBONDED147.O + "2125 (BC_2, *, internal, X)," & -- UNBONDED147.I + "2126 (BC_2, *, internal, 1)," & -- UNBONDED146.T + "2127 (BC_2, *, internal, X)," & -- UNBONDED146.O + "2128 (BC_2, *, internal, X)," & -- UNBONDED146.I + "2129 (BC_2, *, internal, 1)," & -- UNBONDED144.T + "2130 (BC_2, *, internal, X)," & -- UNBONDED144.O + "2131 (BC_2, *, internal, X)," & -- UNBONDED144.I + "2132 (BC_2, *, internal, 1)," & -- UNBONDED141.T + "2133 (BC_2, *, internal, X)," & -- UNBONDED141.O + "2134 (BC_2, *, internal, X)," & -- UNBONDED141.I + "2135 (BC_2, *, internal, 1)," & -- UNBONDED143.T + "2136 (BC_2, *, internal, X)," & -- UNBONDED143.O + "2137 (BC_2, *, internal, X)," & -- UNBONDED143.I + "2138 (BC_2, *, internal, 1)," & -- UNBONDED142.T + "2139 (BC_2, *, internal, X)," & -- UNBONDED142.O + "2140 (BC_2, *, internal, X)," & -- UNBONDED142.I + "2141 (BC_2, *, internal, 1)," & -- UNBONDED140.T + "2142 (BC_2, *, internal, X)," & -- UNBONDED140.O + "2143 (BC_2, *, internal, X)," & -- UNBONDED140.I + "2144 (BC_2, *, internal, 1)," & -- UNBONDED139.T + "2145 (BC_2, *, internal, X)," & -- UNBONDED139.O + "2146 (BC_2, *, internal, X)," & -- UNBONDED139.I + "2147 (BC_2, *, internal, 1)," & -- UNBONDED138.T + "2148 (BC_2, *, internal, X)," & -- UNBONDED138.O + "2149 (BC_2, *, internal, X)," & -- UNBONDED138.I + "2150 (BC_2, *, internal, 1)," & -- UNBONDED135.T + "2151 (BC_2, *, internal, X)," & -- UNBONDED135.O + "2152 (BC_2, *, internal, X)," & -- UNBONDED135.I + "2153 (BC_2, *, internal, 1)," & -- UNBONDED137.T + "2154 (BC_2, *, internal, X)," & -- UNBONDED137.O + "2155 (BC_2, *, internal, X)," & -- UNBONDED137.I + "2156 (BC_2, *, internal, 1)," & -- UNBONDED136.T + "2157 (BC_2, *, internal, X)," & -- UNBONDED136.O + "2158 (BC_2, *, internal, X)," & -- UNBONDED136.I + "2159 (BC_2, *, internal, 1)," & -- UNBONDED134.T + "2160 (BC_2, *, internal, X)," & -- UNBONDED134.O + "2161 (BC_2, *, internal, X)," & -- UNBONDED134.I + "2162 (BC_2, *, internal, 1)," & -- UNBONDED131.T + "2163 (BC_2, *, internal, X)," & -- UNBONDED131.O + "2164 (BC_2, *, internal, X)," & -- UNBONDED131.I + "2165 (BC_2, *, internal, 1)," & -- UNBONDED133.T + "2166 (BC_2, *, internal, X)," & -- UNBONDED133.O + "2167 (BC_2, *, internal, X)," & -- UNBONDED133.I + "2168 (BC_2, *, internal, 1)," & -- UNBONDED132.T + "2169 (BC_2, *, internal, X)," & -- UNBONDED132.O + "2170 (BC_2, *, internal, X)," & -- UNBONDED132.I + "2171 (BC_2, *, internal, 1)," & -- UNBONDED130.T + "2172 (BC_2, *, internal, X)," & -- UNBONDED130.O + "2173 (BC_2, *, internal, X)," & -- UNBONDED130.I + "2174 (BC_2, *, internal, 1)," & -- UNBONDED127.T + "2175 (BC_2, *, internal, X)," & -- UNBONDED127.O + "2176 (BC_2, *, internal, X)," & -- UNBONDED127.I + "2177 (BC_2, *, internal, 1)," & -- UNBONDED129.T + "2178 (BC_2, *, internal, X)," & -- UNBONDED129.O + "2179 (BC_2, *, internal, X)," & -- UNBONDED129.I + "2180 (BC_2, *, internal, 1)," & -- UNBONDED128.T + "2181 (BC_2, *, internal, X)," & -- UNBONDED128.O + "2182 (BC_2, *, internal, X)," & -- UNBONDED128.I + "2183 (BC_2, *, internal, 1)," & -- UNBONDED126.T + "2184 (BC_2, *, internal, X)," & -- UNBONDED126.O + "2185 (BC_2, *, internal, X)," & -- UNBONDED126.I + "2186 (BC_2, *, internal, 1)," & -- UNBONDED123.T + "2187 (BC_2, *, internal, X)," & -- UNBONDED123.O + "2188 (BC_2, *, internal, X)," & -- UNBONDED123.I + "2189 (BC_2, *, internal, 1)," & -- UNBONDED125.T + "2190 (BC_2, *, internal, X)," & -- UNBONDED125.O + "2191 (BC_2, *, internal, X)," & -- UNBONDED125.I + "2192 (BC_2, *, internal, 1)," & -- UNBONDED124.T + "2193 (BC_2, *, internal, X)," & -- UNBONDED124.O + "2194 (BC_2, *, internal, X)," & -- UNBONDED124.I + "2195 (BC_2, *, internal, 1)," & -- UNBONDED122.T + "2196 (BC_2, *, internal, X)," & -- UNBONDED122.O + "2197 (BC_2, *, internal, X)," & -- UNBONDED122.I + "2198 (BC_2, *, internal, 1)," & -- UNBONDED119.T + "2199 (BC_2, *, internal, X)," & -- UNBONDED119.O + "2200 (BC_2, *, internal, X)," & -- UNBONDED119.I + "2201 (BC_2, *, internal, 1)," & -- UNBONDED121.T + "2202 (BC_2, *, internal, X)," & -- UNBONDED121.O + "2203 (BC_2, *, internal, X)," & -- UNBONDED121.I + "2204 (BC_2, *, internal, 1)," & -- UNBONDED120.T + "2205 (BC_2, *, internal, X)," & -- UNBONDED120.O + "2206 (BC_2, *, internal, X)," & -- UNBONDED120.I + "2207 (BC_2, *, internal, 1)," & -- UNBONDED118.T + "2208 (BC_2, *, internal, X)," & -- UNBONDED118.O + "2209 (BC_2, *, internal, X)," & -- UNBONDED118.I + "2210 (BC_2, *, internal, 1)," & -- UNBONDED115.T + "2211 (BC_2, *, internal, X)," & -- UNBONDED115.O + "2212 (BC_2, *, internal, X)," & -- UNBONDED115.I + "2213 (BC_2, *, internal, 1)," & -- UNBONDED117.T + "2214 (BC_2, *, internal, X)," & -- UNBONDED117.O + "2215 (BC_2, *, internal, X)," & -- UNBONDED117.I + "2216 (BC_2, *, internal, 1)," & -- UNBONDED116.T + "2217 (BC_2, *, internal, X)," & -- UNBONDED116.O + "2218 (BC_2, *, internal, X)," & -- UNBONDED116.I + "2219 (BC_2, *, internal, 1)," & -- UNBONDED114.T + "2220 (BC_2, *, internal, X)," & -- UNBONDED114.O + "2221 (BC_2, *, internal, X)," & -- UNBONDED114.I + "2222 (BC_2, *, internal, 1)," & -- UNBONDED113.T + "2223 (BC_2, *, internal, X)," & -- UNBONDED113.O + "2224 (BC_2, *, internal, X)," & -- UNBONDED113.I + "2225 (BC_2, *, internal, 1)," & -- UNBONDED112.T + "2226 (BC_2, *, internal, X)," & -- UNBONDED112.O + "2227 (BC_2, *, internal, X)," & -- UNBONDED112.I + "2228 (BC_2, *, internal, 1)," & -- UNBONDED19.T + "2229 (BC_2, *, internal, X)," & -- UNBONDED19.O + "2230 (BC_2, *, internal, X)," & -- UNBONDED19.I + "2231 (BC_2, *, internal, 1)," & -- UNBONDED111.T + "2232 (BC_2, *, internal, X)," & -- UNBONDED111.O + "2233 (BC_2, *, internal, X)," & -- UNBONDED111.I + "2234 (BC_2, *, internal, 1)," & -- UNBONDED110.T + "2235 (BC_2, *, internal, X)," & -- UNBONDED110.O + "2236 (BC_2, *, internal, X)," & -- UNBONDED110.I + "2237 (BC_2, *, internal, 1)," & -- UNBONDED18.T + "2238 (BC_2, *, internal, X)," & -- UNBONDED18.O + "2239 (BC_2, *, internal, X)," & -- UNBONDED18.I + "2240 (BC_2, *, internal, 1)," & -- UNBONDED15.T + "2241 (BC_2, *, internal, X)," & -- UNBONDED15.O + "2242 (BC_2, *, internal, X)," & -- UNBONDED15.I + "2243 (BC_2, *, internal, 1)," & -- UNBONDED17.T + "2244 (BC_2, *, internal, X)," & -- UNBONDED17.O + "2245 (BC_2, *, internal, X)," & -- UNBONDED17.I + "2246 (BC_2, *, internal, 1)," & -- UNBONDED16.T + "2247 (BC_2, *, internal, X)," & -- UNBONDED16.O + "2248 (BC_2, *, internal, X)," & -- UNBONDED16.I + "2249 (BC_2, *, internal, 1)," & -- UNBONDED14.T + "2250 (BC_2, *, internal, X)," & -- UNBONDED14.O + "2251 (BC_2, *, internal, X)," & -- UNBONDED14.I + "2252 (BC_2, *, internal, 1)," & -- UNBONDED11.T + "2253 (BC_2, *, internal, X)," & -- UNBONDED11.O + "2254 (BC_2, *, internal, X)," & -- UNBONDED11.I + "2255 (BC_2, *, internal, 1)," & -- UNBONDED13.T + "2256 (BC_2, *, internal, X)," & -- UNBONDED13.O + "2257 (BC_2, *, internal, X)," & -- UNBONDED13.I + "2258 (BC_2, *, internal, 1)," & -- UNBONDED12.T + "2259 (BC_2, *, internal, X)," & -- UNBONDED12.O + "2260 (BC_2, *, internal, X)," & -- UNBONDED12.I + "2261 (BC_2, *, internal, 1)," & -- UNBONDED10.T + "2262 (BC_2, *, internal, X)," & -- UNBONDED10.O + "2263 (BC_2, *, internal, X)," & -- UNBONDED10.I + "2264 (BC_2, *, internal, X)," & + "2265 (BC_2, *, internal, X)," & + "2266 (BC_2, *, internal, X)," & + "2267 (BC_2, *, internal, X)," & + "2268 (BC_2, *, internal, X)," & + "2269 (BC_2, *, internal, X)," & + "2270 (BC_2, *, internal, X)," & + "2271 (BC_2, *, internal, X)," & + "2272 (BC_2, *, internal, X)," & + "2273 (BC_2, *, internal, X)," & + "2274 (BC_2, *, internal, X)," & + "2275 (BC_2, *, internal, X)," & + "2276 (BC_2, *, internal, X)," & + "2277 (BC_2, *, internal, X)," & + "2278 (BC_2, *, internal, X)," & + "2279 (BC_2, *, internal, X)," & + "2280 (BC_2, *, internal, X)," & + "2281 (BC_2, *, internal, X)," & + "2282 (BC_2, *, internal, X)," & + "2283 (BC_2, *, internal, X)," & + "2284 (BC_2, *, internal, X)," & + "2285 (BC_2, *, internal, X)," & + "2286 (BC_2, *, internal, X)," & + "2287 (BC_2, *, internal, X)," & + "2288 (BC_2, *, internal, X)," & + "2289 (BC_2, *, internal, X)," & + "2290 (BC_2, *, internal, X)," & + "2291 (BC_2, *, internal, X)," & + "2292 (BC_2, *, internal, X)," & + "2293 (BC_2, *, internal, X)," & + "2294 (BC_2, *, internal, X)," & + "2295 (BC_2, *, internal, X)," & + "2296 (BC_2, *, internal, X)," & + "2297 (BC_2, *, internal, X)," & + "2298 (BC_2, *, internal, X)," & + "2299 (BC_2, *, internal, X)," & + "2300 (BC_2, *, internal, X)," & + "2301 (BC_2, *, internal, X)," & + "2302 (BC_2, *, internal, X)," & + "2303 (BC_2, *, internal, X)," & + "2304 (BC_2, *, internal, X)," & + "2305 (BC_2, *, internal, X)," & + "2306 (BC_2, *, internal, X)," & + "2307 (BC_2, *, internal, X)," & + "2308 (BC_2, *, internal, X)," & + "2309 (BC_2, *, internal, X)," & + "2310 (BC_4, MGTYRXN0_127, OBSERVE_ONLY, X)," & + "2311 (BC_4, MGTYRXP0_127, OBSERVE_ONLY, X)," & + "2312 (AC_2, MGTYTXP0_127, OUTPUT2, X)," & + "2313 (BC_4, MGTYRXN1_127, OBSERVE_ONLY, X)," & + "2314 (BC_4, MGTYRXP1_127, OBSERVE_ONLY, X)," & + "2315 (AC_2, MGTYTXP1_127, OUTPUT2, X)," & + "2316 (BC_2, *, internal, 0)," & + "2317 (BC_4, MGTYRXN2_127, OBSERVE_ONLY, X)," & + "2318 (BC_4, MGTYRXP2_127, OBSERVE_ONLY, X)," & + "2319 (AC_2, MGTYTXP2_127, OUTPUT2, X)," & + "2320 (BC_4, MGTYRXN3_127, OBSERVE_ONLY, X)," & + "2321 (BC_4, MGTYRXP3_127, OBSERVE_ONLY, X)," & + "2322 (AC_2, MGTYTXP3_127, OUTPUT2, X)," & + "2323 (BC_2, *, internal, X)," & + "2324 (BC_4, MGTYRXN0_128, OBSERVE_ONLY, X)," & + "2325 (BC_4, MGTYRXP0_128, OBSERVE_ONLY, X)," & + "2326 (AC_2, MGTYTXP0_128, OUTPUT2, X)," & + "2327 (BC_4, MGTYRXN1_128, OBSERVE_ONLY, X)," & + "2328 (BC_4, MGTYRXP1_128, OBSERVE_ONLY, X)," & + "2329 (AC_2, MGTYTXP1_128, OUTPUT2, X)," & + "2330 (BC_2, *, internal, 0)," & + "2331 (BC_4, MGTYRXN2_128, OBSERVE_ONLY, X)," & + "2332 (BC_4, MGTYRXP2_128, OBSERVE_ONLY, X)," & + "2333 (AC_2, MGTYTXP2_128, OUTPUT2, X)," & + "2334 (BC_4, MGTYRXN3_128, OBSERVE_ONLY, X)," & + "2335 (BC_4, MGTYRXP3_128, OBSERVE_ONLY, X)," & + "2336 (AC_2, MGTYTXP3_128, OUTPUT2, X)," & + "2337 (BC_2, *, internal, X)," & + "2338 (BC_4, MGTYRXN0_129, OBSERVE_ONLY, X)," & + "2339 (BC_4, MGTYRXP0_129, OBSERVE_ONLY, X)," & + "2340 (AC_2, MGTYTXP0_129, OUTPUT2, X)," & + "2341 (BC_4, MGTYRXN1_129, OBSERVE_ONLY, X)," & + "2342 (BC_4, MGTYRXP1_129, OBSERVE_ONLY, X)," & + "2343 (AC_2, MGTYTXP1_129, OUTPUT2, X)," & + "2344 (BC_2, *, internal, 0)," & + "2345 (BC_4, MGTYRXN2_129, OBSERVE_ONLY, X)," & + "2346 (BC_4, MGTYRXP2_129, OBSERVE_ONLY, X)," & + "2347 (AC_2, MGTYTXP2_129, OUTPUT2, X)," & + "2348 (BC_4, MGTYRXN3_129, OBSERVE_ONLY, X)," & + "2349 (BC_4, MGTYRXP3_129, OBSERVE_ONLY, X)," & + "2350 (AC_2, MGTYTXP3_129, OUTPUT2, X)," & + "2351 (BC_2, *, internal, X)," & + "2352 (BC_4, MGTYRXN0_130, OBSERVE_ONLY, X)," & + "2353 (BC_4, MGTYRXP0_130, OBSERVE_ONLY, X)," & + "2354 (AC_2, MGTYTXP0_130, OUTPUT2, X)," & + "2355 (BC_4, MGTYRXN1_130, OBSERVE_ONLY, X)," & + "2356 (BC_4, MGTYRXP1_130, OBSERVE_ONLY, X)," & + "2357 (AC_2, MGTYTXP1_130, OUTPUT2, X)," & + "2358 (BC_2, *, internal, 0)," & + "2359 (BC_4, MGTYRXN2_130, OBSERVE_ONLY, X)," & + "2360 (BC_4, MGTYRXP2_130, OBSERVE_ONLY, X)," & + "2361 (AC_2, MGTYTXP2_130, OUTPUT2, X)," & + "2362 (BC_4, MGTYRXN3_130, OBSERVE_ONLY, X)," & + "2363 (BC_4, MGTYRXP3_130, OBSERVE_ONLY, X)," & + "2364 (AC_2, MGTYTXP3_130, OUTPUT2, X)," & + "2365 (BC_2, *, internal, X)," & + "2366 (BC_4, MGTYRXN0_131, OBSERVE_ONLY, X)," & + "2367 (BC_4, MGTYRXP0_131, OBSERVE_ONLY, X)," & + "2368 (AC_2, MGTYTXP0_131, OUTPUT2, X)," & + "2369 (BC_4, MGTYRXN1_131, OBSERVE_ONLY, X)," & + "2370 (BC_4, MGTYRXP1_131, OBSERVE_ONLY, X)," & + "2371 (AC_2, MGTYTXP1_131, OUTPUT2, X)," & + "2372 (BC_2, *, internal, 0)," & + "2373 (BC_4, MGTYRXN2_131, OBSERVE_ONLY, X)," & + "2374 (BC_4, MGTYRXP2_131, OBSERVE_ONLY, X)," & + "2375 (AC_2, MGTYTXP2_131, OUTPUT2, X)," & + "2376 (BC_4, MGTYRXN3_131, OBSERVE_ONLY, X)," & + "2377 (BC_4, MGTYRXP3_131, OBSERVE_ONLY, X)," & + "2378 (AC_2, MGTYTXP3_131, OUTPUT2, X)," & + "2379 (BC_2, *, internal, X)," & + "2380 (BC_4, MGTYRXN0_132, OBSERVE_ONLY, X)," & + "2381 (BC_4, MGTYRXP0_132, OBSERVE_ONLY, X)," & + "2382 (AC_2, MGTYTXP0_132, OUTPUT2, X)," & + "2383 (BC_4, MGTYRXN1_132, OBSERVE_ONLY, X)," & + "2384 (BC_4, MGTYRXP1_132, OBSERVE_ONLY, X)," & + "2385 (AC_2, MGTYTXP1_132, OUTPUT2, X)," & + "2386 (BC_2, *, internal, 0)," & + "2387 (BC_4, MGTYRXN2_132, OBSERVE_ONLY, X)," & + "2388 (BC_4, MGTYRXP2_132, OBSERVE_ONLY, X)," & + "2389 (AC_2, MGTYTXP2_132, OUTPUT2, X)," & + "2390 (BC_4, MGTYRXN3_132, OBSERVE_ONLY, X)," & + "2391 (BC_4, MGTYRXP3_132, OBSERVE_ONLY, X)," & + "2392 (AC_2, MGTYTXP3_132, OUTPUT2, X)," & + "2393 (BC_2, *, internal, X)," & + "2394 (BC_4, *, internal, X)," & + "2395 (BC_4, *, internal, X)," & + "2396 (BC_4, *, internal, X)," & + "2397 (BC_4, *, internal, X)," & + "2398 (BC_4, *, internal, X)," & + "2399 (BC_4, *, internal, X)," & + "2400 (BC_2, *, internal, 0)," & + "2401 (BC_4, *, internal, X)," & + "2402 (BC_4, *, internal, X)," & + "2403 (BC_4, *, internal, X)," & + "2404 (BC_4, *, internal, X)," & + "2405 (BC_4, *, internal, X)," & + "2406 (BC_4, *, internal, X)," & + "2407 (BC_2, *, internal, X)," & + "2408 (BC_4, *, internal, X)," & + "2409 (BC_4, *, internal, X)," & + "2410 (BC_4, *, internal, X)," & + "2411 (BC_4, *, internal, X)," & + "2412 (BC_4, *, internal, X)," & + "2413 (BC_4, *, internal, X)," & + "2414 (BC_2, *, internal, 0)," & + "2415 (BC_4, *, internal, X)," & + "2416 (BC_4, *, internal, X)," & + "2417 (BC_4, *, internal, X)," & + "2418 (BC_4, *, internal, X)," & + "2419 (BC_4, *, internal, X)," & + "2420 (BC_4, *, internal, X)," & + "2421 (BC_2, *, internal, X)," & + "2422 (BC_2, *, internal, X)," & + "2423 (BC_2, *, internal, X)," & + "2424 (BC_2, *, internal, X)," & + "2425 (BC_2, *, internal, X)," & + "2426 (BC_2, *, internal, X)," & + "2427 (BC_2, *, internal, X)," & + "2428 (BC_2, *, internal, X)," & + "2429 (BC_2, *, internal, X)," & + "2430 (BC_2, *, internal, X)," & + "2431 (BC_2, *, internal, X)," & + "2432 (BC_2, *, internal, X)," & + "2433 (BC_2, *, internal, X)," & + "2434 (BC_2, *, internal, X)," & + "2435 (BC_2, *, internal, X)," & + "2436 (BC_2, *, internal, X)," & + "2437 (BC_2, *, internal, X)," & + "2438 (BC_2, *, internal, X)," & + "2439 (BC_2, *, internal, X)," & + "2440 (BC_2, *, internal, X)," & + "2441 (BC_2, *, internal, X)," & + "2442 (BC_2, *, internal, X)," & + "2443 (BC_2, *, internal, X)," & + "2444 (BC_2, *, internal, X)," & + "2445 (BC_2, *, internal, X)," & + "2446 (BC_2, *, internal, X)," & + "2447 (BC_2, *, internal, X)," & + "2448 (BC_2, *, internal, X)," & + "2449 (BC_2, *, internal, X)," & + "2450 (BC_2, *, internal, X)," & + "2451 (BC_2, *, internal, X)," & + "2452 (BC_2, *, internal, X)," & + "2453 (BC_2, *, internal, X)," & + "2454 (BC_2, *, internal, X)," & + "2455 (BC_2, *, internal, X)," & + "2456 (BC_2, *, internal, X)," & + "2457 (BC_2, *, internal, X)," & + "2458 (BC_2, *, internal, X)," & + "2459 (BC_2, *, internal, X)," & + "2460 (BC_2, *, internal, X)," & + "2461 (BC_2, *, internal, X)," & + "2462 (BC_2, *, internal, X)," & + "2463 (BC_2, *, internal, X)," & + "2464 (BC_2, *, internal, X)," & + "2465 (BC_2, *, internal, X)"; + + +-- Advanced I/O Description + +attribute AIO_COMPONENT_CONFORMANCE of XCKU15P_FFVE1517 : entity is + "STD_1149_6_2003"; + +attribute AIO_EXTEST_Pulse_Execution of XCKU15P_FFVE1517 : entity is + "Wait_Duration TCK 15"; + +attribute AIO_EXTEST_Train_Execution of XCKU15P_FFVE1517 : entity is + "train 30, maximum_time 120.0e-6"; + +attribute AIO_Pin_Behavior of XCKU15P_FFVE1517 : entity is +"MGTHRXP0_224 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHRXP0_225 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHRXP0_226 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHRXP0_227 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHRXP0_228 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHRXP0_229 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHRXP0_230 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHRXP0_231 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHRXP1_224 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHRXP1_225 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHRXP1_226 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHRXP1_227 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHRXP1_228 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHRXP1_229 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHRXP1_230 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHRXP1_231 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHRXP2_224 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHRXP2_225 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHRXP2_226 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHRXP2_227 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHRXP2_228 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHRXP2_229 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHRXP2_230 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHRXP2_231 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHRXP3_224 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHRXP3_225 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHRXP3_226 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHRXP3_227 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHRXP3_228 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHRXP3_229 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHRXP3_230 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHRXP3_231 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTHTXP0_224; " & +"MGTHTXP0_225; " & +"MGTHTXP0_226; " & +"MGTHTXP0_227; " & +"MGTHTXP0_228; " & +"MGTHTXP0_229; " & +"MGTHTXP0_230; " & +"MGTHTXP0_231; " & +"MGTHTXP1_224; " & +"MGTHTXP1_225; " & +"MGTHTXP1_226; " & +"MGTHTXP1_227; " & +"MGTHTXP1_228; " & +"MGTHTXP1_229; " & +"MGTHTXP1_230; " & +"MGTHTXP1_231; " & +"MGTHTXP2_224; " & +"MGTHTXP2_225; " & +"MGTHTXP2_226; " & +"MGTHTXP2_227; " & +"MGTHTXP2_228; " & +"MGTHTXP2_229; " & +"MGTHTXP2_230; " & +"MGTHTXP2_231; " & +"MGTHTXP3_224; " & +"MGTHTXP3_225; " & +"MGTHTXP3_226; " & +"MGTHTXP3_227; " & +"MGTHTXP3_228; " & +"MGTHTXP3_229; " & +"MGTHTXP3_230; " & +"MGTHTXP3_231; " & +"MGTYRXP0_127 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTYRXP0_128 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTYRXP0_129 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTYRXP0_130 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTYRXP0_131 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTYRXP0_132 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTYRXP1_127 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTYRXP1_128 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTYRXP1_129 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTYRXP1_130 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTYRXP1_131 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTYRXP1_132 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTYRXP2_127 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTYRXP2_128 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTYRXP2_129 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTYRXP2_130 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTYRXP2_131 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTYRXP2_132 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTYRXP3_127 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTYRXP3_128 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTYRXP3_129 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTYRXP3_130 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTYRXP3_131 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTYRXP3_132 : LP_time=22.5e-9 HP_time=45.0e-9; " & +"MGTYTXP0_127; " & +"MGTYTXP0_128; " & +"MGTYTXP0_129; " & +"MGTYTXP0_130; " & +"MGTYTXP0_131; " & +"MGTYTXP0_132; " & +"MGTYTXP1_127; " & +"MGTYTXP1_128; " & +"MGTYTXP1_129; " & +"MGTYTXP1_130; " & +"MGTYTXP1_131; " & +"MGTYTXP1_132; " & +"MGTYTXP2_127; " & +"MGTYTXP2_128; " & +"MGTYTXP2_129; " & +"MGTYTXP2_130; " & +"MGTYTXP2_131; " & +"MGTYTXP2_132; " & +"MGTYTXP3_127; " & +"MGTYTXP3_128; " & +"MGTYTXP3_129; " & +"MGTYTXP3_130; " & +"MGTYTXP3_131; " & +"MGTYTXP3_132 "; + +-- Design Warning Section + +attribute DESIGN_WARNING of XCKU15P_FFVE1517 : entity is + "To model the boundary-scan cell behavior" & + "correctly post-configuration, use" & + "write_bsdl to modify the BSDL file." & + "To avoid losing the current configuration, the boundary" & + "scan test vectors should keep the PROGRAM_B pin" & + "High. If the PROGRAM_B pin goes Low by any means," & + "the configuration will be cleared." & + "PROGRAM_B can only be captured, not updated." & + "The value at the pin is always used by the device." & + "In EXTEST, output and tristate values are not captured in the" & + "Capture-DR state - those register cells are unchanged." & + "The output and tristate capture values are not valid until after" & + "the device is configured." & + "The tristate control value is not captured properly when" & + "GTS is activated or for pins configured as" & + "non-tristatable outputs." & + "The IEEE Std 1149.6 EXTEST_PULSE and EXTEST_TRAIN instructions" & + "require a minimum TCK freq of 2 MHz."; + +end XCKU15P_FFVE1517; + diff --git a/modules/config/bs_defines.h b/modules/config/bs_defines.h index e515c21..75e52ad 100644 --- a/modules/config/bs_defines.h +++ b/modules/config/bs_defines.h @@ -62,7 +62,7 @@ typedef struct _script_label typedef struct _script_ctx script_ctx; -typedef int (*SCRIPT_PRINTF_FUNC)(script_ctx * ctx, int MSGTYPE, char *string, ...); +typedef int (*SCRIPT_PRINTF_FUNC)(script_ctx * ctx, enum MSGTYPE typ, char *string, ...); typedef struct _script_ctx { diff --git a/modules/config/version.h b/modules/config/version.h index 1fc2d02..e6e7d3e 100644 --- a/modules/config/version.h +++ b/modules/config/version.h @@ -1,21 +1,20 @@ #ifndef _VERSION_H #define _VERSION_H -#define VDIG1 2 -#define VDIG2 6 -#define VDIG3 7 -#define VDIG4 1 +#define VDIG1 2 +#define VDIG2 6 +#define VDIG3 7 +#define VDIG4 1 -#define STR_DATE "28 Oct 2024" +#define STR_DATE "28 Oct 2024" -#define vxstr(s) vstr(s) -#define vstr(s) #s +#define vxstr(s) vstr(s) +#define vstr(s) #s -#define LIB_JTAG_CORE_VERSION vxstr(VDIG1) "." vxstr(VDIG2) "." vxstr(VDIG3) "." vxstr(VDIG4) -#define LIB_JTAG_CORE_VERSION_COMMA vxstr(VDIG1) "," vxstr(VDIG2) "," vxstr(VDIG3) "," vxstr(VDIG4) - -#define APP_VER VDIG1.VDIG2.VDIG3.VDIG4 -#define APP_VER_TXT( N ) JTAG Boundary Scanner v##N -#define APP_VER_STR( N ) vxstr( APP_VER_TXT( N ) ) +#define APP_VER VDIG1.VDIG2.VDIG3.VDIG4 +#define APP_VER_TXT_LONG( N ) JTAG Boundary Scanner v##N +#define APP_VER_TXT( N ) v##N +#define APP_VER_STR_LONG( N ) vxstr( APP_VER_TXT_LONG( N ) ) +#define APP_VER_STR( N ) vxstr( APP_VER_TXT( N ) ) #endif \ No newline at end of file diff --git a/modules/drivers/CMakeLists.txt b/modules/drivers/CMakeLists.txt index 0a7548d..9a61071 100644 --- a/modules/drivers/CMakeLists.txt +++ b/modules/drivers/CMakeLists.txt @@ -5,6 +5,10 @@ file(GLOB_RECURSE JLINK_SOURCES "jlink_jtag/*.c") file(GLOB_RECURSE FTDI_SOURCES "ftdi_jtag/*.c") file(GLOB_RECURSE GPIO_SOURCES "linux_gpio_jtag/*.c") -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..) +include_directories(${DIR_MODULES}) +include_directories(${DIR_LIBS}) + +add_compile_definitions(FTD2XX_STATIC) +add_compile_definitions(FTDILIB) add_library(drivers ${MAIN_SOURCES} ${FTDI_SOURCES} ${GPIO_SOURCES} ${JLINK_SOURCES}) diff --git a/modules/drivers/ftdi_jtag/ftdi_jtag_drv.c b/modules/drivers/ftdi_jtag/ftdi_jtag_drv.c index 55b1c5c..1c9762a 100644 --- a/modules/drivers/ftdi_jtag/ftdi_jtag_drv.c +++ b/modules/drivers/ftdi_jtag/ftdi_jtag_drv.c @@ -41,7 +41,7 @@ extern "C" { #endif -#include "ftd2xx.h" +#include "libftd2xx/ftd2xx.h" #ifdef __cplusplus } diff --git a/modules/jtag_core/CMakeLists.txt b/modules/jtag_core/CMakeLists.txt index 71b3e27..584515a 100644 --- a/modules/jtag_core/CMakeLists.txt +++ b/modules/jtag_core/CMakeLists.txt @@ -18,10 +18,8 @@ add_custom_target( DEPENDS prebuild_command_done ) -add_compile_definitions(FTD2XX_STATIC) -add_compile_definitions(FTDILIB) - -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..) +include_directories(${DIR_MODULES}) +include_directories(${DIR_LIBS}) add_library(jtag_core ${ALL_SOURCES}) add_dependencies(jtag_core prebuild) diff --git a/modules/script/CMakeLists.txt b/modules/script/CMakeLists.txt index 404de25..35d80da 100644 --- a/modules/script/CMakeLists.txt +++ b/modules/script/CMakeLists.txt @@ -2,6 +2,7 @@ set(SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") file(GLOB_RECURSE ALL_SOURCES "*.c") -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..) +include_directories(${DIR_MODULES}) +include_directories(${DIR_LIBS}) add_library(script ${ALL_SOURCES}) diff --git a/modules/script/script.c b/modules/script/script.c index 5c98452..5d59ad7 100644 --- a/modules/script/script.c +++ b/modules/script/script.c @@ -18,10 +18,10 @@ */ /** -* @file script.c -* @brief Script engine. -* @author Jean-François DEL NERO -*/ + * @file script.c + * @brief Script engine. + * @author Jean-François DEL NERO + */ #include #include @@ -40,2580 +40,2803 @@ #include "env.h" -#ifndef _script_cmd_func_ -typedef int (* CMD_FUNC)( script_ctx * ctx, char * line); -#define _script_cmd_func_ -#endif - -typedef struct cmd_list_ +static int dummy_script_printf(script_ctx *ctx, enum MSGTYPE typ, char *string, ...) { - char * command; - CMD_FUNC func; -}cmd_list; - -typedef struct label_list_ -{ - char * label; - unsigned int file_offset; -}label_list; - -extern cmd_list script_commands_list[]; - -static int dummy_script_printf(script_ctx * ctx, int MSGTYPE, char * string, ... ) -{ - return 0; + return 0; } static int is_end_line(char c) { - if( c == 0 || c == '#' || c == '\r' || c == '\n' ) - { - return 1; - } - else - { - return 0; - } + if (c == 0 || c == '#' || c == '\r' || c == '\n') + { + return 1; + } + else + { + return 0; + } } static int is_space(char c) { - if( c == ' ' || c == '\t' ) - { - return 1; - } - else - { - return 0; - } + if (c == ' ' || c == '\t') + { + return 1; + } + else + { + return 0; + } } -static int is_label(char * command) +static int is_label(char *command) { - int i; + int i; - i = 0; - while(command[i]) - { - i++; - } + i = 0; + while (command[i]) + { + i++; + } - if(i>1) - { - if(command[i - 1] == ':') - return 1; - } + if (i > 1) + { + if (command[i - 1] == ':') + return 1; + } - return 0; + return 0; } -static int is_variable(char * command) +static int is_variable(char *command) { - if(strlen(command)>1) - { - if(command[0] == '$' && command[1] && ( command[1] != ' ' || command[1] != '\t' )) - return 1; - else - return 0; - } + if (strlen(command) > 1) + { + if (command[0] == '$' && command[1] && (command[1] != ' ' || command[1] != '\t')) + return 1; + else + return 0; + } - return 0; + return 0; } -static int get_next_word(char * line, int offset) +static int get_next_word(char *line, int offset) { - while( !is_end_line(line[offset]) && ( line[offset] == ' ' || line[offset] == '\t' ) ) - { - offset++; - } + while (!is_end_line(line[offset]) && (line[offset] == ' ' || line[offset] == '\t')) + { + offset++; + } - return offset; + return offset; } -static int copy_param(char * dest, char * line, int offs) +static int copy_param(char *dest, char *line, int offs) { - int i,insidequote; + int i, insidequote; - i = 0; - insidequote = 0; - while( !is_end_line(line[offs]) && ( insidequote || !is_space(line[offs]) ) && (i < (DEFAULT_BUFLEN - 1)) ) - { - if(line[offs] != '"') - { - if(dest) - dest[i] = line[offs]; + i = 0; + insidequote = 0; + while (!is_end_line(line[offs]) && (insidequote || !is_space(line[offs])) && (i < (DEFAULT_BUFLEN - 1))) + { + if (line[offs] != '"') + { + if (dest) + dest[i] = line[offs]; - i++; - } - else - { - if(insidequote) - insidequote = 0; - else - insidequote = 1; - } + i++; + } + else + { + if (insidequote) + insidequote = 0; + else + insidequote = 1; + } - offs++; - } + offs++; + } - if(dest) - dest[i] = 0; + if (dest) + dest[i] = 0; - return offs; + return offs; } -static int get_param_offset(char * line, int param) +static int get_param_offset(char *line, int param) { - int param_cnt, offs; + int param_cnt, offs; - offs = 0; - offs = get_next_word(line, offs); + offs = 0; + offs = get_next_word(line, offs); - if( param ) - { - param_cnt = 0; - do - { - offs = copy_param(NULL, line, offs); + if (param) + { + param_cnt = 0; + do + { + offs = copy_param(NULL, line, offs); - offs = get_next_word( line, offs ); + offs = get_next_word(line, offs); - if(line[offs] == 0 || line[offs] == '#' || line[offs] == '\r' || line[offs] == '\n') - return -1; + if (line[offs] == 0 || line[offs] == '#' || line[offs] == '\r' || line[offs] == '\n') + return -1; - param_cnt++; - }while( param_cnt < param ); - } + param_cnt++; + } while (param_cnt < param); + } - return offs; + return offs; } -static int get_param( script_ctx * ctx, char * line, int param_offset,char * param) +static int get_param(script_ctx *ctx, char *line, int param_offset, char *param) { - int offs; - char var_str[DEFAULT_BUFLEN]; + int offs; + char var_str[DEFAULT_BUFLEN]; - offs = get_param_offset(line, param_offset); + offs = get_param_offset(line, param_offset); - if(offs>=0) - { - if(line[offs] != '$') - { - offs = copy_param(param, line, offs); - } - else - { - copy_param(var_str, line, offs); + if (offs >= 0) + { + if (line[offs] != '$') + { + offs = copy_param(param, line, offs); + } + else + { + copy_param(var_str, line, offs); - if(!strcmp(var_str,"$LASTDATA")) - { - sprintf(param,"0x"LONGHEXSTR,ctx->last_data_value); - return 1; - } + if (!strcmp(var_str, "$LASTDATA")) + { + sprintf(param, "0x" LONGHEXSTR, ctx->last_data_value); + return 1; + } - if(!strcmp(var_str,"$LASTFLAGS")) - { - sprintf(param,"0x%X",ctx->last_flags); - return 1; - } + if (!strcmp(var_str, "$LASTFLAGS")) + { + sprintf(param, "0x%X", ctx->last_flags); + return 1; + } - if(!strcmp(var_str,"$LASTERROR")) - { - sprintf(param,"%d",ctx->last_error_code); - return 1; - } + if (!strcmp(var_str, "$LASTERROR")) + { + sprintf(param, "%d", ctx->last_error_code); + return 1; + } - if( !getEnvVarDat( (envvar_entry *)ctx->env, (char*)&var_str[1], param, DEFAULT_BUFLEN) ) - { - copy_param(param, line, offs); - } - } + if (!getEnvVarDat((envvar_entry *)ctx->env, (char *)&var_str[1], param, DEFAULT_BUFLEN)) + { + copy_param(param, line, offs); + } + } - return 1; - } + return 1; + } - return -1; + return -1; } -static int get_param_str( script_ctx * ctx, char * line, int param_offset,char * param) +static int get_param_str(script_ctx *ctx, char *line, int param_offset, char *param) { - int offs; + int offs; - offs = get_param_offset(line, param_offset); + offs = get_param_offset(line, param_offset); - if(offs>=0) - { - offs = copy_param(param, line, offs); + if (offs >= 0) + { + offs = copy_param(param, line, offs); - return 1; - } + return 1; + } - return -1; + return -1; } -env_var_value strbin_to_val( char * str ) +env_var_value strbin_to_val(char *str) { - int l; - env_var_value val; - env_var_value mask; + int l; + env_var_value val; + env_var_value mask; - val = 0; + val = 0; - // -> end of the string - l = 0; - while(str[l]) - { - l++; - } + // -> end of the string + l = 0; + while (str[l]) + { + l++; + } - // -> find the lowest bit - while(l) - { - if( str[l] == '1' || str[l] == '0' ) - { - break; - } - l--; - }; + // -> find the lowest bit + while (l) + { + if (str[l] == '1' || str[l] == '0') + { + break; + } + l--; + }; - mask = 0x1; - // convert - while(l >= 0) - { - if( str[l] != '1' && str[l] != '0' ) - { - break; - } + mask = 0x1; + // convert + while (l >= 0) + { + if (str[l] != '1' && str[l] != '0') + { + break; + } - if( str[l] == '1') - { - val |= mask; - } + if (str[l] == '1') + { + val |= mask; + } - mask <<= 1; + mask <<= 1; - l--; - } + l--; + } - return val; + return val; } -static env_var_value str_to_int(char * str) +static env_var_value str_to_int(char *str) { - env_var_value value; + env_var_value value; - value = 0; + value = 0; - if(str) - { - if( strlen(str) > 2 ) - { - if( str[0]=='0' ) - { - switch( str[1] ) - { - // hex - case 'x': - case 'X': - value = (env_var_value)STRTOVALUE(str, NULL, 0); - break; + if (str) + { + if (strlen(str) > 2) + { + if (str[0] == '0') + { + switch (str[1]) + { + // hex + case 'x': + case 'X': + value = (env_var_value)STRTOVALUE(str, NULL, 0); + break; - // binary - case 'b': - case 'B': - value = strbin_to_val(str); - break; + // binary + case 'b': + case 'B': + value = strbin_to_val(str); + break; - // decimal - default: - value = atoi(str); - break; - } - } - else - { - value = atoi(str); - } - } - else - { - value = atoi(str); - } - } + // decimal + default: + value = atoi(str); + break; + } + } + else + { + value = atoi(str); + } + } + else + { + value = atoi(str); + } + } - return value; + return value; } -static env_var_value get_script_variable( script_ctx * ctx, char * varname) +static env_var_value get_script_variable(script_ctx *ctx, char *varname) { - env_var_value value; + env_var_value value; - if(!strcmp(varname,"$LASTDATA")) - { - return ctx->last_data_value; - } + if (!strcmp(varname, "$LASTDATA")) + { + return ctx->last_data_value; + } - if(!strcmp(varname,"$LASTFLAGS")) - { - return ctx->last_flags; - } + if (!strcmp(varname, "$LASTFLAGS")) + { + return ctx->last_flags; + } - if(!strcmp(varname,"$LASTERROR")) - { - return (env_var_value)(ctx->last_error_code); - } + if (!strcmp(varname, "$LASTERROR")) + { + return (env_var_value)(ctx->last_error_code); + } - if(varname[0] == '$') - value = getEnvVarValue( (envvar_entry *)ctx->env, (char*)&varname[1]); - else - value = str_to_int((char*)varname); + if (varname[0] == '$') + value = getEnvVarValue((envvar_entry *)ctx->env, (char *)&varname[1]); + else + value = str_to_int((char *)varname); - return value; + return value; } -static void set_script_variable( script_ctx * ctx, char * varname, env_var_value value) +static void set_script_variable(script_ctx *ctx, char *varname, env_var_value value) { - char tmp_str[64]; + char tmp_str[64]; - if(!strcmp(varname,"$LASTDATA")) - { - ctx->last_data_value = value; + if (!strcmp(varname, "$LASTDATA")) + { + ctx->last_data_value = value; - return; - } + return; + } - if(!strcmp(varname,"$LASTFLAGS")) - { - ctx->last_flags = value; + if (!strcmp(varname, "$LASTFLAGS")) + { + ctx->last_flags = value; - return; - } + return; + } - if(!strcmp(varname,"$LASTERROR")) - { - ctx->last_error_code = value; + if (!strcmp(varname, "$LASTERROR")) + { + ctx->last_error_code = value; - return; - } + return; + } - if(varname[0] == '$' && varname[1]) - { - sprintf(tmp_str,"0x"LONGHEXSTR,value); - setEnvVarDat( (envvar_entry *)ctx->env, (char*)&varname[1], tmp_str ); + if (varname[0] == '$' && varname[1]) + { + sprintf(tmp_str, "0x" LONGHEXSTR, value); + setEnvVarDat((envvar_entry *)ctx->env, (char *)&varname[1], tmp_str); - return; - } + return; + } } -script_ctx * init_script(void * app_ctx, unsigned int flags, void * env) +script_ctx *init_script(void *app_ctx, unsigned int flags, void *env) { - script_ctx * ctx; + script_ctx *ctx; - ctx = malloc(sizeof(script_ctx)); - if(ctx) - { - memset(ctx,0,sizeof(script_ctx)); + ctx = malloc(sizeof(script_ctx)); + if (ctx) + { + memset(ctx, 0, sizeof(script_ctx)); - ctx->env = env; + ctx->env = env; - setOutputFunc_script( ctx, dummy_script_printf ); + setOutputFunc_script(ctx, dummy_script_printf); - ctx->app_ctx = (void*)app_ctx; - ctx->cur_label_index = 0; + ctx->app_ctx = (void *)app_ctx; + ctx->cur_label_index = 0; - ctx->cmdlist = (void*)script_commands_list; + ctx->cmdlist = (void *)script_commands_list; - ctx->script_file = NULL; - } + ctx->script_file = NULL; + } - return ctx; + return ctx; } -static int extract_cmd( script_ctx * ctx, char * line, char * command) +static int extract_cmd(script_ctx *ctx, char *line, char *command) { - int offs,i; + int offs, i; - i = 0; - offs = 0; + i = 0; + offs = 0; - offs = get_next_word(line, offs); + offs = get_next_word(line, offs); - if( !is_end_line(line[offs]) ) - { - while( !is_end_line(line[offs]) && !is_space(line[offs]) && i < (DEFAULT_BUFLEN - 1) ) - { - command[i] = line[offs]; - offs++; - i++; - } + if (!is_end_line(line[offs])) + { + while (!is_end_line(line[offs]) && !is_space(line[offs]) && i < (DEFAULT_BUFLEN - 1)) + { + command[i] = line[offs]; + offs++; + i++; + } - command[i] = 0; + command[i] = 0; - return i; - } + return i; + } - return 0; + return 0; } -static int exec_cmd( script_ctx * ctx, char * command,char * line) +static int exec_cmd(script_ctx *ctx, char *command, char *line) { - int i; - cmd_list * cmdlist; + int i; + cmd_list *cmdlist; - cmdlist = (cmd_list*)ctx->cmdlist; + cmdlist = (cmd_list *)ctx->cmdlist; - i = 0; - while(cmdlist[i].func) - { - if( !strcmp(cmdlist[i].command,command) ) - { - return cmdlist[i].func(ctx,line); - } + i = 0; + while (cmdlist[i].func) + { + if (!strcmp(cmdlist[i].command, command)) + { + return cmdlist[i].func(ctx, line); + } - i++; - } + i++; + } - return JTAG_CORE_CMD_NOT_FOUND; + return JTAG_CORE_CMD_NOT_FOUND; } -static int add_label( script_ctx * ctx, char * label ) +static int add_label(script_ctx *ctx, char *label) { - int i,j; - char tmp_label[MAX_LABEL_SIZE]; + int i, j; + char tmp_label[MAX_LABEL_SIZE]; - if(ctx->cur_label_index < MAX_LABEL) - { - i = 0; - while(i<(MAX_LABEL_SIZE - 1) && label[i] && label[i] != ':') - { - tmp_label[i] = label[i]; - i++; - } - tmp_label[i] = 0; + if (ctx->cur_label_index < MAX_LABEL) + { + i = 0; + while (i < (MAX_LABEL_SIZE - 1) && label[i] && label[i] != ':') + { + tmp_label[i] = label[i]; + i++; + } + tmp_label[i] = 0; - i = 0; - while(icur_label_index) - { - if( !strcmp( tmp_label, ctx->labels[i].label_name ) ) - { - break; - } - i++; - } + i = 0; + while (i < ctx->cur_label_index) + { + if (!strcmp(tmp_label, ctx->labels[i].label_name)) + { + break; + } + i++; + } - j = i; + j = i; - i = 0; - while(i<(MAX_LABEL_SIZE - 1) && label[i]) - { - ctx->labels[j].label_name[i] = tmp_label[i]; - i++; - } + i = 0; + while (i < (MAX_LABEL_SIZE - 1) && label[i]) + { + ctx->labels[j].label_name[i] = tmp_label[i]; + i++; + } - ctx->labels[j].label_name[i] = 0; - ctx->labels[j].offset = ctx->cur_script_offset; + ctx->labels[j].label_name[i] = 0; + ctx->labels[j].offset = ctx->cur_script_offset; - if(ctx->cur_label_index == j) - { - ctx->cur_label_index++; - } - } - return 0; + if (ctx->cur_label_index == j) + { + ctx->cur_label_index++; + } + } + return 0; } -static int goto_label( script_ctx * ctx, char * label ) +static int goto_label(script_ctx *ctx, char *label) { - int i; - char tmp_label[MAX_LABEL_SIZE]; + int i; + char tmp_label[MAX_LABEL_SIZE]; - i = 0; - while(i<(MAX_LABEL_SIZE - 1) && label[i] && label[i] != ':') - { - tmp_label[i] = label[i]; - i++; - } - tmp_label[i] = 0; + i = 0; + while (i < (MAX_LABEL_SIZE - 1) && label[i] && label[i] != ':') + { + tmp_label[i] = label[i]; + i++; + } + tmp_label[i] = 0; - i = 0; - while(icur_label_index) - { - if( !strcmp( tmp_label, ctx->labels[i].label_name ) ) - { - break; - } - i++; - } + i = 0; + while (i < ctx->cur_label_index) + { + if (!strcmp(tmp_label, ctx->labels[i].label_name)) + { + break; + } + i++; + } - if( i != ctx->cur_label_index) - { - ctx->cur_script_offset = ctx->labels[i].offset; + if (i != ctx->cur_label_index) + { + ctx->cur_script_offset = ctx->labels[i].offset; - if(ctx->script_file) - fseek(ctx->script_file,ctx->cur_script_offset,SEEK_SET); + if (ctx->script_file) + fseek(ctx->script_file, ctx->cur_script_offset, SEEK_SET); - return JTAG_CORE_NO_ERROR; - } - else - { - ctx->script_printf( ctx, MSG_ERROR, "Label %s not found\n", tmp_label ); + return JTAG_CORE_NO_ERROR; + } + else + { + ctx->script_printf(ctx, MSG_ERROR, "Label %s not found\n", tmp_label); - return JTAG_CORE_NOT_FOUND; - } + return JTAG_CORE_NOT_FOUND; + } } /////////////////////////////////////////////////////////////////////////////// -static int alu_operations( script_ctx * ctx, char * line) +static int alu_operations(script_ctx *ctx, char *line) { - int i; - int valid; - env_var_value data_value; - env_var_value value_1,value_2; + int i; + int valid; + env_var_value data_value; + env_var_value value_1, value_2; - char params_str[5][DEFAULT_BUFLEN]; + char params_str[5][DEFAULT_BUFLEN]; - for(i=0;i<5;i++) - { - params_str[i][0] = 0; - } + for (i = 0; i < 5; i++) + { + params_str[i][0] = 0; + } - valid = 0; - for(i=0;i<5;i++) - { - get_param_str( ctx, line, i, (char*)¶ms_str[i] ); - if(strlen((char*)¶ms_str[i])) - valid++; - } + valid = 0; + for (i = 0; i < 5; i++) + { + get_param_str(ctx, line, i, (char *)¶ms_str[i]); + if (strlen((char *)¶ms_str[i])) + valid++; + } - data_value = 0; - if( ( (valid == 3) || (valid == 5) ) && params_str[1][0] == '=' && params_str[0][0] == '$') - { - value_1 = get_script_variable( ctx, params_str[2]); + data_value = 0; + if (((valid == 3) || (valid == 5)) && params_str[1][0] == '=' && params_str[0][0] == '$') + { + value_1 = get_script_variable(ctx, params_str[2]); - if(valid == 5) - { - value_2 = get_script_variable( ctx, params_str[4]); + if (valid == 5) + { + value_2 = get_script_variable(ctx, params_str[4]); - if(!strcmp(params_str[3],"+")) - data_value = value_1 + value_2; + if (!strcmp(params_str[3], "+")) + data_value = value_1 + value_2; - if(!strcmp(params_str[3],"-")) - data_value = value_1 - value_2; + if (!strcmp(params_str[3], "-")) + data_value = value_1 - value_2; - if(!strcmp(params_str[3],"*")) - data_value = value_1 * value_2; + if (!strcmp(params_str[3], "*")) + data_value = value_1 * value_2; - if(!strcmp(params_str[3],"/") && value_2) - data_value = value_1 / value_2; + if (!strcmp(params_str[3], "/") && value_2) + data_value = value_1 / value_2; - if(!strcmp(params_str[3],"&")) - data_value = value_1 & value_2; + if (!strcmp(params_str[3], "&")) + data_value = value_1 & value_2; - if(!strcmp(params_str[3],"^")) - data_value = value_1 ^ value_2; + if (!strcmp(params_str[3], "^")) + data_value = value_1 ^ value_2; - if(!strcmp(params_str[3],"|")) - data_value = value_1 | value_2; + if (!strcmp(params_str[3], "|")) + data_value = value_1 | value_2; - if(!strcmp(params_str[3],">>")) - data_value = value_1 >> value_2; + if (!strcmp(params_str[3], ">>")) + data_value = value_1 >> value_2; - if(!strcmp(params_str[3],"<<")) - data_value = value_1 << value_2; - } - else - { - data_value = value_1; - } + if (!strcmp(params_str[3], "<<")) + data_value = value_1 << value_2; + } + else + { + data_value = value_1; + } - if(data_value) - ctx->last_flags = 1; - else - ctx->last_flags = 0; + if (data_value) + ctx->last_flags = 1; + else + ctx->last_flags = 0; - set_script_variable( ctx, (char*)¶ms_str[0], data_value); + set_script_variable(ctx, (char *)¶ms_str[0], data_value); - return JTAG_CORE_NO_ERROR; - } + return JTAG_CORE_NO_ERROR; + } - return JTAG_CORE_BAD_PARAMETER; + return JTAG_CORE_BAD_PARAMETER; } -void setOutputFunc_script( script_ctx * ctx, SCRIPT_PRINTF_FUNC ext_printf ) +void setOutputFunc_script(script_ctx *ctx, SCRIPT_PRINTF_FUNC ext_printf) { - ctx->script_printf = ext_printf; + ctx->script_printf = ext_printf; - return; + return; } -int execute_line_script( script_ctx * ctx, char * line ) +int execute_line_script(script_ctx *ctx, char *line) { - char command[DEFAULT_BUFLEN]; + char command[DEFAULT_BUFLEN]; - command[0] = 0; + command[0] = 0; - if( extract_cmd(ctx, line, command) ) - { - if(strlen(command)) - { - if(!is_label(command)) - { - if(!ctx->dry_run) - { - if(!is_variable(command)) - { - ctx->last_error_code = exec_cmd(ctx,command,line); + if (extract_cmd(ctx, line, command)) + { + if (strlen(command)) + { + if (!is_label(command)) + { + if (!ctx->dry_run) + { + if (!is_variable(command)) + { + ctx->last_error_code = exec_cmd(ctx, command, line); - if( ctx->last_error_code == JTAG_CORE_CMD_NOT_FOUND ) - { - ctx->script_printf( ctx, MSG_ERROR, "Command not found ! : %s\n", line ); + if (ctx->last_error_code == JTAG_CORE_CMD_NOT_FOUND) + { + ctx->script_printf(ctx, MSG_ERROR, "Command not found ! : %s\n", line); - return ctx->last_error_code; - } - } - else - { - ctx->last_error_code = alu_operations(ctx,line); - } - } - else - ctx->last_error_code = JTAG_CORE_NO_ERROR; - } - else - { - add_label(ctx,command); + return ctx->last_error_code; + } + } + else + { + ctx->last_error_code = alu_operations(ctx, line); + } + } + else + ctx->last_error_code = JTAG_CORE_NO_ERROR; + } + else + { + add_label(ctx, command); - ctx->last_error_code = JTAG_CORE_NO_ERROR; - } + ctx->last_error_code = JTAG_CORE_NO_ERROR; + } - return ctx->last_error_code; - } - } + return ctx->last_error_code; + } + } - ctx->last_error_code = JTAG_CORE_BAD_CMD; + ctx->last_error_code = JTAG_CORE_BAD_CMD; - return ctx->last_error_code; + return ctx->last_error_code; } -int execute_file_script( script_ctx * ctx, char * filename ) +int execute_file_script(script_ctx *ctx, char *filename) { - int err; - char line[DEFAULT_BUFLEN]; + int err; + char line[DEFAULT_BUFLEN]; - err = JTAG_CORE_INTERNAL_ERROR; + err = JTAG_CORE_INTERNAL_ERROR; - ctx->script_file = fopen(filename,"r"); - if(ctx->script_file) - { - strncpy(ctx->script_file_path,filename,DEFAULT_BUFLEN - 1); - ctx->script_file_path[DEFAULT_BUFLEN-1] = 0; + ctx->script_file = fopen(filename, "r"); + if (ctx->script_file) + { + strncpy(ctx->script_file_path, filename, DEFAULT_BUFLEN - 1); + ctx->script_file_path[DEFAULT_BUFLEN - 1] = 0; - // Dry run -> populate the labels... - ctx->dry_run++; - do - { - if(!fgets(line,sizeof(line),ctx->script_file)) - break; + // Dry run -> populate the labels... + ctx->dry_run++; + do + { + if (!fgets(line, sizeof(line), ctx->script_file)) + break; - ctx->cur_script_offset = ftell(ctx->script_file); + ctx->cur_script_offset = ftell(ctx->script_file); - if(feof(ctx->script_file)) - break; + if (feof(ctx->script_file)) + break; - execute_line_script(ctx, line); - }while(1); + execute_line_script(ctx, line); + } while (1); - fseek(ctx->script_file,0,SEEK_SET); - ctx->cur_script_offset = ftell(ctx->script_file); + fseek(ctx->script_file, 0, SEEK_SET); + ctx->cur_script_offset = ftell(ctx->script_file); - ctx->dry_run--; - if(!ctx->dry_run) - { - if(strlen(ctx->pre_command)) - { - err = execute_line_script(ctx, ctx->pre_command); - if(err != JTAG_CORE_NO_ERROR) - { - fclose(ctx->script_file); - return err; - } - } + ctx->dry_run--; + if (!ctx->dry_run) + { + if (strlen(ctx->pre_command)) + { + err = execute_line_script(ctx, ctx->pre_command); + if (err != JTAG_CORE_NO_ERROR) + { + fclose(ctx->script_file); + return err; + } + } - do - { - if(!fgets(line,sizeof(line),ctx->script_file)) - break; + do + { + if (!fgets(line, sizeof(line), ctx->script_file)) + break; - ctx->cur_script_offset = ftell(ctx->script_file); + ctx->cur_script_offset = ftell(ctx->script_file); - if(feof(ctx->script_file)) - break; + if (feof(ctx->script_file)) + break; - err = execute_line_script(ctx, line); - }while(1); - } + err = execute_line_script(ctx, line); + } while (1); + } - fclose(ctx->script_file); + fclose(ctx->script_file); - err = JTAG_CORE_NO_ERROR; - } - else - { - ctx->script_printf( ctx, MSG_ERROR, "Can't open %s !", filename ); - ctx->script_file_path[0] = 0; + err = JTAG_CORE_NO_ERROR; + } + else + { + ctx->script_printf(ctx, MSG_ERROR, "Can't open %s !", filename); + ctx->script_file_path[0] = 0; - err = JTAG_CORE_ACCESS_ERROR; - } + err = JTAG_CORE_ACCESS_ERROR; + } - return err; + return err; } -int execute_ram_script( script_ctx * ctx, unsigned char * script_buffer, int buffersize ) +int execute_ram_script(script_ctx *ctx, unsigned char *script_buffer, int buffersize) { - int err = 0; - int buffer_offset,line_offset; - char line[DEFAULT_BUFLEN]; - int cont; + int err = 0; + int buffer_offset, line_offset; + char line[DEFAULT_BUFLEN]; + int cont; - ctx->dry_run++; - cont = 1; + ctx->dry_run++; + cont = 1; - while( cont ) - { - buffer_offset = 0; - line_offset = 0; - ctx->cur_script_offset = 0; + while (cont) + { + buffer_offset = 0; + line_offset = 0; + ctx->cur_script_offset = 0; - do - { - memset(line,0,DEFAULT_BUFLEN); - line_offset = 0; - while( (buffer_offset < buffersize) && script_buffer[buffer_offset] && script_buffer[buffer_offset]!='\n' && script_buffer[buffer_offset]!='\r' && (line_offset < DEFAULT_BUFLEN - 1)) - { - line[line_offset++] = script_buffer[buffer_offset++]; - } + do + { + memset(line, 0, DEFAULT_BUFLEN); + line_offset = 0; + while ((buffer_offset < buffersize) && script_buffer[buffer_offset] && script_buffer[buffer_offset] != '\n' && script_buffer[buffer_offset] != '\r' && (line_offset < DEFAULT_BUFLEN - 1)) + { + line[line_offset++] = script_buffer[buffer_offset++]; + } - while( (buffer_offset < buffersize) && script_buffer[buffer_offset] && (script_buffer[buffer_offset]=='\n' || script_buffer[buffer_offset]=='\r') ) - { - buffer_offset++; - } + while ((buffer_offset < buffersize) && script_buffer[buffer_offset] && (script_buffer[buffer_offset] == '\n' || script_buffer[buffer_offset] == '\r')) + { + buffer_offset++; + } - ctx->cur_script_offset = buffer_offset; + ctx->cur_script_offset = buffer_offset; - execute_line_script(ctx, line); + execute_line_script(ctx, line); - buffer_offset = ctx->cur_script_offset; + buffer_offset = ctx->cur_script_offset; - if( (buffer_offset >= buffersize) || !script_buffer[buffer_offset]) - break; + if ((buffer_offset >= buffersize) || !script_buffer[buffer_offset]) + break; - }while(buffer_offset < buffersize); + } while (buffer_offset < buffersize); - if( !ctx->dry_run || (ctx->dry_run > 1) ) - { - cont = 0; - } - else - { - ctx->dry_run = 0; + if (!ctx->dry_run || (ctx->dry_run > 1)) + { + cont = 0; + } + else + { + ctx->dry_run = 0; - if(strlen(ctx->pre_command)) - execute_line_script(ctx, ctx->pre_command); - } - } + if (strlen(ctx->pre_command)) + execute_line_script(ctx, ctx->pre_command); + } + } - return err; + return err; } -script_ctx * deinit_script(script_ctx * ctx) +script_ctx *deinit_script(script_ctx *ctx) { - if(ctx) - { - free(ctx); - } + if (ctx) + { + free(ctx); + } - ctx = NULL; + ctx = NULL; - return ctx; + return ctx; } /////////////////////////////////////////////////////////////////////////////// ///////////////////// Generic commands/operations ///////////////////////////// /////////////////////////////////////////////////////////////////////////////// - -static int cmd_goto( script_ctx * ctx, char * line) +const char *cmd_goto_help[] = { + "", // Arguments "1(type) ..." + "explanations line one", // Explanations + "explanations line two", + "" +}; +static int cmd_goto(script_ctx *ctx, char *line) { - int i; - char label_str[DEFAULT_BUFLEN]; + int i; + char label_str[DEFAULT_BUFLEN]; - i = get_param( ctx, line, 1, label_str ); + i = get_param(ctx, line, 1, label_str); - if(i>=0) - { - return goto_label( ctx, label_str ); - } + if (i >= 0) + { + return goto_label(ctx, label_str); + } - return JTAG_CORE_BAD_PARAMETER; + return JTAG_CORE_BAD_PARAMETER; } -static int cmd_if( script_ctx * ctx, char * line) +const char *cmd_if_help[] = { + "", // Arguments "1(type) ..." + "explanations line one", // Explanations + "explanations line two", + "" +}; +static int cmd_if(script_ctx *ctx, char *line) { - //"if" command example : - // if $VARIABLE > 0x2222 then goto label + //"if" command example : + // if $VARIABLE > 0x2222 then goto label - int i; - int eval; - int ret; - int valid; - char params_str[5][DEFAULT_BUFLEN]; - env_var_value value_1,value_2,tmp_val; - int op_offset; + int i; + int eval; + int ret; + int valid; + char params_str[5][DEFAULT_BUFLEN]; + env_var_value value_1, value_2, tmp_val; + int op_offset; - ret = JTAG_CORE_BAD_PARAMETER; + ret = JTAG_CORE_BAD_PARAMETER; - eval = 0; + eval = 0; - for(i=0;i<5;i++) - { - params_str[i][0] = 0; - } + for (i = 0; i < 5; i++) + { + params_str[i][0] = 0; + } - valid = 0; - for(i=0;i<5;i++) - { - get_param( ctx, line, i, (char*)¶ms_str[i] ); - if(strlen((char*)¶ms_str[i])) - valid++; - } + valid = 0; + for (i = 0; i < 5; i++) + { + get_param(ctx, line, i, (char *)¶ms_str[i]); + if (strlen((char *)¶ms_str[i])) + valid++; + } - i = 0; - while( i < 5 && strcmp((char*)¶ms_str[i],"then") ) - { - i++; - } + i = 0; + while (i < 5 && strcmp((char *)¶ms_str[i], "then")) + { + i++; + } - if( i < 5 ) - { - if( i == 2) - { - value_1 = get_script_variable( ctx, params_str[1]); + if (i < 5) + { + if (i == 2) + { + value_1 = get_script_variable(ctx, params_str[1]); - if(value_1) - eval = 1; + if (value_1) + eval = 1; - ret = JTAG_CORE_NO_ERROR; - } + ret = JTAG_CORE_NO_ERROR; + } - if ( i == 4 ) - { - value_1 = get_script_variable( ctx, params_str[1]); - value_2 = get_script_variable( ctx, params_str[3]); + if (i == 4) + { + value_1 = get_script_variable(ctx, params_str[1]); + value_2 = get_script_variable(ctx, params_str[3]); - if(!strcmp((char*)¶ms_str[2],">=") && ( (signed_env_var_value)value_1 >= (signed_env_var_value)value_2 ) ) - eval = 1; + if (!strcmp((char *)¶ms_str[2], ">=") && ((signed_env_var_value)value_1 >= (signed_env_var_value)value_2)) + eval = 1; - if(!strcmp((char*)¶ms_str[2],"<=") && ( (signed_env_var_value)value_1 <= (signed_env_var_value)value_2 ) ) - eval = 1; + if (!strcmp((char *)¶ms_str[2], "<=") && ((signed_env_var_value)value_1 <= (signed_env_var_value)value_2)) + eval = 1; - if(!strcmp((char*)¶ms_str[2],">") && ( (signed_env_var_value)value_1 > (signed_env_var_value)value_2 ) ) - eval = 1; + if (!strcmp((char *)¶ms_str[2], ">") && ((signed_env_var_value)value_1 > (signed_env_var_value)value_2)) + eval = 1; - if(!strcmp((char*)¶ms_str[2],"<") && ( (signed_env_var_value)value_1 < (signed_env_var_value)value_2 ) ) - eval = 1; + if (!strcmp((char *)¶ms_str[2], "<") && ((signed_env_var_value)value_1 < (signed_env_var_value)value_2)) + eval = 1; - if(!strcmp((char*)¶ms_str[2],"==") && ( value_1 == value_2 ) ) - eval = 1; + if (!strcmp((char *)¶ms_str[2], "==") && (value_1 == value_2)) + eval = 1; - if(!strcmp((char*)¶ms_str[2],"!=") && ( value_1 != value_2 ) ) - eval = 1; + if (!strcmp((char *)¶ms_str[2], "!=") && (value_1 != value_2)) + eval = 1; - if(!strcmp((char*)¶ms_str[2],"&") && ( value_1 & value_2 ) ) - eval = 1; + if (!strcmp((char *)¶ms_str[2], "&") && (value_1 & value_2)) + eval = 1; - if(!strcmp((char*)¶ms_str[2],"^") && ( value_1 ^ value_2 ) ) - eval = 1; + if (!strcmp((char *)¶ms_str[2], "^") && (value_1 ^ value_2)) + eval = 1; - if(!strcmp((char*)¶ms_str[2],"|") && ( value_1 | value_2 ) ) - eval = 1; + if (!strcmp((char *)¶ms_str[2], "|") && (value_1 | value_2)) + eval = 1; - tmp_val = value_1 >> value_2; - if(!strcmp((char*)¶ms_str[2],">>") && tmp_val ) - eval = 1; + tmp_val = value_1 >> value_2; + if (!strcmp((char *)¶ms_str[2], ">>") && tmp_val) + eval = 1; - tmp_val = value_1 << value_2; - if(!strcmp((char*)¶ms_str[2],"<<") && tmp_val ) - eval = 1; + tmp_val = value_1 << value_2; + if (!strcmp((char *)¶ms_str[2], "<<") && tmp_val) + eval = 1; - ret = JTAG_CORE_NO_ERROR; - } + ret = JTAG_CORE_NO_ERROR; + } - if( eval ) - { - op_offset = get_param_offset(line, i + 1); + if (eval) + { + op_offset = get_param_offset(line, i + 1); - if(op_offset >= 0) - { - ret = execute_line_script( ctx, (char*)&line[op_offset] ); - } - } + if (op_offset >= 0) + { + ret = execute_line_script(ctx, (char *)&line[op_offset]); + } + } - return ret; - } + return ret; + } - return JTAG_CORE_BAD_PARAMETER; + return JTAG_CORE_BAD_PARAMETER; } -static int cmd_return( script_ctx * ctx, char * line ) +const char *cmd_return_help[] = { + "", // Arguments "1(type) ..." + "explanations line one", // Explanations + "explanations line two", + "" +}; +static int cmd_return(script_ctx *ctx, char *line) { - if(ctx->script_file) - { - fseek(ctx->script_file,0,SEEK_END); - } + if (ctx->script_file) + { + fseek(ctx->script_file, 0, SEEK_END); + } - return JTAG_CORE_NO_ERROR; + return JTAG_CORE_NO_ERROR; } -static int cmd_system( script_ctx * ctx, char * line ) +const char *cmd_system_help[] = { + "", // Arguments "1(type) ..." + "explanations line one", // Explanations + "explanations line two", + "" +}; +static int cmd_system(script_ctx *ctx, char *line) { - int offs; - int ret; + int offs; + int ret; - offs = get_param_offset(line, 1); + offs = get_param_offset(line, 1); - if(offs>=0) - { - ret = system(&line[offs]); + if (offs >= 0) + { + ret = system(&line[offs]); - if( ret != 1 ) - return JTAG_CORE_NO_ERROR; - else - return JTAG_CORE_NOT_FOUND; - } + if (ret != 1) + return JTAG_CORE_NO_ERROR; + else + return JTAG_CORE_NOT_FOUND; + } - return JTAG_CORE_BAD_PARAMETER; + return JTAG_CORE_BAD_PARAMETER; } -static int cmd_print_env_var( script_ctx * ctx, char * line ) +const char *cmd_print_env_var_help[] = { + "", // Arguments "1(type) ..." + "explanations line one", // Explanations + "explanations line two", + "" +}; +static int cmd_print_env_var(script_ctx *ctx, char *line) { - int i; - char varname[DEFAULT_BUFLEN]; - char varvalue[DEFAULT_BUFLEN]; - char * ptr; + int i; + char varname[DEFAULT_BUFLEN]; + char varvalue[DEFAULT_BUFLEN]; + char *ptr; - i = get_param( ctx, line, 1, varname ); + i = get_param(ctx, line, 1, varname); - if(i>=0) - { - ptr = getEnvVarDat( (envvar_entry *)ctx->env, (char*)&varname, (char*)&varvalue, sizeof(varvalue) ); - if(ptr) - { - ctx->script_printf( ctx, MSG_INFO_1, "%s = %s", varname, varvalue ); + if (i >= 0) + { + ptr = getEnvVarDat((envvar_entry *)ctx->env, (char *)&varname, (char *)&varvalue, sizeof(varvalue)); + if (ptr) + { + ctx->script_printf(ctx, MSG_INFO_1, "%s = %s", varname, varvalue); - return JTAG_CORE_NO_ERROR; - } + return JTAG_CORE_NO_ERROR; + } - return JTAG_CORE_NOT_FOUND; - } - else - { - return JTAG_CORE_BAD_PARAMETER; - } + return JTAG_CORE_NOT_FOUND; + } + else + { + return JTAG_CORE_BAD_PARAMETER; + } } -static int cmd_version( script_ctx * ctx, char * line) +const char *cmd_version_help[] = { + "", + "prints the version of the tool.", + ""}; +static int cmd_version(script_ctx *ctx, char *line) { - ctx->script_printf( ctx, MSG_INFO_0, "Lib version : %s, Date : "__DATE__" "__TIME__"\n", LIB_JTAG_CORE_VERSION ); + ctx->script_printf(ctx, MSG_INFO_0, "%s, Date : "__DATE__ + " "__TIME__ + "\n", + APP_VER_STR_LONG(APP_VER)); - return JTAG_CORE_NO_ERROR; + return JTAG_CORE_NO_ERROR; } -static int cmd_print( script_ctx * ctx, char * line) +const char *cmd_print_help[] = { + "(string)", + "sends to standard output.", + ""}; +static int cmd_print(script_ctx *ctx, char *line) { - int i,j,s; - char tmp_str[DEFAULT_BUFLEN]; - char str[DEFAULT_BUFLEN*2]; - char * ptr; + int i, j, s; + char tmp_str[DEFAULT_BUFLEN]; + char str[DEFAULT_BUFLEN * 2]; + char *ptr; - str[0] = '\0'; + str[0] = '\0'; - j = 1; - do - { - ptr = NULL; + j = 1; + do + { + ptr = NULL; - i = get_param_offset(line, j); - s = 0; + i = get_param_offset(line, j); + s = 0; - if(i>=0) - { - tmp_str[0] = '\0'; - get_param( ctx, line, j, (char *)&tmp_str ); - s = strlen(tmp_str); - if(s) - { - if(tmp_str[0] != '$') - { - genos_strndstcat((char*)str,tmp_str,sizeof(str)); - genos_strndstcat((char*)str," ",sizeof(str)); - str[sizeof(str) - 1] = '\0'; - } - else - { - ptr = getEnvVarDat( (envvar_entry *)ctx->env, &tmp_str[1], NULL, 0); - if( ptr ) - { - genos_strndstcat((char*)str,ptr,sizeof(str)); - genos_strndstcat((char*)str," ",sizeof(str)); - } - else - { - genos_strndstcat((char*)str,tmp_str,sizeof(str)); - genos_strndstcat((char*)str," ",sizeof(str)); - } - str[sizeof(str) - 1] = '\0'; - } - } - } + if (i >= 0) + { + tmp_str[0] = '\0'; + get_param(ctx, line, j, (char *)&tmp_str); + s = strlen(tmp_str); + if (s) + { + if (tmp_str[0] != '$') + { + genos_strndstcat((char *)str, tmp_str, sizeof(str)); + genos_strndstcat((char *)str, " ", sizeof(str)); + str[sizeof(str) - 1] = '\0'; + } + else + { + ptr = getEnvVarDat((envvar_entry *)ctx->env, &tmp_str[1], NULL, 0); + if (ptr) + { + genos_strndstcat((char *)str, ptr, sizeof(str)); + genos_strndstcat((char *)str, " ", sizeof(str)); + } + else + { + genos_strndstcat((char *)str, tmp_str, sizeof(str)); + genos_strndstcat((char *)str, " ", sizeof(str)); + } + str[sizeof(str) - 1] = '\0'; + } + } + } - j++; - }while(s); + j++; + } while (s); - ctx->script_printf( ctx, MSG_NONE, "%s\n", str ); + ctx->script_printf(ctx, MSG_NONE, "%s\n", str); - return JTAG_CORE_NO_ERROR; + return JTAG_CORE_NO_ERROR; } -static int cmd_pause( script_ctx * ctx, char * line) +const char *cmd_pause_help[] = { + "(int)", + "pauses the program for ms.", + ""}; +static int cmd_pause(script_ctx *ctx, char *line) { - int i; - char delay_str[DEFAULT_BUFLEN]; + int i; + char delay_str[DEFAULT_BUFLEN]; - i = get_param( ctx, line, 1, delay_str ); + i = get_param(ctx, line, 1, delay_str); - if(i>=0) - { - genos_pause(str_to_int(delay_str)); + if (i >= 0) + { + genos_pause(str_to_int(delay_str)); - return JTAG_CORE_NO_ERROR; - } + return JTAG_CORE_NO_ERROR; + } - ctx->script_printf( ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line ); + ctx->script_printf(ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line); - return JTAG_CORE_BAD_PARAMETER; + return JTAG_CORE_BAD_PARAMETER; } -static int cmd_help( script_ctx * ctx, char * line) +const char *cmd_help_help[] = { + "(string)", + "if no args, it prints the list of commandsm,", + "otherwise the help of the .", + ""}; +static int cmd_help(script_ctx *ctx, char *line) { - int i; + int i; + int j; + int not_found = 1; + char hcmd[DEFAULT_BUFLEN]; - cmd_list * cmdlist; + cmd_list *cmdlist; - cmdlist = (cmd_list*)ctx->cmdlist; + cmdlist = (cmd_list *)ctx->cmdlist; - ctx->script_printf( ctx, MSG_INFO_0, "Supported Commands :\n\n" ); - - i = 0; - while(cmdlist[i].func) - { - ctx->script_printf( ctx, MSG_NONE, "%s\n", cmdlist[i].command ); - i++; - } - - return JTAG_CORE_NO_ERROR; + i = get_param(ctx, line, 1, hcmd); + if (i >= 0) + { + i = 0; + while (cmdlist[i].func) + { + if (0 == strcmp(hcmd, cmdlist[i].command)) + { + not_found = 0; + ctx->script_printf(ctx, MSG_NONE, "Documentation of command '%s' :\n", cmdlist[i].command); + ctx->script_printf(ctx, MSG_NONE, "---------------------------------------------------\n"); + j = 0; + while (strcmp(cmdlist[i].help[j], "")) { + if (j == 0) { + ctx->script_printf(ctx, MSG_NONE, "Parameters :\n"); + ctx->script_printf(ctx, MSG_NONE, " %s\n", cmdlist[i].help[j]); + } else { + if (j == 1) { + ctx->script_printf(ctx, MSG_NONE, "Description :\n"); + } + ctx->script_printf(ctx, MSG_NONE, " %s\n", cmdlist[i].help[j]); + } + j++; + } + break; + } + i++; + } + if (not_found) + { + ctx->script_printf(ctx, MSG_ERROR, "Command '%s' not found :\n\n", hcmd); + } + } + else + { + ctx->script_printf(ctx, MSG_INFO_0, "Supported Commands :\n\n"); + i = 0; + while (cmdlist[i].func) + { + ctx->script_printf(ctx, MSG_NONE, "%s\n", cmdlist[i].command); + i++; + } + } + return JTAG_CORE_NO_ERROR; } -static int cmd_call( script_ctx * ctx, char * line ) +const char *cmd_call_help[] = { + "(string)", + "Executes a script located at .", + ""}; +static int cmd_call(script_ctx *ctx, char *line) { - int offs; - char path[DEFAULT_BUFLEN]; - char function[DEFAULT_BUFLEN]; - script_ctx * new_ctx; - int ret; - jtag_core * jc; + int offs; + char path[DEFAULT_BUFLEN]; + char function[DEFAULT_BUFLEN]; + script_ctx *new_ctx; + int ret; + jtag_core *jc; - jc = (jtag_core *)ctx->app_ctx; + jc = (jtag_core *)ctx->app_ctx; - path[0] = '\0'; - get_param( ctx, line, 1, (char*)&path ); + path[0] = '\0'; + get_param(ctx, line, 1, (char *)&path); - offs = get_param_offset(line, 1); + offs = get_param_offset(line, 1); - if(offs>=0) - { + if (offs >= 0) + { - ret = JTAG_CORE_INTERNAL_ERROR; + ret = JTAG_CORE_INTERNAL_ERROR; - new_ctx = init_script((void*)jc,0x00000000,(void*)jc->envvar); - if(new_ctx) - { - new_ctx->script_printf = ctx->script_printf; + new_ctx = init_script((void *)jc, 0x00000000, (void *)jc->envvar); + if (new_ctx) + { + new_ctx->script_printf = ctx->script_printf; - function[0] = '\0'; - get_param( ctx, line, 2, (char*)&function ); + function[0] = '\0'; + get_param(ctx, line, 2, (char *)&function); - if(!strcmp(path,".")) - { - if(strlen(function)) - { - snprintf(new_ctx->pre_command,sizeof(new_ctx->pre_command),"goto %s",function); + if (!strcmp(path, ".")) + { + if (strlen(function)) + { + snprintf(new_ctx->pre_command, sizeof(new_ctx->pre_command), "goto %s", function); - ret = execute_file_script( new_ctx, (char*)&ctx->script_file_path ); + ret = execute_file_script(new_ctx, (char *)&ctx->script_file_path); - new_ctx->pre_command[0] = 0; + new_ctx->pre_command[0] = 0; - if( ret == JTAG_CORE_ACCESS_ERROR ) - { - ctx->script_printf( ctx, MSG_ERROR, "call : script not found ! : %s\n", path ); - } - } - } - else - { - if(strlen(function)) - { - snprintf(new_ctx->pre_command,sizeof(new_ctx->pre_command),"goto %s",function); + if (ret == JTAG_CORE_ACCESS_ERROR) + { + ctx->script_printf(ctx, MSG_ERROR, "call : script not found ! : %s\n", path); + } + } + } + else + { + if (strlen(function)) + { + snprintf(new_ctx->pre_command, sizeof(new_ctx->pre_command), "goto %s", function); - ret = execute_file_script( new_ctx, (char*)&path ); + ret = execute_file_script(new_ctx, (char *)&path); - new_ctx->pre_command[0] = 0; + new_ctx->pre_command[0] = 0; - if( ret == JTAG_CORE_ACCESS_ERROR ) - { - ctx->script_printf( ctx, MSG_ERROR, "call : script/function not found ! : %s %s\n", path,function ); - } - } - else - { - ret = execute_file_script( new_ctx, (char*)&path ); + if (ret == JTAG_CORE_ACCESS_ERROR) + { + ctx->script_printf(ctx, MSG_ERROR, "call : script/function not found ! : %s %s\n", path, function); + } + } + else + { + ret = execute_file_script(new_ctx, (char *)&path); - if( ret == JTAG_CORE_ACCESS_ERROR ) - { - ctx->script_printf( ctx, MSG_ERROR, "call : script not found ! : %s\n", path ); - } - } - } + if (ret == JTAG_CORE_ACCESS_ERROR) + { + ctx->script_printf(ctx, MSG_ERROR, "call : script not found ! : %s\n", path); + } + } + } - deinit_script(new_ctx); - } + deinit_script(new_ctx); + } - ctx->last_error_code = ret; + ctx->last_error_code = ret; - return ret; - } + return ret; + } - return JTAG_CORE_BAD_PARAMETER; + return JTAG_CORE_BAD_PARAMETER; } -static int cmd_set_env_var( script_ctx * ctx, char * line ) +const char *cmd_set_env_var_help[] = { + "(string) (string)", + "Stores in the environmen variable .", + ""}; +static int cmd_set_env_var(script_ctx *ctx, char *line) { - int i,j,ret; - char varname[DEFAULT_BUFLEN]; - char varvalue[DEFAULT_BUFLEN]; + int i, j, ret; + char varname[DEFAULT_BUFLEN]; + char varvalue[DEFAULT_BUFLEN]; - ret = JTAG_CORE_BAD_PARAMETER; + ret = JTAG_CORE_BAD_PARAMETER; - i = get_param( ctx, line, 1, varname ); - j = get_param( ctx, line, 2, varvalue ); + i = get_param(ctx, line, 1, varname); + j = get_param(ctx, line, 2, varvalue); - if(i>=0 && j>=0) - { - if( setEnvVarDat( (envvar_entry *)ctx->env, (char*)&varname, (char*)&varvalue ) >= 0 ) - { - ret = JTAG_CORE_NO_ERROR; - } - else - ret = JTAG_CORE_MEM_ERROR; - } + if (i >= 0 && j >= 0) + { + if (setEnvVarDat((envvar_entry *)ctx->env, (char *)&varname, (char *)&varvalue) >= 0) + { + ret = JTAG_CORE_NO_ERROR; + } + else + ret = JTAG_CORE_MEM_ERROR; + } - return ret; + return ret; } -static int cmd_rand( script_ctx * ctx, char * line) +const char *cmd_rand_help[] = { + "(int)", + "Generates a random integer. Uses the value if present.", + ""}; +static int cmd_rand(script_ctx *ctx, char *line) { - int i; - uint32_t seed; + int i; + uint32_t seed; - char rand_seed[DEFAULT_BUFLEN]; + char rand_seed[DEFAULT_BUFLEN]; - seed = ctx->rand_seed; + seed = ctx->rand_seed; - i = get_param( ctx, line, 1, rand_seed ); - if(i>=0) - { - seed = str_to_int((char*)rand_seed); - } + i = get_param(ctx, line, 1, rand_seed); + if (i >= 0) + { + seed = str_to_int((char *)rand_seed); + } - /* Algorithm "xor" from p. 4 of Marsaglia, "Xorshift RNGs" */ - seed ^= seed << 13; - seed ^= seed >> 17; - seed ^= seed << 5; + /* Algorithm "xor" from p. 4 of Marsaglia, "Xorshift RNGs" */ + seed ^= seed << 13; + seed ^= seed >> 17; + seed ^= seed << 5; - ctx->rand_seed = seed; + ctx->rand_seed = seed; - ctx->last_data_value = seed; + ctx->last_data_value = seed; - return JTAG_CORE_NO_ERROR; + return JTAG_CORE_NO_ERROR; } int is_valid_hex_quartet(char c) { - if( (c >= '0' && c <= '9') || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f') ) - return 1; - else - return 0; + if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f')) + return 1; + else + return 0; } int is_valid_hex_byte(char *str) { - if( is_valid_hex_quartet(str[0]) && is_valid_hex_quartet(str[1]) ) - return 1; - else - return 0; + if (is_valid_hex_quartet(str[0]) && is_valid_hex_quartet(str[1])) + return 1; + else + return 0; } -char * arrayresize(char * array, int size, unsigned char c) +char *arrayresize(char *array, int size, unsigned char c) { - int cursize; - char * ptr; + int cursize; + char *ptr; - if( size < 0 ) - return array; + if (size < 0) + return array; - if(array) - { - if( array[0] == '0' && (array[1] == 'x' || array[1] == 'X') ) - { - ptr = (array + 2); - } - else - { - ptr = (array); - } - } - else - { - array = malloc(DEFAULT_BUFLEN + 1); - if(array) - { - size = DEFAULT_BUFLEN / 2; - memset(array,0,DEFAULT_BUFLEN + 1); - } + if (array) + { + if (array[0] == '0' && (array[1] == 'x' || array[1] == 'X')) + { + ptr = (array + 2); + } + else + { + ptr = (array); + } + } + else + { + array = malloc(DEFAULT_BUFLEN + 1); + if (array) + { + size = DEFAULT_BUFLEN / 2; + memset(array, 0, DEFAULT_BUFLEN + 1); + } - ptr = array; - } + ptr = array; + } - if(ptr) - { - cursize = 0; - while(is_valid_hex_byte(&ptr[cursize*2])) - { - cursize++; - } + if (ptr) + { + cursize = 0; + while (is_valid_hex_byte(&ptr[cursize * 2])) + { + cursize++; + } - ptr[cursize*2] = '\0'; + ptr[cursize * 2] = '\0'; - if( cursize < size ) - { - while( cursize < size ) - { - sprintf(&ptr[(cursize*2) + 0],"%.2X",c); - ptr[(cursize*2) + 2] = '\0'; - cursize++; - } - } - } + if (cursize < size) + { + while (cursize < size) + { + sprintf(&ptr[(cursize * 2) + 0], "%.2X", c); + ptr[(cursize * 2) + 2] = '\0'; + cursize++; + } + } + } - return array; + return array; } - -static int cmd_initarray( script_ctx * ctx, char * line) +const char *cmd_initarray_help[] = { + "(string) (int) (int)", + "Initializes an array of size with . Stores it in the environment.", + ""}; +static int cmd_initarray(script_ctx *ctx, char *line) { - //initarray $VARIABLE_1_TEST $BYTES $VALUE + // initarray $VARIABLE_1_TEST $BYTES $VALUE - int i,j,ret; - char varname[DEFAULT_BUFLEN]; - char varsize[DEFAULT_BUFLEN]; - char varvalue[DEFAULT_BUFLEN]; - char * ptr; - int size; + int i, j, ret; + char varname[DEFAULT_BUFLEN]; + char varsize[DEFAULT_BUFLEN]; + char varvalue[DEFAULT_BUFLEN]; + char *ptr; + int size; - ret = JTAG_CORE_BAD_PARAMETER; + ret = JTAG_CORE_BAD_PARAMETER; - strcpy(varvalue,"0"); - varname[0] = '\0'; + strcpy(varvalue, "0"); + varname[0] = '\0'; - i = get_param_str( ctx, line, 1, varname ); - j = get_param( ctx, line, 2, varsize ); - get_param( ctx, line, 3, varvalue ); + i = get_param_str(ctx, line, 1, varname); + j = get_param(ctx, line, 2, varsize); + get_param(ctx, line, 3, varvalue); - if(i>=0 && j>=0) - { - size = str_to_int(varsize); + if (i >= 0 && j >= 0) + { + size = str_to_int(varsize); - if(size >= 0 && strlen(varname) ) - { - ptr = getEnvVarDat( (envvar_entry *)ctx->env,(char*)&varname, NULL, 0); - if(ptr) - { - arrayresize(ptr, size, (unsigned char)(str_to_int((char*)&varvalue)&0xFF)); - } - else - { - ptr = malloc( DEFAULT_BUFLEN ); - if(ptr) - { - memset(ptr,0x00, DEFAULT_BUFLEN); - arrayresize(ptr, size, (unsigned char)(str_to_int((char*)&varvalue)&0xFF)); - } - } + if (size >= 0 && strlen(varname)) + { + ptr = getEnvVarDat((envvar_entry *)ctx->env, (char *)&varname, NULL, 0); + if (ptr) + { + arrayresize(ptr, size, (unsigned char)(str_to_int((char *)&varvalue) & 0xFF)); + } + else + { + ptr = malloc(DEFAULT_BUFLEN); + if (ptr) + { + memset(ptr, 0x00, DEFAULT_BUFLEN); + arrayresize(ptr, size, (unsigned char)(str_to_int((char *)&varvalue) & 0xFF)); + } + } - if(ptr) - setEnvVarDat( (envvar_entry *)ctx->env, (char*)&varname[1], ptr ); - } - ret = JTAG_CORE_NO_ERROR; - } - - return ret; + if (ptr) + setEnvVarDat((envvar_entry *)ctx->env, (char *)&varname[1], ptr); + } + ret = JTAG_CORE_NO_ERROR; + } + return ret; } - /////////////////////////////////////////////////////////////////////////////// /////////////////////// JTAG commands/operations ////////////////////////////// /////////////////////////////////////////////////////////////////////////////// - -static int cmd_autoinit( script_ctx * ctx, char * line) +const char *cmd_autoinit_help[] = { + "", // Arguments "1(type) ..." + "explanations line one", // Explanations + "explanations line two", + "" +}; +static int cmd_autoinit(script_ctx *ctx, char *line) { - jtag_core * jc; - int number_of_devices, dev_nb; - int loaded_bsdl; - char szExecPath[MAX_PATH + 1]; - char scanfolder[MAX_PATH + 1]; - char filename[MAX_PATH + 1]; - char entityname[DEFAULT_BUFLEN]; - char file[MAX_PATH + 1]; + jtag_core *jc; + int number_of_devices, dev_nb; + int loaded_bsdl; + char szExecPath[MAX_PATH + 1]; + char scanfolder[MAX_PATH + 1]; + char filename[MAX_PATH + 1]; + char entityname[DEFAULT_BUFLEN]; + char file[MAX_PATH + 1]; - filefoundinfo fileinfo; - void* h_file_find; + filefoundinfo fileinfo; + void *h_file_find; - unsigned long chip_id,chip_id_mask; + unsigned long chip_id, chip_id_mask; - jc = (jtag_core *)ctx->app_ctx; - loaded_bsdl = 0; + jc = (jtag_core *)ctx->app_ctx; + loaded_bsdl = 0; - // BSDL Auto load : check which bsdl file match with the device - // And load it. + // BSDL Auto load : check which bsdl file match with the device + // And load it. - jtagcore_scan_and_init_chain(jc); + jtagcore_scan_and_init_chain(jc); - number_of_devices = jtagcore_get_number_of_devices(jc); + number_of_devices = jtagcore_get_number_of_devices(jc); - ctx->script_printf( ctx, MSG_INFO_0, "%d device(s) found\n", number_of_devices ); + ctx->script_printf(ctx, MSG_INFO_0, "%d device(s) found\n", number_of_devices); - // Get the bsdl_files folder path + // Get the bsdl_files folder path - genos_getcurrentdirectory(szExecPath,MAX_PATH); + genos_getcurrentdirectory(szExecPath, MAX_PATH); - strncpy(scanfolder, szExecPath, sizeof(scanfolder) ); - genos_strndstcat(scanfolder, DIR_SEPARATOR"bsdl_files"DIR_SEPARATOR, sizeof(scanfolder) - 1 ); - scanfolder[sizeof(scanfolder) - 1] = '\0'; + strncpy(scanfolder, szExecPath, sizeof(scanfolder)); + genos_strndstcat(scanfolder, DIR_SEPARATOR "bsdl_files" DIR_SEPARATOR, sizeof(scanfolder) - 1); + scanfolder[sizeof(scanfolder) - 1] = '\0'; - h_file_find = genos_find_first_file( scanfolder, "*.*", &fileinfo ); + h_file_find = genos_find_first_file(scanfolder, "*.*", &fileinfo); - // Scan and check files in the folder. - if (h_file_find) - { - do - { - strcpy(filename,szExecPath); - genos_strndstcat(filename,DIR_SEPARATOR"bsdl_files"DIR_SEPARATOR,sizeof(filename)); - genos_strndstcat(filename,fileinfo.filename,sizeof(filename)); - filename[sizeof(filename) - 1] = '\0'; + // Scan and check files in the folder. + if (h_file_find) + { + do + { + strcpy(filename, szExecPath); + genos_strndstcat(filename, DIR_SEPARATOR "bsdl_files" DIR_SEPARATOR, sizeof(filename)); + genos_strndstcat(filename, fileinfo.filename, sizeof(filename)); + filename[sizeof(filename) - 1] = '\0'; - if ( ! fileinfo.isdirectory ) - { - chip_id_mask = 0xFFFFFFFF; - chip_id = jtagcore_get_bsdl_id(jc, filename, &chip_id_mask); - if( chip_id ) - { - for(dev_nb=0;dev_nb < number_of_devices;dev_nb++) - { - if( ( chip_id & chip_id_mask ) == ( jtagcore_get_dev_id(jc, dev_nb) & chip_id_mask ) ) - { - if(jtagcore_get_number_of_pins(jc, dev_nb) > 0) - { - // Device already loaded ! - ctx->script_printf( ctx, MSG_WARNING, "Device %d BSDL already loaded ! ID conflit ?\n", dev_nb ); - } + if (!fileinfo.isdirectory) + { + chip_id_mask = 0xFFFFFFFF; + chip_id = jtagcore_get_bsdl_id(jc, filename, &chip_id_mask); + if (chip_id) + { + for (dev_nb = 0; dev_nb < number_of_devices; dev_nb++) + { + if ((chip_id & chip_id_mask) == (jtagcore_get_dev_id(jc, dev_nb) & chip_id_mask)) + { + if (jtagcore_get_number_of_pins(jc, dev_nb) > 0) + { + // Device already loaded ! + ctx->script_printf(ctx, MSG_WARNING, "Device %d BSDL already loaded ! ID conflit ?\n", dev_nb); + } - // The BSDL ID match with the device. - if(jtagcore_loadbsdlfile(jc, filename, dev_nb) == JTAG_CORE_NO_ERROR) - { - entityname[0] = 0; - jtagcore_get_dev_name(jc, dev_nb, entityname, file); + // The BSDL ID match with the device. + if (jtagcore_loadbsdlfile(jc, filename, dev_nb) == JTAG_CORE_NO_ERROR) + { + entityname[0] = 0; + jtagcore_get_dev_name(jc, dev_nb, entityname, file); - ctx->script_printf( ctx, MSG_INFO_0, "Device %d (%.8X - %s) - BSDL Loaded : %s\n", dev_nb, chip_id, entityname, file ); - } - else - { - ctx->script_printf( ctx, MSG_ERROR, "ERROR while loading %s !\n", filename ); - } - } - } - } - } - }while(genos_find_next_file( h_file_find, scanfolder, "*.*", &fileinfo )); + ctx->script_printf(ctx, MSG_INFO_0, "Device %d (%.8X - %s) - BSDL Loaded : %s\n", dev_nb, chip_id, entityname, file); + } + else + { + ctx->script_printf(ctx, MSG_ERROR, "ERROR while loading %s !\n", filename); + } + } + } + } + } + } while (genos_find_next_file(h_file_find, scanfolder, "*.*", &fileinfo)); - genos_find_close( h_file_find ); + genos_find_close(h_file_find); - loaded_bsdl = 0; - // Count the loaded bsdl - for(dev_nb=0;dev_nb < number_of_devices;dev_nb++) - { - if(jtagcore_get_number_of_pins(jc, dev_nb) > 0) - { - loaded_bsdl++; - } - else - { - ctx->script_printf( ctx, MSG_WARNING, "Device %d (%.8X) - NO BSDL Loaded !\n", dev_nb, jtagcore_get_dev_id(jc, dev_nb ) ); - } - } - } - else - { - ctx->script_printf( ctx, MSG_ERROR, "Can't access the bsdl sub folder ! : %s\n", filename ); - return JTAG_CORE_ACCESS_ERROR; - } + loaded_bsdl = 0; + // Count the loaded bsdl + for (dev_nb = 0; dev_nb < number_of_devices; dev_nb++) + { + if (jtagcore_get_number_of_pins(jc, dev_nb) > 0) + { + loaded_bsdl++; + } + else + { + ctx->script_printf(ctx, MSG_WARNING, "Device %d (%.8X) - NO BSDL Loaded !\n", dev_nb, jtagcore_get_dev_id(jc, dev_nb)); + } + } + } + else + { + ctx->script_printf(ctx, MSG_ERROR, "Can't access the bsdl sub folder ! : %s\n", filename); + return JTAG_CORE_ACCESS_ERROR; + } - return loaded_bsdl; + return loaded_bsdl; } -static int cmd_init_and_scan( script_ctx * ctx, char * line) +const char *cmd_init_and_scan_help[] = { + "", // Arguments "1(type) ..." + "explanations line one", // Explanations + "explanations line two", + "" +}; +static int cmd_init_and_scan(script_ctx *ctx, char *line) { - jtag_core * jc; - int ret; + jtag_core *jc; + int ret; - jc = (jtag_core *)ctx->app_ctx; + jc = (jtag_core *)ctx->app_ctx; - ret = jtagcore_scan_and_init_chain(jc); + ret = jtagcore_scan_and_init_chain(jc); - if( ret == JTAG_CORE_NO_ERROR ) - { - ctx->script_printf( ctx, MSG_INFO_0, "JTAG Scan done\n" ); + if (ret == JTAG_CORE_NO_ERROR) + { + ctx->script_printf(ctx, MSG_INFO_0, "JTAG Scan done\n"); - return JTAG_CORE_NO_ERROR; - } - else - { - ctx->script_printf( ctx, MSG_INFO_0, "JTAG Scan return code : %d\n", ret ); - } + return JTAG_CORE_NO_ERROR; + } + else + { + ctx->script_printf(ctx, MSG_INFO_0, "JTAG Scan return code : %d\n", ret); + } - return ret; + return ret; } -static int cmd_print_nb_dev( script_ctx * ctx, char * line) +const char *cmd_print_nb_dev_help[] = { + "", // Arguments "1(type) ..." + "explanations line one", // Explanations + "explanations line two", + "" +}; +static int cmd_print_nb_dev(script_ctx *ctx, char *line) { - jtag_core * jc; - int i; + jtag_core *jc; + int i; - jc = (jtag_core *)ctx->app_ctx; + jc = (jtag_core *)ctx->app_ctx; - i = jtagcore_get_number_of_devices(jc); + i = jtagcore_get_number_of_devices(jc); - ctx->script_printf( ctx, MSG_INFO_0, "%d device(s) found in chain\n", i ); + ctx->script_printf(ctx, MSG_INFO_0, "%d device(s) found in chain\n", i); - ctx->last_data_value = i; + ctx->last_data_value = i; - return JTAG_CORE_NO_ERROR; + return JTAG_CORE_NO_ERROR; } -static void bsdl_id_str(unsigned long id, char * str) +const char *cmd_bsdl_id_help[] = { + "", // Arguments "1(type) ..." + "explanations line one", // Explanations + "explanations line two", + "" +}; +static void bsdl_id_str(unsigned long id, char *str) { - int i; + int i; - str[0] = 0; + str[0] = 0; - for (i = 0; i < 32; i++) - { - if ((0x80000000 >> i)&id) - { - strcat(str, "1"); - } - else - { - strcat(str, "0"); - } - if (i == 3) strcat(str, " "); - if (i == 19) strcat(str, " "); - if (i == 30) strcat(str, " "); - } + for (i = 0; i < 32; i++) + { + if ((0x80000000 >> i) & id) + { + strcat(str, "1"); + } + else + { + strcat(str, "0"); + } + if (i == 3) + strcat(str, " "); + if (i == 19) + strcat(str, " "); + if (i == 30) + strcat(str, " "); + } - str[i] = 0; + str[i] = 0; } -static char * get_id_str( script_ctx * ctx, int numberofdevice) +static char *get_id_str(script_ctx *ctx, int numberofdevice) { - // compare passed device ID to the one returned from the ID command - jtag_core * jc; - int i; - unsigned int idcode = 0; - char * stringbuffer; - char tempstr[DEFAULT_BUFLEN]; + // compare passed device ID to the one returned from the ID command + jtag_core *jc; + int i; + unsigned int idcode = 0; + char *stringbuffer; + char tempstr[DEFAULT_BUFLEN]; - jc = (jtag_core *)ctx->app_ctx; + jc = (jtag_core *)ctx->app_ctx; - stringbuffer = NULL; + stringbuffer = NULL; - if( numberofdevice < 0 || numberofdevice > 256) - return NULL; + if (numberofdevice < 0 || numberofdevice > 256) + return NULL; - stringbuffer = malloc(256 * numberofdevice); - if (stringbuffer) - { - memset(stringbuffer, 0, 256 * numberofdevice); + stringbuffer = malloc(256 * numberofdevice); + if (stringbuffer) + { + memset(stringbuffer, 0, 256 * numberofdevice); - // and read the IDCODES - for (i = 0; i < numberofdevice; i++) - { - idcode = jtagcore_get_dev_id(jc, i); - sprintf(tempstr, "Device %d : 0x%.8X - ", i, idcode); + // and read the IDCODES + for (i = 0; i < numberofdevice; i++) + { + idcode = jtagcore_get_dev_id(jc, i); + sprintf(tempstr, "Device %d : 0x%.8X - ", i, idcode); - bsdl_id_str(idcode, &tempstr[strlen(tempstr)]); + bsdl_id_str(idcode, &tempstr[strlen(tempstr)]); - strcat(stringbuffer, tempstr); - strcat(stringbuffer, "\n"); - } - } + strcat(stringbuffer, tempstr); + strcat(stringbuffer, "\n"); + } + } - return stringbuffer; + return stringbuffer; } -static int cmd_print_devs_list( script_ctx * ctx, char * line) +const char *cmd_print_devs_list_help[] = { + "", // Arguments "1(type) ..." + "explanations line one", // Explanations + "explanations line two", + "" +}; +static int cmd_print_devs_list(script_ctx *ctx, char *line) { - jtag_core * jc; - int i; - char *ptr; + jtag_core *jc; + int i; + char *ptr; - jc = (jtag_core *)ctx->app_ctx; + jc = (jtag_core *)ctx->app_ctx; - i = jtagcore_get_number_of_devices(jc); - if(i>0) - { - ptr = get_id_str(ctx,i); - if(ptr) - { - ctx->script_printf( ctx, MSG_INFO_0, "%s\n", ptr ); - free(ptr); - } - } + i = jtagcore_get_number_of_devices(jc); + if (i > 0) + { + ptr = get_id_str(ctx, i); + if (ptr) + { + ctx->script_printf(ctx, MSG_INFO_0, "%s\n", ptr); + free(ptr); + } + } - return JTAG_CORE_NOT_FOUND; + return JTAG_CORE_NOT_FOUND; } -static int cmd_print_probes_list( script_ctx * ctx, char * line) +const char *cmd_print_probes_list_help[] = { + "", // Arguments "1(type) ..." + "Displays the list of detected probes.", // Explanations + "" +}; +static int cmd_print_probes_list(script_ctx *ctx, char *line) { - jtag_core * jc; - int i,j; - char probe_list[64]; - int nb_of_drivers,nb_of_probes; + jtag_core *jc; + int i, j; + char probe_list[64]; + int nb_of_drivers, nb_of_probes; - jc = (jtag_core *)ctx->app_ctx; + jc = (jtag_core *)ctx->app_ctx; - nb_of_drivers = jtagcore_get_number_of_probes_drv(jc); - j = 0; - while (j < nb_of_drivers) - { - nb_of_probes = jtagcore_get_number_of_probes(jc, j); - i = 0; - while( i < nb_of_probes ) - { - jtagcore_get_probe_name(jc, PROBE_ID(j,i), probe_list); - ctx->script_printf( ctx, MSG_INFO_0, "ID 0x%.8X : %s\n", PROBE_ID(j,i), probe_list ); - i++; - } - j++; - } + nb_of_drivers = jtagcore_get_number_of_probes_drv(jc); + j = 0; + while (j < nb_of_drivers) + { + nb_of_probes = jtagcore_get_number_of_probes(jc, j); + i = 0; + while (i < nb_of_probes) + { + jtagcore_get_probe_name(jc, PROBE_ID(j, i), probe_list); + ctx->script_printf(ctx, MSG_INFO_0, "ID 0x%.8X : %s\n", PROBE_ID(j, i), probe_list); + i++; + } + j++; + } - return JTAG_CORE_NO_ERROR; + return JTAG_CORE_NO_ERROR; } -static int cmd_open_probe( script_ctx * ctx, char * line) +const char *cmd_open_probe_help[] = { + "(int)", // Arguments "1(type) ..." + "The probe id as given in the 'jtag_probe_list' function.", + "" +}; +static int cmd_open_probe(script_ctx *ctx, char *line) { - int ret; - char probe_id[64]; - jtag_core * jc; + int ret; + char probe_id[64]; + jtag_core *jc; - jc = (jtag_core *)ctx->app_ctx; + jc = (jtag_core *)ctx->app_ctx; - if(get_param( ctx, line, 1, probe_id )>0) - { - ret = jtagcore_select_and_open_probe(jc, strtoul(probe_id, NULL, 16)); - if(ret != JTAG_CORE_NO_ERROR) - { - ctx->script_printf( ctx, MSG_ERROR, "Code %d !\n", ret ); - return ret; - } - else - { - ctx->script_printf( ctx, MSG_INFO_0, "Probe Ok !\n" ); - return JTAG_CORE_NO_ERROR; - } - } - else - { - ctx->script_printf( ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line ); + if (get_param(ctx, line, 1, probe_id) > 0) + { + ret = jtagcore_select_and_open_probe(jc, strtoul(probe_id, NULL, 16)); + if (ret != JTAG_CORE_NO_ERROR) + { + ctx->script_printf(ctx, MSG_ERROR, "Code %d !\n", ret); + return ret; + } + else + { + ctx->script_printf(ctx, MSG_INFO_0, "Probe Ok !\n"); + return JTAG_CORE_NO_ERROR; + } + } + else + { + ctx->script_printf(ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line); - return JTAG_CORE_BAD_PARAMETER; - } + return JTAG_CORE_BAD_PARAMETER; + } } -static int cmd_load_bsdl( script_ctx * ctx, char * line) +const char *cmd_load_bsdl_help[] = { + "", // Arguments "1(type) ..." + "explanations line one", // Explanations + "explanations line two", + "" +}; +static int cmd_load_bsdl(script_ctx *ctx, char *line) { - int i,j; - char dev_index[DEFAULT_BUFLEN]; - char filename[DEFAULT_BUFLEN]; - jtag_core * jc; + int i, j; + char dev_index[DEFAULT_BUFLEN]; + char filename[DEFAULT_BUFLEN]; + jtag_core *jc; - jc = (jtag_core *)ctx->app_ctx; + jc = (jtag_core *)ctx->app_ctx; - i = get_param( ctx, line, 1, filename ); - j = get_param( ctx, line, 2, dev_index ); + i = get_param(ctx, line, 1, filename); + j = get_param(ctx, line, 2, dev_index); - if(i>=0 && j>=0) - { - if (jtagcore_loadbsdlfile(jc, filename, str_to_int(dev_index)) >= 0) - { - ctx->script_printf( ctx, MSG_INFO_0, "BSDL %s loaded and parsed !\n", filename ); - return JTAG_CORE_NO_ERROR; - } - else - { - ctx->script_printf( ctx, MSG_ERROR, "File open & parsing error (%s)!\n", filename ); - return JTAG_CORE_ACCESS_ERROR; - } - } + if (i >= 0 && j >= 0) + { + if (jtagcore_loadbsdlfile(jc, filename, str_to_int(dev_index)) >= 0) + { + ctx->script_printf(ctx, MSG_INFO_0, "BSDL %s loaded and parsed !\n", filename); + return JTAG_CORE_NO_ERROR; + } + else + { + ctx->script_printf(ctx, MSG_ERROR, "File open & parsing error (%s)!\n", filename); + return JTAG_CORE_ACCESS_ERROR; + } + } - ctx->script_printf( ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line ); + ctx->script_printf(ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line); - return JTAG_CORE_BAD_PARAMETER; + return JTAG_CORE_BAD_PARAMETER; } -static int cmd_set_scan_mode( script_ctx * ctx, char * line) +const char *cmd_set_scan_mode_help[] = { + "", // Arguments "1(type) ..." + "explanations line one", // Explanations + "explanations line two", + "" +}; +static int cmd_set_scan_mode(script_ctx *ctx, char *line) { - int i,j; - char dev_index[DEFAULT_BUFLEN]; - char scan_mode[DEFAULT_BUFLEN]; - jtag_core * jc; + int i, j; + char dev_index[DEFAULT_BUFLEN]; + char scan_mode[DEFAULT_BUFLEN]; + jtag_core *jc; - jc = (jtag_core *)ctx->app_ctx; + jc = (jtag_core *)ctx->app_ctx; - i = get_param( ctx, line, 1, dev_index ); - j = get_param( ctx, line, 2, scan_mode ); + i = get_param(ctx, line, 1, dev_index); + j = get_param(ctx, line, 2, scan_mode); - if(i>=0 && j>=0) - { - if( !strcmp(scan_mode,"EXTEST") ) - { - jtagcore_set_scan_mode(jc, str_to_int(dev_index),JTAG_CORE_EXTEST_SCANMODE); - ctx->script_printf( ctx, MSG_INFO_0, "EXTEST mode\n" ); - } - else - { - if( !strcmp(scan_mode,"SAMPLE") ) - { - jtagcore_set_scan_mode(jc, str_to_int(dev_index),JTAG_CORE_SAMPLE_SCANMODE); + if (i >= 0 && j >= 0) + { + if (!strcmp(scan_mode, "EXTEST")) + { + jtagcore_set_scan_mode(jc, str_to_int(dev_index), JTAG_CORE_EXTEST_SCANMODE); + ctx->script_printf(ctx, MSG_INFO_0, "EXTEST mode\n"); + } + else + { + if (!strcmp(scan_mode, "SAMPLE")) + { + jtagcore_set_scan_mode(jc, str_to_int(dev_index), JTAG_CORE_SAMPLE_SCANMODE); - ctx->script_printf( ctx, MSG_INFO_0, "SAMPLE mode\n" ); - } - else - { - ctx->script_printf( ctx, MSG_ERROR, "%s : unknown mode !\n", scan_mode ); - return JTAG_CORE_BAD_PARAMETER; - } - } + ctx->script_printf(ctx, MSG_INFO_0, "SAMPLE mode\n"); + } + else + { + ctx->script_printf(ctx, MSG_ERROR, "%s : unknown mode !\n", scan_mode); + return JTAG_CORE_BAD_PARAMETER; + } + } - return JTAG_CORE_NO_ERROR; - } + return JTAG_CORE_NO_ERROR; + } - ctx->script_printf( ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line ); + ctx->script_printf(ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line); - return JTAG_CORE_BAD_PARAMETER; + return JTAG_CORE_BAD_PARAMETER; } -static int cmd_push_and_pop( script_ctx * ctx, char * line) +const char *cmd_push_and_pop_help[] = { + "", + "Do a JTAG chain transaction.", + "" +}; +static int cmd_push_and_pop(script_ctx *ctx, char *line) { - int ret; - jtag_core * jc; + int ret; + jtag_core *jc; - jc = (jtag_core *)ctx->app_ctx; + jc = (jtag_core *)ctx->app_ctx; - ret = jtagcore_push_and_pop_chain(jc, JTAG_CORE_WRITE_READ); + ret = jtagcore_push_and_pop_chain(jc, JTAG_CORE_WRITE_READ); - if(ret != JTAG_CORE_NO_ERROR) - { - ctx->script_printf( ctx, MSG_ERROR, "Code %d !\n", ret ); - return ret; - } - else - { - ctx->script_printf( ctx, MSG_INFO_0, "JTAG chain updated\n" ); - } + if (ret != JTAG_CORE_NO_ERROR) + { + ctx->script_printf(ctx, MSG_ERROR, "Code %d !\n", ret); + return ret; + } + else + { + ctx->script_printf(ctx, MSG_INFO_0, "JTAG chain updated\n"); + } - return JTAG_CORE_NO_ERROR; + return JTAG_CORE_NO_ERROR; } -static int cmd_set_pin_mode( script_ctx * ctx, char * line) +const char *cmd_set_pin_mode_help[] = { + "(int) (string) (string)", + "Change the mode (input or output) of the pin of the given device.", + "" +}; +static int cmd_set_pin_mode(script_ctx *ctx, char *line) { - int i,j,k,id; - char dev_index[DEFAULT_BUFLEN]; - char pinname[DEFAULT_BUFLEN]; - char mode[DEFAULT_BUFLEN]; - jtag_core * jc; + int i, j, k, id; + char dev_index[DEFAULT_BUFLEN]; + char pinname[DEFAULT_BUFLEN]; + char mode[DEFAULT_BUFLEN]; + jtag_core *jc; - jc = (jtag_core *)ctx->app_ctx; + jc = (jtag_core *)ctx->app_ctx; - i = get_param( ctx, line, 1, dev_index ); - j = get_param( ctx, line, 2, pinname ); - k = get_param( ctx, line, 3, mode ); + i = get_param(ctx, line, 1, dev_index); + j = get_param(ctx, line, 2, pinname); + k = get_param(ctx, line, 3, mode); - if(i>=0 && j>=0 && k>=0) - { - id = jtagcore_get_pin_id(jc, str_to_int(dev_index), pinname); + if (i >= 0 && j >= 0 && k >= 0) + { + id = jtagcore_get_pin_id(jc, str_to_int(dev_index), pinname); - if(id>=0) - { - jtagcore_set_pin_state(jc, str_to_int(dev_index), id, JTAG_CORE_OE, str_to_int(mode)); + if (id >= 0) + { + jtagcore_set_pin_state(jc, str_to_int(dev_index), id, JTAG_CORE_OE, str_to_int(mode)); - ctx->script_printf( ctx, MSG_INFO_0, "Pin %s mode set to %d\n", pinname, str_to_int(mode) ); + ctx->script_printf(ctx, MSG_INFO_0, "Pin %s mode set to %d\n", pinname, str_to_int(mode)); - return JTAG_CORE_NO_ERROR; - } - else - { - ctx->script_printf( ctx, MSG_ERROR, "Pin %s not found\n", pinname ); - return JTAG_CORE_NOT_FOUND; - } - } + return JTAG_CORE_NO_ERROR; + } + else + { + ctx->script_printf(ctx, MSG_ERROR, "Pin %s not found\n", pinname); + return JTAG_CORE_NOT_FOUND; + } + } - ctx->script_printf( ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line ); + ctx->script_printf(ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line); - return JTAG_CORE_BAD_PARAMETER; + return JTAG_CORE_BAD_PARAMETER; } -static int cmd_set_pin_state( script_ctx * ctx, char * line) +const char *cmd_set_pin_state_help[] = { + "(int) (string) (string)", + "Change the state (0 or 1) of the pin of the given device.", + "" +}; +static int cmd_set_pin_state(script_ctx *ctx, char *line) { - int i,j,k,id; - char dev_index[DEFAULT_BUFLEN]; - char pinname[DEFAULT_BUFLEN]; - char state[DEFAULT_BUFLEN]; - jtag_core * jc; + int i, j, k, id; + char dev_index[DEFAULT_BUFLEN]; + char pinname[DEFAULT_BUFLEN]; + char state[DEFAULT_BUFLEN]; + jtag_core *jc; - jc = (jtag_core *)ctx->app_ctx; + jc = (jtag_core *)ctx->app_ctx; - i = get_param( ctx, line, 1, dev_index ); - j = get_param( ctx, line, 2, pinname ); - k = get_param( ctx, line, 3, state ); + i = get_param(ctx, line, 1, dev_index); + j = get_param(ctx, line, 2, pinname); + k = get_param(ctx, line, 3, state); - if(i>=0 && j>=0 && k>=0) - { - id = jtagcore_get_pin_id(jc, str_to_int(dev_index), pinname); + if (i >= 0 && j >= 0 && k >= 0) + { + id = jtagcore_get_pin_id(jc, str_to_int(dev_index), pinname); - if(id>=0) - { - jtagcore_set_pin_state(jc, str_to_int(dev_index), id, JTAG_CORE_OUTPUT, str_to_int(state)); + if (id >= 0) + { + jtagcore_set_pin_state(jc, str_to_int(dev_index), id, JTAG_CORE_OUTPUT, str_to_int(state)); - ctx->script_printf( ctx, MSG_INFO_0, "Pin %s set to %d\n", pinname, str_to_int(state) ); + ctx->script_printf(ctx, MSG_INFO_0, "Pin %s set to %d\n", pinname, str_to_int(state)); - return JTAG_CORE_NO_ERROR; - } - else - { - ctx->script_printf( ctx, MSG_ERROR, "Pin %s not found\n", pinname ); - return JTAG_CORE_NOT_FOUND; - } - } + return JTAG_CORE_NO_ERROR; + } + else + { + ctx->script_printf(ctx, MSG_ERROR, "Pin %s not found\n", pinname); + return JTAG_CORE_NOT_FOUND; + } + } - ctx->script_printf( ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line ); + ctx->script_printf(ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line); - return JTAG_CORE_BAD_PARAMETER; + return JTAG_CORE_BAD_PARAMETER; } -static int cmd_get_pin_state( script_ctx * ctx, char * line) +const char *cmd_get_pin_state_help[] = { + "(int) (string) (string)", + "Gets the state (0 or 1) of the pin of the given device.", + "The mode is to be chosen between 'input' or 'output'.", + "" +}; +static int cmd_get_pin_state(script_ctx *ctx, char *line) { - int i,j,k,ret,id; - char dev_index[DEFAULT_BUFLEN]; - char pinname[DEFAULT_BUFLEN]; - char mode[DEFAULT_BUFLEN]; - jtag_core * jc; + int i, j, k, ret, id; + char dev_index[DEFAULT_BUFLEN]; + char pinname[DEFAULT_BUFLEN]; + char mode[DEFAULT_BUFLEN]; + jtag_core *jc; - jc = (jtag_core *)ctx->app_ctx; + jc = (jtag_core *)ctx->app_ctx; - i = get_param( ctx, line, 1, dev_index ); - j = get_param( ctx, line, 2, pinname ); - k = get_param( ctx, line, 3, mode ); + i = get_param(ctx, line, 1, dev_index); + j = get_param(ctx, line, 2, pinname); + k = get_param(ctx, line, 3, mode); - if(i>=0 && j>=0 && k>=0) - { - id = jtagcore_get_pin_id(jc, str_to_int(dev_index), pinname); + if (i >= 0 && j >= 0 && k >= 0) + { + id = jtagcore_get_pin_id(jc, str_to_int(dev_index), pinname); - if(id>=0) - { - ret = jtagcore_get_pin_state(jc, str_to_int(dev_index), id, JTAG_CORE_INPUT); + if (id >= 0) + { + ret = jtagcore_get_pin_state(jc, str_to_int(dev_index), id, JTAG_CORE_INPUT); - ctx->script_printf( ctx, MSG_INFO_0, "Pin %s state : %d\n", pinname, ret ); + ctx->script_printf(ctx, MSG_INFO_0, "Pin %s state : %d\n", pinname, ret); - ctx->last_data_value = ret; + ctx->last_data_value = ret; - return JTAG_CORE_NO_ERROR; - } - else - { - ctx->script_printf( ctx, MSG_ERROR, "Pin %s not found\n", pinname ); - return JTAG_CORE_NOT_FOUND; - } - } + return JTAG_CORE_NO_ERROR; + } + else + { + ctx->script_printf(ctx, MSG_ERROR, "Pin %s not found\n", pinname); + return JTAG_CORE_NOT_FOUND; + } + } - ctx->script_printf( ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line ); + ctx->script_printf(ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line); - return JTAG_CORE_BAD_PARAMETER; + return JTAG_CORE_BAD_PARAMETER; } ///////////////////////////////////////////////////////////////////////////////////////// // I2C Commands ///////////////////////////////////////////////////////////////////////////////////////// - -static int cmd_set_i2c_sda_pin( script_ctx * ctx, char * line) +const char *cmd_set_i2c_sda_help[] = { + "", // Arguments "1(type) ..." + "explanations line one", // Explanations + "explanations line two", + "" +}; +static int cmd_set_i2c_sda_pin(script_ctx *ctx, char *line) { - int i,j,id; - char dev_index[DEFAULT_BUFLEN]; - char pinname[DEFAULT_BUFLEN]; - jtag_core * jc; + int i, j, id; + char dev_index[DEFAULT_BUFLEN]; + char pinname[DEFAULT_BUFLEN]; + jtag_core *jc; - jc = (jtag_core *)ctx->app_ctx; + jc = (jtag_core *)ctx->app_ctx; - i = get_param( ctx, line, 1, dev_index ); - j = get_param( ctx, line, 2, pinname ); + i = get_param(ctx, line, 1, dev_index); + j = get_param(ctx, line, 2, pinname); - if(i>=0 && j>=0) - { - id = jtagcore_get_pin_id(jc, str_to_int(dev_index), pinname); + if (i >= 0 && j >= 0) + { + id = jtagcore_get_pin_id(jc, str_to_int(dev_index), pinname); - if(id>=0) - { - jtagcore_i2c_set_sda_pin(jc, str_to_int(dev_index), id); - ctx->script_printf( ctx, MSG_INFO_0, "SDA set to Pin %s\n", pinname ); - return JTAG_CORE_NO_ERROR; - } - else - { - ctx->script_printf( ctx, MSG_ERROR, "Pin %s not found\n", pinname ); - return JTAG_CORE_NOT_FOUND; - } - } + if (id >= 0) + { + jtagcore_i2c_set_sda_pin(jc, str_to_int(dev_index), id); + ctx->script_printf(ctx, MSG_INFO_0, "SDA set to Pin %s\n", pinname); + return JTAG_CORE_NO_ERROR; + } + else + { + ctx->script_printf(ctx, MSG_ERROR, "Pin %s not found\n", pinname); + return JTAG_CORE_NOT_FOUND; + } + } - ctx->script_printf( ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line ); + ctx->script_printf(ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line); - return JTAG_CORE_BAD_PARAMETER; + return JTAG_CORE_BAD_PARAMETER; } -static int cmd_set_i2c_scl_pin( script_ctx * ctx, char * line) +const char *cmd_set_i2c_scl_help[] = { + "", // Arguments "1(type) ..." + "explanations line one", // Explanations + "explanations line two", + "" +}; +static int cmd_set_i2c_scl_pin(script_ctx *ctx, char *line) { - int i,j,id; - char dev_index[DEFAULT_BUFLEN]; - char pinname[DEFAULT_BUFLEN]; - jtag_core * jc; + int i, j, id; + char dev_index[DEFAULT_BUFLEN]; + char pinname[DEFAULT_BUFLEN]; + jtag_core *jc; - jc = (jtag_core *)ctx->app_ctx; + jc = (jtag_core *)ctx->app_ctx; - i = get_param( ctx, line, 1, dev_index ); - j = get_param( ctx, line, 2, pinname ); + i = get_param(ctx, line, 1, dev_index); + j = get_param(ctx, line, 2, pinname); - if(i>=0 && j>=0) - { - id = jtagcore_get_pin_id(jc, str_to_int(dev_index), pinname); + if (i >= 0 && j >= 0) + { + id = jtagcore_get_pin_id(jc, str_to_int(dev_index), pinname); - if(id>=0) - { - jtagcore_i2c_set_scl_pin(jc, str_to_int(dev_index), id); - ctx->script_printf( ctx, MSG_INFO_0, "SCL set to Pin %s\n", pinname ); - return JTAG_CORE_NO_ERROR; - } - else - { - ctx->script_printf( ctx, MSG_ERROR, "Pin %s not found\n", pinname ); - return JTAG_CORE_NOT_FOUND; - } - } + if (id >= 0) + { + jtagcore_i2c_set_scl_pin(jc, str_to_int(dev_index), id); + ctx->script_printf(ctx, MSG_INFO_0, "SCL set to Pin %s\n", pinname); + return JTAG_CORE_NO_ERROR; + } + else + { + ctx->script_printf(ctx, MSG_ERROR, "Pin %s not found\n", pinname); + return JTAG_CORE_NOT_FOUND; + } + } - ctx->script_printf( ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line ); + ctx->script_printf(ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line); - return JTAG_CORE_BAD_PARAMETER; + return JTAG_CORE_BAD_PARAMETER; } -static int cmd_do_i2c_wr( script_ctx * ctx, char * line) +const char *cmd_do_i2c_wr_help[] = { + "", // Arguments "1(type) ..." + "explanations line one", // Explanations + "explanations line two", + "" +}; +static int cmd_do_i2c_wr(script_ctx *ctx, char *line) { - // jtag_set_do_i2c_wr E8 EAACCDD4455 - int i, j; - int i2cadr, size, ret; - char adresse[DEFAULT_BUFLEN]; - char data[DEFAULT_BUFLEN]; - unsigned char tmp_buffer2[DEFAULT_BUFLEN]; - char tmp_buffer3[16]; - jtag_core * jc; + // jtag_set_do_i2c_wr E8 EAACCDD4455 + int i, j; + int i2cadr, size, ret; + char adresse[DEFAULT_BUFLEN]; + char data[DEFAULT_BUFLEN]; + unsigned char tmp_buffer2[DEFAULT_BUFLEN]; + char tmp_buffer3[16]; + jtag_core *jc; - jc = (jtag_core *)ctx->app_ctx; + jc = (jtag_core *)ctx->app_ctx; - i = get_param( ctx, line, 1, adresse ); - j = get_param( ctx, line, 2, data ); + i = get_param(ctx, line, 1, adresse); + j = get_param(ctx, line, 2, data); - if(i>=0 && j>=0) - { - i2cadr = strtoul(adresse,0,16); - size = strlen(data); - size = size / 2; - for(i = 0; i= 0 && j >= 0) + { + i2cadr = strtoul(adresse, 0, 16); + size = strlen(data); + size = size / 2; + for (i = 0; i < size; i++) + { + tmp_buffer3[0] = data[i * 2]; + tmp_buffer3[1] = data[i * 2 + 1]; + tmp_buffer3[2] = 0; - tmp_buffer2[i] = (char)strtoul(tmp_buffer3,0,16); - } + tmp_buffer2[i] = (char)strtoul(tmp_buffer3, 0, 16); + } - ret = jtagcore_i2c_write_read(jc, i2cadr, 0, size, tmp_buffer2, 0, 0); + ret = jtagcore_i2c_write_read(jc, i2cadr, 0, size, tmp_buffer2, 0, 0); - if ( ret <= 0) - { - if(ret == 0) - { - ctx->script_printf( ctx, MSG_WARNING, "Device Ack not detected ! 0x%.2X\n", i2cadr ); - } - else - { - ctx->script_printf( ctx, MSG_ERROR, "Code %d !\n", ret ); - } + if (ret <= 0) + { + if (ret == 0) + { + ctx->script_printf(ctx, MSG_WARNING, "Device Ack not detected ! 0x%.2X\n", i2cadr); + } + else + { + ctx->script_printf(ctx, MSG_ERROR, "Code %d !\n", ret); + } - return ret; - } - else - { - for(i=0;iscript_printf( ctx, MSG_INFO_0, "WR I2C 0x%.2X :%s\n", i2cadr, data ); + return ret; + } + else + { + for (i = 0; i < size; i++) + { + sprintf(&data[i * 3], " %.2X", tmp_buffer2[i]); + } + ctx->script_printf(ctx, MSG_INFO_0, "WR I2C 0x%.2X :%s\n", i2cadr, data); - return JTAG_CORE_NO_ERROR; - } - } + return JTAG_CORE_NO_ERROR; + } + } - ctx->script_printf( ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line ); + ctx->script_printf(ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line); - return JTAG_CORE_BAD_PARAMETER; + return JTAG_CORE_BAD_PARAMETER; } -static int cmd_do_i2c_rd( script_ctx * ctx, char * line) +const char *cmd_do_i2c_rd_help[] = { + "", // Arguments "1(type) ..." + "explanations line one", // Explanations + "explanations line two", + "" +}; +static int cmd_do_i2c_rd(script_ctx *ctx, char *line) { - // jtag_set_do_i2c_rd 0xE8 8 - int i,j,i2cadr,size; - char adresse[DEFAULT_BUFLEN]; - char sizebuf[DEFAULT_BUFLEN]; - char tmp_buffer[DEFAULT_BUFLEN]; - char tmp_buffer2[DEFAULT_BUFLEN]; - char tmp_buffer3[16]; - int ret; - jtag_core * jc; + // jtag_set_do_i2c_rd 0xE8 8 + int i, j, i2cadr, size; + char adresse[DEFAULT_BUFLEN]; + char sizebuf[DEFAULT_BUFLEN]; + char tmp_buffer[DEFAULT_BUFLEN]; + char tmp_buffer2[DEFAULT_BUFLEN]; + char tmp_buffer3[16]; + int ret; + jtag_core *jc; - jc = (jtag_core *)ctx->app_ctx; + jc = (jtag_core *)ctx->app_ctx; - i = get_param( ctx, line, 1, adresse ); - j = get_param( ctx, line, 2, sizebuf ); + i = get_param(ctx, line, 1, adresse); + j = get_param(ctx, line, 2, sizebuf); - if(i>=0 && j>=0) - { - i2cadr = strtoul(adresse,0,16); - size = str_to_int(sizebuf); + if (i >= 0 && j >= 0) + { + i2cadr = strtoul(adresse, 0, 16); + size = str_to_int(sizebuf); - ret = jtagcore_i2c_write_read(jc, i2cadr, 0, 0, (unsigned char*)tmp_buffer2, size, (unsigned char*)tmp_buffer2); + ret = jtagcore_i2c_write_read(jc, i2cadr, 0, 0, (unsigned char *)tmp_buffer2, size, (unsigned char *)tmp_buffer2); - if ( ret <= 0) - { - if(ret == 0) - { - ctx->script_printf( ctx, MSG_WARNING, "Device Ack not detected ! 0x%.2X\n", i2cadr ); - } - else - { - ctx->script_printf( ctx, MSG_ERROR, "Code %d !\n", ret ); - } + if (ret <= 0) + { + if (ret == 0) + { + ctx->script_printf(ctx, MSG_WARNING, "Device Ack not detected ! 0x%.2X\n", i2cadr); + } + else + { + ctx->script_printf(ctx, MSG_ERROR, "Code %d !\n", ret); + } - return ret; - } - else - { - memset(tmp_buffer, 0, sizeof(tmp_buffer)); - for (i = 0; iscript_printf( ctx, MSG_INFO_0, "RD I2C 0x%.2X :%s\n", i2cadr, tmp_buffer ); + return ret; + } + else + { + memset(tmp_buffer, 0, sizeof(tmp_buffer)); + for (i = 0; i < size && i < sizeof(tmp_buffer2); i++) + { + sprintf(tmp_buffer3, " %.2X", tmp_buffer2[i]); + strcat(tmp_buffer, tmp_buffer3); + } + ctx->script_printf(ctx, MSG_INFO_0, "RD I2C 0x%.2X :%s\n", i2cadr, tmp_buffer); - return JTAG_CORE_NO_ERROR; - } - } + return JTAG_CORE_NO_ERROR; + } + } - ctx->script_printf( ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line ); + ctx->script_printf(ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line); - return JTAG_CORE_BAD_PARAMETER; + return JTAG_CORE_BAD_PARAMETER; } ///////////////////////////////////////////////////////////////////////////////////////// // MDIO Commands ///////////////////////////////////////////////////////////////////////////////////////// - -static int cmd_set_mdio_mdc_pin( script_ctx * ctx, char * line) +const char *cmd_set_mdio_mdc_pin_help[] = { + "", // Arguments "1(type) ..." + "explanations line one", // Explanations + "explanations line two", + "" +}; +static int cmd_set_mdio_mdc_pin(script_ctx *ctx, char *line) { - int i,j,id; - char dev_index[DEFAULT_BUFLEN]; - char pinname[DEFAULT_BUFLEN]; - jtag_core * jc; + int i, j, id; + char dev_index[DEFAULT_BUFLEN]; + char pinname[DEFAULT_BUFLEN]; + jtag_core *jc; - jc = (jtag_core *)ctx->app_ctx; + jc = (jtag_core *)ctx->app_ctx; - i = get_param( ctx, line, 1, dev_index ); - j = get_param( ctx, line, 2, pinname ); + i = get_param(ctx, line, 1, dev_index); + j = get_param(ctx, line, 2, pinname); - if(i>=0 && j>=0) - { - id = jtagcore_get_pin_id(jc, str_to_int(dev_index), pinname); + if (i >= 0 && j >= 0) + { + id = jtagcore_get_pin_id(jc, str_to_int(dev_index), pinname); - if(id>=0) - { - jtagcore_mdio_set_mdc_pin(jc, str_to_int(dev_index), id); - ctx->script_printf( ctx, MSG_INFO_0, "MDC set to Pin %s\n", pinname ); - return JTAG_CORE_NO_ERROR; - } - else - { - ctx->script_printf( ctx, MSG_ERROR, "Pin %s not found\n", pinname ); - return JTAG_CORE_NOT_FOUND; - } - } + if (id >= 0) + { + jtagcore_mdio_set_mdc_pin(jc, str_to_int(dev_index), id); + ctx->script_printf(ctx, MSG_INFO_0, "MDC set to Pin %s\n", pinname); + return JTAG_CORE_NO_ERROR; + } + else + { + ctx->script_printf(ctx, MSG_ERROR, "Pin %s not found\n", pinname); + return JTAG_CORE_NOT_FOUND; + } + } - ctx->script_printf( ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line ); + ctx->script_printf(ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line); - return JTAG_CORE_BAD_PARAMETER; + return JTAG_CORE_BAD_PARAMETER; } -static int cmd_set_mdio_mdio_pin( script_ctx * ctx, char * line) +const char *cmd_set_mdio_mdio_pin_help[] = { + "", // Arguments "1(type) ..." + "explanations line one", // Explanations + "explanations line two", + "" +}; +static int cmd_set_mdio_mdio_pin(script_ctx *ctx, char *line) { - int i,j,id; - char dev_index[DEFAULT_BUFLEN]; - char pinname[DEFAULT_BUFLEN]; - jtag_core * jc; + int i, j, id; + char dev_index[DEFAULT_BUFLEN]; + char pinname[DEFAULT_BUFLEN]; + jtag_core *jc; - jc = (jtag_core *)ctx->app_ctx; + jc = (jtag_core *)ctx->app_ctx; - i = get_param( ctx, line, 1, dev_index ); - j = get_param( ctx, line, 2, pinname ); + i = get_param(ctx, line, 1, dev_index); + j = get_param(ctx, line, 2, pinname); - if(i>=0 && j>=0) - { - id = jtagcore_get_pin_id(jc, str_to_int(dev_index), pinname); + if (i >= 0 && j >= 0) + { + id = jtagcore_get_pin_id(jc, str_to_int(dev_index), pinname); - if(id>=0) - { - jtagcore_mdio_set_mdio_pin(jc, str_to_int(dev_index), id); - ctx->script_printf( ctx, MSG_INFO_0, "MDIO set to Pin %s\n", pinname ); - return JTAG_CORE_NO_ERROR; - } - else - { - ctx->script_printf( ctx, MSG_ERROR, "Pin %s not found\n", pinname ); - return JTAG_CORE_NOT_FOUND; - } - } + if (id >= 0) + { + jtagcore_mdio_set_mdio_pin(jc, str_to_int(dev_index), id); + ctx->script_printf(ctx, MSG_INFO_0, "MDIO set to Pin %s\n", pinname); + return JTAG_CORE_NO_ERROR; + } + else + { + ctx->script_printf(ctx, MSG_ERROR, "Pin %s not found\n", pinname); + return JTAG_CORE_NOT_FOUND; + } + } - ctx->script_printf( ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line ); + ctx->script_printf(ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line); - return JTAG_CORE_BAD_PARAMETER; + return JTAG_CORE_BAD_PARAMETER; } -static int cmd_do_mdio_wr( script_ctx * ctx, char * line) +const char *cmd_do_mdio_wr_help[] = { + "", // Arguments "1(type) ..." + "explanations line one", // Explanations + "explanations line two", + "" +}; +static int cmd_do_mdio_wr(script_ctx *ctx, char *line) { - // jtag_mdio_wr 01 04 EAAC - int i,j,k,mdioadr,regadr,datatowrite; - char address[DEFAULT_BUFLEN]; - char reg[DEFAULT_BUFLEN]; - char data[DEFAULT_BUFLEN]; - int ret; - jtag_core * jc; + // jtag_mdio_wr 01 04 EAAC + int i, j, k, mdioadr, regadr, datatowrite; + char address[DEFAULT_BUFLEN]; + char reg[DEFAULT_BUFLEN]; + char data[DEFAULT_BUFLEN]; + int ret; + jtag_core *jc; - jc = (jtag_core *)ctx->app_ctx; + jc = (jtag_core *)ctx->app_ctx; - i = get_param( ctx, line, 1, address ); - j = get_param( ctx, line, 2, reg ); - k = get_param( ctx, line, 3, data ); + i = get_param(ctx, line, 1, address); + j = get_param(ctx, line, 2, reg); + k = get_param(ctx, line, 3, data); - if(i>=0 && j>=0 && k>=0) - { - mdioadr = strtoul(address,0,16); - regadr = strtoul(reg,0,16); - datatowrite = strtoul(data, 0, 16); + if (i >= 0 && j >= 0 && k >= 0) + { + mdioadr = strtoul(address, 0, 16); + regadr = strtoul(reg, 0, 16); + datatowrite = strtoul(data, 0, 16); - ret = jtagcore_mdio_write(jc, mdioadr, regadr, datatowrite); - if( ret < 0 ) - { - ctx->script_printf( ctx, MSG_ERROR, "Code %d !\n", ret ); - return ret; - } + ret = jtagcore_mdio_write(jc, mdioadr, regadr, datatowrite); + if (ret < 0) + { + ctx->script_printf(ctx, MSG_ERROR, "Code %d !\n", ret); + return ret; + } - ctx->script_printf( ctx, MSG_INFO_0, "WR MDIO 0x%.2X : [0x%.2X] = 0x%.4X\n", mdioadr ,regadr, datatowrite ); + ctx->script_printf(ctx, MSG_INFO_0, "WR MDIO 0x%.2X : [0x%.2X] = 0x%.4X\n", mdioadr, regadr, datatowrite); - return JTAG_CORE_NO_ERROR; - } + return JTAG_CORE_NO_ERROR; + } - ctx->script_printf( ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line ); + ctx->script_printf(ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line); - return JTAG_CORE_BAD_PARAMETER; + return JTAG_CORE_BAD_PARAMETER; } -static int cmd_do_mdio_rd( script_ctx * ctx, char * line) +const char *cmd_do_mdio_rd_help[] = { + "", // Arguments "1(type) ..." + "explanations line one", // Explanations + "explanations line two", + "" +}; +static int cmd_do_mdio_rd(script_ctx *ctx, char *line) { - // jtag_mdio_rd 01 04 - int i,j,mdioadr,regadr,dataread; - char address[DEFAULT_BUFLEN]; - char reg[DEFAULT_BUFLEN]; - jtag_core * jc; + // jtag_mdio_rd 01 04 + int i, j, mdioadr, regadr, dataread; + char address[DEFAULT_BUFLEN]; + char reg[DEFAULT_BUFLEN]; + jtag_core *jc; - jc = (jtag_core *)ctx->app_ctx; + jc = (jtag_core *)ctx->app_ctx; - i = get_param( ctx, line, 1, address ); - j = get_param( ctx, line, 2, reg ); + i = get_param(ctx, line, 1, address); + j = get_param(ctx, line, 2, reg); - if(i>=0 && j>=0) - { - mdioadr = strtoul(address,0,16); - regadr = strtoul(reg,0,16); + if (i >= 0 && j >= 0) + { + mdioadr = strtoul(address, 0, 16); + regadr = strtoul(reg, 0, 16); - dataread = jtagcore_mdio_read(jc, mdioadr, regadr); - if( dataread < 0 ) - { - ctx->script_printf( ctx, MSG_ERROR, "Code %d !\n", dataread ); - return dataread; - } + dataread = jtagcore_mdio_read(jc, mdioadr, regadr); + if (dataread < 0) + { + ctx->script_printf(ctx, MSG_ERROR, "Code %d !\n", dataread); + return dataread; + } - ctx->last_data_value = dataread; + ctx->last_data_value = dataread; - ctx->script_printf( ctx, MSG_INFO_0, "RD MDIO 0x%.2X : [0x%.2X] = 0x%.4X\n", mdioadr ,regadr, dataread ); + ctx->script_printf(ctx, MSG_INFO_0, "RD MDIO 0x%.2X : [0x%.2X] = 0x%.4X\n", mdioadr, regadr, dataread); - return JTAG_CORE_NO_ERROR; - } + return JTAG_CORE_NO_ERROR; + } - ctx->script_printf( ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line ); + ctx->script_printf(ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line); - return JTAG_CORE_BAD_PARAMETER; + return JTAG_CORE_BAD_PARAMETER; } ///////////////////////////////////////////////////////////////////////////////////////// // SPI Commands ///////////////////////////////////////////////////////////////////////////////////////// -static int cmd_set_spi_cs_pin( script_ctx * ctx, char * line) +const char *cmd_set_spi_cs_pin_help[] = { + "", // Arguments "1(type) ..." + "explanations line one", // Explanations + "explanations line two", + "" +}; +static int cmd_set_spi_cs_pin(script_ctx *ctx, char *line) { - int i,j,k,id; - char dev_index[DEFAULT_BUFLEN]; - char pinname[DEFAULT_BUFLEN]; - char polarity[DEFAULT_BUFLEN]; - jtag_core * jc; + int i, j, k, id; + char dev_index[DEFAULT_BUFLEN]; + char pinname[DEFAULT_BUFLEN]; + char polarity[DEFAULT_BUFLEN]; + jtag_core *jc; - jc = (jtag_core *)ctx->app_ctx; + jc = (jtag_core *)ctx->app_ctx; - i = get_param( ctx, line, 1, dev_index ); - j = get_param( ctx, line, 2, pinname ); - k = get_param( ctx, line, 3, polarity ); + i = get_param(ctx, line, 1, dev_index); + j = get_param(ctx, line, 2, pinname); + k = get_param(ctx, line, 3, polarity); - if(i>=0 && j>=0 && k>=0) - { - id = jtagcore_get_pin_id(jc, str_to_int(dev_index), pinname); + if (i >= 0 && j >= 0 && k >= 0) + { + id = jtagcore_get_pin_id(jc, str_to_int(dev_index), pinname); - if(id>=0) - { - jtagcore_spi_set_cs_pin(jc, str_to_int(dev_index), id, str_to_int(polarity)); - ctx->script_printf( ctx, MSG_INFO_0, "CS set to Pin %s with polarity %d\n", pinname, str_to_int(polarity) ); - return JTAG_CORE_NO_ERROR; - } - else - { - ctx->script_printf( ctx, MSG_ERROR, "Pin %s not found\n", pinname ); - return JTAG_CORE_NOT_FOUND; - } - } + if (id >= 0) + { + jtagcore_spi_set_cs_pin(jc, str_to_int(dev_index), id, str_to_int(polarity)); + ctx->script_printf(ctx, MSG_INFO_0, "CS set to Pin %s with polarity %d\n", pinname, str_to_int(polarity)); + return JTAG_CORE_NO_ERROR; + } + else + { + ctx->script_printf(ctx, MSG_ERROR, "Pin %s not found\n", pinname); + return JTAG_CORE_NOT_FOUND; + } + } - ctx->script_printf( ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line ); + ctx->script_printf(ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line); - return JTAG_CORE_BAD_PARAMETER; + return JTAG_CORE_BAD_PARAMETER; } -static int cmd_set_spi_clk_pin( script_ctx * ctx, char * line) +const char *cmd_set_spi_clk_pin_help[] = { + "", // Arguments "1(type) ..." + "explanations line one", // Explanations + "explanations line two", + "" +}; +static int cmd_set_spi_clk_pin(script_ctx *ctx, char *line) { - int i,j,k,id; - char dev_index[DEFAULT_BUFLEN]; - char pinname[DEFAULT_BUFLEN]; - char polarity[DEFAULT_BUFLEN]; - jtag_core * jc; + int i, j, k, id; + char dev_index[DEFAULT_BUFLEN]; + char pinname[DEFAULT_BUFLEN]; + char polarity[DEFAULT_BUFLEN]; + jtag_core *jc; - jc = (jtag_core *)ctx->app_ctx; + jc = (jtag_core *)ctx->app_ctx; - i = get_param( ctx, line, 1, dev_index ); - j = get_param( ctx, line, 2, pinname ); - k = get_param( ctx, line, 3, polarity ); + i = get_param(ctx, line, 1, dev_index); + j = get_param(ctx, line, 2, pinname); + k = get_param(ctx, line, 3, polarity); - if(i>=0 && j>=0 && k>=0) - { - id = jtagcore_get_pin_id(jc, str_to_int(dev_index), pinname); + if (i >= 0 && j >= 0 && k >= 0) + { + id = jtagcore_get_pin_id(jc, str_to_int(dev_index), pinname); - if(id>=0) - { - jtagcore_spi_set_clk_pin(jc, str_to_int(dev_index), id, str_to_int(polarity)); - ctx->script_printf( ctx, MSG_INFO_0, "CLK set to Pin %s with polarity %d\n", pinname, str_to_int(polarity) ); - return JTAG_CORE_NO_ERROR; - } - else - { - ctx->script_printf( ctx, MSG_ERROR, "Pin %s not found\n", pinname ); - return JTAG_CORE_NOT_FOUND; - } - } + if (id >= 0) + { + jtagcore_spi_set_clk_pin(jc, str_to_int(dev_index), id, str_to_int(polarity)); + ctx->script_printf(ctx, MSG_INFO_0, "CLK set to Pin %s with polarity %d\n", pinname, str_to_int(polarity)); + return JTAG_CORE_NO_ERROR; + } + else + { + ctx->script_printf(ctx, MSG_ERROR, "Pin %s not found\n", pinname); + return JTAG_CORE_NOT_FOUND; + } + } - ctx->script_printf( ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line ); + ctx->script_printf(ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line); - return JTAG_CORE_BAD_PARAMETER; + return JTAG_CORE_BAD_PARAMETER; } -static int cmd_set_spi_mosi_pin( script_ctx * ctx, char * line) +const char *cmd_set_spi_mosi_pin_help[] = { + "", // Arguments "1(type) ..." + "explanations line one", // Explanations + "explanations line two", + "" +}; +static int cmd_set_spi_mosi_pin(script_ctx *ctx, char *line) { - int i,j,k,id; - char dev_index[DEFAULT_BUFLEN]; - char pinname[DEFAULT_BUFLEN]; - char phase[DEFAULT_BUFLEN]; - jtag_core * jc; + int i, j, k, id; + char dev_index[DEFAULT_BUFLEN]; + char pinname[DEFAULT_BUFLEN]; + char phase[DEFAULT_BUFLEN]; + jtag_core *jc; - jc = (jtag_core *)ctx->app_ctx; + jc = (jtag_core *)ctx->app_ctx; - i = get_param( ctx, line, 1, dev_index ); - j = get_param( ctx, line, 2, pinname ); - k = get_param( ctx, line, 3, phase ); + i = get_param(ctx, line, 1, dev_index); + j = get_param(ctx, line, 2, pinname); + k = get_param(ctx, line, 3, phase); - if(i>=0 && j>=0 && k>=0) - { - id = jtagcore_get_pin_id(jc, str_to_int(dev_index), pinname); + if (i >= 0 && j >= 0 && k >= 0) + { + id = jtagcore_get_pin_id(jc, str_to_int(dev_index), pinname); - if(id>=0) - { - jtagcore_spi_set_mosi_pin(jc, str_to_int(dev_index), id, str_to_int(phase)); - ctx->script_printf( ctx, MSG_INFO_0, "MOSI set to Pin %s with polarity %d\n", pinname, str_to_int(phase) ); - return JTAG_CORE_NO_ERROR; - } - else - { - ctx->script_printf( ctx, MSG_ERROR, "Pin %s not found\n", pinname ); - return JTAG_CORE_NOT_FOUND; - } - } + if (id >= 0) + { + jtagcore_spi_set_mosi_pin(jc, str_to_int(dev_index), id, str_to_int(phase)); + ctx->script_printf(ctx, MSG_INFO_0, "MOSI set to Pin %s with polarity %d\n", pinname, str_to_int(phase)); + return JTAG_CORE_NO_ERROR; + } + else + { + ctx->script_printf(ctx, MSG_ERROR, "Pin %s not found\n", pinname); + return JTAG_CORE_NOT_FOUND; + } + } - ctx->script_printf( ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line ); + ctx->script_printf(ctx, MSG_ERROR, "Bad/Missing parameter(s) ! : %s\n", line); - return JTAG_CORE_BAD_PARAMETER; + return JTAG_CORE_BAD_PARAMETER; } -static int cmd_set_spi_miso_pin( script_ctx * ctx, char * line) +const char *cmd_set_spi_miso_pin_help[] = { + "", // Arguments "1(type) ..." + "explanations line one", // Explanations + "explanations line two", + "" +}; +static int cmd_set_spi_miso_pin(script_ctx *ctx, char *line) { - int i,j,k,id; - char dev_index[DEFAULT_BUFLEN]; - char pinname[DEFAULT_BUFLEN]; - char phase[DEFAULT_BUFLEN]; - jtag_core * jc; + int i, j, k, id; + char dev_index[DEFAULT_BUFLEN]; + char pinname[DEFAULT_BUFLEN]; + char phase[DEFAULT_BUFLEN]; + jtag_core *jc; - jc = (jtag_core *)ctx->app_ctx; + jc = (jtag_core *)ctx->app_ctx; - i = get_param( ctx, line, 1, dev_index ); - j = get_param( ctx, line, 2, pinname ); - k = get_param( ctx, line, 3, phase ); + i = get_param(ctx, line, 1, dev_index); + j = get_param(ctx, line, 2, pinname); + k = get_param(ctx, line, 3, phase); - if(i>=0 && j>=0 && k>=0) - { - id = jtagcore_get_pin_id(jc, str_to_int(dev_index), pinname); + if (i >= 0 && j >= 0 && k >= 0) + { + id = jtagcore_get_pin_id(jc, str_to_int(dev_index), pinname); - if(id>=0) - { - jtagcore_spi_set_miso_pin(jc, str_to_int(dev_index), id, str_to_int(phase)); - ctx->script_printf( ctx, MSG_INFO_0, "MISO set to Pin %s with polarity %d\n", pinname, str_to_int(phase) ); - return JTAG_CORE_NO_ERROR; - } - else - { - ctx->script_printf( ctx, MSG_ERROR, "Pin %s not found\n", pinname ); - return JTAG_CORE_NOT_FOUND; - } - } + if (id >= 0) + { + jtagcore_spi_set_miso_pin(jc, str_to_int(dev_index), id, str_to_int(phase)); + ctx->script_printf(ctx, MSG_INFO_0, "MISO set to Pin %s with polarity %d\n", pinname, str_to_int(phase)); + return JTAG_CORE_NO_ERROR; + } + else + { + ctx->script_printf(ctx, MSG_ERROR, "Pin %s not found\n", pinname); + return JTAG_CORE_NOT_FOUND; + } + } - ctx->script_printf( ctx, MSG_ERROR, "Parameters error: %s\n", line ); + ctx->script_printf(ctx, MSG_ERROR, "Parameters error: %s\n", line); - return JTAG_CORE_BAD_PARAMETER; + return JTAG_CORE_BAD_PARAMETER; } -static int cmd_spi_rd_wr( script_ctx * ctx, char * line) +const char *cmd_spi_rd_wr_help[] = { + "", // Arguments "1(type) ..." + "explanations line one", // Explanations + "explanations line two", + "" +}; +static int cmd_spi_rd_wr(script_ctx *ctx, char *line) { - int i,j,k,size; - char data_out_txt[DEFAULT_BUFLEN]; - unsigned char data_out[DEFAULT_BUFLEN]; - unsigned char data_in[DEFAULT_BUFLEN]; - char lsbfirst[DEFAULT_BUFLEN]; - char tmp_buffer[3]; - int ret; - jtag_core * jc; + int i, j, k, size; + char data_out_txt[DEFAULT_BUFLEN]; + unsigned char data_out[DEFAULT_BUFLEN]; + unsigned char data_in[DEFAULT_BUFLEN]; + char lsbfirst[DEFAULT_BUFLEN]; + char tmp_buffer[3]; + int ret; + jtag_core *jc; - jc = (jtag_core *)ctx->app_ctx; + jc = (jtag_core *)ctx->app_ctx; - // jtag_spi_rd_wr 00123344 1 (DATA LSBFirst) - i = get_param( ctx, line, 1, data_out_txt ); - j = get_param( ctx, line, 2, lsbfirst ); + // jtag_spi_rd_wr 00123344 1 (DATA LSBFirst) + i = get_param(ctx, line, 1, data_out_txt); + j = get_param(ctx, line, 2, lsbfirst); - if(i>=0) - { - if(j>=0) - { - jtagcore_spi_set_bitorder(jc, str_to_int(lsbfirst)); - } + if (i >= 0) + { + if (j >= 0) + { + jtagcore_spi_set_bitorder(jc, str_to_int(lsbfirst)); + } - size = strlen(data_out_txt); - size = size / 2; - for(k = 0; kscript_printf( ctx, MSG_ERROR, "Code %d !\n", ret ); - return ret; - } + ret = jtagcore_spi_write_read(jc, size, data_out, data_in, 0); + if (ret < 0) + { + ctx->script_printf(ctx, MSG_ERROR, "Code %d !\n", ret); + return ret; + } - ctx->script_printf( ctx, MSG_INFO_0, "SPI TX:" ); - for(k = 0; kscript_printf( ctx, MSG_NONE, " %.2X", data_out[k] ); - } - ctx->script_printf( ctx, MSG_NONE, "\n" ); + ctx->script_printf(ctx, MSG_INFO_0, "SPI TX:"); + for (k = 0; k < size; k++) + { + ctx->script_printf(ctx, MSG_NONE, " %.2X", data_out[k]); + } + ctx->script_printf(ctx, MSG_NONE, "\n"); - ctx->script_printf( ctx, MSG_INFO_0, "SPI RX:" ); - for(k = 0; kscript_printf( ctx, MSG_NONE, " %.2X", data_in[k] ); - } - ctx->script_printf( ctx, MSG_NONE, "\n" ); + ctx->script_printf(ctx, MSG_INFO_0, "SPI RX:"); + for (k = 0; k < size; k++) + { + ctx->script_printf(ctx, MSG_NONE, " %.2X", data_in[k]); + } + ctx->script_printf(ctx, MSG_NONE, "\n"); - return JTAG_CORE_NOT_FOUND; - } + return JTAG_CORE_NOT_FOUND; + } - ctx->script_printf( ctx, MSG_ERROR, "Parameters error: %s\n", line ); + ctx->script_printf(ctx, MSG_ERROR, "Parameters error: %s\n", line); - return JTAG_CORE_BAD_PARAMETER; + return JTAG_CORE_BAD_PARAMETER; } -static int cmd_get_pins_list( script_ctx * ctx, char * line) +const char *cmd_get_pins_list_help[] = { + "", // Arguments "1(type) ..." + "explanations line one", // Explanations + "explanations line two", + "" +}; +static int cmd_get_pins_list(script_ctx *ctx, char *line) { - int i,j,nb_of_pins; - char dev_index[DEFAULT_BUFLEN]; - char pinname[DEFAULT_BUFLEN]; - int type; - jtag_core * jc; + int i, j, nb_of_pins; + char dev_index[DEFAULT_BUFLEN]; + char pinname[DEFAULT_BUFLEN]; + int type; + jtag_core *jc; - jc = (jtag_core *)ctx->app_ctx; + jc = (jtag_core *)ctx->app_ctx; - i = get_param( ctx, line, 1, dev_index ); - if(i>=0) - { - nb_of_pins = jtagcore_get_number_of_pins(jc,str_to_int(dev_index)); - if(nb_of_pins>=0) - { - ctx->script_printf( ctx, MSG_INFO_0, "Device %d : %d pin(s)\n", str_to_int(dev_index), nb_of_pins ); - for(j = 0;j < nb_of_pins;j++) - { - if(jtagcore_get_pin_properties(jc, str_to_int(dev_index), j, pinname, sizeof(pinname), &type) == JTAG_CORE_NO_ERROR) - { - ctx->script_printf( ctx, MSG_NONE, "%s : ", pinname ); - if(type & JTAG_CORE_PIN_IS_INPUT) - { - ctx->script_printf( ctx, MSG_NONE, " in " ); - } - else - { - ctx->script_printf( ctx, MSG_NONE, " " ); - } + i = get_param(ctx, line, 1, dev_index); + if (i >= 0) + { + nb_of_pins = jtagcore_get_number_of_pins(jc, str_to_int(dev_index)); + if (nb_of_pins >= 0) + { + ctx->script_printf(ctx, MSG_INFO_0, "Device %d : %d pin(s)\n", str_to_int(dev_index), nb_of_pins); + for (j = 0; j < nb_of_pins; j++) + { + if (jtagcore_get_pin_properties(jc, str_to_int(dev_index), j, pinname, sizeof(pinname), &type) == JTAG_CORE_NO_ERROR) + { + ctx->script_printf(ctx, MSG_NONE, "%s : ", pinname); + if (type & JTAG_CORE_PIN_IS_INPUT) + { + ctx->script_printf(ctx, MSG_NONE, " in "); + } + else + { + ctx->script_printf(ctx, MSG_NONE, " "); + } - if(type & JTAG_CORE_PIN_IS_OUTPUT) - { - ctx->script_printf( ctx, MSG_NONE, " out " ); - } - else - { - ctx->script_printf( ctx, MSG_NONE, " " ); - } + if (type & JTAG_CORE_PIN_IS_OUTPUT) + { + ctx->script_printf(ctx, MSG_NONE, " out "); + } + else + { + ctx->script_printf(ctx, MSG_NONE, " "); + } - if(type & JTAG_CORE_PIN_IS_TRISTATES) - { - ctx->script_printf( ctx, MSG_NONE, " tris" ); - } - else - { - ctx->script_printf( ctx, MSG_NONE, " "); - } + if (type & JTAG_CORE_PIN_IS_TRISTATES) + { + ctx->script_printf(ctx, MSG_NONE, " tris"); + } + else + { + ctx->script_printf(ctx, MSG_NONE, " "); + } - ctx->script_printf( ctx, MSG_NONE, "\n"); + ctx->script_printf(ctx, MSG_NONE, "\n"); + } + } + } - } - } - } + return JTAG_CORE_NO_ERROR; + } - return JTAG_CORE_NO_ERROR; - } - - return JTAG_CORE_BAD_PARAMETER; + return JTAG_CORE_BAD_PARAMETER; } cmd_list script_commands_list[] = + { + {"print", cmd_print, cmd_print_help}, + {"help", cmd_help, cmd_help_help}, + {"?", cmd_help, cmd_help_help}, + {"version", cmd_version, cmd_version_help}, + {"pause", cmd_pause, cmd_pause_help}, + {"set", cmd_set_env_var, cmd_set_env_var_help}, + {"print_env_var", cmd_print_env_var, cmd_print_env_var_help}, + {"call", cmd_call, cmd_call_help}, + {"system", cmd_system, cmd_system_help}, + {"if", cmd_if, cmd_if_help}, + {"goto", cmd_goto, cmd_goto_help}, + {"return", cmd_return, cmd_return_help}, + {"rand", cmd_rand, cmd_rand_help}, + {"init_array", cmd_initarray, cmd_initarray_help}, + {"jtag_get_probes_list", cmd_print_probes_list, cmd_print_probes_list_help}, + {"jtag_open_probe", cmd_open_probe, cmd_open_probe_help}, + {"jtag_autoinit", cmd_autoinit, cmd_autoinit_help}, + {"jtag_init_scan", cmd_init_and_scan, cmd_init_and_scan_help}, + {"jtag_get_nb_of_devices", cmd_print_nb_dev, cmd_print_nb_dev_help}, + {"jtag_get_devices_list", cmd_print_devs_list, cmd_print_devs_list_help}, + {"jtag_load_bsdl", cmd_load_bsdl, cmd_load_bsdl_help}, + {"jtag_set_mode", cmd_set_scan_mode, cmd_set_scan_mode_help}, + {"jtag_push_pop", cmd_push_and_pop, cmd_push_and_pop_help}, + {"jtag_get_pins_list", cmd_get_pins_list, cmd_get_pins_list_help}, + {"jtag_set_pin_dir", cmd_set_pin_mode, cmd_set_pin_mode_help}, + {"jtag_set_pin_state", cmd_set_pin_state, cmd_set_pin_state_help}, + {"jtag_get_pin_state", cmd_get_pin_state, cmd_get_pin_state_help}, + {"jtag_set_i2c_scl_pin", cmd_set_i2c_scl_pin, cmd_set_i2c_scl_help}, + {"jtag_set_i2c_sda_pin", cmd_set_i2c_sda_pin, cmd_set_i2c_sda_help}, + {"jtag_i2c_rd", cmd_do_i2c_rd, cmd_do_i2c_wr_help}, + {"jtag_i2c_wr", cmd_do_i2c_wr, cmd_do_i2c_rd_help}, + {"jtag_set_mdio_mdc_pin", cmd_set_mdio_mdc_pin, cmd_set_mdio_mdc_pin_help}, + {"jtag_set_mdio_mdio_pin", cmd_set_mdio_mdio_pin, cmd_set_mdio_mdio_pin_help}, + {"jtag_mdio_rd", cmd_do_mdio_rd, cmd_do_mdio_rd_help}, + {"jtag_mdio_wr", cmd_do_mdio_wr, cmd_do_mdio_wr_help}, + {"jtag_set_spi_cs_pin", cmd_set_spi_cs_pin, cmd_set_spi_cs_pin_help}, + {"jtag_set_spi_mosi_pin", cmd_set_spi_mosi_pin, cmd_set_spi_mosi_pin_help}, + {"jtag_set_spi_miso_pin", cmd_set_spi_miso_pin, cmd_set_spi_miso_pin_help}, + {"jtag_set_spi_clk_pin", cmd_set_spi_clk_pin, cmd_set_spi_clk_pin_help}, + {"jtag_spi_rd_wr", cmd_spi_rd_wr, cmd_spi_rd_wr_help}, + {0, 0}}; + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +script_ctx *jtagcore_initScript(jtag_core *jc) { - {"print", cmd_print}, - {"help", cmd_help}, - {"?", cmd_help}, - {"version", cmd_version}, - {"pause", cmd_pause}, - {"set", cmd_set_env_var}, - {"print_env_var", cmd_print_env_var}, - {"call", cmd_call}, - {"system", cmd_system}, - - {"if", cmd_if}, - {"goto", cmd_goto}, - {"return", cmd_return}, - - {"rand", cmd_rand}, - - {"init_array", cmd_initarray}, - - {"jtag_get_probes_list", cmd_print_probes_list}, - {"jtag_open_probe", cmd_open_probe}, - {"jtag_autoinit", cmd_autoinit}, - - {"jtag_init_scan", cmd_init_and_scan}, - {"jtag_get_nb_of_devices", cmd_print_nb_dev}, - {"jtag_get_devices_list", cmd_print_devs_list}, - {"jtag_load_bsdl", cmd_load_bsdl}, - {"jtag_set_mode", cmd_set_scan_mode}, - - {"jtag_push_pop", cmd_push_and_pop}, - - {"jtag_get_pins_list", cmd_get_pins_list}, - - {"jtag_set_pin_dir", cmd_set_pin_mode}, - {"jtag_set_pin_state", cmd_set_pin_state}, - {"jtag_get_pin_state", cmd_get_pin_state}, - - {"jtag_set_i2c_scl_pin", cmd_set_i2c_scl_pin}, - {"jtag_set_i2c_sda_pin", cmd_set_i2c_sda_pin}, - {"jtag_i2c_rd", cmd_do_i2c_rd}, - {"jtag_i2c_wr", cmd_do_i2c_wr}, - - {"jtag_set_mdio_mdc_pin", cmd_set_mdio_mdc_pin}, - {"jtag_set_mdio_mdio_pin", cmd_set_mdio_mdio_pin}, - {"jtag_mdio_rd", cmd_do_mdio_rd}, - {"jtag_mdio_wr", cmd_do_mdio_wr}, - - {"jtag_set_spi_cs_pin", cmd_set_spi_cs_pin}, - {"jtag_set_spi_mosi_pin", cmd_set_spi_mosi_pin}, - {"jtag_set_spi_miso_pin", cmd_set_spi_miso_pin}, - {"jtag_set_spi_clk_pin", cmd_set_spi_clk_pin}, - {"jtag_spi_rd_wr", cmd_spi_rd_wr}, - - {0 , 0} -}; - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// - -script_ctx * jtagcore_initScript(jtag_core * jc) -{ - return init_script((void*)jc,0x00000000,(void*)jc->envvar); + return init_script((void *)jc, 0x00000000, (void *)jc->envvar); } -int jtagcore_savePinsStateScript( jtag_core * jc, int device, char * script_path ) +int jtagcore_savePinsStateScript(jtag_core *jc, int device, char *script_path) { - FILE * f; - int number_of_pins; - int pin_type; - int i,state; - char pin_name[DEFAULT_BUFLEN]; + FILE *f; + int number_of_pins; + int pin_type; + int i, state; + char pin_name[DEFAULT_BUFLEN]; - f = fopen(script_path,"w"); - if(f) - { - if(jc) - { - number_of_pins = jtagcore_get_number_of_pins( jc, device ); + f = fopen(script_path, "w"); + if (f) + { + if (jc) + { + number_of_pins = jtagcore_get_number_of_pins(jc, device); - if(number_of_pins>0) - { - for(i=0;i 0) + { + for (i = 0; i < number_of_pins; i++) + { + pin_type = 0; - jtagcore_get_pin_properties( jc, device, i, (char*)&pin_name, sizeof(pin_name), &pin_type); + jtagcore_get_pin_properties(jc, device, i, (char *)&pin_name, sizeof(pin_name), &pin_type); - if (pin_type) - { - fprintf(f,"print ----------------------------\n"); + if (pin_type) + { + fprintf(f, "print ----------------------------\n"); - // output enable - if (pin_type & JTAG_CORE_PIN_IS_TRISTATES) - { - state = jtagcore_get_pin_state(jc, device, i, JTAG_CORE_OE); - fprintf(f,"print Pin %s direction : %d\n",pin_name,state); - fprintf(f,"jtag_set_pin_dir %d %s %d\n",device,pin_name,state); - } + // output enable + if (pin_type & JTAG_CORE_PIN_IS_TRISTATES) + { + state = jtagcore_get_pin_state(jc, device, i, JTAG_CORE_OE); + fprintf(f, "print Pin %s direction : %d\n", pin_name, state); + fprintf(f, "jtag_set_pin_dir %d %s %d\n", device, pin_name, state); + } - // output data - if (pin_type & JTAG_CORE_PIN_IS_OUTPUT) - { - state = jtagcore_get_pin_state(jc, device, i, JTAG_CORE_OUTPUT); - fprintf(f,"print Pin %s state : %d\n",pin_name,state); - fprintf(f,"jtag_set_pin_state %d %s %d\n",device,pin_name,state); - } + // output data + if (pin_type & JTAG_CORE_PIN_IS_OUTPUT) + { + state = jtagcore_get_pin_state(jc, device, i, JTAG_CORE_OUTPUT); + fprintf(f, "print Pin %s state : %d\n", pin_name, state); + fprintf(f, "jtag_set_pin_state %d %s %d\n", device, pin_name, state); + } - // input data - if (pin_type & JTAG_CORE_PIN_IS_INPUT) - { - state = jtagcore_get_pin_state(jc, device, i, JTAG_CORE_INPUT); - fprintf(f,"print Input pin %s state : %d\n",pin_name,state); - } - fprintf(f,"\n"); - } - } + // input data + if (pin_type & JTAG_CORE_PIN_IS_INPUT) + { + state = jtagcore_get_pin_state(jc, device, i, JTAG_CORE_INPUT); + fprintf(f, "print Input pin %s state : %d\n", pin_name, state); + } + fprintf(f, "\n"); + } + } - fprintf(f,"jtag_push_pop\n"); - fprintf(f,"\n"); - } - } + fprintf(f, "jtag_push_pop\n"); + fprintf(f, "\n"); + } + } - fclose(f); - } - return 0; + fclose(f); + } + return 0; } diff --git a/modules/script/script.h b/modules/script/script.h index 25017ca..58e5bf8 100644 --- a/modules/script/script.h +++ b/modules/script/script.h @@ -27,6 +27,23 @@ #include "config/bs_defines.h" +typedef int (* CMD_FUNC)( script_ctx * ctx, char * line); + +typedef struct cmd_list_ +{ + const char * command; + CMD_FUNC func; + const char ** help; +}cmd_list; + +typedef struct label_list_ +{ + char * label; + unsigned int file_offset; +}label_list; + +extern cmd_list script_commands_list[]; + script_ctx *jtagcore_initScript(jtag_core *jc); script_ctx * init_script(void * app_ctx, unsigned int flags, void * env); int execute_file_script( script_ctx * ctx, char * filename );