xilinx IP建立向导创建的目录和文件都是做什么的?----由错误ERROR:HDLCompiler:Instantiating xx from unknown module xx引发的思

本文主要是介绍xilinx IP建立向导创建的目录和文件都是做什么的?----由错误ERROR:HDLCompiler:Instantiating xx from unknown module xx引发的思,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转自:超群天晴

https://www.cnblogs.com/surpassal/archive/2012/11/12/2766785.html

xilinx IP建立向导创建的目录和文件都是做什么的?----由错误ERROR:HDLCompiler:Instantiating <xx> from unknown module <xx>引发的思考

使用了XPS中建立和导入IP向导(简称ipwiz),默认的源码文件只有hdl/verilog目录下的"userlogic.v"和hdl/vhdl目录下的"ipname.vhd"文件。当我们的设计变复杂了,需要更多的设计文件如.v、.vhd、.ngc等文件和多个模块/实体的时候,如果不进行一些设置,编译器会提示找不到module的错误提示:ERROR:HDLCompiler:Instantiating <xx> from unknown module <xx>。怎样才能让编译器找到我们所有的设计文件和模块呢?

例如,这几天我做了一个字符VGA的IP核,IP的名字是axi_vga,hdl目录下的设计文件结构如下:

复制代码

 1 ├─data2 │      axi_vga_v2_1_0.mpd3 │      axi_vga_v2_1_0.pao4 │      _axi_vga_xst.prj5 │6 ├─devl7 │      create.cip8 │      ipwiz.log9 │      ipwiz.opt
10 │      README.txt
11 │
12 └─hdl
13     ├─verilog
14     │      CGROM.v
15     │      DPBRAM.v
16     │      user_logic.v
17     │      vga_sync.v
18     │
19     └─vhdl
20             axi_vga.vhd
21             DCM1.vhd

复制代码

 除了user_logic.v和axi_vga.vhd文件是由ipwiz生成的,其他的设计文件均是后续添加上的。将IP导入到ARM PS系统后,进行DRC检查,再运行bit生成,会出现以下错误提示:

ERROR:HDLCompiler:1654 - "D:/_prj/Xilinx/Zynq_new/AXI_Master_VGA_3/pcores/axi_vga_v1_00_a/hdl/verilog/user_logic.v" Line 232: Instantiating <vga_sync> from unknown module < vga_sync >
ERROR:EDK:546 - Aborting XST flow execution!

错误不止这一条,其他的设计文件如CGROM.v、DPBRAM.v、user_logic.v和DCM1.vhd都出现找不到module的错误。这就很奇怪了,因为设计文件都在同一个目录下啊,为什么编译器会找不到呢?

为了知道这个错误产生的原因并解决它,就需要详细了解ipwiz产生的目录和文件了。

ipwiz产生的目录有三个,我们一一分析。

1、  hdl目录

hdl目录里面有所有的设计文件,包括.v和.vhd的。因为AXI总线接口模块都是以VHDL语言描述,xilinx为了方便管理不同类型的设计文件,因而细分了verilog和vhdl两个文件夹存放设计文件。

2、  devl目录

在使用ipwiz向导时,有一个可选择项是是否需要生产测试ise工程,如果选择了,那么这个目录将会生产测试用的ise工程,如果没有选择,那么devl目录只会保留几个log文件。

3、 data目录

data目录存放的是IP的配置文件,如.prj 文件、.mpd 文件和.pao 文件等。

.mpd(Microprocessor Peripheral Defination,外设定义)文件

.mpd文件定义了外设的互联接口,包括和AXI总线的信号以及对外信号。在(原创)《一步一步学ZedBoard & Zynq》些列(四):基于AXI Lite 总线的从设备IP设计 中,我们通过修改这个文件将告诉ARM PS系统,这个IP有8个输出引脚,并通过修改system.ucf约束连接到zynq的外部引脚上。.mpd文件内容如下:

复制代码

 1 ###################################################################2 ##3 ## Name     : axi_vga4 ## Desc     : Microprocessor Peripheral Description5 ##          : Automatically generated by PsfUtility6 ##7 ###################################################################8 9 BEGIN axi_vga
10 
11 ## Peripheral Options
12 OPTION IPTYPE = PERIPHERAL
13 OPTION IMP_NETLIST = TRUE
14 OPTION HDL = MIXED
15 OPTION IP_GROUP = MICROBLAZE:USER
16 OPTION DESC = AXI_VGA
17 OPTION ARCH_SUPPORT_MAP = (others=DEVELOPMENT)
18 
19 
20 ## Bus Interfaces
21 BUS_INTERFACE BUS = S_AXI, BUS_STD = AXI, BUS_TYPE = SLAVE
22 
23 ## Generics for VHDL or Parameters for Verilog
24 PARAMETER C_S_AXI_DATA_WIDTH = 32, DT = INTEGER, BUS = S_AXI, ASSIGNMENT = CONSTANT
25 PARAMETER C_S_AXI_ADDR_WIDTH = 32, DT = INTEGER, BUS = S_AXI, ASSIGNMENT = CONSTANT
26 PARAMETER C_S_AXI_MIN_SIZE = 0x000001ff, DT = std_logic_vector, BUS = S_AXI
27 PARAMETER C_USE_WSTRB = 0, DT = INTEGER
28 PARAMETER C_DPHASE_TIMEOUT = 8, DT = INTEGER
29 PARAMETER C_BASEADDR = 0xffffffff, DT = std_logic_vector, MIN_SIZE = 0x200, PAIR = C_HIGHADDR, ADDRESS = BASE, BUS = S_AXI
30 PARAMETER C_HIGHADDR = 0x00000000, DT = std_logic_vector, PAIR = C_BASEADDR, ADDRESS = HIGH, BUS = S_AXI
31 PARAMETER C_FAMILY = virtex6, DT = STRING
32 PARAMETER C_NUM_REG = 1, DT = INTEGER
33 PARAMETER C_NUM_MEM = 1, DT = INTEGER
34 PARAMETER C_SLV_AWIDTH = 32, DT = INTEGER
35 PARAMETER C_SLV_DWIDTH = 32, DT = INTEGER
36 PARAMETER C_S_AXI_PROTOCOL = AXI4LITE, TYPE = NON_HDL, ASSIGNMENT = CONSTANT, DT = STRING, BUS = S_AXI
37 
38 ## Ports
39 PORT HS = "", DIR = O
40 PORT VS = "", DIR = O
41 PORT RED = "", DIR = O, VEC=[3:0]
42 PORT GREEN = "", DIR = O, VEC=[3:0]
43 PORT BLUE = "", DIR = O, VEC = [3:0]
44 PORT S_AXI_ACLK = "", DIR = I, SIGIS = CLK, BUS = S_AXI
45 PORT S_AXI_ARESETN = ARESETN, DIR = I, SIGIS = RST, BUS = S_AXI
46 PORT S_AXI_AWADDR = AWADDR, DIR = I, VEC = [(C_S_AXI_ADDR_WIDTH-1):0], ENDIAN = LITTLE, BUS = S_AXI
47 PORT S_AXI_AWVALID = AWVALID, DIR = I, BUS = S_AXI
48 PORT S_AXI_WDATA = WDATA, DIR = I, VEC = [(C_S_AXI_DATA_WIDTH-1):0], ENDIAN = LITTLE, BUS = S_AXI
49 PORT S_AXI_WSTRB = WSTRB, DIR = I, VEC = [((C_S_AXI_DATA_WIDTH/8)-1):0], ENDIAN = LITTLE, BUS = S_AXI
50 PORT S_AXI_WVALID = WVALID, DIR = I, BUS = S_AXI
51 PORT S_AXI_BREADY = BREADY, DIR = I, BUS = S_AXI
52 PORT S_AXI_ARADDR = ARADDR, DIR = I, VEC = [(C_S_AXI_ADDR_WIDTH-1):0], ENDIAN = LITTLE, BUS = S_AXI
53 PORT S_AXI_ARVALID = ARVALID, DIR = I, BUS = S_AXI
54 PORT S_AXI_RREADY = RREADY, DIR = I, BUS = S_AXI
55 PORT S_AXI_ARREADY = ARREADY, DIR = O, BUS = S_AXI
56 PORT S_AXI_RDATA = RDATA, DIR = O, VEC = [(C_S_AXI_DATA_WIDTH-1):0], ENDIAN = LITTLE, BUS = S_AXI
57 PORT S_AXI_RRESP = RRESP, DIR = O, VEC = [1:0], BUS = S_AXI
58 PORT S_AXI_RVALID = RVALID, DIR = O, BUS = S_AXI
59 PORT S_AXI_WREADY = WREADY, DIR = O, BUS = S_AXI
60 PORT S_AXI_BRESP = BRESP, DIR = O, VEC = [1:0], BUS = S_AXI
61 PORT S_AXI_BVALID = BVALID, DIR = O, BUS = S_AXI
62 PORT S_AXI_AWREADY = AWREADY, DIR = O, BUS = S_AXI
63 
64 END

复制代码

其中39~43行

PORT HS = "", DIR = O
PORT VS = "", DIR = O
PORT RED = "", DIR = O, VEC=[3:0]
PORT GREEN = "", DIR = O, VEC=[3:0]
PORT BLUE = "", DIR = O, VEC = [3:0]

是定义的对外引脚信号,其他均为AXI内部互联接口。

.prj文件

.prj该包含了IP所需要使用的文件以及路径。Ipwiz生成默认的.prj文件内容如下:

复制代码

 1 vhdl proc_common_v3_00_a "C:\Xilinx\14.2\ISE_DS\EDK/hw/XilinxProcessorIPLib/pcores/proc_common_v3_00_a/hdl/vhdl/proc_common_pkg.vhd"2 vhdl proc_common_v3_00_a "C:\Xilinx\14.2\ISE_DS\EDK/hw/XilinxProcessorIPLib/pcores/proc_common_v3_00_a/hdl/vhdl/ipif_pkg.vhd"3 vhdl proc_common_v3_00_a "C:\Xilinx\14.2\ISE_DS\EDK/hw/XilinxProcessorIPLib/pcores/proc_common_v3_00_a/hdl/vhdl/or_muxcy.vhd"4 vhdl proc_common_v3_00_a "C:\Xilinx\14.2\ISE_DS\EDK/hw/XilinxProcessorIPLib/pcores/proc_common_v3_00_a/hdl/vhdl/or_gate128.vhd"5 vhdl proc_common_v3_00_a "C:\Xilinx\14.2\ISE_DS\EDK/hw/XilinxProcessorIPLib/pcores/proc_common_v3_00_a/hdl/vhdl/family_support.vhd"6 vhdl proc_common_v3_00_a "C:\Xilinx\14.2\ISE_DS\EDK/hw/XilinxProcessorIPLib/pcores/proc_common_v3_00_a/hdl/vhdl/pselect_f.vhd"7 vhdl proc_common_v3_00_a "C:\Xilinx\14.2\ISE_DS\EDK/hw/XilinxProcessorIPLib/pcores/proc_common_v3_00_a/hdl/vhdl/counter_f.vhd"8 vhdl axi_lite_ipif_v1_01_a "C:\Xilinx\14.2\ISE_DS\EDK/hw/XilinxProcessorIPLib/pcores/axi_lite_ipif_v1_01_a/hdl/vhdl/address_decoder.vhd"9 vhdl axi_lite_ipif_v1_01_a "C:\Xilinx\14.2\ISE_DS\EDK/hw/XilinxProcessorIPLib/pcores/axi_lite_ipif_v1_01_a/hdl/vhdl/slave_attachment.vhd"
10 vhdl axi_lite_ipif_v1_01_a "C:\Xilinx\14.2\ISE_DS\EDK/hw/XilinxProcessorIPLib/pcores/axi_lite_ipif_v1_01_a/hdl/vhdl/axi_lite_ipif.vhd"
11 vhdl proc_common_v3_00_a "C:\Xilinx\14.2\ISE_DS\EDK/hw/XilinxProcessorIPLib/pcores/proc_common_v3_00_a/hdl/vhdl/soft_reset.vhd"
12 verilog axi_vga_v1_00_a "../hdl/verilog/user_logic.v"
13 vhdl axi_vga_v1_00_a "../hdl/vhdl/axi_vga.vhd"

复制代码

可以看到,这个IP除了使用ISE的提供的库文件(来完成AXI接口和协议),并把它们定义成库proc_common_v3_00_a和库axi_lite_ipif_v1_01_a;同时这个IP还使用到了两个默认生成的设计源文件user_logic.v和axi_vga.vhd,并把它们定义到库axi_vga_v1_00_a中,而这个库就是我们IP的名字。

.pao(Peripheral Analyze Order,编译顺序)文件

.pao文件定义了需要编译哪写HDL文件且以什么样的顺序编译。ipwiz生成的.pao文件内容如下:

复制代码

##############################################################################
## Filename:          D:/_prj/Xilinx/Zynq_new/AXI_Master_VGA_2/pcores/axi_vga_v1_00_a/data/axi_vga_v2_1_0.pao
## Description:       Peripheral Analysis Order
## Date:              Mon Nov 12 15:38:45 2012 (by Create and Import Peripheral Wizard)
##############################################################################lib proc_common_v3_00_a  all 
lib axi_lite_ipif_v1_01_a  all 
lib axi_vga_v1_00_a user_logic verilog
lib axi_vga_v1_00_a axi_vga vhdl

复制代码

可以看到,对于在.prj文件中定义的文件和库,编译器会编译库proc_common_v3_00_a和库axi_lite_ipif_v1_01_a里面的所有实体;同时也将使用axi_vga_v1_00_a库中的user_logic实体,它来自于一个verilog类型文件,将使用axi_vga实体,它来自于一个vhdl类型的文件。同时编译顺序也确定下来。

 由以上的分析可以知道,data目录下的文件信息都非常重要,.mpd文件定义了外设的接口,.prj文件定义了IP所需要使用的文件以及路径,而.pao定义了需要编译哪写源文件以及使用什么样的顺序进行编译。知道了这些,对于最开始出现的那个问题,我们就知道该如何解决了:

1、  修改data目录下的.prj文件,把所有设计源文件都添加到其中;

2、  修改data目录下的.pao文件,把所有设计实体都添加到其中。

修改完的.prj文件内容如下

复制代码

 1 vhdl proc_common_v3_00_a "C:\Xilinx\14.2\ISE_DS\EDK/hw/XilinxProcessorIPLib/pcores/proc_common_v3_00_a/hdl/vhdl/proc_common_pkg.vhd"2 vhdl proc_common_v3_00_a "C:\Xilinx\14.2\ISE_DS\EDK/hw/XilinxProcessorIPLib/pcores/proc_common_v3_00_a/hdl/vhdl/ipif_pkg.vhd"3 vhdl proc_common_v3_00_a "C:\Xilinx\14.2\ISE_DS\EDK/hw/XilinxProcessorIPLib/pcores/proc_common_v3_00_a/hdl/vhdl/or_muxcy.vhd"4 vhdl proc_common_v3_00_a "C:\Xilinx\14.2\ISE_DS\EDK/hw/XilinxProcessorIPLib/pcores/proc_common_v3_00_a/hdl/vhdl/or_gate128.vhd"5 vhdl proc_common_v3_00_a "C:\Xilinx\14.2\ISE_DS\EDK/hw/XilinxProcessorIPLib/pcores/proc_common_v3_00_a/hdl/vhdl/family_support.vhd"6 vhdl proc_common_v3_00_a "C:\Xilinx\14.2\ISE_DS\EDK/hw/XilinxProcessorIPLib/pcores/proc_common_v3_00_a/hdl/vhdl/pselect_f.vhd"7 vhdl proc_common_v3_00_a "C:\Xilinx\14.2\ISE_DS\EDK/hw/XilinxProcessorIPLib/pcores/proc_common_v3_00_a/hdl/vhdl/counter_f.vhd"8 vhdl axi_lite_ipif_v1_01_a "C:\Xilinx\14.2\ISE_DS\EDK/hw/XilinxProcessorIPLib/pcores/axi_lite_ipif_v1_01_a/hdl/vhdl/address_decoder.vhd"9 vhdl axi_lite_ipif_v1_01_a "C:\Xilinx\14.2\ISE_DS\EDK/hw/XilinxProcessorIPLib/pcores/axi_lite_ipif_v1_01_a/hdl/vhdl/slave_attachment.vhd"
10 vhdl axi_lite_ipif_v1_01_a "C:\Xilinx\14.2\ISE_DS\EDK/hw/XilinxProcessorIPLib/pcores/axi_lite_ipif_v1_01_a/hdl/vhdl/axi_lite_ipif.vhd"
11 vhdl proc_common_v3_00_a "C:\Xilinx\14.2\ISE_DS\EDK/hw/XilinxProcessorIPLib/pcores/proc_common_v3_00_a/hdl/vhdl/soft_reset.vhd"
12 verilog axi_vga_v1_00_a "../hdl/verilog/DPBRAM.v"
13 verilog axi_vga_v1_00_a "../hdl/verilog/CGROM.v"
14 verilog axi_vga_v1_00_a "../hdl/verilog/vga_sync.v"
15 vhdl axi_vga_v1_00_a "../hdl/vhdl/DCM1.vhd"
16 verilog axi_vga_v1_00_a "../hdl/verilog/user_logic.v"
17 vhdl axi_vga_v1_00_a "../hdl/vhdl/axi_vga.vhd"

复制代码

修改完的.pao文件内容如下

复制代码

 1 ##############################################################################2 ## Filename:          D:/_prj/Xilinx/Zynq_new/AXI_Master_VGA_2/pcores/axi_vga_v1_00_a/data/axi_vga_v2_1_0.pao3 ## Description:       Peripheral Analysis Order4 ## Date:              Mon Nov 12 15:38:45 2012 (by Create and Import Peripheral Wizard)5 ##############################################################################6 7 lib proc_common_v3_00_a  all 8 lib axi_lite_ipif_v1_01_a  all 9 lib axi_vga_v1_00_a user_logic verilog
10 lib axi_vga_v1_00_a vga_sync verilog
11 lib axi_vga_v1_00_a DCM1 vhdl
12 lib axi_vga_v1_00_a DPBRAM verilog
13 lib axi_vga_v1_00_a CGROM verilog
14 lib axi_vga_v1_00_a axi_vga vhdl

复制代码

修改完成后,“rescan user repositories“将所做的修改更新到工程中,然后再进行DRC检查和生成bit文件,错误ERROR:HDLCompiler:Instantiating <xx> from unknown module <xx>消失,XST综合成功。

 

==========================================

注意:

1、修改.prj文件时,注意文件的类型是verilog还是vhdl

2、修改.pao文件时,最好按照元件的例化顺序添加。

这篇关于xilinx IP建立向导创建的目录和文件都是做什么的?----由错误ERROR:HDLCompiler:Instantiating xx from unknown module xx引发的思的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/175437

相关文章

Linux虚拟机不显示IP地址的解决方法(亲测有效)

《Linux虚拟机不显示IP地址的解决方法(亲测有效)》本文主要介绍了通过VMware新装的Linux系统没有IP地址的解决方法,主要步骤包括:关闭虚拟机、打开VM虚拟网络编辑器、还原VMnet8或修... 目录前言步骤0.问题情况1.关闭虚拟机2.China编程打开VM虚拟网络编辑器3.1 方法一:点击还原VM

SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法

《SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法》本文主要介绍了SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法,具有一定的参考价值,感兴趣的可以了解一下... 目录方法1:更改IDE配置方法2:在Eclipse中清理项目方法3:使用Maven命令行在开发Sprin

JAVA虚拟机中 -D, -X, -XX ,-server参数使用

《JAVA虚拟机中-D,-X,-XX,-server参数使用》本文主要介绍了JAVA虚拟机中-D,-X,-XX,-server参数使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录一、-D参数二、-X参数三、-XX参数总结:在Java开发过程中,对Java虚拟机(JVM)的启动参数进

前端bug调试的方法技巧及常见错误

《前端bug调试的方法技巧及常见错误》:本文主要介绍编程中常见的报错和Bug,以及调试的重要性,调试的基本流程是通过缩小范围来定位问题,并给出了推测法、删除代码法、console调试和debugg... 目录调试基本流程调试方法排查bug的两大技巧如何看控制台报错前端常见错误取值调用报错资源引入错误解析错误

Python中conda虚拟环境创建及使用小结

《Python中conda虚拟环境创建及使用小结》本文主要介绍了Python中conda虚拟环境创建及使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录0.前言1.Miniconda安装2.conda本地基本操作3.创建conda虚拟环境4.激活c

使用Python创建一个能够筛选文件的PDF合并工具

《使用Python创建一个能够筛选文件的PDF合并工具》这篇文章主要为大家详细介绍了如何使用Python创建一个能够筛选文件的PDF合并工具,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录背景主要功能全部代码代码解析1. 初始化 wx.Frame 窗口2. 创建工具栏3. 创建布局和界面控件4

Nginx实现动态封禁IP的步骤指南

《Nginx实现动态封禁IP的步骤指南》在日常的生产环境中,网站可能会遭遇恶意请求、DDoS攻击或其他有害的访问行为,为了应对这些情况,动态封禁IP是一项十分重要的安全策略,本篇博客将介绍如何通过NG... 目录1、简述2、实现方式3、使用 fail2ban 动态封禁3.1 安装 fail2ban3.2 配

Java中对象的创建和销毁过程详析

《Java中对象的创建和销毁过程详析》:本文主要介绍Java中对象的创建和销毁过程,对象的创建过程包括类加载检查、内存分配、初始化零值内存、设置对象头和执行init方法,对象的销毁过程由垃圾回收机... 目录前言对象的创建过程1. 类加载检查2China编程. 分配内存3. 初始化零值4. 设置对象头5. 执行

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后