由于在浮点硬件 2 组件的所有版本中都要求使用 RAM 预填充的查找 ROM/RAM 表,浮点平方根的Nios® II自定义指令将在使用 RAM 预初始化配置模式(包括“双压缩映像”、“单压映像”和“单无压缩图像”)的设计英特尔® MAX® 10 FPGA设计中失败。
在这些模式下,闪存不够大,无法支持 RAM 的预初始化,因此 sqrt 指令将会失败。如果 FPCI2 由于 英特尔 MAX 10 FPGA 或其他原因的配置模式设置,Quartus® II 软件版本 15.1 及更早的版本可能会提供编译错误。
错误 (16031):当前内部配置模式不支持内存初始化或 ROM。选择具有 ERAM 的内部配置模式。
要在 Quartus® II 软件 15.0 版及更早版本中解决此问题,请按照以下步骤操作:
- 前往 fpoint2_multi_datapath.vhd ,并 评论 FPSqrt 实例化(168 至 174 行)。
sqrt:FPSqrt 端口地图 (
x => dataa,
r => fsqrts,
clk => clk、
reset_req => reset_req,
areset =>重置
);
- 使用 Quartus II 软件重新编译设计。
- 转到位于 bsp HAL文件夹中的 altera_nios_custom_instr_floating_point_2.c。在 C 代码中包含“altera_nios_custom_instr_floating_point_2.h”之后,添加“#undef sqrtf”,以禁用软件对 sqrtf 自定义指令的使用。
代码:
#include“altera_nios_custom_instr_floating_point_2.h”
#undef sqrtf
- 通过这些更改,重新构建所有应用程序软件和库。
要解决 Quartus® II 软件 15.0 版及更高版本中的这一问题,请按照以下步骤操作:
- 使用复选框从 Platform Designer GUI 中的 FPH2 中删除 sqrt 自定义指令。
Quartus® II 软件 v16.0 解决了此问题。