Knowledge Base Article

Why does an internal error occur when using the Fast Register assignment on bidirectional pins of Intel Agilex® 7 FPGA?

Description

Due to a problem in the Intel® Quartus® Prime Pro Edition Software version 21.3 and prior, you might observe an internal error when using bidirectional pins with Fast Input Register, Fast Output Register, or Fast Output Enable Register assignment. If any of the fast registers is enabled, you are required to enable all of them.

 

An example of a failing case:

The input register is assigned to Fast Input Register, but OE/Output registers are not assigned as Fast OE Register and Fast Output Register. The following internal error message is generated:

 

Internal Error: Sub-system: U2B2_GENERIC, File: /quartus/db/u2b2_generic/u2b2_generic_translator.cpp, Line: 353

Could not find a solution for pio_1_1

Rule: fmgpio_reg::io_gpio_reg_rule @ pio_1_1.x0.fmio96_core_inst.fmio48tile_bot.x3.u1_0.x0.ioereg_top_5_.gpio_wrapper_0.gpio_reg pio_1_1.x0.fmio96_core_inst.fmio48tile_bot.x3.u1_0.x0.ioereg_top_5_.gpio_wrapper_0.gpio_reg.mode != BIDIR_MODE || pio_1_1.x0.fmio96_core_inst.fmio48tile_bot.x3.u1_0.x0.ioereg_top_5_.gpio_wrapper_0.gpio_reg.xio_gpio_ireg.mode != REG_MODE || pio_1_1.x0.fmio96_core_inst.fmio48tile_bot.x3.u1_0.x0.ioereg_top_5_.gpio_wrapper_0.gpio_reg.xio_gpio_oreg.mode inside {DDR_MODE_FR,SDR_MODE}

Input variables and their values:

pio_1_1.x0.fmio96_core_inst.fmio48tile_bot.x3.u1_0.x0.ioereg_top_5_.gpio_wrapper_0.gpio_reg.xio_gpio_ireg.mode == REG_MODE

pio_1_1.x0.fmio96_core_inst.fmio48tile_bot.x3.u1_0.x0.ioereg_top_5_.gpio_wrapper_0.gpio_reg.xio_gpio_oreg.mode == COMBI_MODE

pio_1_1.x0.fmio96_core_inst.fmio48tile_bot.x3.u1_0.x0.ioereg_top_5_.gpio_wrapper_0.gpio_reg.mode == BIDIR_MODE

 

Resolution

Option 1:

Do not set any of the registers to Fast * Register.

 

Option 2:

Assign all Input/OE/Output to Fast * Register. For example, add the following lines in the .qsf file:

Input register packing: set_instance_assignment -name FAST_INPUT_REGISTER ON -to <path to register>

Output register packing: set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to <path to register>

Output enable register packing: set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to <path to register>

 

Option 3:

Use the following assignment to pack all the registers. Add the following line to the .qsf file:

set_global_assignment -name OPTIMIZE_IOC_REGISTER_PLACEMENT_FOR_TIMING “PACK ALL IO REGISTERS”

 

This is already fixed in Intel® Quartus® Prime Pro Edition Software version 21.3.

Updated 3 months ago
Version 2.0
No CommentsBe the first to comment