热度 12
2014-4-17 16:22
6012 次阅读|
0 个评论
TCL脚本生成QIP文件 王敏志 概述 这就是经常逛论坛的好处,总是可以学到新的知识或者是技巧,本文马上要给大家介绍的就是笔者从Altera英文论坛上看到的一个小小技巧,当然完全属于利用脚本协同进行Quartus II开发的范畴。 什么是 QIP 文件 QIP应该就是Quartus IP的缩写,就是我们在Quartus II里面是有Altera的IP的时候产生的一个文件,一般我们在使用MegaWizard插件管理器例化一个IP后会自动提示你是否需要将生成IP时产生的QIP文件加入到工程里,一般选择“是”即可,如图1所示。 图1:实例化IP结束后提示是否将QIP文件添加到工程 这时候我们到工程导航(Navigator)中Files标签下可以看到我们刚刚产生的IP已经自动添加到工程,而且QIP自动包含了源文件(HDL),如图2所示。 图2:QIP以及HDL源文件自动添加到工程 QIP 文件对于平时的逻辑设计的好处 从上一节我们介绍什么是QIP文件的时候,我们就可以看出来在设计Quartus II工程的时候使用QIP文件的好处。现在逻辑设计都是基于层次架构来进行模块化的设计,所以很多时候我们会将不同模块的源文件存储在不同的目录下,特别是一些可以重复使用的模块更加应该如此。每个模块可能包含多个源文件,那么我在再次使用这些模块的时候是不是需要一个个地将所有源文件添加到工程里呢?答案是没有这种必要的,因为从上述QIP的介绍中,我们知道其实只需为每一个模块添加一个QIP文件即可。所以QIP文件对于逻辑设计的好处就是非常有利于我们的模块设计以及对于原始设计文件的管理。现在的问题就是我们应该怎么来为可重复利用模块产生QIP文件,笔者下一节进行详细介绍。 编写脚本产生 QIP 文件 既然知道QIP文件的好处,那么本节笔者开始介绍如何使用脚本文件来产生QIP文件。首先我们来看看QIP文件里到底有些什么内容,以下是笔者打开本人使用的一个PLL的QIP文件看到的全部内容: set_global_assignment -name IP_TOOL_NAME "ALTPLL" set_global_assignment -name IP_TOOL_VERSION "9.1" set_global_assignment -name VHDL_FILE set_global_assignment -name MISC_FILE set_global_assignment -name MISC_FILE set_global_assignment -name MISC_FILE set_global_assignment -name MISC_FILE 我们看到QIP文件里的格式是典型的脚本格式,和QSF文件里的格式一样,我们知道当我们添加QIP文件到工程的时候,其实就是等于在QSF文件里添加了一句添加QIP文件到工程的约束。 当然,我们可以根据上述格式通过手动生成QIP文件,大家可以通过实际实例来进行验证,但这不是笔者这里要介绍的,我们来讨论如何通过TCL脚本来自动的搜索并生成QIP文件,具体的TCL脚本如下所示: 以下是脚本代码片段: if { 0} { puts "-------------------------------------------------------" puts "Input parameters:" set file_name set path puts " file name : '$file_name'" puts " path : '$path'" } else { # EDIT HERE: set file_name "all.qip" set path "./" # END; } set p_file set cnt 0 proc find { path pattern key_word } { foreach i { puts $::p_file "set_global_assignment -name $key_word \ " global cnt incr cnt } } proc find_in_path { path } { find $path *.sv SYSTEMVERILOG_FILE find $path *.svh SYSTEMVERILOG_FILE find $path *.v VERILOG_FILE find $path *.sdc SDC_FILE find $path *.vhd VHDL_FILE find $path *.vhdl VHDL_FILE find $path *.tdf AHDL_FILE } foreach p $path { find_in_path $p puts $::p_file "" } close $p_file puts "-------------------------------------------------------" puts " Find $cnt files" puts " Making file '$file_name'" puts " Press 'Enter' to exit ..." gets stdin 我们将上述脚本放到一个名为q2_make_qip.tcl的脚本文件中,然后根据自动化批处理执行脚本文件的方法,来自动产生QIP文件,执行结果如图3所示。 图3:利用脚本和批处理自动产生QIP文件 如图3所示,在当前目录下本来只有一个TCL文件一个Batch批处理文件以及一个放置两个VHDL的源文件目录src。双击执行batch文件后,命令行被调出并执行了批处理命令,命令执行完成后,在当前目录下产生了一个名为myfifo.qip的QIP文件,大家可以修改TCL来搜索不同的模块目录并生成不同的QIP文件名。这时候如果我们打开这个myfifo.qip文件,那么我们可以看到类似上述PLL的QIP文件里的内容,只是要比PLL的要简单,如下所示: set_global_assignment -name VHDL_FILE set_global_assignment -name VHDL_FILE 其实就是将两个vhdl文件添加到工程的约束而已。 分析及结论 本文讨论了什么是QIP,并且了解了使用QIP文件的好处。最好介绍了手动产生QIP文件的方法,并重点介绍通过脚本文件以及批处理方法自动产生可重用模块的QIP文件。