![基于Xilinx ISE的FPAG/CPLD设计与应用](https://wfqqreader-1252317822.image.myqcloud.com/cover/448/655448/b_655448.jpg)
第2章 基于VHDL语言的设计输入
设计输入是ISE设计流程的第一步,通过ISE可以轻松地创建VHDL代码模块。在设计输入阶段,用户需要通过一定的设计输入方式,创建基于设计对象的源文件。设计输入的方式有多种,如设计输入可以采用硬件描述语言(HDL),也可以采用原理图输入方式等,其中硬件描述语言也有多种,如VHDL语言,VerilogHDL语言等。本章将重点以VHDL语言为主,详细地介绍设计输入的方法。
2.1 新建工程
任何一个新设计的开始都要从建立一个新的工程项开始。在这个新的工程项下,用户可以添加工程所需的各种源文件,并最终形成一个完整的设计。下面通过设计一个五位的计数器来介绍如何创建一个新的工程项。
(1)在打开的ISE集成开发环境中,执行菜单命令【Files】/【New Project…】,如图2-1所示。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0041_0055.jpg?sign=1738995011-UztkzQOiXXo5VPpGYdlWLDQlHYfcPMqI-0-84b1df2fc6a00cacf8f06bc27d24dcbb)
图2-1 菜单命令【Files】/【New Project…】
此时系统会弹出如图2-2所示的窗口,在【Project Name】中输入工程名,这里输入counter_4,在【Top-Level Source Type】顶层源文件类型的下拉菜单中选择HDL。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0041_0056.jpg?sign=1738995011-P8jO9zXr8lqRnOoLX92tF06rhhdas7y0-0-b88a1674fb29aae291e48e522486db8c)
图2-2 【New Projefct Wizard-Create New Project】窗口
(2)单击按钮,此时系统会弹出如图2-3所示的对话框,该对话框主要用于选择设备器件的特性。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0042_0058.jpg?sign=1738995011-HkQksh8NNq3psWtA4zhLeDv21imeBdar-0-6ba9fa7d1d19f29a01395378edb4e19a)
图2-3 设备属性对话框
(3)选择器件的类型,假设本例采用的器件是CoolRunner2系列的CPLD,所以从下拉菜单中选中此款CPLD,如图2-4所示。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0042_0059.jpg?sign=1738995011-sPz3FpMsOHI2YzhPpxRwtzYiz9vCahHr-0-0de7edb9824f00fdae21f4838e38d269)
图2-4 选择CoolRunner Ⅱ CPLD
(4)设置器件型号,选择具体的型号为XC2C256,如图2-5所示。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0042_0060.jpg?sign=1738995011-kuRyZEgCvhmURGS4yKRsZLqGHjtQmAqj-0-2709a2064595e62c17cea3ec85df15b1)
图2-5 选择XC2C256
(5)设置器件封装,封装为TQ144,如图2-6所示。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0043_0061.jpg?sign=1738995011-IyRTq5MVQ1h8bctTQv2ksPL9DFCmvtKn-0-79f5a6aeedaf9fa5b6a9d28610068ea2)
图2-6 选择TQ144
(6)设置器件速度,该参数设置为-7,如图2-7所示。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0043_0062.jpg?sign=1738995011-MOlXWcybMqJtvNSaq1ni9AfaODeGn8Pg-0-048dcc533c1e2f048b3d83f1881646b7)
图2-7 设置速度
(7)设置综合工具,设置为XST,如图2-8所示。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0043_0063.jpg?sign=1738995011-D1wBmk9kQtopu2DT4j2atodJ8yEJoqXP-0-152bc0d7526058b13bbf64409b7f5e10)
图2-8 选择XST(VHDL/Verilog)
(8)仿真工具选用,采用ISE自带的ISE Simulator,如图2-9所示。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0044_0064.jpg?sign=1738995011-dtZTy7EYkvjtOXq5Sh5EKPDbfg9E62ID-0-ce6ccaa45d95be6c05a389f9ece51963)
图2-9 选择ISE Simulator
(9)设计输入方式设置,所用语言是VHDL,如图2-10所示。这些都可以从相应的下拉菜单中做出合适的选择。其余保持默认值。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0044_0065.jpg?sign=1738995011-Kf8YTW01Xj4cp5tmvJD4dOt1ID9L83Bv-0-53a7d7b7d1b847c20449d278807ba6f2)
图2-10 选择VHDL
(10)单击按钮,此时系统会弹出如图2-11所示的对话框,在这个对话框中,用户可以选择单击
按钮来添加需要的源文件,单击后系统会弹出如图2-12所示的对话框,在该对话框中可以选择需要的源文件,并为此文件命名。用户也可以忽略这一步,直接进入下一步,在以后的操作中再添加所需的源文件。这里采用后者。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0045_0072.jpg?sign=1738995011-tF1q88CQvCqmr0WH6w5v9FKLTVzahrim-0-fb3119a35c06ff2ae35dd2ae933bd25b)
图2-11 【New Project Wizard-Createa New Source】对话框
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0045_0073.jpg?sign=1738995011-A6Yu4CM09XBCVSrzQ3Np9T9BgBdAEGyu-0-8c957724249eb1958d3ec7648d483bf5)
图2-12 【New Source Wizard-Selected Source Type】对话框
(11)单击按钮,此时系统会弹出如图2-13所示的对话框。在这个对话框中,用户可以增加已经存在的源文件,通过单击
按钮即可。单击后弹出如图2-14所示的对话框。当第一次建立工程项,不存在已有的源文件,直接进入下一步。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0045_0074.jpg?sign=1738995011-Hd3qugRXfO0T5JZBc2vmnESAng7FQS6Z-0-623103ad563cbf19497beda78e4e87de)
图2-13 【New Project Wizard-Add Existing Sources】对话框
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0046_0075.jpg?sign=1738995011-EtAF0sJTGASLBzR7osagnRShw93VHVOu-0-992731906d250371984afc714d6829d0)
图2-14 选择文件对话框
(12)单击按钮,此时系统会弹出如图2-15所示的窗口。该窗口中列出了创建的工程的相关信息,也就是刚才所做的一系列选择,设计者此时要好好检查一下各项是否都符合自己的要求,如果有误选的地方要及时改正。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0046_0076.jpg?sign=1738995011-stJybeN8PnvkA5HqMJZ4s2tfK29i2AAx-0-5462d8839b9951ad25e8a7d386032e08)
图2-15 【New Project Wizard-Project Summary】窗口
(13)单击按钮后,就完成了新工程的创建,创建后,出现如图2-16所示的操作界面。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0046_0077.jpg?sign=1738995011-UV2a4mPp61lAOEaQTRNBPg1SO3vkF0Nm-0-38ffa5dc080f308fc912b6deeb9dda55)
图2-16 工程界面
创建新工程还可以通过执行菜单命令【File】/【New Project…】,如图2-17所示,此后的操作步骤就与前述相同。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0047_0078.jpg?sign=1738995011-ChUkPYFFU12zQ4Jb2VWGb4aDU8qaDcrl-0-2f08400bab9475fcd803eafb6f1698d3)
图2-17 菜单命令【File】/【New Project…】
2.2 手动新建源代码
创建好工程项后,下一步就是向其中添加源代码,可以手动输入,也可以利用语言模板。首先介绍手动输入。
(1)在【Sources for】窗口中单击鼠标右键,选择【New Sources…】,如图2-18所示。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0047_0079.jpg?sign=1738995011-LflBevYclnn6g5cz6OWalab7MTLQH7Ku-0-54a2c4b93f1a94725cdc161591b9aaf7)
图2-18 选择【New Source…】
(2)此时系统会弹出如图2-19所示的对话框。选择【VHDL Module】,在【File name】中输入文件名counter。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0047_0080.jpg?sign=1738995011-Ox8bv0yLd7xhU8GnnGJqnybP1oXQLSYx-0-bb8e3cd3b23fad157a010e6570c6300c)
图2-19 【New Source Wizard-Select Source Type】对话框
(3)单击按钮,此时系统会弹出如图2-20所示的窗口。在该对话框中,可以设置模块中的端口名称,I/O方向,是否是总线,以及总线的最高位和最低位的值。同样可以忽略这一步,在以后的HDL语言输入阶段重新输入。本例选择忽略,直接进入下一步。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0047_0082.jpg?sign=1738995011-lgevy83IuquI6df2sRC2Ur1qFHdkPTOJ-0-11065187b766c37092489739e69748d4)
图2-20 【New Source Wizard-Define Module】对话框
(4)单击按钮,此时系统会弹出如图2-21所示的窗口。在该对话框中列出了这个源文件的基本信息,可以看出,在端口定义一项后是空的,因为刚才没有设置,会在以后的操作步骤中输入。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0048_0084.jpg?sign=1738995011-vODbU6MLXV4ra3QbgAVxHzv2u46PsojE-0-a2fbdc5824f97712cc7883ed8927bf77)
图2-21 【New Source Wizard-Summary】窗口
(5)单击按钮,此时系统会弹出如图2-22所示的对话框。从图中可以看出,在【Sources for】选项卡中多了一个扩展名为.vhd的文件,如图2-23所示,在【Workspace】窗口中有不完整的VHDL文档,设计者需要进一步完善才行。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0048_0086.jpg?sign=1738995011-VpoN1CQFQGQvHwg3Sx7O9wx83HRhtIKT-0-de51d586ecba3cd74dc7caa59617cbc2)
图2-22 工程界面
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0048_0087.jpg?sign=1738995011-bqCZmc9qvh3KAbTfLqn7qZ5h2gBM1po3-0-c180fc5d20f1c1c57d6b295e4c6dc1ef)
图2-23 增加的.vhd文件
(6)完成【Workspace】窗口中的代码输入。按照VHDL的语法规则,完成后的结果如图2-24所示。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0049_0088.jpg?sign=1738995011-V4lXf9CyHXgpPwEZgfbqkVcIahhExvVK-0-ab9053bc1993fc0f5a066c2b0dcf4a15)
图2-24 增加代码后的结果
(7)完成语言输入后,通常都要进行语法检查。在【Processes】窗口中展开【Implement Design】,再展开【Synthesize-XST】,双击其下的【Check Syntax】就开始进行语法检查,如图2-25所示。如果无语法错误,就会在旁边显示一个绿色的对号,如图2-26所示。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0049_0089.jpg?sign=1738995011-xySbVbe5oDT89T8kJqfyNr12jNhjIfq3-0-f8f848fdfd897a3fceb79464addde67a)
图2-25 双击【Check Syntax】
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0049_0090.jpg?sign=1738995011-ppzXIWAH4qxjnZp93W4KWdOo8lphl5SC-0-a630cdee556a4514cf21ae016a1772b1)
图2-26 正确的语法检查
至此,手动输入源代码的设计输入过程就已完成。
2.3 利用语言模板创建源代码
在ISE中集成了一个语言模板。该模板中提供了常用的逻辑元件和HDL结构的源代码,如各种形式的计数器、触发器、多路复用器和全局缓冲器等,同时设计者也可以添加自己常用的元件或结构的模板到里面。ISE中内嵌的语言模板包括了大量的开发实例和所有FPGA/CPLD语法的介绍和举例,包括Verilog HDL/VHDL的常用模板、FPGA原语使用实例、约束文件的语法规则以及各类指令和符号的说明。语言模板不仅可在设计中直接使用,还是FPGA/CPLD开发最好的工具手册。下面介绍如何利用此模板。
(1)单击窗口右上角的图标,或者执行菜单命令【Edit】/【Language Templates…】,如图2-27所示。此时工作区窗口变成如图2-28所示。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0050_0092.jpg?sign=1738995011-vUMG1IAhNO2HGrO5Bf7CxRJq6R6usLqI-0-ffdc4affb56a9a9ba9fbeda02bb3f8d9)
图2-27 菜单命令【Edit】/【Language Templates…】
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0050_0093.jpg?sign=1738995011-YlNqHnOn8Kkts5WPZV8cTxWv50zJ1Dj3-0-4bdca3233bd4560c6c60368c2b3c377e)
图2-28 模板窗口
(2)可以看到里面包含了ABEL,Verilog,VHDL三种语言模板,还有用户约束文件的模板。用户如果采用VHDL语言作为设计输入,则要用到的源码在【VHDL】文件夹下,展开它,再展开其下的【Synthesis Constructs】,如图2-29所示。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0050_0094.jpg?sign=1738995011-oH8QU28dsvt25p03BHl4Qgx7Exrr4VWk-0-89965c6d5e5d41d5ed41db08d57f1092)
图2-29 找到【Synthesis Constructs】文件夹
接着再展开【Coding Examples】/【Counters】/【Binary】,此时可以看到其下有三个文件夹,分别是加、减、加减计数器,我们需要的是加计数器,再展开【Down Counters】,如图2-30所示。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0051_0095.jpg?sign=1738995011-MFGJLLoTEh3tzCzAoiQXzCISI8Lxtizi-0-441b62aa9dd255d8f6c1dc5cf583a5a7)
图2-30 找到【Down Counters】文件夹
(3)选择只有一个控制端的第一个源代码文件,单击鼠标右键,选择【Use in file】,如图2-31所示。这样,这里面的源码就加载到counter.vhd这个文件中,但是程序语言的位置需要调整,有必要的话还要根据实际需要做相应的修改。比如增加上端口和信号变量。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0051_0096.jpg?sign=1738995011-TX1RoZVACegaCencK8YJRI9GGz4SFeQA-0-b5444a56df45313b126a9eb56a0136c1)
图2-31 选择【Use in file】
(4)完全修改好后的代码如图2-32所示。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0051_0097.jpg?sign=1738995011-rUJZV6B008WQM9cFHE9zonHQ2sZiAW8S-0-14788b89b708459ed406a834af0e489d)
图2-32 修改好后的结果
至此,利用语言模板创建源代码的过程已经操作完毕,接下来设计者同样要对此进行语法检查,操作步骤与前述相同,只有保证在没有语法错误的情况下,用户才能继续后面的工作。
2.4 本章小结
通过本章的学习,设计者需要掌握的是ISE最基本的设计输入流。此工作的前提是设计者必须对VHDL语言有一个全面、深刻的了解。本章只是举了一个简单的例子来说明问题,在实际的工作中,设计者可能面对的是一个浩大的工程,需要的源代码可能成千上万行,此时可能会面对更多的问题,但是基本操作步骤却是大同小异,所以在设计过程中,用户必须具有足够的耐心,才能够完成整个设计过程。
2.5 思考与练习
(1)创建一个新的工程大体可以分为哪几步?
(2)如何向工程中添加源代码?
(3)语言模板有何作用?