- 如果您可以访问 FPGA 的 JTAG 端口,请通过 IDCODE 寄存器提供时钟并对其进行解码。
- 如果您可以访问 FPGA 比特流文件,(您似乎必须这样做,因为您即将对其进行编程)在稀疏记录的标头中是描述目标设备的字节。解码它们。
- 由于比特流无论如何都是特定于设备的,因此在将设备类型报告给 NIOS 的固件中公开自定义 NIOS 指令或已知内存位置(通过 Avalon-MM 总线)。
第三个选项的详细信息
您可以在综合时使用 TCL(例如一些 QSYS 魔术)将项目范围的 DEVICE_FAMILY 属性作为参数 ( ) 注入 HDL 模块device_family
,然后在生成的逻辑中打开它以输出每个系列的值。
例如,我基于adv_seu_detection_common.v
和adv_seu_detection_core_hw.tcl
(在 Quartus ip 目录中找到它们):
module crcblock_atom ( regout );
parameter device_family = "Stratix III";
output wire [7:0] regout;
generate
if ( (device_family == "Stratix III") ||
(device_family == "Arria II GZ") ||
(device_family == "Stratix IV") ) begin: generate_crcblock_atom1
assign regout = 1;
end
else if ( (device_family == "Arria V") ||
(device_family == "Cyclone V") ) begin: generate_crcblock_atom2
assign regout = 2;
end
else begin: generate_crcblock_atom
assign regout = 3;
end
endgenerate
endmodule
然后,您需要device_family
适当地设置参数。您可以通过使用以下部分未记录的代码在 ip-core 包装器中执行此操作,该代码xxxxx_hw.tcl
使参数隐藏并从项目设置中自动填充它:
# | device_family
add_parameter device_family STRING
set_parameter_property device_family VISIBLE false
set_parameter_property device_family SYSTEM_INFO {DEVICE_FAMILY}
set_parameter_property device_family HDL_PARAMETER true
set_parameter_property device_family AFFECTS_GENERATION true
您仍然必须将其包装为自定义 NIOS 指令,或使其看起来像 Avalon-MM rom,但您明白了。
一旦您在 QSYS 系统中为每个项目连接并重新构建它们,它就会按照您的要求进行操作。不过还是很丑。
有关此问题的另一种处理方法,请参见http://www.alteraforum.com/forum/archive/index.php/t-33948.html