四位全加器实验报告

武汉轻工大学

数学与计算机学院

《计算机组成原理》

实验报告

题    目:     4位二进制计数器实验     

专    业:           软件工程           

班    级:           130X班            

学    号:        1305110XXX          

姓    名:           XX             

指导老师:           郭峰林             

20##年11月3日

【实验环境】

1. Win 7

2. QuartusII9.1计算机组成原理教学实验系统一台。

【实验目的】

1、熟悉VHDL语言的编写。   2、验证计数器的计数功能。

【实验要求】

本实验要求设计一个4位二进制计数器。要求在时钟脉冲的作用下,完成计数功能,能在输出端看到0-9,A-F的数据显示。(其次要求下载到实验版实现显示)

【实验原理】

    计数器是一种用来实现计数功能的时序部件,计数器在数字系统中主要是对脉冲的个数进行计数,以实现测量、计数和控制的功能,同时兼有分频功能。计数器由基本的计数单元和一些控制门所组成,计数单元则由一系列具有存储信息功能的各类触发器构成,这些触发器有RS触发器、T触发器、D触发器及JK触发器等。计数器在数字系统中应用广泛,如在电子计算机的控制器中对指令地址进行计数,以便顺序取出下一条指令,在运算器中作乘法、除法运算时记下加法、减法次数,又如在数字仪器中对脉冲的计数等等。

计数器按计数进制不同,可分为二进制计数器、十进制计数器、其他进制计数器和可变进制计数器,若按计数单元中各触发器所接收计数脉冲和翻转顺序或计数功能来划分,则有异步计数器和同步计数器两大类,以及加法计数器、减法计数器、加/减计数器等,如按预置和清除方式来分,则有并行预置、直接预置、异步清除和同步清除等差别,按权码来分,则有“8421”码,“5421”码、余“3”码等计数器,按集成度来分,有单、双位计数器等等,其最基本的分类如下:

计数器的种类

    下面对同步二进制加法计数器做一些介绍。
    同步计数器中,所有触发器的CP端是相连的,CP的每一个触发沿都会使所有的触发器状态更新。因此不能使用T′触发器。应控制触发器的输入端,即将触发器接成T触发器。只有当低位向高位进位时(即低位全1时再加1),令高位触发器的T=1,触发器翻转,计数加1。

    例如由JK触发器组成的4位同步二进制加法计数器,令其用下降沿触发。下面分析它的工作原理。

   ①输出方程

   ②驱动方程    

 ③状态方程

     本实验中要求用VHDL语言设计同步4位二进制计数器,令其上升沿触发。

说明:为了方便在QuartusII9.1 sp2中完成编译和功能仿真,我们选择芯片Cyclone II,EP2C70F89C6,而在DE2-115开发板中进行下载时,则需要选择与开发板相匹配的芯片Cyclone IVE 中的EP4CE115F29C7。(芯片选择见下文详述,注意每次变换芯片后都需要重新编译

【实验步骤】

1.1.1  创建项目工程

1首先新建一个文件夹。利用资源管理器,新建一个文件夹,如:d : \test1 。作为本项目所有文件存放位置。

桌面图标2、创建一个工程

(1)、双击桌面上的图标          ,打开Quartus II 软件。

   (2)、再开始建立新项目工程。点击:【File】菜单,选择下拉列表中的【New Project Wizard...】命令,打开建立新项目工程的向导对话框。点击next。

完成以上命名工作后,点击Next,进入下一步。

图1.1.3   添加其他工程的文件到本项目工程中

(5)选择设计文件所需要的可编程芯片的型号,实验中我们所用的实验平台是DE2-115开发板。由于DE2-115实验板中的FPGA芯片较新,QuartusII9.1 sp2软件还没有为其提供相应的仿真功能,因此,我们要选择较早的芯片Cyclone II,EP2C70F89C6

图1.1.4   选择目标芯片的型号

点击Next,进入下一步。如下图对话框:

点击Finish,完成新建项目工程的任务。

 1.1.2  创建源程序文件

(1)新建一个VHDL项目文件。

    打开QuartusII,选择菜单“File”®“New”,在New窗中的“ Design Files”中选择编译文件的语言类型,选“VHDL File”(如图所示)。

                                      图1.1.6     选择编辑文件的语言类型

(2)然后在VHDL文本编译窗中键入VHDL程序。VHDL语言的程序代码如下图所示:

图1.1.7   VHDL语言的程序代码

    其中,CLK是时钟信号,CQ是4位数据输出端。每当检测到CLK出现一个上升沿时,计数器就自加1并输出结果。

(3)键入程序后,点击保存,选择默认保存名。

在对工程进行编译处理前,必须做好必要的设置:

(1)选择目标芯片。目标芯片的选择也可以这样来实现:选择Assignments菜单中的Settings项,在弹出的对话框中选择Category项下的Device(也可以直接选择Assignments菜单中的Device项),然后选择目标芯片(方法同创建工程中的第5步)。

(2)选择目标器件闲置引脚的状态。点击Assignments-----Device…,在Device & Pin Options窗口中,选择Unused Pin项,设置目标器件闲置引脚的状态为输入状态(呈高阻态As input tri-stated)。

图1.2.1   设置目标器件闲置引脚的状态为呈高阻态

1.2.2 编译文件。

设计好的电路若要让软件能认识并检查设计的电路是否有错误,需要进行项目工程编译,QuartusII软件能自动对我们设计的电路进行编译和检查设计的正确性。方法如下:

在【Processing 】菜单下,点击【Start Compilation】命令,或直接点击常用工具栏上的      按钮,

开始编译我们的项目。编译成功后,点击 确定 按钮。

点击Processing--->Start Compilation,如下图:

下图表示编译成功,没有报错,警告一般不用管。

图1.2.3   编译成功

1.3  波形仿真

    在【File】菜单下,点击【New】命令。在随后弹出的对话框中,选择【Verification/Debugging  Files】模块,选中【Vector Waveform  File】选项,点击 OK 按钮。即出现空白的波形编辑器(图2-14)。

图1.3.1   新建矢量波形文件

(2)设置仿真时间区域。为了使仿真时间轴设置在一个合理的时间区域上,在Edit菜单中选择End Time项,在弹出的窗口中的Time栏中输入1.0,单位选择“us”,即整个仿真域的时间设定为1.0μs,单击“OK”,结束设置。

图1.3.2   设置仿真时间区域

(3)在【Edit】菜单下,点击【Insert Node or Bus…】命令,或在下图Name列表栏下方的空白处双击鼠标左键,打开编辑输入、输出引脚对话框。

弹出Insert Node or Bus对话框,

(4)在上图新打开的对话框中点击【Node Finder…】按钮,打开【Node Finder】对话框。点击【List】按钮,列出电路所有的端子。点击 >> 按钮,全部加入。点击 OK 按钮,确认。

点击OK回到 Insert Node or Bus 对话框,再点击 OK 按钮,确认。

(5)图中带有符号的,都是输入信号,需要对其进行设置;带图标的都是输出信号,需要对其仿真以后的结果进行观察。

选中 CLK 信号,在 Edit 菜单下,选择【Value => Clock…】命令。或直接点击左侧工具栏上的(时钟按钮)按钮。在随后弹出的对话框的 周期Period 栏目中设定参数为20ns,点击 OK 按钮

图中的Duty Cycle是占空比,可以选50,即占空比为50%的方波。可以通过直接将信号设为“0”或“1”,也可以按住鼠标左键在波形编辑区拖动选择某一段波形,将其值设为“0”或“1”。对于总线数据,可以通过设置其波形。

此后需要保存该波形文件,如图,选择默认文件名。

图1.3.7   保存该波形文件

QuartusII软件集成了电路仿真模块,电路有两种模式:时序仿真和功能仿真,时序仿真模式按芯片实际工作方式来模拟,考虑了元器件工作时的延时情况,而功能仿真只是对设计的电路其逻辑功能是否正确进行模拟仿真。在验证我们设计的电路是否正确时,常选择“功能仿真”模式。

(6)将软件的仿真模式修改为“功能仿真”模式,操作方法如下图所示:

图1.3.8   设置功能仿真模式

(7)    选择好“功能仿真”模式后,需要生成一个“功能仿真的网表文件”,方法如图,选择【Processing】菜单,点击【Generate Functional Simulation Netlist】命令。 

软件运行完成后,点击确定。

(8)开始功能仿真,在【Processing】菜单下,选择【Start Simulation】启动仿真工具,或直接点击常用工具栏上的按钮。仿真成功后,点击确认按钮。

(9)观察仿真结果,对比输入与输出之间的逻辑关系是否符合电路的逻辑功能。

    图1.3.13   4位二进制计数器仿真波形图

    如图所示,时钟每经过一个上升沿,输出加1,达到设计效果。

1.4 下载验证

1.4.1  下载验证流程简介

(1)检查项目工程支持的硬件型号,选择合适的目标芯片;

(2)修改完硬件型号后,最好重新对项目工程再编译一次;

(3)给设计好的原理图配置芯片引脚(引脚锁定);

(4)配置好引脚以后,再编译一次;

(5)连接实验板,检查驱动程序(如果没有驱动程序,就安装该程序;如果已经存在驱动,跳过此步骤);

(6)下载设计文件;

(7)在实验版上进行验证。

1.4.2  下载步骤

1) 检查项目工程支持的硬件型号

在开始引脚配置之前,先检查一下我们在开始建立项目工程时所指定的可编程逻辑器件的型号与实验板上的芯片型号是否一致,假如不一致,要进行修改,否则无法下载到实验板的可编程逻辑器件中。修改的方法如下:

点击常用工具栏上的     按钮,打开项目工程设置对话框,如下图所示。(目标芯片的选择也可以这样来实现:选择“Assignmemts”菜单中的“settings”项,在弹出的对话框中选“Compiler Settings” 项下的Device,首先选目标芯片:Cyclone IVE 中的EP4CE115F29C7

图1.4.2   设置目标芯片型号

如上图方法,选好芯片型号后,点击OK,即修改完成。

2)修改完硬件型号后,最好重新对项目工程再编译一次,以方便后面配置引脚。编译的方法与上面所叙一样,简单来说,只要再点击一下常用工具栏上的     按钮,编译完成后,点击【确定】即可。

3) 给设计好的原理图配置芯片引脚

配置芯片引脚就是将原理图的输入端指定到实验板上可编程芯片与按钮相连的引脚编号,将输出端指定到实验板上可编程芯片与LED发光二极管相连的引脚编号。方法如下:

点击常用工具栏上的     按钮,打开芯片引脚设置对话框,如下图:

图1.4.3   引脚锁定按钮

图1.4.5    4位二进制计数器引脚设置

    根据图中提示完成引脚锁定。 芯片的引脚分配列表见附录表一。

    本试验中,CLK连接到KEY[1]号按键,每按一下KEY[1]按键,都会产生一个脉冲,计数加1输出。

CQ[0]--CQ[3]分别连接到LEDR[0]--LEDR[3]这4个红色二极管上,以二进制数输出0--15(0--1111)。  

4配置好引脚以后,再编译一次。

  下载设计文件

驱动安装成功后,就可以进行下载。点击QuartusII软件常用工具栏上的按钮,打开下载界面,按下图所示设置好相关内容,点击Start按钮即可完成下载。

图1.4.7   下载按钮

    如下图所示,表示下载完成:

结果

总结。

通过试验,让我更加深刻了解并掌握了如何使用Quartus 9.1的使用,工程的建立,文件的保存,特别是如何观察时序仿真图和电路图。 

通过本试验,对于时钟的了解更加深刻,计数器的使用更加的轻松

 

第二篇:4位全加器设计

可编程逻辑器件设计大作业

题    目           四位全加器设计            

      学    院          自动化与电气工程学院

班    级           

姓    名            

学    号            

2104年  12月 30 日

                    

目录

摘要.............................................................................................................................. 1

1.设计目的................................................................................................................. 2

2.设计要求................................................................................................................. 2

3.设计原理................................................................................................................. 2

3.1.四位全加器....................................................................................................... 2

3.2.四位全加器的原理图....................................................................................... 4

4.设计方案................................................................................................................. 4

4.1.仿真软件........................................................................................................... 4

4.2.全加器原理....................................................................................................... 5

4.2.1一位全加器的设计与原理........................................................................... 5

4.2.2四位全加器的原理及程序设计.................................................................... 5

5.程序设计................................................................................................................. 7

6.仿真及结果............................................................................................................ 8

总结与体会.............................................................................................................. 10

参考文献................................................................................................................... 11


摘要

VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式、描述风格以及语法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。

本次设计是用VHDL语言设计四位全加器,并用Quartus II仿真。

关键词:VHDL  四位全加器 Quartus II

四位全加器设计

1.设计目的

复习加法器的原理,掌握加法器的设计实现方法,设计实现数字系统设计中常用的4位全加器,在此基础上进一步熟悉MAX+PLUSⅡ或Quartus II软件的使用方法,熟练掌握EDA的图形编程方法、开发流程、以及组合逻辑电路的设计、分析、综合、仿真方法。

2.设计要求

1)复习EDA的相关技术与方法;

2)掌握VHDL或者Verilog语言,并要求能编写程序。

3)Quartus软件的使用:掌握程序编辑、编译、调试、仿真方法。

4)设计相关简单的电路,完成既定的功能。

3.设计原理

3.1.四位全加器

加法器是数字系统中的基本逻辑器件。例如:为了节省资源,减法器和硬件乘法器都可由加法器来构成。但宽位加法器的设计是很耗费资源的,因此在实际的设计和相关系统的开发中需要注意资源的利用率和进位速度等两方面的问题。

多位加法器的构成有两种方式:并行进位和串行进位方式。并行进位加法器设有并行进位产生逻辑,运算速度快;串行进位方式是将全加器级联构成多位加法器。通常,并行加法器比串行级联加法器占用更多的资源,并且随着位数的增加,相同位数的并行加法器比串行加法器的资源占用差距也会越来越大。

四位全加器可对两个多位二进制数进行加法运算,同时产生进位。当两个二进制数相加时,较高位相加时必须加入较低位的进位项(Ci),以得到输出为和(S)和进位(C0)。

其中CIN表示输入进位位,COUT表示输出进位位,输入A和B分别表示加数和被加数。输出SUM=A+B+CIN,当SUM大于255时,COUT置‘1’。

其管脚图如下:

图3-1 四位全加器管脚图

全加器是能进行加数、被加数和低位来的进位信号相加,并根据求和结果给出该位的进位信号的加法电路。其真值表如表1所示:

表1 全加器真值表

根据真值表可得出下列表达式:

根据以上表达式,可以用数据流方式设计出1位全加器。要设计的是4位全加器,这里采用串行进位来设计。先设计4个1位的全加器,然后将低位的进位输出与高位的进位输入相连,将要进行加法运算的两个4位数的每一位分别作为每一个1位全加器的输入,进行加法运算,所有的1位全加器的输出组成一个4位数,即输入的两个4位数之和,最高位的全加器产生的进位输出即两个4位数求和的进位输出。

3.2.四位全加器的原理图

4位全加器的原理图如图3-2所示:

图3-2 四位全加器原理图

根据图3-2所示,可以采用结构化描述方式设计4位全加器。

4.设计方案

4.1.仿真软件

Quartus II 是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。

Quartus II 除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。

4.2.全加器原理

4.2.1一位全加器的设计与原理

一位全加器的原理图如下:

图4-1 一位全加器原理图

一位全加器的程序设计:

ENTITY adder1 IS                                      --1位全加器设计

PORT(a,b,cin:IN STD_LOGIC;

     s,cout:OUT STD_LOGIC);

END adder1;

ARCHITECTURE dataflow OF adder1 IS       --用数据流方式设计1位全加器

SIGNAL tmp:STD_LOGIC;                              --用tmp表示a?b

BEGIN

tmp<=a XOR b AFTER 10 ns;

s<=tmp XOR cin AFTER 10 ns;

cout<=(a AND b)OR(tmp AND cin) AFTER 20 ns;

END dataflow;

4.2.2四位全加器的原理及程序设计

要设计的是4位全加器是采用串行进位来设计的。首先根据已经设计好的一位的全加器通过将低位的进位输出与高位的进位输入相连的方法,组成所需要的四位全加器。

其程序如下:

ENTITY adder4 IS                                      --4位全加器设计

PORT(a,b:IN STD_LOGIC_VECTOR(3 DOWNTO 0);

     cin:IN STD_LOGIC;

       s:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

    cout:OUT STD_LOGIC);

END adder4;

ARCHITECTURE structural OF adder4 IS   --用结构化描述风格设计4位全加器

COMPONENT adder1

PORT(a,b,cin:IN STD_LOGIC;

     s,cout:OUT STD_LOGIC);

END COMPONENT;

SIGNAL x,y,z:STD_LOGIC;

FOR u1,u2,u3,u4:adder1 USE ENTITY WORK.adder1(dataflow);

BEGIN

u1:adder1 PORT MAP(a(0),b(0),cin,s(0),x);

u2:adder1 PORT MAP(a(1),b(1),x,s(1),y);

u3:adder1 PORT MAP(a(2),b(2),y,s(2),z);

u4:adder1 PORT MAP(a(3),b(3),z,s(3),cout);

END structural;

四位全加器的原理图:

图4-2 四位全加器原理图

5.程序设计

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY adder1 IS                                      --1位全加器设计

PORT(a,b,cin:IN STD_LOGIC;

     s,cout:OUT STD_LOGIC);

END adder1;

ARCHITECTURE dataflow OF adder1 IS       --用数据流方式设计1位全加器

SIGNAL tmp:STD_LOGIC;                              --用tmp表示a?b

BEGIN

tmp<=a XOR b AFTER 10 ns;

s<=tmp XOR cin AFTER 10 ns;

cout<=(a AND b)OR(tmp AND cin) AFTER 20 ns;

END dataflow;

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY adder4 IS                                      --4位全加器设计

PORT(a,b:IN STD_LOGIC_VECTOR(3 DOWNTO 0);

     cin:IN STD_LOGIC;

       s:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

    cout:OUT STD_LOGIC);

END adder4;

ARCHITECTURE structural OF adder4 IS   --用结构化描述风格设计4位全加器

COMPONENT adder1

PORT(a,b,cin:IN STD_LOGIC;

     s,cout:OUT STD_LOGIC);

END COMPONENT;

SIGNAL x,y,z:STD_LOGIC;

FOR u1,u2,u3,u4:adder1 USE ENTITY WORK.adder1(dataflow);

BEGIN

u1:adder1 PORT MAP(a(0),b(0),cin,s(0),x);

u2:adder1 PORT MAP(a(1),b(1),x,s(1),y);

u3:adder1 PORT MAP(a(2),b(2),y,s(2),z);

u4:adder1 PORT MAP(a(3),b(3),z,s(3),cout);

END structural;

6.仿真及结果

根据上面的程序我进行了仿真,首先是对1位全加器进行仿真,结果如图6-1所示:

1.png

图6-1 1位全加器仿真图

由图6-1可以看出,1位全加器的仿真结果与表1相符,说明1位全加器设计成功。

然后我又对4位全加器进行仿真,结果如图6-2所示:

QQ截图未命名.png

图6-2  4位全加器仿真图

由图6-2可以看出,对设计的全加器进行了2组数据的仿真,由于4位全加器最低位的进位为0,因此将cin置0,仿真的结果与实际的运算结果是相同的。

由仿真结果可知,设计的程序完成了全加器的功能,因此该程序正确。

总结与体会

时光飞逝,一转眼,一个学期又进尾声了,本学期的能力拓展强化训练也完成了。

俗话说“好的开始是成功的一半”。说起课程设计,我认为最重要的就是做好设计的预习,认真的研究老师给的题目,选一个自己有兴趣的题目。其次,老师对实验的讲解要一丝不苟的去听去想,因为只有都明白了,做起设计就会事半功倍,如果没弄明白,就迷迷糊糊的去选题目做设计,到头来一点收获也没有。最后,要重视程序的模块化,修改的方便,也要注重程序的调试,掌握其方法。

当然,这其中也有很多问题,第一、不够细心比如由于粗心大意,由于对课本理论的不熟悉导致编程出现错误。第二,是在学习态度上,这次课设是对我的学习态度的一次检验。对于这次课程设计,我的第一大心得体会就是作为一名工程技术人员,要求具备的首要素质绝对应该是严谨。我们这次课程设计所遇到的多半问题多数都是由于我们不够严谨。第三,在做人上,我认识到,无论做什么事情,只要你足够坚强,有足够的毅力与决心,有足够的挑战困难的勇气,就没有什么办不到的。

从开始得到老师给定课题时的一脸茫然到老师讲解后内容的初步了解再到自己通过查资料、与同学共同探讨、经过老师指导后,自己设计并写出这份课程报告,心中充满了成就感。通过课程设计还拓宽了知识面,学到了很多课本上没有的知识,报告只有自己去做能加深对知识的理解,任何困难只有自己通过努力去克服才能收获成功的喜悦。本次课程设计还让我明白了理论联系实际的重要性,只有通过实际的动手才能加深对于理论知识的理解。在做课程设计的过程中我发现自己对课本知识的理解不够深刻,掌握的不太牢靠,以后一定会努力地温习以前的知识。

再次感谢老师的辅导以及同学的帮助,是他们让我有了一个更好的认识,无论是学习还是生活,生活是实在的,要踏实走路。通过这次课程设计我学习了很多的东西,使我眼界打开,感受颇深。

参考文献

[1]王永军,李景华,数字逻辑与数字系统(第3版),电子工业出版社.

[2]陈书开,王毅等,计算机组成与系统结构,武汉大学出版社,2005.8.

[3]王毓银,陈鸽,杨静,赵亦松,数字电路逻辑设计,高等教育出版社,2006.

[4]罗克露,单立军,刘辉,俸志刚,计算机组成原理,电子工业出版社.

[5]曾繁泰.EAD工程概论.北京:清华大学出版社,2004

[6]潘松.VHDL实用教程[M].成都:电子科技大学出版社,2000

相关推荐