summaryrefslogtreecommitdiffstatshomepage
path: root/src/tools/jedutil.cpp
diff options
context:
space:
mode:
author Kevin Eshbach <keshbach@comcast.net>2022-02-18 22:38:44 -0500
committer GitHub <noreply@github.com>2022-02-18 22:38:44 -0500
commit1bbf1261ea8e4b73b87161643f9298c616c7f466 (patch)
treea57e23f0b068f7460fd7006251700431c8879c59 /src/tools/jedutil.cpp
parent8541608e12421aa720acd9796daf073288ea2d45 (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.cpp54
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;
}