1

我在 Linux 上,我正在使用questasim 2012.2b. 我用VHDL写了以下内容:

dsp: entity work.dsp_c -- a*b+c, 12bit
port map 
(
    clk         => clk_i,
    a           => a_dsp,   
    b           => b_dsp,
    c           => c_dsp,
    p           => p_dsp  -- full precision 
);

每次我尝试用 questasim 模拟上述内容时,它都会在编译时抛出一个错误:

# Error in macro ./mkProject.tcl line 11
# /software/CAD/Mentor/2013_2014/Questa/HDS_2012.2b/questasim/linux_x86_64/vcom failed.
#     while executing
# "vcom hdl/calc.vhd"
#  quit

# ** Error: Library xbip_dsp48_macro_v3_0 not found.
# ** Error: Unknown identifier "xbip_dsp48_macro_v3_0".
# ** Error: VHDL Compiler exiting

它指的是上面失败的代码。

在翻找时,我确实找到了一个名为 : 的文件dsp_c.vhd,它看起来像是该.xci文件的模拟包装器。

然后我尝试找到该库,我找到了一个文件夹xbip_dsp48_macro_v3_0,里面有两个文件:xbip_dsp48_macro_v3_0.vhd xbip_dsp48_macro_v3_0_vh_rfs.vhd

所以我也将那些包含在项目中,它给了我错误:

xbip_dsp48_macro_v3_0.vhd(46)): in protected region

知道可能出了什么问题或我可能需要包括什么吗?我的questasim可能太旧了吗?

更多信息

尝试通过 tcl 以这种方式获取编译文件:

compile_simlib -simulator questa

生成所有 IP 及其相应编译块的文件夹。现在我虽然最初可以添加到.dep:

src ../cgn/dsp_c/dsp_c.vhd

我在运行 make project 时得到了这个:

dsp_c/dsp_c.vhd(56): Library xbip_dsp48_macro_v3_0 not found.

所以我尝试包括库:

src ../cgn/dsp_c/xbip_dsp48_macro_v3_0/hdl/xbip_dsp48_macro_v3_0_vh_rfs.vhd
src ../cgn/dsp_c/xbip_dsp48_macro_v3_0/hdl/xbip_dsp48_macro_v3_0.vhd

说它受到保护:

dsp_c/xbip_dsp48_macro_v3_0/hdl/xbip_dsp48_macro_v3_0.vhd(46)): in protected region.

更多更多信息

我让 vivado 生成位于文件夹 dsp_c 中的库:

dsp_c.dcp   dsp_c_funcsim.vhdl  dsp_c_stub.v     dsp_c.xci  synth   xbip_dsp48_wrapper_v3_0  xbip_utils_v3_0
dsp_c_funcsim.v  dsp_c_ooc.xdc      dsp_c_stub.vhdl  dsp_c.xml  xbip_dsp48_macro_v3_0   xbip_pipe_v3_0

我的 tcl 脚本如下所示:

source firmware/cfg/lib_mappings.tcl

vlib work
vcom firmware/hdl/mydsp_c.vhd

结果

修改为:

vlib work
vlib dsp_c/xbip_dsp48_macro_v3_0
vmap dsp_c/xbip_dsp48_macro_v3_0

然后跑了...

# do mkProject.tcl 
# Modifying modelsim.ini
# ** Warning: (vlib-34) Library already exists at "work".
# ** Warning: (vlib-34) Library already exists at "dsp_c/xbip_dsp48_macro_v3_0".
# Reading modelsim.ini
# "dsp_c/xbip_dsp48_macro_v3_0" maps to directory ./dsp_c/xbip_dsp48_macro_v3_0. (Default mapping)

..........

# -- Loading package NUMERIC_STD
# ** Error: firmware/cgn/dsp_c/dsp_c.vhd(56): Library xbip_dsp48_macro_v3_0 not found.
# ** Error: firmware/cgn/dsp_c/dsp_c.vhd(57): (vcom-1136) Unknown identifier "xbip_dsp48_macro_v3_0".
# ** Error: firmware/cgn/dsp_c/dsp_c.vhd(59): VHDL Compiler exiting
# ** Error: vcom failed.
4

1 回答 1

3

xci 文件是 Xilinx 特定的 IP 描述文件,不会被任何模拟器识别。为了能够对 xci 文件描述的 IP 进行行为仿真,必须首先生成仿真模型。仿真模型将包含许多 VHDL 文件,这些文件必须编译到特定的库中。

对于 ISE/Coregen,过去只有一个为 IP 生成的 VHDL 文件,并且 IP 仅依赖于预编译的 XilinxCoreLib 库。然而,对于 Vivado,不再有 XilinxCoreLib 库,每次生成特定 IP 的仿真模型时,每个依赖项也会生成到同一个文件夹中。

可以使用 Vivado TCL 脚本生成仿真模型和相关文件和库列表以进行编译:https ://github.com/LarsAsplund/vunit/blob/master/examples/vhdl/vivado/tcl/extract_compile_order.tcl

上述 TCL 脚本是VUnit VHDL 测试工具附带的示例的一部分,该工具演示了如何自动生成 Vivado IP 的模型和仿真。和变量是从命令行设置到脚本的,因为完整的示例通过 Python 调用脚本,但可以用硬编码值替换。输出是一个文本文件,其中包含所有文件的 LIBRARY、FILE_NAME,按需要编译的顺序排列。在我之前的项目中,我使用这种方法来生成和编译整个 Vivado 项目的行为模型。projectoutput_file

于 2015-07-11T14:54:43.050 回答