第2章 基于VHDL语言的设计输入

设计输入是ISE设计流程的第一步,通过ISE可以轻松地创建VHDL代码模块。在设计输入阶段,用户需要通过一定的设计输入方式,创建基于设计对象的源文件。设计输入的方式有多种,如设计输入可以采用硬件描述语言(HDL),也可以采用原理图输入方式等,其中硬件描述语言也有多种,如VHDL语言,VerilogHDL语言等。本章将重点以VHDL语言为主,详细地介绍设计输入的方法。

2.1 新建工程

任何一个新设计的开始都要从建立一个新的工程项开始。在这个新的工程项下,用户可以添加工程所需的各种源文件,并最终形成一个完整的设计。下面通过设计一个五位的计数器来介绍如何创建一个新的工程项。

(1)在打开的ISE集成开发环境中,执行菜单命令【Files】/【New Project…】,如图2-1所示。

图2-1 菜单命令【Files】/【New Project…】

此时系统会弹出如图2-2所示的窗口,在【Project Name】中输入工程名,这里输入counter_4,在【Top-Level Source Type】顶层源文件类型的下拉菜单中选择HDL。

图2-2 【New Projefct Wizard-Create New Project】窗口

(2)单击按钮,此时系统会弹出如图2-3所示的对话框,该对话框主要用于选择设备器件的特性。

图2-3 设备属性对话框

(3)选择器件的类型,假设本例采用的器件是CoolRunner2系列的CPLD,所以从下拉菜单中选中此款CPLD,如图2-4所示。

图2-4 选择CoolRunner Ⅱ CPLD

(4)设置器件型号,选择具体的型号为XC2C256,如图2-5所示。

图2-5 选择XC2C256

(5)设置器件封装,封装为TQ144,如图2-6所示。

图2-6 选择TQ144

(6)设置器件速度,该参数设置为-7,如图2-7所示。

图2-7 设置速度

(7)设置综合工具,设置为XST,如图2-8所示。

图2-8 选择XST(VHDL/Verilog)

(8)仿真工具选用,采用ISE自带的ISE Simulator,如图2-9所示。

图2-9 选择ISE Simulator

(9)设计输入方式设置,所用语言是VHDL,如图2-10所示。这些都可以从相应的下拉菜单中做出合适的选择。其余保持默认值。

图2-10 选择VHDL

(10)单击按钮,此时系统会弹出如图2-11所示的对话框,在这个对话框中,用户可以选择单击按钮来添加需要的源文件,单击后系统会弹出如图2-12所示的对话框,在该对话框中可以选择需要的源文件,并为此文件命名。用户也可以忽略这一步,直接进入下一步,在以后的操作中再添加所需的源文件。这里采用后者。

图2-11 【New Project Wizard-Createa New Source】对话框

图2-12 【New Source Wizard-Selected Source Type】对话框

(11)单击按钮,此时系统会弹出如图2-13所示的对话框。在这个对话框中,用户可以增加已经存在的源文件,通过单击按钮即可。单击后弹出如图2-14所示的对话框。当第一次建立工程项,不存在已有的源文件,直接进入下一步。

图2-13 【New Project Wizard-Add Existing Sources】对话框

图2-14 选择文件对话框

(12)单击按钮,此时系统会弹出如图2-15所示的窗口。该窗口中列出了创建的工程的相关信息,也就是刚才所做的一系列选择,设计者此时要好好检查一下各项是否都符合自己的要求,如果有误选的地方要及时改正。

图2-15 【New Project Wizard-Project Summary】窗口

(13)单击按钮后,就完成了新工程的创建,创建后,出现如图2-16所示的操作界面。

图2-16 工程界面

创建新工程还可以通过执行菜单命令【File】/【New Project…】,如图2-17所示,此后的操作步骤就与前述相同。

图2-17 菜单命令【File】/【New Project…】

2.2 手动新建源代码

创建好工程项后,下一步就是向其中添加源代码,可以手动输入,也可以利用语言模板。首先介绍手动输入。

(1)在【Sources for】窗口中单击鼠标右键,选择【New Sources…】,如图2-18所示。

图2-18 选择【New Source…】

(2)此时系统会弹出如图2-19所示的对话框。选择【VHDL Module】,在【File name】中输入文件名counter。

图2-19 【New Source Wizard-Select Source Type】对话框

(3)单击按钮,此时系统会弹出如图2-20所示的窗口。在该对话框中,可以设置模块中的端口名称,I/O方向,是否是总线,以及总线的最高位和最低位的值。同样可以忽略这一步,在以后的HDL语言输入阶段重新输入。本例选择忽略,直接进入下一步。

图2-20 【New Source Wizard-Define Module】对话框

(4)单击按钮,此时系统会弹出如图2-21所示的窗口。在该对话框中列出了这个源文件的基本信息,可以看出,在端口定义一项后是空的,因为刚才没有设置,会在以后的操作步骤中输入。

图2-21 【New Source Wizard-Summary】窗口

(5)单击按钮,此时系统会弹出如图2-22所示的对话框。从图中可以看出,在【Sources for】选项卡中多了一个扩展名为.vhd的文件,如图2-23所示,在【Workspace】窗口中有不完整的VHDL文档,设计者需要进一步完善才行。

图2-22 工程界面

图2-23 增加的.vhd文件

(6)完成【Workspace】窗口中的代码输入。按照VHDL的语法规则,完成后的结果如图2-24所示。

图2-24 增加代码后的结果

(7)完成语言输入后,通常都要进行语法检查。在【Processes】窗口中展开【Implement Design】,再展开【Synthesize-XST】,双击其下的【Check Syntax】就开始进行语法检查,如图2-25所示。如果无语法错误,就会在旁边显示一个绿色的对号,如图2-26所示。

图2-25 双击【Check Syntax】

图2-26 正确的语法检查

至此,手动输入源代码的设计输入过程就已完成。

2.3 利用语言模板创建源代码

在ISE中集成了一个语言模板。该模板中提供了常用的逻辑元件和HDL结构的源代码,如各种形式的计数器、触发器、多路复用器和全局缓冲器等,同时设计者也可以添加自己常用的元件或结构的模板到里面。ISE中内嵌的语言模板包括了大量的开发实例和所有FPGA/CPLD语法的介绍和举例,包括Verilog HDL/VHDL的常用模板、FPGA原语使用实例、约束文件的语法规则以及各类指令和符号的说明。语言模板不仅可在设计中直接使用,还是FPGA/CPLD开发最好的工具手册。下面介绍如何利用此模板。

(1)单击窗口右上角的图标,或者执行菜单命令【Edit】/【Language Templates…】,如图2-27所示。此时工作区窗口变成如图2-28所示。

图2-27 菜单命令【Edit】/【Language Templates…】

图2-28 模板窗口

(2)可以看到里面包含了ABEL,Verilog,VHDL三种语言模板,还有用户约束文件的模板。用户如果采用VHDL语言作为设计输入,则要用到的源码在【VHDL】文件夹下,展开它,再展开其下的【Synthesis Constructs】,如图2-29所示。

图2-29 找到【Synthesis Constructs】文件夹

接着再展开【Coding Examples】/【Counters】/【Binary】,此时可以看到其下有三个文件夹,分别是加、减、加减计数器,我们需要的是加计数器,再展开【Down Counters】,如图2-30所示。

图2-30 找到【Down Counters】文件夹

(3)选择只有一个控制端的第一个源代码文件,单击鼠标右键,选择【Use in file】,如图2-31所示。这样,这里面的源码就加载到counter.vhd这个文件中,但是程序语言的位置需要调整,有必要的话还要根据实际需要做相应的修改。比如增加上端口和信号变量。

图2-31 选择【Use in file】

(4)完全修改好后的代码如图2-32所示。

图2-32 修改好后的结果

至此,利用语言模板创建源代码的过程已经操作完毕,接下来设计者同样要对此进行语法检查,操作步骤与前述相同,只有保证在没有语法错误的情况下,用户才能继续后面的工作。

2.4 本章小结

通过本章的学习,设计者需要掌握的是ISE最基本的设计输入流。此工作的前提是设计者必须对VHDL语言有一个全面、深刻的了解。本章只是举了一个简单的例子来说明问题,在实际的工作中,设计者可能面对的是一个浩大的工程,需要的源代码可能成千上万行,此时可能会面对更多的问题,但是基本操作步骤却是大同小异,所以在设计过程中,用户必须具有足够的耐心,才能够完成整个设计过程。

2.5 思考与练习

(1)创建一个新的工程大体可以分为哪几步?

(2)如何向工程中添加源代码?

(3)语言模板有何作用?