13.2 EDK  – 如何在XPS中链接用户VHDL / Verilog库?-Xilinx-AMD社区-FPGA CPLD-ChipDebug

13.2 EDK – 如何在XPS中链接用户VHDL / Verilog库?

描述

我使用XPS创建了AXI外设。

我需要从外设中提取常量,例如位定义。

我在ISE中创建了一个用户VHDL库,并将’library’和’use’指令添加到外设VHDL代码中。

iSIM能够使用新库,并正确仿真。

如何创建自定义VHDL库并在XPS中的外围器件之间共享,以及在ISE中为iSIM测试平台使用相同的库?

您需要使用以下用户指南中的PAO文件(第4章) http://www.xilinx.com/support/documentation/sw_manuals/xilinx12_3/psf_rm.pdf

VHDL库可用于在Xilinx MicroBlaze FGPA实现中的XPS外设之间共享数据。相同的库也可以与各个外围器件的测试平台一起使用。

实现中有许多文件和目录,即使是经验丰富的VHDL开发人员,找到创建和配置库的正确位置也是非常耗时的。

本文档介绍了一个可用于创建共享库的过程,该库可在XPS和ISE中用于综合和仿真。


我们将使用“常量”包的创建作为示例,该包将放置在可由所有项目外围器件访问的库中,以及它们相关的测试平台。


1.确定共享库的放置位置。

– 如果库只是在作为一个处理器项目的一部分的外围器件之间共享,则最好使用相对于每个外围器件的路径,但对所有处理器项目外围器件都是通用的。

一个位置是pcores目录,因为这是项目中所有外围器件共有的第一个目录。

– 如果库在处理器项目外共享,则可以从文件系统中选择绝对位置。与将共享库复制到每个项目并将其用作相对路径相比,这可能不太便携。

本文档假定将使用相对路径,库位置在pcores中手动创建的’shared_libraries’子目录中,因此在pcores中创建’shared_libraries’子目录。


2.在XPS中正常创建外设,确保XPS创建标准VHDL模板。


3.创建后,打开ISE实例,打开与外围器件关联的ISE项目。

ISE项目文件将位于pcores / <peripheral_name> / devl / projnav。它有’.xise’扩展名。


4.创建VHDL包(假设它尚不存在)。

右键单击设计窗格并选择New source,然后选择VHDL Package,并将其命名为’constants’。

应选择“添加到项目”框。

默认情况下,新的包文件将位于devl / projnav / constants.vhd。

这不是共享包的好位置,因此手动将文件移动到所需的共享位置,在这种情况下,它将被移动到pcores / shared_libraries / constants.vhd。

现在可以从原始devl / projnav目录中删除它。


5.打开pco​​res / shared_libraries / constants.vhd文件,然后按文件中的描述添加常量。

在这个例子中,我们按照模板中的注释的指示将以下行插入’package constants is’区域:

常量TEST_CONSTANT_LIBRARY:integer:= 16;

此包文件现在可以关闭,我们将在外设和外设使用的测试平台中引用新常量。


6.打开user_logic.vhdl文件,然后添加所需的库子句。

这些条款通常位于文件的顶部,紧邻“LIBRARY ieee”条款和随后的相关“USE”条款。

假设库和包名称如上所述,则子句将为:

LIBRARY shared_libraries;
使用shared_libraries.constants.all;

常量可以在文件中使用。在这个例子中,我们只想表明常量是可访问的,因此我们将用它来选择典型外设回读寄存器中的一个位。

这里给出了一个示例用法,其中常量用于在读取从寄存器0时从从寄存器1中选择一个位:

SLAVE_REG_READ_PROC:进程(slv_reg_read_sel,slv_reg0,slv_reg1,slv_reg2,slv_dac_data)是
开始

case slv_reg_read_sel是
当“100”=> slv_ip2bus_data <= slv_reg1(TEST_CONSTANT_LIBRARY)&slv_reg0(30 downto 0)时;

除非共享库正常工作,否则此代码既不会综合也不会仿真,因此这将是我们的测试。


7.在外围项目中,单击“库”选项卡。

在列表中单击鼠标右键,然后选择“新建VHDL库…”,并输入shared_libraries作为名称。

使用位置条目右侧的按钮浏览到先前创建的pcores / shared_libraries目录,然后选择“确定”,然后再次单击“确定”。

将自动弹出“添加源文件”对话框,并询问您是否要将该位置中的包添加到项目中。

在此示例中,只显示了一个条目,即“constants.vhd”。

如果文件仅用于仿真,或仅用于综合,我们可以限制关联,但在此示例中,我们故意要为两者使用相同的包。

选择确定。现在,在外围器件的ISE“库”选项卡中,您将看到列出的库“shared_libraries”,它下面将有一个包“constants.vhd”。

它可能显示为没有路径,因此右键单击该条目,选择“文件路径显示”,然后选择“相对路径”。

该条目现在将显示为.. \ .. \ .. \ shared_libraries \ _ constants.vhd。


8.现在可以访问外围器件库了。

假设您已经创建了一个带有user_logic的测试平台,您现在应该能够在ISE中选择Design选项卡,然后单击测试平台,并在下面的Processes中双击Behavioral Check Syntax。

在控制台窗口中,您应该看到一个类似于’解析VHDL文件的条目… shared_libraries / constants …

注意:如果以前没有为XPS外围器件创建测试平台,则可能不知道需要在testbench文件中包含外围器件所需的库。

这些文件在典型的ISE项目中都在库“工作”中,但默认情况下它们位于外设的单独库中。

在ISE的“库”选项卡上,您将看到一个与您创建的外围器件同名的库,包括版本号和字母。

通常,库中显示两个包,<peripheral_name> .vhd和user_logic.vhd。

这些是实现外设逻辑的实际文件,因此您需要在测试平台中添加对它们的引用,因为默认情况下,测试平台仅查找“工作”。

需要添加到测试平台的子句与这些子句类似,具体取决于您的外围器件名称:

LIBRARY sqbd_mdac_a_v1_00_a;
使用sqbd_mdac_a_v1_00_a.all;


9.通过双击“仿真行为模型”确认ISIM能够使用共享库。不应该有任何与丢失的库或未解析的常量引用相关的错误。

请注意,常量文件也可以在测试平台本身中使用,包括与逻辑中相同的行,在此示例中:

LIBRARY shared_libraries;
使用shared_libraries.constants.all;


10.外围项目现在识别新库,并可以访问常量。但是,如果关闭外围项目并在ISE中打开整个项目,则综合将因库错误而失败。

同样,如果你进入XPS并尝试生成网表(无论如何都会调用pl​​atgen),它也会失败。这是因为XPS处理器项目不会自动从外设中获取库引用 – 必须手动将所需的库引用添加到PAO(外设分析顺序)文件中。

每个外围器件都有一个PAO文件,它位于<peripheral_name> / data目录中。它被命名为<peripheral_name).pao(在这两种情况下,<peripheral_name>都包含完整版本号,而不仅仅是您提供的名称,因此如果您创建另一个版本,则必须手动重新编辑PAO文件。)

需要添加的行(’shared_libraries’)的示例如下所示。显示的其他条目类似于创建和导入外围器件(CIP)向导中已存在的默认条目。由于此文件确定了分析的顺序,因此文件中的位置通常很重要。在常见的情况下,例如不依赖于任何其他文件的常量,新文件将需要是列表中的第一个文件(或者至少在需要它们的文件之前):

lib shared_libraries ../../../shared_libraries/constants.vhd

#共享常量的新行,首先放在文件中
#剩余的自动生成的行跟随并保持不变:
lib proc_common_v3_00_a all
lib axi_lite_ipif_v1_01_a all
lib sqbd_mdac_a_v1_00_a user_logic vhdl
lib sqbd_mdac_a_v1_00_a sqbd_mdac_a vhdl






11.该项目现在应该通过综合ISE中的顶部或使用XPS中的Generate Netlist进行综合。


请登录后发表评论

    没有回复内容