4

我对 Vivado 和 VHDL 很陌生,我想要一些关于基本问题的指导。

我猜我可以创建自己的库并在我的项目中使用它们,就像使用默认库和基本库一样

例如:

library IEEE;
use IEEE.std_logic_1164.ALL;
use IEEE.std_logic_unsigned.ALL;

现在,通过在网上浏览,我没有找到任何具体的答案,没有任何直接的方法可以“添加库”(至少在我的 Vivado 版本中)。

有什么方法可以使用类型定义来构建 VHDL 代码并在您喜欢的任何文件中使用它们,例如在 C 中完成的?

4

3 回答 3

5

所以库只是处理一些名称冲突的一种方法。因此赛灵思(或其他供应商)可以发布一个新实体,而不会使其与您现有的对象发生冲突。您当然也可以这样做,但它实际上并不能为您解决任何问题。

相反,您正在寻找的是一个package。让我们看看我们将如何使用它:

让我们创建另一个文件tools.vhd

package tools is
    type tribool is (true, false, maybe);
end package;

然后我们可以在我们的实体中使用它:

use work.tools.all;
...
signal x : tribool := maybe;
于 2015-03-12T14:55:43.407 回答
3

VHDL 中的每个文件都位于一个库中(在 Vivado 中,您的设计文件默认位于 xil_defaultlib 中)。

您可以通过单击文件,然后单击“源文件属性”选项卡中库标签右侧的按钮来创建/更改文件驻留在 Vivado 中的库。您可以通过将文件分配给不存在的库来创建库。

您经常会看到库在 VHDL 中工作。如果我错了有人会纠正我,但工作不是图书馆,只指当前图书馆。因此,如果您在同一个库中有一个包和一个实体,则可以将该包称为 my_library.my_pkg 或 work.my_pkg。

于 2015-03-12T14:49:48.790 回答
2

如果您想处理 Vivado 之外的库(例如大型仿真模型),您可以预编译它们,例如在 Questa/Modelsim 中:

在 vsim 或 .do 文件中:

vlib path/to/MyLib
vmap MyLib path/to/MyLib
vcom -93 - 完全工作 MyLib/other/path/to/MyLibSource.vhd

现在,Vivado 倾向于覆盖模拟文件夹中的文件,所以不要把它放在那里,除非你想每次都重新编译它。但是,Vivado 应该尊重 modelsim.ini 中的内容。所以补充一下:

MyLib = path/from/vivado/sim/to/Mylib

现在您可以将 MyLib 用作任何其他库:

library MyLib; 
use MyLib.all; 
. . .  
i_MyAwesomeModel : entity MyLib.HalfAdder_Sim 
于 2017-02-24T09:55:30.013 回答