[ZedBoard测评]新建复杂IP核可能会遇到的问题
0赞前言:本文算是对前一篇文章《IP核的结构和文件组织》的小小补充。
今天下午有个同事在新建自己的IP核时碰到了一个小问题。由于之前我已经对IP核的结构和文件组织有所了解,大致知道问题出在哪里,帮他解决了一下,做一下笔记。
问题描述:在编写逻辑代码的时候根据Top-Down的设计思想,划分了很多子模块,每个子模块用一个.v文件实现。利用IP核新建向导做好IP核的新建,更改接口文件和user_logic文件,修改MPD文件后,成功将IP核连接到PS上,但在XPS下生成网表文件,对所搭建的硬件平台做验证时,提示 can't find module xxx...(不一定是原话,大致是这个意思)
问题分析:由之前对IP核文件组织的分析,可以知道ipcores文件夹下data子文件夹内的.pao文件,是用来指定综合时需要的源文件,以及使用什么样的顺序进行综合。所以,我们要把自己用到的所有模块添加到.pao文件里,XPS就可以找到我们用的子模块了。
将所用的子模块一一添加到.pao文件,编译通过,搞定。帮同事吐槽一下,他设计的逻辑比较复杂,用到了多个.v文件,需要一一添加,添加的时候他一直在说麻烦……
深入剖析:单从.pao文件内容,实际上是看不出来XPS是如何找到所有源文件的,比如这一句:lib vga_v1_00_a vga vhdl。vga.vhd并不是直接存储在vga_v1_00_a文件夹下的。它的存储路径是“vga_v1_00_a\hdl\vhdl”,那XPS到底是怎么找到vga.vhd的呢?
打开和.pao文件位于同一个文件夹下的_vga_xst.prj,它的内容是这样的:
------------------------------------------------------------- _vga_xst.prj ----------------------------------------------------------------------------
vhdl proc_common_v3_00_a "D:/ProTools/Xilinx/14.2/ISE_DS/EDK/hw/XilinxProcessorIPLib/pcores/proc_common_v3_00_a/hdl/vhdl/proc_common_pkg.vhd"
vhdl proc_common_v3_00_a "D:/ProTools/Xilinx/14.2/ISE_DS/EDK/hw/XilinxProcessorIPLib/pcores/proc_common_v3_00_a/hdl/vhdl/ipif_pkg.vhd"
vhdl proc_common_v3_00_a "D:/ProTools/Xilinx/14.2/ISE_DS/EDK/hw/XilinxProcessorIPLib/pcores/proc_common_v3_00_a/hdl/vhdl/or_muxcy.vhd"
vhdl proc_common_v3_00_a "D:/ProTools/Xilinx/14.2/ISE_DS/EDK/hw/XilinxProcessorIPLib/pcores/proc_common_v3_00_a/hdl/vhdl/or_gate128.vhd"
vhdl proc_common_v3_00_a "D:/ProTools/Xilinx/14.2/ISE_DS/EDK/hw/XilinxProcessorIPLib/pcores/proc_common_v3_00_a/hdl/vhdl/family_support.vhd"
vhdl proc_common_v3_00_a "D:/ProTools/Xilinx/14.2/ISE_DS/EDK/hw/XilinxProcessorIPLib/pcores/proc_common_v3_00_a/hdl/vhdl/pselect_f.vhd"
vhdl proc_common_v3_00_a "D:/ProTools/Xilinx/14.2/ISE_DS/EDK/hw/XilinxProcessorIPLib/pcores/proc_common_v3_00_a/hdl/vhdl/counter_f.vhd"
vhdl axi_lite_ipif_v1_01_a "D:/ProTools/Xilinx/14.2/ISE_DS/EDK/hw/XilinxProcessorIPLib/pcores/axi_lite_ipif_v1_01_a/hdl/vhdl/address_decoder.vhd"
vhdl axi_lite_ipif_v1_01_a "D:/ProTools/Xilinx/14.2/ISE_DS/EDK/hw/XilinxProcessorIPLib/pcores/axi_lite_ipif_v1_01_a/hdl/vhdl/slave_attachment.vhd"
vhdl axi_lite_ipif_v1_01_a "D:/ProTools/Xilinx/14.2/ISE_DS/EDK/hw/XilinxProcessorIPLib/pcores/axi_lite_ipif_v1_01_a/hdl/vhdl/axi_lite_ipif.vhd"
vhdl vga_v1_00_a "../hdl/vhdl/user_logic.vhd"
vhdl vga_v1_00_a "../hdl/vhdl/vga.vhd"
------------------------------------------------------- end of _vga_xst.prj ----------------------------------------------------------------------------
看了这个就比较清晰了,.pao文件中的vga_v1_00_a实际上并不是工程中某个文件夹的位置,而是和环境变量类似的东西,用来指定源文件的存储位置。而这个环境变量又是在.prj文件中进行定义的。
结论:在新建复杂的IP核时,由于IP新建向导不知道我们的用户逻辑会用到哪些子模块,所以必须在 ipcores\data文件夹下的 .prj文件中指定所用到的源文件的存储路径,然后再在.pao文件中按照语法添加相应的语句,要注意编译的顺序,例如:子模块要在顶层模块之前进行编译。
嗯,差不多了,还有点不满意的就是,如果用到的hdl文件很多,一一添加比较慢,不知道有木有办法一下把某个存储HDL源文件的文件夹作为搜索路径,用到哪个文件就调哪个,这样就不需要逐个添加源文件了。应该是有的,待会研究一下~
版权声明:
本文由博主“cuter”发布。欢迎转载,但不得擅自更改博文内容,也不得用于任何盈利目的。转载时不得删除作者简介和版权声明。如有盗用而不说明出处引起的版权纠纷,由盗用者自负。
博客官方地址:
ChinaAET:http://blog.chinaaet.com/cuter521