我对Vivado和VHDL很新,我想就一个基本问题提供一些指导。
我猜我可以创建自己的库并在我的项目中使用它们,就像我使用默认库和基础库一样
例如:
library IEEE;
use IEEE.std_logic_1164.ALL;
use IEEE.std_logic_unsigned.ALL;
现在,通过在网上浏览,我还没有发现任何具体的答案,没有任何直接的方式来添加库" (至少在我的Vivado版本中)。
有没有办法用类型定义构建VHDL代码并在任何你喜欢的文件中使用它们,例如在C中完成?
答案 0 :(得分:5)
因此,库只是处理某些名称冲突的方法。因此,Xilinx(或其他供应商)可以发布新实体,而不会与现有对象发生冲突。你当然可以这样做,但它实际上并没有为你解决任何问题。
相反,您正在寻找的是包。让我们来看看我们将如何使用它:
让我们创建另一个文件tools.vhd
package tools is
type tribool is (true, false, maybe);
end package;
然后我们可以在我们的实体中使用:
use work.tools.all;
...
signal x : tribool := maybe;
答案 1 :(得分:3)
VHDL中的每个文件都驻留在一个库中(在Vivado中,您的设计文件默认位于xil_defaultlib中)。
您可以通过单击文件,然后单击"源文件属性"中的库标签右侧的按钮来创建/更改文件驻留在Vivado中的库。标签。您可以通过将文件分配给不存在的库来创建库。
您经常会看到该库在VHDL中工作。如果我错了,有人会纠正我,但工作不是图书馆而只是指当前的图书馆。因此,如果您在同一个库中有一个包和一个实体,则可以将该包引用为my_library.my_pkg或work.my_pkg。
答案 2 :(得分:2)
如果要处理Vivado之外的库(例如大型仿真模型),可以预编译它们,例如在Questa / Modelsim中:
在vsim或.do文件中:
vlib path / to / MyLib
vmap MyLib路径/到/ MyLib
vcom -93 -work 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