使用 GHDL 使用 COE 文件模拟 Xilinx FIR 编译器

Simulate Xilinx FIR compiler with a COE file using GHDL

在我能找到的任何论坛上似乎都没有人问过这两个问题,我也找不到如何使用 GHDL 文档来做到这一点。显然我没有足够的声誉在 SuperUser 上问 GHDL 问题(他们没有标签),所以我必须在这里问。

我正在尝试模拟一个 DSP 核心,它包含几个自己编写的 vhdl 核心以及一些使用 GHDL 的 Xilinx coregen 核心。我必须承认,我对 GHDL 相当陌生,但对 VHDL 并不陌生。我知道所讨论的核心和测试平台的逻辑是合理的,因为它使用 ISim 模拟得很好。但是该程序有其局限性,这就是我想尝试 GHDL 的原因。

但是,由于缺少 Filter 文件,GHDL 在模拟 Xilinx FIR 编译器时似乎会退缩。

我正在使用下面的 Makefile 片段设置我的模拟环境

#GHDL CONFIG
GHDL_CMD    = ghdl
GHDL_FLAGS  = --ieee=synopsys --warn-no-binding

# vhdl filebase
SRCBASE  = ../../../source
ISEBASE  = /opt/Xilinx/14.7/ISE_DS/ISE/vhdl/src

####################
# import all the necessary source files 

# first the external libraries
$(GHDL_CMD) -i $(GHDL_FLAGS)                   --work=unisim        $(ISEBASE)/unisims/{,primitive/}*.vhd
$(GHDL_CMD) -i $(GHDL_FLAGS)                   --work=ieee_proposed $(ISEBASE)/ieee_proposed/*.vhd
$(GHDL_CMD) -i $(GHDL_FLAGS) --warn-no-library --work=xilinxcorelib $(ISEBASE)/XilinxCoreLib/*.vhd

# then the components roughly in the right order
# (the order actually does not matter, since the analysis step generates the correct order)
mkdir work
$(GHDL_CMD) -i $(GHDL_FLAGS) --work=work $(SRCBASE)/coregen/*.vhd
$(GHDL_CMD) -i $(GHDL_FLAGS) --work=work $(SRCBASE)/pcie/pkg_types.vhd  
$(GHDL_CMD) -i $(GHDL_FLAGS) --work=work $(SRCBASE)/DSP/*.vhd
#finally the main testbench (could be merged with the above)
$(GHDL_CMD) -i $(GHDL_FLAGS) dsptop_tb.vhd

########################
# create the Make file (the binding warning is disabled due to the many generates in the xilinx core libraries)
# also analyzes the design and generates the correct hierarchy strcture
$(GHDL_CMD) -m $(GHDL_FLAGS) -fexplicit --work=work dsp_top_tb

# run the stuff
$(GHDL_CMD) -r $(GHDL_FLAGS) -fexplicit --work=work dsp_top_tb

从导入语句中可以看出,我的源文件实际上位于不同的目录中,但这不会影响 GHDL。

到最后一条语句为止,一切运行都很好。但是,在 运行 执行最后一个命令时,我收到一个错误:

endfile with a non-opened file

from: xilinxcorelib.fir_compiler_v6_3(behavioral).fn_read_mif_file at fir_compiler_v6_3.vhd:1648

ghdl:error: error during elaboration

我认为问题在于我的 FIR 编译器是使用 Xilinx FIR 编译器生成的,并使用 COE 文件来指定滤波器系数。发生错误的行实际上打开了指定滤波器系数的文件。在 coregen 生成的 VHDL 文件中,它在此处指定

-- Configuration specification
  FOR ALL : wrapped_decimator_7fold USE ENTITY XilinxCoreLib.fir_compiler_v6_3(behavioral)
    GENERIC MAP (
      c_coef_file => "decimator_7fold.mif", -- < Problematic file

我现在的问题是:如何让 GHDL 查找文件。我已经将它复制到 运行 命令所在的文件夹中 运行。据我所知,我无法导入非 vhdl 文件供 GHDL 识别。那么如何使用 GHDL 模拟 FIR 编译器生成的滤波器呢?

希望有人知道怎么做。

提前致谢!

@user1155120

你的建议完全正确。不幸的是,我有比我知道的更多的 mif 文件,而且 GHDL 实际上没有说明它抱怨的是哪一个。我通过直接设置 c_elaboration_dir 参数并最终通过复制失败的 vhd 文件并插入报告语句找到了答案。

最后我得到的解决方案是将所有 mif 文件复制到 ghdl 执行目录,即 cp $(SRCBASE)/coregen/*.mif ./ 在 Makescript 中。这解决了问题。你想 post 你的答案是我可以接受的解决方案还是你对 kudo 满意?

再次感谢!