能以单独的元件模块分别进行编辑、文件存档、编译和综合。程序中共有3 个独立的VHDL 设计模块即2 个元件模块和一个顶层设计模块aaa存档的文件名最好与对应的VHDL 程序的实体一致如可分别将它们取名为or2a.vhd gate.vhd和aaa.vhd。 程序的解析如下:
(1) 作为文件说明部分由双横线“--” 引导了一段注释语句在VHDL 程序的任何一行中双横线“--”后的文字都不参加编译和综合
(2) 实体or2a 语句段定义了或门or2a 的引脚信号a b (输入)和c (输出) 其结构体语句段描述了输入与输出信号间的逻辑关系,即将输入信号a b 相或后传给输出信号端c。由此实体和结构体描述了一个完整的或门元件,这一描述可以进行独立编译、独立综合与存档,或被其它的电路系统所调用。
(3) 实体gate 和结构体ART4 描述了一个如图1 所示的半加器,由其结构体的描述可以看到,它是由一个与非门、一个非门、一个或门和一个与门连接而成的,其逻辑关系来自于半加器真值表(表1)。
(4) 在全加器接口逻辑即顶层文件的VHDL 描述中,根据图1右侧的1位二进 全加器aaa 的原理图,其实体定义了引脚的端口信号属性和数据类型。其中,ain 和bin 分别为两个输入的相加位,cin 为低位进位输入,cout 为进位输出,sum为1位和输出。结构体fd1的功能是利用COMPONENT 和COMPONENT 例化语句将上面由两个实体or2a 和gate 描述的独立器件,按照图1全加器内部逻辑原理图中的接线方式连接起来。
(5) 在结构体fd1中,COMPONENT END COMPONENT 语句结构对所要调用的或门和半加器两个元件作了声明(Component Declaration),并由SIGNAL 语句定义了三个信号d、e和f作为中间信号转存点,以利于几个器件间的信号连接。接下去的PORT MAP( ) 语句称为元件例化语句(Component Instantiation)。所谓例化,在电路板上,相当于往上装配元器件;在逻辑原理图上,相当于从元件库中取了一个元件符号放在电路原理图上,并对此符号的各引脚进行连线。例化也可理解为元件映射或元件连接,MAP 是映射的意思。例如由u2指示的语句表示将实体h_adder 描述的元件的引脚信号a、b、co和so分别连向外部信号e、cin、f、和sum符号=>表示信号连接。
(6) 由图1可见,实体f_adder 引导的逻辑描述也是由三个主要部分构成的,即库、实体和结构体。从表面上看来,库的部分仅包含了一个IEEE 标准库和打开的IEEE.STD_LOGIC_1164.ALL 程序包但实际上从结构体的描述中可以看出,对外部的逻辑有调用的操作,这类似于对库或程序包中的内容作了调用。因此,库结构部分还应将上面的或门和半加器的VHDL描述包括进去,作为工作库中的两个待调用的元件。由此可见,库结构也是VHDL 程序的重要组成部分。
图5. VHDL设计基本结构
一个相对完整的VHDL程序具有如图9所示的比较固定的结构。即首先是各类库及其程序包的使用声明,包括未以显式表达的工作库WORK 库的使用声明。然后是实体描述,在这个实体中含有一个或一个以上的结构体,而在每一个结构体中可以含有一个或多个进程,当然还可以是其它语句结构,例如其它形式的并行语句结构,最后是配置说明语句结构,这个语句结构在以上给出的示例中没有出现。配置说明主要用于以层次化的方式对特定的设计实体进行元件例化,或是为实体选定某个特定的结构体。一个相对完整的VHDL 程序设计构建称为设计实体。
六.VHDL文本输入法设计实验步骤
1.新建项目,选择项目文件夹,输入工程名称,添加文件(一般为空),选择芯片型号,选择仿真工具(一般为默认),最后生成项目。如下图:
图6.选择编辑文件
图7新建项目
2.新建VHDL文件,输入设计语言,保存时要注意与工程文件名相同。如下图:
图8新建VHDL文件
3.保存好后,进行综合编译,如果有错误,折回修改。如下图:
图9综合编译
4、
(1)新建一个.vwf文件,并将其设为仿真激励:菜单Assignments->Settings,在左侧选择Simulation Settings,选择这里的.vwf文件??
(2)设置为功能仿真:菜单Assignments->Settings,在左侧选择Simulation Settings,设置为Functional Simulation??
(3)生成功能仿真网表:菜单Processing->Generate Functional Simulation Netlist?? (4)开始仿真:菜单Processing->Start Simulation 如下图:
图10 输入设置
七.仿真波形分析
.如下图:
cin 1 ain 0 bin 0 其他类似不在一一分析 cout 0 sum 1
(5)经过分析,可知仿真结果与真值表相同
表3 真值表
cin 0 0 0 0 ain 0 0 1 1 bin 0 1 0 1 cout 0 0 0 1 sum 0 1 1 0 1 1 1 1
因此,仿真正确。 八.硬件测试
1.Assignments-.>device->
0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1
图11 硬件选择
引脚锁定,参照下载实验板1K100的引脚号说明书,选择适当的引脚,如下图: