半加器预备知识 半加器是与门和异或门的组合电路异或门1 异或门定义 异或门是实现异或运算的数字单元电路,所谓异或运算是指在只有两个输入变量A、B的电路中,当A 和B取值不同时输出为1,否则输出为02 异或门逻辑函数表达式 其中表示异或,+表示与 3 异或门可以用与门,非门和或门的组合来实现,其组合逻辑电路 见图1.0 图1.0 其中 表示或门 表示非门 表示与门4 异或门真值表 异或门真值表5 异或门的逻辑符号 为数字逻辑中的符号 为软件中的符号二 半加器知识介绍1.半加器定义半加器能实现两个一位二进制数的算术加法及向高位进位,而不考虑低位进位的逻辑电路它有两个输入端,两个输出端半加器用异或门及与门来实现2. 真值表两个一位二进制半加器的运算类似于十进制运算,区别是二进制半加器是逢2向高位进一,十进制是逢十向高位进一两个一位二进制半加器的运算法则为 0+0=0;1+0=1;0+1=1;1+1=0,同时向高位进1.根据两个一位二进制半加器的运算法则,我们得出其真值表,如下:半加器的真值表中两个输入是加数A和B,输出有一个是和数C,另一个是进位数D。
被加数A加数B和数C进位数D00000110101011013. 输出逻辑表达式通过观测真值表很容易看出:A,B相异时,输出和数C为1;A,B相同时,输出和数C为0;A,B都为1时,输出进位数D为1;否则输出进位数D为0.据此我们得出如下:C=AB,D=A•B 注 :表示异或,•表示与4.半加器的逻辑电路图 图2.0其中 为异或符号 为与符号三 实验步骤(本实验用VHDL文本语言实现半加器,当然也可用Quartus的图形输入法实现如图2.0的半加器功能)1. 下面我们建立一个半加器的VHDL工程1)选择 开始 > 程序 > Altera > QuartusII5.1,运行QUARTUSII软件或者双击桌面上的QUARTUSII的图标运行QUARTUSII软件,出现如图1-3所示 图1-3 QUARTUSII软件运行界面2)选择软件中的菜单File > New Project Wizard,新建一个工程如图1-4所示 图1-4 新建工程对话框3)点击图1-4中的NEXT进入工作目录,工程名的设定对话框如图1-5所示。
第一个输入框为工程目录输入框,用户可以输入如e:/eda等工作路径来设定工程的目录,设定好后,所有的生成文件将放入这个工作目录第二个输入框为工程名称输入框,第三个输入框为顶层实体名称输入框用户可以设定如EXP1,一般情况下工程名称与实体名称相同使用者也可以根据自已的实际情况来设定工程名和顶层文件名注:本处的顶层文件名必须和程序的实体名一致,否则编译会出错图1-5 指定工程名称及工作目录4)点击NEXT,进入下一个设定对话框,按默认选项直接点击NEXT进行器件选择对话框如图1-6所示这里我们以选用CycloneII系列芯片EP2C35F672C8为例进行介绍用户可以根据使用的不同芯片来进行设定图1-6 器件选择界面首先在对话框的左上方的Family下拉菜单中选取CycloneII,在中间右边的Speed grade下拉菜单中选取8,在左下方的Available devices框中选取EP2C35F672C8,点击NEXT完成器件的选取,进入EDA TOOL设定界面如图1-7所示图1-7 EDA TOOL对话框5)按默认选项,点击Next出现新建工程以前所有的设定信息,如图1-8所示,点击Finish完成新建工程的建立。
图1-8 新建工程信息2、建立VHDL设计文件1)在创建好设计工程后,选择File > NEW…菜单,出现图1-9所示的新建设计文件类型选择窗口这里我们以建立VHDL设计文件为例进行说明图1-9 新建设计文件选择窗口2)在New对话框(图1-9)中选择Device Design Files页下的VHDL File,点击OK按钮,打开图形编辑器对话框,如图1-10所示图中标明了常用的每个按钮的功能-- 下面是引用库library ieee; --库函数use ieee.std_logic_1164.all;--定义了std_logic数据类型及相应运算use ieee.std_logic_arith.all;-- 定义了signed和unsigned数据类型、相应运算---相关类型转换函数use ieee.std_logic_unsigned.all;-- 定义了一些函数,可以使std_logic_vector--类型被当作符号数或无符号数一样进行运算-- 下面是构造实体entity exp1 is --exp1为实体名port( X,Y : in std_logic; --输入 X代表加数,Y代表被加数m_Result,c: out std_logic --计算结果输出m_Result代表和--数,c代表进位数 ); end exp1 ;--结束实体--下面是建立结构体architecture behave of exp1 is --behave为结构体名 begin --以begin为标志开始结构体的描述process(X,Y) --进程,X或Y变化时启动进程beginm_Result<=x xor y; --和数 xor表示异或c <=x and y; --进位数 and表示与 end process; --结束进程end behave; --结束结构体3) 在文本编辑器中输入如下VHDL程序:关于VHDL,我们以上面半加器程序为例来解释VHDL的语法构成,以使大家对VHDL有个整体的把握。
一个VHDL程序有三部分构成,其为 : 1.库和包 library(设计资源);2. 实体 entity(外部端口)3. 结构体 architecture(内部结构)① 库和包 library(设计资源)的介绍1.1 use ieee.std_logic_1164.all;--定义了std_logic数据类型及相应运算1.2 use ieee.std_logic_arith.all;--定义了signed和unsigned数据类型、相应运算--和相关类型转换函数1.3 use ieee.std_logic_unsigned.all;--定义了一些函数,可以使std_logic_vector--类型被当作符号数或无符号数一样进行运算本程序中用到3个库函数包:如下 : 补充:当使用库时,需要说明使用的库名称,同时需要说明库中包集合的名称及范围;每个实体都应独立进行库的说明;库的说明应该在实体之前;经过说明后,实体和结构体就可以自动调用库中的资源;② 实体 entity(外部端口)entity exp1 is --exp1为实体名port( X,Y : in std_logic; m_Result,c: out std_logic ); end exp1 ;--结束实体实体说明主要描述对象的外貌,即对象的输入和输出(I/O)的端口信息,它并不描述器件的具体功能。
在电路原理图上实体相当于元件符号 A D B C图1-1 实体exp1中描述如上图1-1输入和输出(I/O)的端口信息③ 构造体 architecture(内部结构)结构体具体指明了该设计实体的行为,定义了该设计实体的功能,规定了该设计实体的数据流程,指派了实体中内部元件的连接关系architecture behave of exp1 is --behave为结构体名begin --以begin为标志开始结构体的描述process(X,Y) --进程,X或Y变化时启动进程beginm_Result<=x xor y; --和数 xor表示异或c <=x and y; --进位数 and表示与 end process; --结束进程end behave; --结束结构体上面一段结构体描述的实体内部元件的连接关系如下:m_Result=XY C = A•B注:程序中给信号赋值用“<= ” 如 c <=x and y 意思为把X,Y相与后的结果赋给C补充 :半加器若用电路图来表示,其为:其中黑色边框,汉字皆为注释 方框中为结构体描述的电路,左右两边的半方框为实体的描述,定义输入,输出。
4)点击保存按钮,弹出如下选项,将其名命名为exp1,如下图 5)对设计文件进行编译QUARTUSII编译器窗口包含了对设计文件处理的全过程在QUARTUSII软件中选择processin>start compilation菜单项,就会自动编译,出现QUARTUSII的编译器窗口,如下图所示如果文件有错,在软件的下方则会提示错误的原因和位置,以便于使用者进行修改直到设计文件无错整个编译完成,软件会提示编译成功,3 管脚分配在前面选择好一个合适的目标器件(在这个实验中选择为EP2C35F672C8),完成设计的分析综合过程,得到工程的数据文件以后,需要对设计中的输入、输出引脚指定到具体的器件管脚号码,指定管脚号码称为管脚分配或管脚锁定这里介绍两种方法进行管脚锁定1)点击Assignments菜单下面的Assignment Editor,进入到引脚分配窗口如图1-15所示图1-15 进入引脚分配界面首先将要分配管脚的信号放置在To下方双击To下方的《New》,如图1-15所示则会出现如图1-16所示界面 图1-16 信号选择对话框选择Node Finder…进入如图1-17所示的Node Finder对话框界面。
按图1-17中样例设置参数在Filter窗口选择Pins:all,在Named窗口中输入“*”,点击List在Nodes Found窗口出现所有信号的名称,点击中间的 按钮则Sel。