在我所能找到的任何论坛中似乎都没有问过我,也没有找到使用GHDL文档来做到这一点的方法。显然我没有足够的声誉来向SuperUser提出GHDL问题(它们没有标签),所以我必须在这里提问。
我正在尝试模拟一个DSP内核,该内核包含几个使用GHDL编写的vhdl内核以及几个Xilinx coregen内核。我必须承认,我是GHDL的新手,但不是VHDL的新手。我知道所讨论的核心和测试平台的逻辑是合理的,因为它可以使用ISim很好地模拟。该程序有其局限性,这就是为什么我要尝试GHDL。
但是,由于缺少过滤器文件,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。
到最后一条语句,一切运行正常。但是,在运行最后一条命令时,我收到一条错误消息:
带有未打开文件的最终文件
来自:xilinxcorelib.fir_compiler_v6_3(behavioral).fn_read_mif_file,位于fir_compiler_v6_3.vhd:1648
ghdl:error:详细说明中的错误
我相信问题是我的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查找文件。我已经将其复制到运行run命令的文件夹中。据我所知,我无法导入非vhdl文件供GHDL识别。那么我该如何使用GHDL模拟FIR编译器生成的滤波器?
我希望有人知道该怎么做。
谢谢!
答案 0 :(得分:0)
@ user1155120
您的建议绝对正确。不幸的是,我拥有的mif文件比我所知道的还要多,而GHDL并未真正声明它所抱怨的那个文件。通过直接设置c_elaboration_dir参数,最终通过复制失败的vhd文件并插入报告语句,我发现了这一点。
最后,我最终遇到的解决方案是将所有mif文件复制到ghdl执行目录中,即
cp $(SRCBASE)/coregen/*.mif ./
在Makescript中。这样就解决了问题。您是否要发布答案以便我可以接受作为解决方案,或者您对工藤感到满意?
再次感谢!