全加器的VHDL程序实现及仿真
一、基本功能概述
在计算机的各种运算过程中,加法运算是最基本的,其他各种运算都可以由加法运算推得,如减法可以转换成补数的加法,乘法可以转换成连续的加法,而除法可以转换成连续的减法,再用补数实现加法运算,因此加法在计算机的运算过程中是非常重要的。
本系统所
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
的加法器就是计算机上实现加法运算的基本器件,它的逻辑功能如下表所示:
二进制输入 进位位输入 和输出 进位位输出
a b cin s co
0 0 0
0 0
1 1 0
0 1 0
0 1
1 0 1
0 1 0
1 0
1 0 1
0 0 1
1 1
1 1 1
根据以上真值表,设计系统的VHDL源程序,并进行程序的编译和仿真。 二、VHDL源程序
下面为全加器的VHDL源程序:
--全加器VHDL源程序,它由两个半加器组成。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; --半加器实体定义
ENTITY half_adder IS
PORT( a , b : IN STD_LOGIC; --定义输入管脚
s , co : OUT STD_LOGIC --定义输出管脚
);
END half_adder;
--半加器结构体定义
ARCHITECTURE half1 OF half_adder IS
SIGNAL c,d:STD_LOGIC;
BEGIN
第 1 页 共 6 页
c <= a OR b;
d <= a NAND b;
co <= NOT d;
s <= c AND d;
END half1;
--全加器定义
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; --全加器实体定义
ENTITY adder IS
PORT( a , b , cin : IN STD_LOGIC; --定义全加器输入管脚
s , co : OUT STD_LOGIC --定义全加器输出管脚
);
END adder;
--全加器结构体定义
ARCHITECTURE full1 OF adder IS
--调用前述半加器逻辑描述模块
COMPONENT half_adder
--管脚说明
PORT( a , b : IN STD_LOGIC;
s , co : OUT STD_LOGIC
);
END COMPONENT;
SIGNAL u0_co,u0_s,u1_co:STD_LOGIC; --中间信号变量定义
BEGIN
--进行端口映射
u0:half_adder PORT MAP(a,b,u0_s,u0_co);
u1:half_adder PORT MAP(u0_s,cin,s,u1_co);
co<=u0_co OR u1_co;
END full1;
三、编译及仿真
在建立了以上全加器的VHDL源程序后就可以对它进行编译了,编译的最终目的是为了生成可以进行仿真、定时分析及下载到可编程器件的相关文件,如*.cnf,*.rpt,*.snf,*.pof等。
编译过程如下:
1、输入完以上全加器的源程序后,进入File/Project子菜单,选择Name项,在工程名(Project
name)对话框中输入adder.vhd,按OK按钮;再在相同的子菜单中选择Set Project to Current
File项;
第 2 页 共 6 页
2、进入MAX+plus ?菜单,在出现的子菜单中选择Compiler选项,将弹出编译对话框; 3、选定最终要下载的芯片:点击主菜单Assign选项,在子菜单中选择Device项,在弹出的对话框中寻找系统适用的芯片,本系统选取MAX 7000,按OK按钮; 4、确定源程序的版本:点击主菜单Interfaces选项,在下级子菜单中选择VHDL Netlist Reader
Settings项,弹出对应的对话框,在该对话框中选择所编VHDL源程序对应的版本号,按OK按钮;
5、完成以上步骤后,按编译对话框中的Start按钮,编译器即可启动。
因为上面输入的源程序没有错误,因此编译会顺利通过,显示编译成功对话框。这样整个编译过程就结束了。
为了验证所编VHDL程序的功能是否满足设计要求,下面对编译通过的程序进行仿真。仿真主要有三个步骤:生成仿真波形文件、仿真和定时分析。
1、生成仿真波形文件
a、 设置当前工程文件名:本程序当前仿真的工程文件名为adder.vhd;
b、 进入MAX+plus ?菜单,在出现的子菜单中选择Waveform Editor选项,将弹出波形编辑窗口。点击File/Save菜单,在弹出的对话框中输入波形文件名为adder.scf,按OK按钮;
c、 确定信号持续时间:点击File/End Time选项,在弹出的对话框中输入信号持续时间为2μs,按OK按钮;
d、 信号波形编辑:本全加器的输入信号有a、b、cin,输出信号有s、co。随机确定三个输入信号的波形;因为输出信号是要仿真的量,所以信号的初始值设置为高阻态(即Z)。设置后的信号波形如下图所示:
2、仿真
仿真波形文件生成以后就可以对输出量进行仿真了。
第 3 页 共 6 页
a、进入MAX+plus ?菜单,在出现的子菜单中选择Simulator选项,将弹出仿真对话框,在End Time框中设置仿真结束时间,仿真结束时间应小于或等于波形编辑持续时间,本系统中也设置为2μs;
b、点击Start按钮,仿真即开始,仿真结束后会弹出一个对话框,显示仿真成功信息,再点击Open SCF按钮就可以显示仿真结果。
本系统的最后仿真结果如下图所示:
从s和co的仿真结果中我们可以看出该结果与系统所要实现的功能表完全吻合,说明所编写的VHDL源程序正确。
3、定时分析
仿真结果从波形上来看,很难给出定量的信号延迟关系,这时可以用定时分析来直观地进行显示。
进入MAX+plus ?菜单,在出现的子菜单中选择Timing Analyzer选项,将弹出定时分析对话框,点击Start按钮,定时分析器即被启动。定时分析结束后会弹出一个结束提示框,点击“确定”按钮即可返回定时分析对话框。如下图所示:
第 4 页 共 6 页
从表中可以看出信号输入后并不是马上有信号输出,而是经过了一定的延迟,本系统的延迟时间为6.0ns。
经过以上步骤后,软件设计部分基本完成。
学 院:机电学院
学 号:036100486
姓 名:虞益挺
日 期:2003-12-3
第 5 页 共 6 页
第 6 页 共 6 页