- 基于Xilinx ISE的FPAG/CPLD设计与应用
- 谈世哲 李健 管殿柱编著
- 173字
- 2024-12-21 15:29:30
第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=1739267433-JOeXk0AUQdHZqykRPD0Gh67hHXo6nOnx-0-5d22e2bf2c4b29c6f577b9c713e23c77)
图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=1739267433-7VOZSPrJ358YuzlIz0tY4HpMNwJSR4FQ-0-e44e0f0de1006144f8666fff4e940a39)
图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=1739267433-lYGng0QVb12jeQbKS5UVn7Yr6X39X0i7-0-030eaf5057c9899dc295e62210a1127d)
图2-3 设备属性对话框
(3)选择器件的类型,假设本例采用的器件是CoolRunner2系列的CPLD,所以从下拉菜单中选中此款CPLD,如图2-4所示。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0042_0059.jpg?sign=1739267433-idl7x6Xz04hZRyotNp1B8EAPJQlffhfF-0-421fe1609f26286e5bf85cb40085484f)
图2-4 选择CoolRunner Ⅱ CPLD
(4)设置器件型号,选择具体的型号为XC2C256,如图2-5所示。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0042_0060.jpg?sign=1739267433-fjn8Okj3aFkhgsrkgkyRFeTP6wZUR4g9-0-e363b3a10386aa1d4ab933ab17d84816)
图2-5 选择XC2C256
(5)设置器件封装,封装为TQ144,如图2-6所示。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0043_0061.jpg?sign=1739267433-DQXVfbEAff5ndiL4527wkVtu7QMN6aqT-0-a69ee7155dead49de53281c785977db2)
图2-6 选择TQ144
(6)设置器件速度,该参数设置为-7,如图2-7所示。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0043_0062.jpg?sign=1739267433-Gz74Ak4k9ivMBxIgr0bN2TqiemeMLGbK-0-8ef210010b6ac8a2ebbfb42497f1d7fc)
图2-7 设置速度
(7)设置综合工具,设置为XST,如图2-8所示。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0043_0063.jpg?sign=1739267433-s5qye74hHjrIoKGrVQliwnth4paxDF2T-0-59d6155db990872ab429e991a22207cd)
图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=1739267433-WoibT77WPyLnbo7pTbRIQNseB5hfXzWD-0-ec70d8166a7fdce66152d0c6739772ad)
图2-9 选择ISE Simulator
(9)设计输入方式设置,所用语言是VHDL,如图2-10所示。这些都可以从相应的下拉菜单中做出合适的选择。其余保持默认值。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0044_0065.jpg?sign=1739267433-y0ybS5fZybJtnXCgskIJ7WL1051P0iH1-0-ea3fffc9dfbc9ed844909e9490ea1803)
图2-10 选择VHDL
(10)单击按钮,此时系统会弹出如图2-11所示的对话框,在这个对话框中,用户可以选择单击
按钮来添加需要的源文件,单击后系统会弹出如图2-12所示的对话框,在该对话框中可以选择需要的源文件,并为此文件命名。用户也可以忽略这一步,直接进入下一步,在以后的操作中再添加所需的源文件。这里采用后者。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0045_0072.jpg?sign=1739267433-b0MZqROJfwU0NbNCUD5ji9uSR4Ln4ut9-0-fa090a5212b3dce7fba3c0d4338827d0)
图2-11 【New Project Wizard-Createa New Source】对话框
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0045_0073.jpg?sign=1739267433-Zn1mcAcitYP3t7CUiPBmv1IenQuivAz6-0-b28918323a57406ca944bb6e35fdca87)
图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=1739267433-IRbo4Xh9rJW3ZO7oYuKiBVqJYnh4Mz9w-0-f66a465403d91321c4a5f6a9bbe54812)
图2-13 【New Project Wizard-Add Existing Sources】对话框
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0046_0075.jpg?sign=1739267433-OMxe9pKwGADQ3FjUVY2RXH7Vz5NkM1wJ-0-d48c831bc16c7b413b3b8d04d4f7e87a)
图2-14 选择文件对话框
(12)单击按钮,此时系统会弹出如图2-15所示的窗口。该窗口中列出了创建的工程的相关信息,也就是刚才所做的一系列选择,设计者此时要好好检查一下各项是否都符合自己的要求,如果有误选的地方要及时改正。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0046_0076.jpg?sign=1739267433-kGDYHbyt8PltOQdr5jZdbziKQF2CnJAq-0-87a82e504566319ea886021a0b6df76f)
图2-15 【New Project Wizard-Project Summary】窗口
(13)单击按钮后,就完成了新工程的创建,创建后,出现如图2-16所示的操作界面。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0046_0077.jpg?sign=1739267433-p0wRTMNq57HIybZQaL8nKjJhitvuJ3fD-0-00216ba13208ae1c9d72b9e65b5ef5d3)
图2-16 工程界面
创建新工程还可以通过执行菜单命令【File】/【New Project…】,如图2-17所示,此后的操作步骤就与前述相同。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0047_0078.jpg?sign=1739267433-NJro7S52bCUeJYLn4qKwMbXbxQxrrRpR-0-fe5ea311e7b157a4991a09237fd281be)
图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=1739267433-KH13fqMAS54chA9bGMrNWvzx02UAmTcY-0-49de81946da57f3a805494378e711ce4)
图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=1739267433-JFwneHNix06heVTRI0S9vpZ4UrM2lkwy-0-d573f17d189ea9ae5b1e53003e9bbaba)
图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=1739267433-jeuJKFE040OxJzXFQbHZzNVr9DqeKBPp-0-23e6f8424606ac0c0254de5ff92cf72c)
图2-20 【New Source Wizard-Define Module】对话框
(4)单击按钮,此时系统会弹出如图2-21所示的窗口。在该对话框中列出了这个源文件的基本信息,可以看出,在端口定义一项后是空的,因为刚才没有设置,会在以后的操作步骤中输入。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0048_0084.jpg?sign=1739267433-0hIvnU5fjCGxKuyHllrbs47wJpbriyCV-0-209ea5596e2cb082401db8b98d9df5f0)
图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=1739267433-82YxRVFirqa27ALq2KVsIONaQ9hlJkqL-0-fee9971c66d11bc48177e1986fdb77bc)
图2-22 工程界面
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0048_0087.jpg?sign=1739267433-kfchvc08wG2qPe2dsfu3XEOABZt5pig3-0-905b05e6ae55d5affed5b4e4fb01d197)
图2-23 增加的.vhd文件
(6)完成【Workspace】窗口中的代码输入。按照VHDL的语法规则,完成后的结果如图2-24所示。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0049_0088.jpg?sign=1739267433-h23YEMByPXvZZTIIpNTc6ON6HFVtPUJk-0-98ce85ba967a1ddcd8f1cb5d2dc514de)
图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=1739267433-gdTo2VHn14lT4jy2077aeFVm36tC3Sf0-0-4ccfe58409f1b1fd5f0fb276cf18593c)
图2-25 双击【Check Syntax】
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0049_0090.jpg?sign=1739267433-PV5dqOKtnKPFTZJFkEOh6aQXoQqHeiVo-0-b4278ed8c8256b4e7902500d7ba35b53)
图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=1739267433-U6UINq7EEnRQU4nRVs9laNOhCOvdeeas-0-c79d45a0049b6de96a54e8b6e62fbf4c)
图2-27 菜单命令【Edit】/【Language Templates…】
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0050_0093.jpg?sign=1739267433-Mf8fMNhiv5n1qbH9uydmVairQxek11F6-0-81098290eb0fcabc736cd108b7e671f7)
图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=1739267433-OyRF3RZT5Ei2XBbYkNSWNWSxirticanC-0-1af7e874dfa6e99e16c17f1463cad2f6)
图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=1739267433-AQ1a0JgCpiwY0dgLqF4sy9zgNPcxgF5r-0-e33927d4f57ff95b938c9766ed257393)
图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=1739267433-lSKiYPpnWOyV0dZ6ZiQnGxBfTsvTESJM-0-f0de994ba2c6378e8f056be5587ac520)
图2-31 选择【Use in file】
(4)完全修改好后的代码如图2-32所示。
![](https://epubservercos.yuewen.com/3658AD/3590307303845701/epubprivate/OEBPS/Images/figure_0051_0097.jpg?sign=1739267433-INgOkv3J2UJqDmlDBIxO1fHiuevPaabH-0-1611bab9dbb061468a563c1e6ca4832a)
图2-32 修改好后的结果
至此,利用语言模板创建源代码的过程已经操作完毕,接下来设计者同样要对此进行语法检查,操作步骤与前述相同,只有保证在没有语法错误的情况下,用户才能继续后面的工作。
2.4 本章小结
通过本章的学习,设计者需要掌握的是ISE最基本的设计输入流。此工作的前提是设计者必须对VHDL语言有一个全面、深刻的了解。本章只是举了一个简单的例子来说明问题,在实际的工作中,设计者可能面对的是一个浩大的工程,需要的源代码可能成千上万行,此时可能会面对更多的问题,但是基本操作步骤却是大同小异,所以在设计过程中,用户必须具有足够的耐心,才能够完成整个设计过程。
2.5 思考与练习
(1)创建一个新的工程大体可以分为哪几步?
(2)如何向工程中添加源代码?
(3)语言模板有何作用?