FPGA Intellectual Property
PCI Express*, Networking and Connectivity, Memory Interfaces, DSP IP, and Video IP
6659 토론

programmatic generation of FP_FUNCTIONS IP in QSYS component _hw.tcl script

timeportal
초보자
398 조회수

 

I am attempting programmatic generation of an FP_FUNCTIONS IP from within a QSYS component _hw.tcl script. I am doing this because the legacy Altera FP IP supported VHDL generics based parameterized instantiation, but the new FP_FUNCTIONS IP has omitted that feature.

 

Unfortunately I see some "unattainable latency" related error messages despite setting a proper and appropriate latency for the device of 5 when I run QSYS generate. Looking in the log file for the IP generate it appears that the root problem is that the "target" command line flag to cmdPolyEval.sh is being passed an empty string inconsistent with my "Arria 10" DEVICE_FAMILY QSYS system, Quartus Project, and qsys-generate explicit setting? Does anyone have any suggestions on how to fix this type of problem?

 

Here is the command line error from qsys-generate.

(/ZZZZ/fpga/altera/pro_22.4/quartus/sopc_builder/bin/qsys-generate ../../../top/ioc/YYYY.qsys --search-path="../../../pins, ../../../top, ../../../top/ioc, .., $" --family="Arria 10" --part=10AX066K4F40E3SG --synthesis=VHDL --clear-output-directory --jvm-max-heap-size=32g --quartus-project=FCM2_805 --rev=XXXX || echo "cmd-fail-status" $? || rm YYYY) |& perl ../../../../../../../build-sys/filter_quartus.pl qsysgen YYYY_qsys_gen_failed.log 

2025.04.01.10:18:07 Error: fixedToFloat: Could not achieve the requested latency at any frequency.
2025.04.01.10:18:07 Error: fixedToFloat: Cannot generate for specified latency
2025.04.01.10:18:07 Error: Generation failed with exit code 1: 2 Errors, 0 Warnings

In the IP generation log file.

Info: fcm2_ctrl_FloatConverter_0: "Generating: fixedToFloat"
Info: fcm2_ctrl_FloatConverter_0: "Generating: YYYY_FloatConverter_0_altera_fp_functions_1914_dr7scby"
Info: fixedToFloat: /ZZZ/fpga/altera/pro_22.4/ip/altera/dsp/altera_fp_functions/source//cmdPolyEval.sh /ZZZ/fpga/altera/pro_22.4/quartus/dspba/backend/linux64 -target {} -frequency 400 -name none -noChanValid -enable -enableHardFP 1 -printMachineReadable -noFileGenerate FXPToFP 16 0 1 8 23
Info: fixedToFloat: /ZZZ/fpga/altera/pro_22.4/ip/altera/dsp/altera_fp_functions/source//cmdPolyEval.sh /ZZZ/fpga/altera/pro_22.4/quartus/dspba/backend/linux64 -target {} -frequency 200 -name none -noChanValid -enable -enableHardFP 1 -printMachineReadable -noFileGenerate FXPToFP 16 0 1 8 23
Info: fixedToFloat: /ZZZ/fpga/altera/pro_22.4/ip/altera/dsp/altera_fp_functions/source//cmdPolyEval.sh /ZZZ/fpga/altera/pro_22.4/quartus/dspba/backend/linux64 -target {} -frequency 100 -name none -noChanValid -enable -enableHardFP 1 -printMachineReadable -noFileGenerate FXPToFP 16 0 1 8 23
Info: fixedToFloat: /ZZZ/fpga/altera/pro_22.4/ip/altera/dsp/altera_fp_functions/source//cmdPolyEval.sh /ZZZ/fpga/altera/pro_22.4/quartus/dspba/backend/linux64 -target {} -frequency 50 -name none -noChanValid -enable -enableHardFP 1 -printMachineReadable -noFileGenerate FXPToFP 16 0 1 8 23
Info: fixedToFloat: /ZZZ/fpga/altera/pro_22.4/ip/altera/dsp/altera_fp_functions/source//cmdPolyEval.sh /ZZZ/fpga/altera/pro_22.4/quartus/dspba/backend/linux64 -target {} -frequency 25 -name none -noChanValid -enable -enableHardFP 1 -printMachineReadable -noFileGenerate FXPToFP 16 0 1 8 23
Info: fixedToFloat: /ZZZ/fpga/altera/pro_22.4/ip/altera/dsp/altera_fp_functions/source//cmdPolyEval.sh /ZZZ/fpga/altera/pro_22.4/quartus/dspba/backend/linux64 -target {} -frequency 12 -name none -noChanValid -enable -enableHardFP 1 -printMachineReadable -noFileGenerate FXPToFP 16 0 1 8 23
Info: fixedToFloat: /ZZZ/fpga/altera/pro_22.4/ip/altera/dsp/altera_fp_functions/source//cmdPolyEval.sh /ZZZ/fpga/altera/pro_22.4/quartus/dspba/backend/linux64 -target {} -frequency 5 -name none -noChanValid -enable -enableHardFP 1 -printMachineReadable -noFileGenerate FXPToFP 16 0 1 8 23
Info: fixedToFloat: /ZZZ/fpga/altera/pro_22.4/ip/altera/dsp/altera_fp_functions/source//cmdPolyEval.sh /ZZZ/fpga/altera/pro_22.4/quartus/dspba/backend/linux64 -target {} -frequency 1 -name none -noChanValid -enable -enableHardFP 1 -printMachineReadable -noFileGenerate FXPToFP 16 0 1 8 23
Error: fixedToFloat: Could not achieve the requested latency at any frequency.
Error: fixedToFloat: Cannot generate for specified latency

 In my INSTANTIATE_IN_SYSTEM_MODULE set true mode TCL script elaborate callback.

#
# Add Altera fp functions IP configured to convert from fixedpoint
# to floating point
#
add_hdl_instance fixedToFloat altera_fp_functions 19.1.4
set_instance_parameter_value fixedToFloat {FUNCTION_FAMILY} {CONVERT}
set_instance_parameter_value fixedToFloat {CONVERT_function} {FXP_FP}
set_instance_parameter_value fixedToFloat {enable_hard_fp} {1}
set_instance_parameter_value fixedToFloat {faithful_rounding} {0}
set_instance_parameter_value fixedToFloat {forceRegisters} {1111}
# add clock enable signal
set_instance_parameter_value fixedToFloat {gen_enable} {1}
set_instance_parameter_value fixedToFloat {manual_dsp_planning} {1}
set_instance_parameter_value fixedToFloat {rounding_mode} {nearest with tie breaking away from zero}
set_instance_parameter_value fixedToFloat {performance_goal} {latency}
set_instance_parameter_value fixedToFloat {report_resources_to_xml} {0}
set latencyTarget [ get_parameter_value LATENCY_TARGET ]
set floatFormat [ get_parameter_value FLOAT_FORMAT ]
set_instance_parameter_value fixedToFloat {latency_target} $latencyTarget
set_instance_parameter_value fixedToFloat {fp_format} $floatFormat
set_instance_parameter_value fixedToFloat {fp_out_format} $floatFormat
set_instance_parameter_value fixedToFloat {scale_by_pi} {0}
if { $floatFormat == {single} } {
set_instance_parameter_value fixedToFloat {fp_exp} {8}
set_instance_parameter_value fixedToFloat {fp_out_exp} 8
set_instance_parameter_value fixedToFloat {fp_man} {23}
set_instance_parameter_value fixedToFloat {fp_out_man} 23
} else {
set_instance_parameter_value fixedToFloat {fp_exp} {11}
set_instance_parameter_value fixedToFloat {fp_out_exp} 11
set_instance_parameter_value fixedToFloat {fp_man} {52}
set_instance_parameter_value fixedToFloat {fp_out_man} 52
}
set_instance_parameter_value fixedToFloat {fxpt_sign} $fixedFormat
set_instance_parameter_value fixedToFloat {fxpt_width} $symSize
set_instance_parameter_value fixedToFloat {fxpt_fraction} $fracSize
set fpExpSize [ get_instance_parameter fixedToFloat {fp_out_exp} ]
set fpMantize [ get_instance_parameter fixedToFloat {fp_out_man} ]
set fpSymbolSize [ expr "$fpExpSize + $fpMantize + 1" ]
set_parameter_value FLOAT_SYMBOL_SIZE $fpSymbolSize
add_interface_port avs_src AS_SRC_DATA data Output $fpSymbolSize

# not certain if these are required and or differ from a default
set_instance_parameter_value fixedToFloat {ALL_function} {ADD}
set_instance_parameter_value fixedToFloat {ARITH_function} {ADD}
set_instance_parameter_value fixedToFloat {COMPARE_function} {MIN}
set_instance_parameter_value fixedToFloat {EXP_LOG_function} {EXPE}
set_instance_parameter_value fixedToFloat {ROOTS_function} {SQRT}
set_instance_parameter_value fixedToFloat {TRIG_function} {SIN}
set_instance_parameter_value fixedToFloat {divide_type} {0}
set_instance_parameter_value fixedToFloat {exponent_width} {23}
set_instance_parameter_value fixedToFloat {fp_in_exp} {8}
set_instance_parameter_value fixedToFloat {fp_in_format} {single}
set_instance_parameter_value fixedToFloat {fp_in_man} {23}
set_instance_parameter_value fixedToFloat {frequency_target} {200}
set_instance_parameter_value fixedToFloat {trig_no_range_reduction} {0}
set_instance_parameter_value fixedToFloat {number_of_inputs} {2}
set_instance_parameter_value fixedToFloat {select_signal_enable} {0} 

 

레이블 (1)
0 포인트
2 응답
ShengN_Intel
직원
390 조회수

Hi,

 

For Arria 10, the minimum latency for altera_fp_functions is 3 cycles check screenshot attached. Latency less than 3 will get error.

 

Thanks,

Regards,

Sheng

 

0 포인트
timeportal
초보자
314 조회수

I fixed my issue by adding some TCL code like as follows. Some of the details are not particularly well documented so I have to dig around looking in the Altera provided IP to solve this type of issue.

 

set deviceFamily [ get_parameter_value DEVICE_FAMILY ]
set_instance_system_info_value $inst {DEVICE_FAMILY} "" $deviceFamily

 

0 포인트
응답