2

我想我的标题说明了一切。我在 Altera FPGA 上的 NIOS2 处理器上运行软件。有什么方法可以检测软件运行在哪个 FPGA 上?

要回答评论中的问题:为什么我关心我在哪个 FPGA 上?对于生产,我们使用带有 EPCS 控制器的设计来对所有内容进行编程。该编程流程对 Quartus 版本不敏感,与使用 Quartus 编程器的 .jic 流程不同。不幸的是,对于新的 EPCQ 器件,您必须使用正确的等待状态和寻址模式正确地对 EPCQ 的非易失性寄存器进行编程,以便正确配置 FPGA。NIOS shell 工具没有能力做到这一点(使用 .jic 流的 Quartus 程序员可以做到),所以我编写了一个小软件来做到这一点。EPCQ 数据表中有一个表格,说明了根据 FPGA 系列和 EPCQ 的大小应该是什么等待状态。EPCQ 的大小我可以问 EPCQ。FPGA家族我不知道该问谁。因此,现在,对于每个项目,我都有其个人软件,其中包含硬编码为 FPGA 类型的数据。我希望软件是通用的,而不是特定于 FPGA 的,因此我需要知道我在哪个 FPGA 上。

4

1 回答 1

2
  • 如果您可以访问 FPGA 的 JTAG 端口,请通过 IDCODE 寄存器提供时钟并对其进行解码。
  • 如果您可以访问 FPGA 比特流文件,(您似乎必须这样做,因为您即将对其进行编程)在稀疏记录的标头中是描述目标设备的字节。解码它们。
  • 由于比特流无论如何都是特定于设备的,因此在将设备类型报告给 NIOS 的固件中公开自定义 NIOS 指令或已知内存位置(通过 Avalon-MM 总线)。

第三个选项的详细信息

您可以在综合时使用 TCL(例如一些 QSYS 魔术)将项目范围的 DEVICE_FAMILY 属性作为参数 ( ) 注入 HDL 模块device_family,然后在生成的逻辑中打开它以输出每个系列的值。

例如,我基于adv_seu_detection_common.vadv_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

于 2015-07-15T17:21:49.290 回答