diff options
author | 2022-02-18 22:38:44 -0500 | |
---|---|---|
committer | 2022-02-18 22:38:44 -0500 | |
commit | 1bbf1261ea8e4b73b87161643f9298c616c7f466 (patch) | |
tree | a57e23f0b068f7460fd7006251700431c8879c59 /src/tools/jedutil.cpp | |
parent | 8541608e12421aa720acd9796daf073288ea2d45 (diff) |
Bug fix for when viewing the logic equations of the GAL16V8 device with jedutil (#9315)
* Fixed the viewing of a GAL16V8 device when in simple mode and pins 15 or 16 have no product terms.
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; } |