diff options
author | 2022-02-20 09:21:49 +1100 | |
---|---|---|
committer | 2022-02-20 09:21:49 +1100 | |
commit | 2fff7cffb6a8932f149bca19d1ae69987fc5aa97 (patch) | |
tree | 84a2f06a42dd35cadfc7b1686e2a4ddf27967d9c /src/tools/jedutil.cpp | |
parent | bb2d836a1ac3039a28c09ce3e96f99d9a07cff78 (diff) | |
parent | cb7766717192c0f5eb4dfe5ecda7fac7e355c85b (diff) |
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'src/tools/jedutil.cpp')
-rw-r--r-- | src/tools/jedutil.cpp | 54 |
1 files changed, 33 insertions, 21 deletions
diff --git a/src/tools/jedutil.cpp b/src/tools/jedutil.cpp index a4ea6b57cfb..73e190e3f0e 100644 --- a/src/tools/jedutil.cpp +++ b/src/tools/jedutil.cpp @@ -5270,22 +5270,46 @@ static void config_gal16v8_pins(const pal_data* pal, const jed_data* jed) for (index = 0; index < std::size(macrocells); ++index) { - if (jed_get_fuse(jed, macrocells[index].ac1_fuse)) + if (macrocells[index].pin != 15 && macrocells[index].pin != 16) { - /* Pin is for input only */ - - input_pins_combinatorialsimple[input_pin_count] = macrocells[index].pin; + if (jed_get_fuse(jed, macrocells[index].ac1_fuse)) + { + /* Pin is for input only */ - ++input_pin_count; + input_pins_combinatorialsimple[input_pin_count] = macrocells[index].pin; - if (macrocells[index].pin == 15 || macrocells[index].pin == 16) + ++input_pin_count; + } + else { - fprintf(stderr, "Pin %d cannot be configured as an input pin.\n", - macrocells[index].pin); + output_pins[output_pin_count].pin = macrocells[index].pin; + output_pins[output_pin_count].flags = OUTPUT_COMBINATORIAL; + + if (jed_get_fuse(jed, macrocells[index].xor_fuse)) + { + output_pins[output_pin_count].flags |= OUTPUT_ACTIVEHIGH; + } + else + { + output_pins[output_pin_count].flags |= OUTPUT_ACTIVELOW; + } + + output_pins[output_pin_count].flags |= OUTPUT_FEEDBACK_OUTPUT; + + input_pins_combinatorialsimple[input_pin_count] = macrocells[index].pin; + + ++input_pin_count; + + ++output_pin_count; } } else { + /* For pins 15 and 16 ignore the value of the ac1_fuse (This + normally determine if the pin is an input or output.) because + according to the datasheet these macrocells are output + only when in simple mode. */ + output_pins[output_pin_count].pin = macrocells[index].pin; output_pins[output_pin_count].flags = OUTPUT_COMBINATORIAL; @@ -5298,19 +5322,7 @@ static void config_gal16v8_pins(const pal_data* pal, const jed_data* jed) output_pins[output_pin_count].flags |= OUTPUT_ACTIVELOW; } - if (output_pins[output_pin_count].pin != 15 && - output_pins[output_pin_count].pin != 16) - { - output_pins[output_pin_count].flags |= OUTPUT_FEEDBACK_OUTPUT; - - input_pins_combinatorialsimple[input_pin_count] = macrocells[index].pin; - - ++input_pin_count; - } - else - { - output_pins[output_pin_count].flags |= OUTPUT_FEEDBACK_NONE; - } + output_pins[output_pin_count].flags |= OUTPUT_FEEDBACK_NONE; ++output_pin_count; } |