文档库 最新最全的文档下载
当前位置:文档库 › 四位二进制加法器与乘法器

四位二进制加法器与乘法器

四位二进制加法器与乘法器
四位二进制加法器与乘法器

1 引言

EDA(ElectronicDesign Automatic)技术的应用引起电子产品及系统开发的革命性变革。VHDL语言作为可编程逻辑器件的标准语言描述能力强,覆盖面广,抽象能力强,在实际应用中越来越广泛。

1.1 设计的目的

本次设计的目的就是在掌握EDA实验开发系统的初步使用基础上,了解EDA技术,了解并掌握VHDL硬件描述语言的设计方法和思想,通过学习的VHDL语言结合电子电路的设计知识理论联系实际,掌握所学的课程知识,学习VHDL基本单元电路的综合设计应用。通过对四位二进制加法器和四位二进制乘法器的设计,巩固和综合运用所学课程,加深对数字电路和VHDL基本单元的理解,理论联系实际,提高设计能力,提高分析、解决计算机技术实际问题的独立工作能力。通过课程设计深入理解VHDL语言的精髓,达到课程设计的目标,加法器的设计可以加深对门电路的理解,乘法器的设计可以使对计算机怎样工作有了更深了解。

1.2 设计的基本内容

本文是设计的一个四位二进制加法器和四位二进制乘法器。四位二进制加法器使用门电路构成,用VHDL语言对其实现。乘法器使用VHDL语言里的乘法运算符实现,使用数码管动态显示一个三位数结果。然后用VHDL语言编写相应的程序,在计算机上实现,最后进行了加法器和乘法器的仿真分析。

2 EDA、VHDL简介

2.1 EDA简介

EDA是电子设计自动化(Electronic Design Automation)缩写,是90年代初从CAD (计算机辅助设计)、CAM(计算机辅助制造)、CAT(计算机辅助测试)和CAE(计算机辅助工程)的概念发展而来的。EDA技术是以计算机为工具,根据硬件描述语言HDL(Hardware Description language)完成的设计文件,自动地完成逻辑编译、化简、分割、综合及优化、布局布线、仿真以及对于特定目标芯片的适配编译和编程下载等工作。典型的EDA工具中必须包含两个特殊的软件包,即综合器和适配器。综合器的功能就是将设计者在EDA平台上完成的针对某个系统项目的HDL、原理图或状态图形描述,针对给定的硬件系统组件,进行编译、优化、转换和综合,最终获得我们欲实现功能的描述文件。综合器在工作前,必须给定所要实现的硬件结构参数,它的功能就是将软件描述与给定的硬件结构用一定的方式联系起来。也就是说,综合器是软件描述与硬件实现的一座桥梁。综合过程就是将电路的高级语言描述转换低级的、可与目标器件FPGA/CPLD相映射的网表文件。

适配器的功能是将由综合器产生的王表文件配置与指定的目标器件中,产生最终的下载文件,如JED文件。适配所选定的目标器件(FPGA/CPLD芯片)必须属于在综合器中已指定的目标器件系列。

硬件描述语言HDL是相对于一般的计算机软件语言,如:C、PASCAL而言的。HDL语言使用与设计硬件电子系统的计算机语言,它能描述电子系统的逻辑功能、电路结构和连接方式。设计者可利用HDL程序来描述所希望的电路系统,规定器件结构特征和电路的行为方式;然后利用综合器和适配器将此程序编程能控制FPGA和CPLD 内部结构,并实现相应逻辑功能的的门级或更底层的结构网表文件或下载文件。目前,就FPGA/CPLD开发来说,比较常用和流行的HDL主要有ABEL-HDL、AHDL和VHDL。

2.2 硬件描述语言——VHDL

2.2.1 VHDL简介

VHDL语言是一种用于电路设计的高级语言。它在80年代的后期出现。最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言。但是,由于它在一定程度上满足了当时的设计需求,于是他在1987

年成为A I/IEEE的标准(IEEE STD 1076-1987)。1993年更进一步修订,变得更加完备,成为A I/IEEE的A I/IEEE STD 1076-1993标准。目前,大多数的CAD厂商出品的EDA 软件都兼容了这种标准。VHDL的英文全写是:VHSIC(Very High eed Integrated Circuit)Hardware Descriptiong Language.翻译成中文就是超高速集成电路硬件描述语言。因此它的应用主要是应用在数字电路的设计中。目前,它在中国的应用多数是用在FPGA/CPLD/EPLD的设计中。当然在一些实力较为雄厚的单位,它也被用来设计ASIC。VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。VHDL比其它硬件描述语言相比有以下优点:(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。

(2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。

(3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。符合市场需求的大规模系统高效,

高速的完成必须有多人甚至多个代发组共同并行工作才能实现。(4)对于用VHDL 完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL 描述设计转变成门级网表。

(5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。

2.2.2 VHDL语言特点

应用VHDL进行系统设计,有以下几方面的特点。

(一)功能强大

VHDL具有功能强大的语言结构。它可以用明确的代码描述复杂的控制逻辑设计。

并且具有多层次的设计描述功能,支持设计库和可重复使用的元件生成。VHDL是一种设计、仿真和综合的标准硬件描述语言。

(二)可移植性

VHDL语言是一个标准语言,其设计描述可以为不同的EDA工具支持。它可以从一个仿真工具移植到另一个仿真工具,从一个综合工具移植到另一个综合工具,从一个工作平台移植到另一个工作平台。此外,通过更换库再重新综合很容易移植为ASIC设计。

(三)独立性

VHDL的硬件描述与具体的工艺技术和硬件结构无关。设计者可以不懂硬件的结构,也不必管最终设计实现的目标器件是什么,而进行独立的设计。程序设计的硬件目标器件有广阔的选择范围,可以是各系列的CPLD、FPGA及各种门阵列器件。

(四)可操作性

由于VHDL具有类属描述语句和子程序调用等功能,对于已完成的设计,在不改变源程序的条件下,只需改变端口类属参量或函数,就能轻易地改变设计的规模和结构。

(五)灵活性

VHDL最初是作为一种仿真标准格式出现的,有着丰富的仿真语句和库函数。使其在任何大系统的设计中,随时可对设计进行仿真模拟。所以,即使在远离门级的高层次(即使设计尚未完成时),设计者就能够对整个工程设计的结构和功能的可行性进行查验,并做出决策。

3 设计规划过程

3.1 加法器与乘法器的原理

3.1.1四位二进制加法器的组成原理

加法器是运算电路的核心。计算机中实现减法、乘法和除法都要最终转化成加法来运算。

本实验才没有用VHDL语言中的加法运算符。而是用基本门电路来实现的。一方面可以提高运算速度,另一方面可以使我们加深对数字电路的认识。图3.1所示是四位二进制加法器的原理框图。

图3.1 加法器系统框图

3.1.2 四位二进制乘法器的组成原理

本实验学习VHDL中乘法的使用。在VHDL语言中,一般有c(7 downto 0)=a(3 downto 0)*b(3 downto 0)。所以4位二进制数的乘积是8位二进制数,为了更符合习惯,

我们把结果转化成了十进制。所以结果范围是0—225,即0—15*15。

本实验采用的三位数在数码管上显示的方法是:分别确定百位、十位和个位。送数码管动态显示。采用与各个数逐一比较的方法确定。如百位的确定可以将结果与200和100比较,若比200大则百位为2,在100到200之间则百位为1,小于100则百位为0,不显示。十位的确定可以将结果去掉百位,然后与10,20,….90比较而得。

本文设计的四位二进制乘法器系统框图如图3.2所示。

图3.2 乘法器系统框图

3.2加法器与乘法器的设计

四位二进制加法器和乘法器由VHDL实现后,利用EDA工具对各模块进行了时序仿真(Timing Simulation),其目的是通过时序可以更清楚的了解程序的工作过程。

3.2.1加法器的设计

1位全加器的VHDL程序:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

entity add1 is -- 1位全加器

port( a,b:in std_logic;

cin:in std_logic;

cout:out std_logic;

s:out std_logic

);

end add1;

architecture rtl of add1 is

begin

process(a,b,cin) --列举所有情况对应的输出

variable temp,temp1:std_logic;

begin

temp:=a xor b;

temp1:= temp xor cin;

cout<=(temp and cin)or (a and b);

s<=temp1;

end process;

end rtl; --以上是对add1的定义

以上是对一位全加器的定义,运用一位全加器构成四位全加器。其中引脚分配如下:

备注:cin接地。

四位二进制加法器仿真图如下所示:

仿真分析:cin为输入信号,表示上一次的进位,b,a为输入信号,表示两个相加的数,s 为输出信号,表示本次运算的结果,cout为进位输出信号,表示本次运算的进位,如图所示:当cin为0,a,b为1时,输出为:s=0,cout=1,当cin=1,a=1,b=0时,输出为:s=0,cout=1,当cin=1,a=1,b=1时候,输出为:s=1,cout=1。

3.2.2乘法器的设计

乘法器的设计用VHDL乘法运算符实现。

在VHDL语言中,一般有c(7 downto 0)=a(3 downto 0)*b(3 downto 0)。所以4位二进制数的乘积是8位二进制数,为了更符合习惯,我们把结果转化成了十进制。所以结果范围是0—225,即0—15*15。

本实验采用的三位数在数码管上显示的方法是:分别确定百位、十位和个位。送数

码管动态显示。采用与各个数逐一比较的方法确定。如百位的确定可以将结果与200和100比较,若比200大则百位为2,在100到200之间则百位为1,小于100则百位为0,不显示。十位的确定可以将结果去掉百位,然后与10,20,….90比较而得。

VHDL语言设计如下:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity multiply is --构造体描述4位乘法器

port( clk:in std_logic;

a,b:in std_logic_vector(3 downto 0);

led_data:out std_logic_vector(7 downto 0);

seg_sel:out std_logic_vector(2 downto 0)

);

end multiply;

architecture rtl of multiply is

signal led_data2,led_data1,led_data0: std_logic_vector(7 downto 0);--LED显示代码,寄存十位个位的数

signal displayclk: std_logic;

begin

process(a,b)

variable s: std_logic_vector(7 downto 0);--乘积

variable bai,shiwei,gewei: std_logic_vector(3 downto 0);--乘积的十位个位

begin

s(7 downto 0):=a(3 downto 0)*b(3 downto 0);

if s>="11001000" then bai:="0010";s:=s-"11001000"; --200以上

elsif s>="01100100" then bai:="0001";s:=s-"01100100"; --100以上

else bai:="0000";

end if;

if s>="01011010" then shiwei:="1001";s:=s-"01011010";gewei:=s(3 downto 0);--90以上elsif s>="01010000" then shiwei:="1000";s:=s-"01010000";gewei:=s(3 downto 0);--80以上

elsif s>="01000110" then shiwei:="0111";s:=s-"01000110";gewei:=s(3 downto 0); --70以上

elsif s>="00111100" then shiwei:="0110";s:=s-"00111100";gewei:=s(3 downto 0);--60以上

elsif s>="00110010" then shiwei:="0101";s:=s-"00110010";gewei:=s(3 downto 0);--50以上

elsif s>="00101000" then shiwei:="0100";s:=s-"00101000";gewei:=s(3 downto 0);--40以上

elsif s>="00011110" then shiwei:="0011";s:=s-"00011110";gewei:=s(3 downto 0);--30以上

elsif s>="00010100" then shiwei:="0010";s:=s-"00010100";gewei:=s(3 downto 0);--20以上

elsif s>="00001010" then shiwei:="0001";s:=s-"00001010";gewei:=s(3 downto 0);--10以上

else gewei:=s(3 downto 0);shiwei:="0000";

end if;

case bai is

when "0001" => led_data2<="11111001";

when "0010" => led_data2<="10100100";

when others => led_data2<="11111111";

end case;

case shiwei is

when "0000" => led_data1<="11000000";

when "0001" => led_data1<="11111001";

when "0010" => led_data1<="10100100";

when "0011" => led_data1<="10110000";

when "0100" => led_data1<="10011001";

when "0101" => led_data1<="10010010";

when "0110" => led_data1<="10000010";

when "0111" => led_data1<="11111000";

when "1000" => led_data1<="10000000";

when "1001" => led_data1<="10010000";

when others => led_data1<="11111111";

end case;

case gewei is

when "0000" => led_data0<="11000000";

when "0001" => led_data0<="11111001";

when "0010" => led_data0<="10100100";

when "0011" => led_data0<="10110000";

when "0100" => led_data0<="10011001";

when "0101" => led_data0<="10010010";

when "0110" => led_data0<="10000010";

when "0111" => led_data0<="11111000";

when "1000" => led_data0<="10000000";

when "1001" => led_data0<="10010000";

when others => led_data0<="11111111";

end case;

end process;

process(clk)

variable cnt:integer range 0 to 20000; --1KHZ扫描显示时钟begin

if clk'event and clk='1' then cnt:=cnt+1;

if cnt<10000 then displayclk<='1';

elsif cnt<20000 then displayclk<='0';

else cnt:=0;displayclk<='0';

end if;

end if;

end process;

process (displayclk) --显示两位variable cnt2: std_logic_vector(1 downto 0);

begin

if displayclk'event and displayclk='1' then cnt2:=cnt2+1;

if cnt2="01" then

seg_sel<="001";

led_data<=led_data0;

elsif cnt2="010" then

seg_sel<="010";

led_data<=led_data1;

elsif cnt2="11" then

cnt2:="00";

seg_sel<="100";

led_data<=led_data2;

end if;

end if;

end process;

end rtl;

实验引脚分配如下:

四位二进制乘法器仿真图如下所示:

仿真分析:clk为时钟脉冲输入信号,a,b是输出信号表示要参与运算的两个数,Led_data,seg_set为输出信号,表示计算的结果。

结束语

通过两周的紧张工作,最后完成了我的设计任务——四位二进制加法器和乘法器的设计。通过本次课程设计的学习,我深深的体会到设计课的重要性和目的性所在。本次设计课不仅仅培养了我们实际操作能力,也培养了我们灵活运用课本知识完成工作的能力。加法器和乘法器虽然是比较简单的设计课程,但它给了我一个锻炼的机会和检验的机会,也给我复习计算机组成原理这门课提供了方便。希望学校以后多安排一些类似的实践环节,让同学们学以致用。加法器和乘法器的设计让我对门电路更有清楚了解,对VHDL语言也有了一定的了解。加法器是计算机运算中的重要组成部分,而且是其他运算实现的基础。

在设计中要求我要有耐心和毅力,还要细心,稍有不慎,一个小小的错误就会导致结果的不正确,感谢肖晓丽老师耐心的给我指出了错误,让我面对错误的检查有足够的耐心,通过这次设计和设计中遇到的问题,也积累了一定的经验,对以后从事设计工作会有一定的帮助。在应用VHDL的过程中让我真正领会到了其并行运行与其他软件顺序执行的差别及其在电路设计上的优越性。VHDL语言具有多层次描述系统硬件功能的能力,可以从系统的数学模型直到门级电路,用来进行数字系统的设计方便灵活。

致谢

在此次课程设计中,非常感谢肖晓丽老师对我的指导与大力的帮助。如果没有她严谨细致、一丝不苟地批阅和指正,本文很难在这个短时间(两周)内完成。在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!

参考文献

[1]David A.Patterson.计算机组成和设计[M].清华大学出版社,2003年12月

[2]William Stallings.计算机组织与结构[M].高等教育出版社,2001年8月

[3] 曾繁泰,陈美金.VHDL程序设计[M].清华大学出版社,2001

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

[5]王爱英.计算机组成与结构[M].清华大学出版社.2001年2月

附件:

加法器的VHDL语言设计:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

entity add1 is -- 1位全加器

port( a,b:in std_logic;

cin:in std_logic;

cout:out std_logic;

s:out std_logic

);

end add1;

architecture rtl of add1 is

begin

process(a,b,cin) --列举所有情况对应的输出

variable temp,temp1:std_logic;

begin

temp:=a xor b;

temp1:= temp xor cin;

cout<=(temp and cin)or (a and b);

s<=temp1;

end process;

end rtl; --以上是对add1的定义

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( a0,a1,a2,a3:in std_logic; --四位二进制输出

b0,b1,b2,b3:in std_logic;--四位二进制输出

cin:in std_logic;--进位输入,本实验设为0

cout:out std_logic;--进位输出

s0,s1,s2,s3:out std_logic --和

);

end adder4;

architecture rtl of adder4 is

signal cingnd:std_logic; --由于拨玛开关只有8个,故进位输入不接signal cout1,cout2,cout3:std_logic;--第一位第二为第三位向高位进位输出component add1 is --元件例化语句,1位全加器port( a,b:in std_logic;

cin:in std_logic;

cout:out std_logic;

s:out std_logic

);

end component;

begin

cingnd<='0';

u1: add1 port map( a=>a0, --模块的名称映射

b=>b0,

cin=>cingnd,

cout=>cout1,

s=>s0

);

u2: add1 port map( a=>a1,

b=>b1,

cin=>cout1,

cout=>cout2,

s=>s1

);

u3: add1 port map( a=>a2,

b=>b2,

cin=>cout2,

cout=>cout3,

s=>s2

);

u4: add1 port map( a=>a3,

b=>b3,

cin=>cout3,

cout=>cout,

s=>s3

);

end rtl;

乘法器的VHDL语言设计:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity multiply is --构造体描述4位乘法器port( clk:in std_logic;

a,b:in std_logic_vector(3 downto 0);

led_data:out std_logic_vector(7 downto 0);

seg_sel:out std_logic_vector(2 downto 0)

);

end multiply;

architecture rtl of multiply is

signal led_data2,led_data1,led_data0: std_logic_vector(7 downto 0);--LED显示代码,寄存十位个位的数

signal displayclk: std_logic;

begin

process(a,b)

variable s: std_logic_vector(7 downto 0);--乘积

variable bai,shiwei,gewei: std_logic_vector(3 downto 0);--乘积的十位个位

begin

s(7 downto 0):=a(3 downto 0)*b(3 downto 0);

if s>="11001000" then bai:="0010";s:=s-"11001000"; --200以上

elsif s>="01100100" then bai:="0001";s:=s-"01100100"; --100以上

else bai:="0000";

end if;

if s>="01011010" then shiwei:="1001";s:=s-"01011010";gewei:=s(3 downto 0);--90以上elsif s>="01010000" then shiwei:="1000";s:=s-"01010000";gewei:=s(3 downto 0);--80以上

elsif s>="01000110" then shiwei:="0111";s:=s-"01000110";gewei:=s(3 downto 0); --70以上

elsif s>="00111100" then shiwei:="0110";s:=s-"00111100";gewei:=s(3 downto 0);--60以上

elsif s>="00110010" then shiwei:="0101";s:=s-"00110010";gewei:=s(3 downto 0);--50以上

elsif s>="00101000" then shiwei:="0100";s:=s-"00101000";gewei:=s(3 downto 0);--40以上

elsif s>="00011110" then shiwei:="0011";s:=s-"00011110";gewei:=s(3 downto 0);--30以上

elsif s>="00010100" then shiwei:="0010";s:=s-"00010100";gewei:=s(3 downto 0);--20以上

elsif s>="00001010" then shiwei:="0001";s:=s-"00001010";gewei:=s(3 downto 0);--10以上

else gewei:=s(3 downto 0);shiwei:="0000";

end if;

case bai is

when "0001" => led_data2<="11111001";

when "0010" => led_data2<="10100100";

when others => led_data2<="11111111";

end case;

case shiwei is

when "0000" => led_data1<="11000000";

when "0001" => led_data1<="11111001";

when "0010" => led_data1<="10100100";

when "0011" => led_data1<="10110000";

when "0100" => led_data1<="10011001";

when "0101" => led_data1<="10010010";

when "0110" => led_data1<="10000010";

when "0111" => led_data1<="11111000";

when "1000" => led_data1<="10000000";

when "1001" => led_data1<="10010000";

when others => led_data1<="11111111";

end case;

case gewei is

when "0000" => led_data0<="11000000";

when "0001" => led_data0<="11111001";

when "0010" => led_data0<="10100100";

when "0011" => led_data0<="10110000";

when "0100" => led_data0<="10011001";

when "0101" => led_data0<="10010010";

when "0110" => led_data0<="10000010";

when "0111" => led_data0<="11111000";

when "1000" => led_data0<="10000000";

when "1001" => led_data0<="10010000";

when others => led_data0<="11111111";

end case;

end process;

process(clk)

variable cnt:integer range 0 to 20000; --1KHZ扫描显示时钟begin

if clk'event and clk='1' then cnt:=cnt+1;

if cnt<10000 then displayclk<='1';

elsif cnt<20000 then displayclk<='0';

else cnt:=0;displayclk<='0';

end if;

end if;

end process;

process (displayclk) --显示两位variable cnt2: std_logic_vector(1 downto 0);

begin

if displayclk'event and displayclk='1' then cnt2:=cnt2+1;

if cnt2="01" then

seg_sel<="001";

led_data<=led_data0;

elsif cnt2="010" then

seg_sel<="010";

led_data<=led_data1;

elsif cnt2="11" then

cnt2:="00";

seg_sel<="100";

led_data<=led_data2;

end if;

end if;

end process;

end rtl;

实验四、 计数器的设计 电子版实验报告

实验四:计数器的设计 实验室:信息楼247 实验台号: 4 日期: 专业班级:机械1205 姓名:陈朝浪学号: 20122947 一、实验目的 1. 通过实验了解二进制加法计数器的工作原理。 2. 掌握任意进制计数器的设计方法。 二、实验内容 (一)用D触发器设计4位异步二进制加法计数器 由D触发器组成计数器。触发器具有0和1两种状态,因此用一个触发器 就可以表示1位二进制数。如果把n个触发器串起来,就可以表示N位二进制 数。(用两个74LS74设计实现) (二)利用74LS161设计实现任意进制的计数器 设计要求:学生以实验台号的个位数作为所设计的任意进制计数器。 先熟悉用1位74LS161设计十进制计数器的方法。 ①利用置位端实现十进制计数器。 ②利用复位端实现十进制计数器。 提示:设计任意计数器可利用芯片74LS161和与非门设计,74LS00为2输 入与非门,74LS30为8输入与非门。 74LS161为4位二进制加法计数器,其引脚图及功能表如下。

三、实验原理图 1.由4个D触发器改成的4位异步二进制加法计数器 2.由74LS161构成的十进制计数器

四、实验结果及数据处理 1.4位异步二进制加法计数器实验数据记录表 2. 画出你所设计的任意进制计数器的线路图,并说明设计思路。

设计思路:四进制为四个输出Q3Q2Q1Q0=0000,0001,0010,0011循环,第一个无效状态为0100 1,置位法设计四进制计数器:当检测到输入为0011时,先输出显示3,然后再将D 置于低电位,计数器输出Q3Q2Q1Q0复位。 2,复位法设计四进制计数器:当检测到第一个无效状态0100时,通过与非门的反馈计数器的Cr首先置于低电平使计数器复位为0000。 五、思考题 1. 由D触发器和JK触发器组成的计数器的区别? 答:D触发器是cp上升沿触发,JK触发器是下降沿触发。 2. 74LS161是同步还是异步,加法还是减法计数器? 答:同步。加法计数器。 3. 设计十进制计数器时将如何去掉后6个计数状态的? 答:加一个与非门形成负反馈。当计数到第一个无效状态Q3Q2Q1Q0==1010时,Q3和Q1全为1,Q1,Q3接与非门,输出作为复位信号,使所有触发器复位,从而去掉了后6个状态。

4位全加器实验报告

四位全加器 11微电子黄跃21 【实验目的】 采用modelsim集成开发环境,利用verilog硬件描述语言中行为描述模式、结构描述模式或数据流描述模式设计四位进位加法器。 【实验内容】 加法器是数字系统中的基本逻辑器件。多位加法器的构成有两种方式:并行进位和串行进位方式。并行进位加法器设有并行进位产生逻辑,运算速度快;串行进位方式是将全加器级联构成多位加法器。通常,并行加法器比串行级联加法器占用更多的资源,并且随着位数的增加,相同位数的并行加法器比串行加法器的资源占用差距也会越来越大。 实现多位二进制数相加的电路称为加法器,它能解决二进制中1+1=10的功能(当然还有 0+0、0+1、1+0). 【实验原理】

表2 全加器逻辑功能真值表 图4 全加器方框图 图5 全加器原理图 多位全加器连接可以是逐位进位,也可以是超前进位。逐位进位也称串行进位,其逻辑电路简单,但速度也较低。 四位全加器 如图9所示,四位全加器是由半加器和一位全加器组建而成: 图9 四位全加器原理图 【实验步骤】 (1)建立新工程项目: 打开modelsim软件,进入集成开发环境,点击File→New project建立一

个工程项目adder_4bit。 建立文本编辑文件: 点击File→New在该项目下新建Verilog源程序文件 并且输入源程序。 (2)编译和仿真工程项目: 在verilog主页面下,选择Compile— Compile All或点击工具栏上的按钮启动编译,直到project出现status栏全勾,即可进行仿真。 选择simulate - start simulate或点击工具栏上的按钮开始仿真,在跳出来的 start simulate框中选择work-test_adder_4bit测试模块,同时撤销Enable Optimisim前的勾,之后选择ok。 在sim-default框内右击选择test_adder_4bit,选择Add Wave,然后选择simulate-run-runall,观察波形,得出结论,仿真结束。 四位全加器 1、原理图设计 如图9所示,四位全加器是由半加器和一位全加器组建而成: 图9 四位全加器原理图 【仿真和测试结果】 下图为四位全加器的仿真图:

四位二进制加法器课程设计

课题名称与技术要求 课题名称: 四位二进制加法器设计 技术要求: 1)四位二进制加数与被加数输入 2)二位数码管显示 摘要 本设计通过八个开关将A3,A2,A1,A0和B3,B2,B1,B0信号作为加数和被加数输入四位串行进位加法器相加,将输出信号S3,S2,S1,S0和向高位的进位 C3通过译码器Ⅰ译码,再将输出的Y3,Y2,Y1,Y0和X3,X2,X1,X0各自分别通过一个74LS247译码器,最后分别通过数码管BS204实现二位显示。 本设计中译码器Ⅰ由两部分组成,包括五位二进制译码器和八位二进制输出器。信号S3,S2,S1,S0和向高位的进位C3输入五位二进制-脉冲产生器,将得到的n(五位二进制数码对应的十进制数)个脉冲信号输入八位二进制输出器,使电路的后续部分得以执行。 总体论证方案与选择 设计思路:两个四位二进制数的输入可用八个开关实现,这两个二进制数经全加器求和后最多可以是五位二进制数。本题又要求用两个数码管分别显示求和结果的十进制十位和各位,因此需要两个译码器Ⅱ分别译码十位和

个位。综上所述,需要设计一个译码器Ⅰ,能将求和得到的五位二进制数译成八位,其中四位表示这个五位二进制数对应十进制数的十位,另四位表示个位。而译码器Ⅱ有现成的芯片可选用,此处可选74LS247,故设计重点就在译码器Ⅰ。 加法器选择 全加器:能对两个1位二进制数进行相加并考虑低位来的进位,即相当于3个1位二进制数相加,求得和及进位的逻辑电路称为全加器。或:不仅考虑两个一位二进制数相加,而且还考虑来自低位进位数相加的运算电路,称为全加器。 1)串行进位加法器 构成:把n位全加器串联起来,低位全加器的进位输出连接到相邻的高位全加器的进位输入。 优点:电路比较简单。 最大缺点:进位信号是由低位向高位逐级传递的,运算速度慢。 2)超前进位加法器 为了提高运算速度,必须设法减小或消除由于进位信号逐级传递所消耗的时间,于是制成了超前进位加法器。 优点:与串行进位加法器相比,(特别是位数比较大的时候)超前进位加法器的延迟时间大大缩短了。 缺点:电路比较复杂。 综上所述,由于此处位数为4(比较小),出于简单起见,这里选择串行进位加法器。 译码器Ⅱ选择 译码是编码的逆过程,将输入的每个二进制代码赋予的含意“翻译”过来,给出相应的输出信号。译码器是使用比较广泛的器材之一,主要分为:变量译码器和码制译码器,其中二进制译码器、二-十进制译码器和显示译码器三种最典型,使用十分广泛。显示译码器又分为七段译码器和八段

实验一四位串行进位加法器的设计实验报告

实验一四位串行进位加法器的设计 一、实验目的 1.理解一位全加器的工作原理 2.掌握串行进位加法器的逻辑原理 3.进一步熟悉Quartus软件的使用,了解设计的全过程, 二、实验内容 1.采用VHDL语言设计四位串行进位的加法器 2.采用画原理图的方法设计四位串行进位加法器 三、实验步骤 1、使用VHDL语言设计 1.打开File—>New Project Wizard输入文件名adder4保存在D盘内,打开File—>New—>VHDL File,从模版中选择库的说明,use语句的说明,实体的说明,结构体的说明,编写VHDL代码,然后保存、编译。打开File—>New—>Other File—>Vector Waveform File,查找引脚,从Edit中选择End Time 输入40、ns 保存。从Assignments—>Settings—>Simulator Settings —>Functional 然后Processing—>Generate Functional Simnlation Netlist —>确定。选择Start Simulation保存最后的波形图,打开File —>close关闭工程。 底层文件: LIBRARY ieee;

USE fadder IS PORT ( a, b,cin : IN STD_LOGIC; s, co : OUT STD_LOGIC ); END fadder; ARCHITECTURE arc1 OF fadder IS BEGIN s<=a xor b xor cin; co<=((a xor b)and cin)or(a and b); END arc1; 顶层文件: LIBRARY ieee; USE adder4 IS PORT ( c0: IN STD_LOGIC; a,b : IN STD_LOGIC_VECTOR(3 DOWNTO 0); s : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); c4 : OUT STD_LOGIC );

四位二进制加法器 课程设计报告

《电工与电子技术基础》课程设计报告 题目 4位二进制加法器 学院(部) 专业 班级 学生姓名 学号 5月日至 6月日共周

目录 技术要求·2 摘要·2 第一章系统概述 1、总体设计思想·2 2、系统框图·3 3、工作原理·3 第二章单元电路设计及分析 1、加法器的选择·4 2、译码器Ⅰ的选择·8 3、译码器Ⅱ的选择·11 4、数码管的选择·13 第三章系统综述及总体电路图 1、系统综述·14 2、总体电路图·15 3、仿真结果·15 第四章结束语 收获与体会·16 鸣谢·17 附录 1、元件材料清单·17 2、部分元器件引脚图·17 参考文献··17

4位二进制加法器 课题名称与技术要求 课题名称: 四位二进制加法器设计 技术要求: 1)四位二进制加数与被加数输入 2)二位数码管显示 摘要 本设计通过八个数据开关将A4,A3,A2,A1和B4,B3,B2,B1信号作为加数和被加数输入四位二进制并行进位加法器相加,将输出信号S4,S3,S2,S1和向高位的进位C4通过译码器Ⅰ译码,再将输出的X4,X3,X2,X1和Y4,Y3,Y2,Y1各自分别通过一个 74248J译码器,最后分别通过数码管HVH实现二位显示。 本设计中译码器Ⅰ由三部分组成,包括一个2输入四与非门(74LS08D)、一个4位二进制全加器(74LS283N)和一个3输入或门(4075BD_5V)。信号S4,S3,S2,S1和向高位的进位C4输入译码器Ⅰ,将得到的两组4位BCD码输出,将这两组4位BCD码分别输入BCD-7段译码/升压输出驱动器(74248J),使电路的后续部分得以执行。 第一章系统概述 1、总体设计思想 设计思路:两个4位二进制数的输入可用八个数据开关实现,这两个二进制数经全加器求和后最多可以是5位二进制数。而本题要求用两位数码管分别显示求和结果的十进制十位和各位,因此需要两个译码器Ⅱ分别译码十位和个位。综上所述,需要设计一个译码器Ⅰ,能将求和得到的五位二进制数译成8位BCD码,其中4位表示这个5位二进制数对应十进制数的十位,另4位表示个位。而译码器Ⅱ有现成的芯片可选用,此处可选74LS248,故本课题设计重点就在译码器Ⅰ。

四位二进制加法计数器课程设计

成绩评定表 学生姓名郝晓鹏班级学号1103060129 专业通信工程课程设计题目四位二进制加法 计数器 评语 组长签字: 成绩 日期20 年月日

课程设计任务书 学院信息科学与工程学院专业通信工程 学生姓名郝晓鹏班级学号1103060129 课程设计题目四位二进制加法计数(缺0010 0011 1101 1110) 实践教学要求与任务: 1、了解数字系统设计方法。 2、熟悉VHDL语言及其仿真环境、下载方法。 3、熟悉Multisim仿真环境。 4、设计实现四位二进制加计数(缺0010 0011 1101 1110) 工作计划与进度安排: 第一周:熟悉Multisim及QuartusII环境,练习数字系统设计方法。包括采用触发器设计和超高速硬件描述语言设计,体会自上而下、自下而上设计 方法的优缺点 第二周:1.在QuartusII环境中仿真实现四位二进制加计数(缺0100 0101 1001 1010 )。 2.在Multisim环境中仿真实现四位二进制加计数,缺(0100 0101 1001 1010),并通过虚拟仪器验证其正确性。 指导教师: 201 年月日专业负责人: 201 年月日 学院教学副院长: 201 年月日

摘要 本文采用在MAXPLUSⅡ环境中用VHDL语言实现四位二进制加法计数(缺0010 0011 1101 1110),在仿真器上显示结果波形,并下载到目标芯片上,在实验箱上观察输出结果。在Multisim环境中仿真实现四位二进制加法计数器(缺0010 0011 1101 1110),并通过虚拟仪器验证其正确性。 关键词:MAXPLUSⅡ环境;VHDL语言;四位二进制加计数;Multisim环境

加法器实验报告文档2篇

加法器实验报告文档2篇 Adder experiment report document 编订:JinTai College

加法器实验报告文档2篇 小泰温馨提示:实验报告是把实验的目的、方法、过程、结果等记录下来,经过整理,写成的书面汇报。本文档根据实验报告内容要求展开说明,具有实践指导意义,便于学习和使用,本文下载后内容可随意修改调整及打印。 本文简要目录如下:【下载该文档后使用Word打开,按住键盘Ctrl键且鼠标单击目录内容即可跳转到对应篇章】 1、篇章1:加法器实验报告文档 2、篇章2:加法器的基本原理实验报告文档 篇章1:加法器实验报告文档 【实验名称】 【目的与要求】 1.掌握1位全加器的设计 2.学会1位加法器的扩展【实验内容】 1.设计1位全加器

2.将1位全加器扩展为4位全加器 3.使4位的全加器能做加减法运算 【操作步骤】 1.1位全加器的设计 (1)写出1位全加器的真值表 (2)根据真值表写出表达式并化简 (3)画出逻辑电路 (4)用quartusII进行功能仿真,检验逻辑电路是否正确,将仿真波形截图并粘贴于此 (5)如果电路设计正确,将该电路进行封装以用于下一个环节 2.将1位全加器扩展为4位全加器 (1)用1位全加器扩展为4位的全加器,画出电路图 (2)分别用两个4位补码的正数和负数验证加法器的正确性(注意这两 个数之和必须在4位补码的数的范围内,这两个数包括符号在内共4位),用quartusII进行功能仿真并对仿真结果进行截图。

3.将4位的全加器改进为可进行4位加法和减法的运算器 (1)在4位加法器的基础上,对电路进行修改,使该电路不仅能进行加 法运算而且还能进行减法运算。画出该电路 (2)分别用两个4位补码的正数和负数验证该电路的正确性(注意两个 数之和必须在4位补码的数的范围内),用quartusII 进行功能仿真并对仿真结果进行截图。 【附录】 篇章2:加法器的基本原理实验报告文档【按住Ctrl键点此返回目录】 一、实验目的 1、了解加法器的基本原理。掌握组合逻辑电路在Quartus Ⅱ中的图形输入方法及文本输入方法。 2、学习和掌握半加器、全加器的工作和设计原理

8位串行二进制全加器

只用一位二进制全加器为基本元件和一些辅助的时序电路,设计一个8位串行二进制全加器。 Vhdl代码如下: 顶层文件如下: library ieee; use ieee.std_logic_1164.all; entity f8_adder is port(a,b:in std_logic_vector(7 downto 0); c0:in std_logic; s:out std_logic_vector(7 downto 0); c1:out std_logic); end f8_adder; architecture bhv of f8_adder is signal cout:std_logic_vector(7 downto 1); component f_adder is port(ain,bin,cin:in std_logic; cout,sum:out std_logic); end component; begin u1: f_adder port map(ain=>a(0),bin=>b(0),cin=>c0,sum=>s(0),cout=>cout(1)); u2: f_adder port map(ain=>a(1),bin=>b(1),cin=>cout(1),sum=>s(1),cout=>cout(2)); u3: f_adder port map(ain=>a(2),bin=>b(2),cin=>cout(2),sum=>s(2),cout=>cout(3)); u4: f_adder port map(ain=>a(3),bin=>b(3),cin=>cout(3),sum=>s(3),cout=>cout(4)); u5: f_adder port map(ain=>a(4),bin=>b(4),cin=>cout(4),sum=>s(4),cout=>cout(5)); u6: f_adder port map(ain=>a(5),bin=>b(5),cin=>cout(5),sum=>s(5),cout=>cout(6)); u7: f_adder port map(ain=>a(6),bin=>b(6),cin=>cout(6),sum=>s(6),cout=>cout(7)); u8: f_adder port map(ain=>a(7),bin=>b(7),cin=>cout(7),sum=>s(7),cout=>c1); end bhv; 全加器描述: library ieee; use ieee.std_logic_1164.all; entity f_adder is port(ain,bin,cin:in std_logic; cout,sum:out std_logic); end f_adder; architecture fd1 of f_adder is

利用全加器电路创建四位二进制加法器

一.课程设计的目的: 1、学习并了解MATLAB软件。 2、尝试用Simulink建模。 3、实现对数字电路的防真设计。 4、利用全加器电路创建四位二进制加法器。 二.课程设计题目描述及要求: 利用所学的数字电路的基本知识和MUTLAB软件中Simulink的应用学习,完成对数字电路的仿真设计。用各种各样的组合逻辑电路设计全加器,输出曲线,再利用全加器设计电路创建四位二进制加法器电路图,给出输出。 三.MATLAB软件简介: MATLAB是MathWorks公司于1984年推出的一套高性能的数值计算可视化软件,集数值分析、矩阵运算、信号处理和图形显示于一体。MATLAB是由Matrix 和Laboratory单词的前三个字母组合而成的,其含义是矩阵实验室。 Simulink是MATLAB最重要的组件之一,是实现动态系统建模、仿真的一个集成环境。它支持线性和非线性系统,连续时间、离散时间,或者两者的相结合的仿真,而且系统是多进程的。Simulink是从底层开发的一个完整的仿真环境和图形界面,它把MATLAB的许多功能都设计成一个个直观的功能模块,把需要的功能模块连接起来就可以实现所需要的仿真功能。Simulink仿真应用于数字电路、数字信号处理、通信仿真、电力系统仿真、宇航仿真等领域。由于数字系统中高低电平分别用0和1表示,因此数字电路问题往往可以转化为一个数字上的逻辑问题。MATLAB提供了逻辑运算模块和各种触发器模块,可以方便的进行数字电路的设计和仿真。借助于组合电路仿真常用模块Logic and Bit Operations子库中的Local Operator模块,将其拖到所建的untitled窗口中,然后鼠标左键双击该模块弹出的Block Parameters/Logical Operator对话框,按Operator栏后的黑三角来选择所需要的门电路标识符,如:AND、OR、NAND、NOR、XOR、NOT中的一个,并依次设置所需的输入、输出端子个数,之后按OK 键确定。利用这些基本门电路组成加法器逻辑电路。 四.课程设计的内容: 1、1位全加器的设计。 所谓全加器,就是带进位输入和进位输出的加法器。1位全加器有3个输入,分别是加

四位二进制减计数器概要

成绩评定表

课程设计任务书

摘要 Quartus II是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。 Multisim是Interactive Image Technologies (Electronics Workbench)公司推出的以Windows为基础的仿真工具,适用于板级的模拟/数字电路板的设计工作。它包含了电路原理图的图形输入、电路硬件描述语言输入方式,具有丰富的仿真分析能力。Multisim为用户提供了丰富的元器件,并以开放的形式管理元器件,使得用户能够自己添加所需要的元器件。 在QuartusII8.1软件中,建立名为wq的工程,用四位二进制减法计数器的VHDL语言实现了四位二进制减法计数器的仿真波形图,同时进行相关操作,锁定了所需管脚,将其下载到实验箱。 在Multisim软件中,通过选用四个时钟脉冲下降沿触发的JK触发器和同步电路,画出其时序图,卡诺图,建立相关方程,做出相关计算,完成四位二进制减法计数器(缺1001,1010)的驱动方程。在Multisim软件里画出了四位二进制减法计数器的逻辑电路图。分析由红绿灯的亮灭顺序及状态,和逻辑分析仪里出现波形图,证明四位二进制减法计数器设计成功。 关键字:VHDL语言;四位二进制减计数器;QUARTUSⅡ;Multisim

目录 1.课程设计目的 (1) 2.设计框图 (1) 3.实现过程 (2) 3.1Q UARTUSⅡ实现过程 (2) 3.1.1建立工程 (2) 3.1.2VHDL源程序 (4) 3.1.3波形仿真 (5) 3.1.4引脚锁定与下载 (7) 3.1.5仿真结果分析 (9) 3.2MULTISIM实现过程 (9) 3.2.1求驱动方程 (9) 3.2.2画逻辑电路图 (11) 3.2.3逻辑分析仪的仿真 (12) 3.2.4结果分析 (13) 4.总结 (14) 5.参考文献 (15)

计组-加法器实验报告

半加器、全加器、串行进位加法器以及超前进位加法器 一、实验原理 1.一位半加器 A和B异或产生和Sum,与产生进位C 2.一位全加器 将一位半加器集成封装为halfadder元件,使用两个半加器构成一位的全加器 3.4位串行进位加法器 将一位全加器集成封装为Fulladder元件,使用四个构成串行进位加法器

4.超前进位加法器(4位) ⑴AddBlock 产生并行进位链中的ti(即Cthis)和di(即Cpass),以及本位结果Sum ⑵进位链(Cmaker) 四位一组并行进位链,假设与或非门的级延迟时间为1.5ty,与非门的延迟时间为1ty,在di和ti产生之后,只需2.5ty就可产生所有全部进位

⑶超前进位加法器 将以上二者结合起来即可完成,A和B各位作为各个AddBlock的输入,低一位的进位Ci-1作为本位AddBlock的C-1的输入。各个AddBlock输出的C_this和C_pass作为对应的Cmaker的thisi和passi的输入。

二、实验器材 QuartusII仿真软件,实验箱 三、实验结果 1.串行进位加法器结果 2.超前进位加法器结果

四、实验结果分析 1.实验仿真结果显示串行加法器比超前进位加法器快,部分原因应该是电路结构优化 不到位。另外由于计算的位数比较少,超前进位加法链结构较复杂,所以优势没体现出来,反倒运作的更慢一点。当位数增加的时候,超前进位加法器会比串行的更快。 2.波形稳定之前出现上下波动,应该与“竞争冒险”出现的情况类似,门的延迟和路径 的不同导致了信号变化时到达的时间有先有后,因此在最终结果形成前出现了脉冲尖峰和低谷;另外也可能部分原因由于电路结构优化的不到位所致

8位二进制加法计算器

一:本实验设计的是一个8为二进制加法计算器,其功能就是对两个八位的二进制数执行加法运算,并可以异步清零。 二:电路可划分为三部分:半加器、全加器和复位电路。 1、半加器: 真值表 a b so co 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 电路图 2全加器:由半加器和或门组成 电路图 3复位电路: 复位电路通过en控制,当en为‘1’时,执行加法运算,输出正确的值,当en为‘0’时,输输出及结果为全0. 三:实验波形仿真和VHDL 1、仿真图:

2、VHDL代码 1)半加器h_adder: library ieee; use ieee.std_logic_1164.all; entity h_adder is port (a,b :in std_logic; co,so :out std_logic); end entity h_adder; architecture fh1 of h_adder is begin so <= not(a xor (not b));co <= a and b ; end architecture fh1; 2)或门or2a: library ieee; use ieee.std_logic_1164.all; entity or2a is port (a,b :in std_logic; c: out std_logic); end entity or2a; architecture one of or2a is begin c <= a or b ; end architecture one; 3)全加器f_adder: library ieee;

数字逻辑4位二进制加法器实验

实验2 4位二进制加法器的设计 2.1 实验目的 进一步熟悉Quartus Ⅱ的基本操作方法,并利用原理图输入设计方法设计简单组合电路,掌握层次化设计的方法,通过4位全加器的设计掌握利用EDA 工具进行电子系统设计的流程。 2.2 原理提示 一个4位二进制加法器可以由4个全加器构成,各全加器之间的进位以串行方式实现,即将低位的进位输出CO 与相邻的高一位全加器的进位位Ci 相连,最低进位位接“0”。实验原理图如下。 2.3实验内容 采用Quartus Ⅱ基于图形的设计方法,在实验1的基础上,按层次化结构实现4位全加器的设计。完成原理图输入、编译、进行波形仿真验证。(仿真时要对所有输入、输出端进行)。 2.4实验步骤 (1) 为本项设计任务建立工程。 启动Quartus Ⅱ,新建一个工程,有关操作如下图。 将实验1中已设计好的原理图文件fualladd.bdf 拷贝到D:\0501\exp2下。在实验1中fualladd.bdf 是顶层设计文件,而在本实验中,fualladd.bdf 将作为底层设计文件使用。 ∑C i C o ∑C i C o ∑C i C o a 0b 0a 1b 1a 2b 2a 3b 3s 0s 1s 2s 3c o ∑C i C o 0

建立本工程的顶层设计。点击“File/New”→“Block Diagram/Schematic File”→“OK”,将Block1.dbf 另存为add4. dbf。add4. dbf是本工程的顶层设计文件。 (2)点击“File / Open…”将fualladd.bdf 文件打开。 (3)将fualladd.bdf制作成一个符号块,以便在add4. dbf中调用。点击“File / Create/Update / Create Symble Files For Currenf Fils”,弹出对话框(文件名一栏应出现fualladd.bsf),点击“保存”。于是,生成全加器的符号块文件fualladd.bsf。 (4)在add4. dbf的绘图区放置全加器符号。右击add4. dbf的绘图区,弹出浮动菜单,选择“Insert / Symbol…”弹出如下对话框:(在实验1中是怎样放置一个符号的?在这里也能用吗?试试看) 按图操作。结果在add4. dbf的绘图区放置了一个全加器符号。 (5)完成顶层设计。 按下图操作,完成4位二进制加法器的设计。存盘。 操作说明: 符号的旋转 右击待旋转的符号,弹出浮动菜单,选择“Rotate by Degrees / 90”可反时针旋转90°。

FPGA一位全加器设计实验报告

题目:1位全加器的设计 一.实验目的 1.熟悉QUARTUSII软件的使用; 2.熟悉实验硬件平台的使用; 3.掌握利用层次结构描述法设计电路。 二.实验原理 由于一位全加器可由两个一位半加器与一个或门构成,首先设计半加器电路,将其打包为半加器模块;然后在顶层调用半加器模块组成全加器电路;最后将全加器电路编译下载到实验箱,其中ain,bin,cin信号可采用实 验箱上SW0,SW1,SW2键作为输入,并将输 入的信号连接到红色LED管 LEDR0,LEDR1,LEDR2上便于观察,sum,cout 信号采用绿色发光二极管LEDG0,LEDG1来 显示。 三.实验步骤 1.在QUARTUSII软件下创建一工程,工程名为full_adder,芯片名为EP2C35F672C6; 2.新建Verilog语言文件,输入如下半加器Verilog语言源程序; module half_adder(a,b,s,co); input a,b; output s,co; wire s,co; assign co=a & b; assign s=a ^ b; Endmodule 3.保存半加器程序为,进行功能仿真、时序仿真,验证设计的正确性。 其初始值、功能仿真波形和时序仿真波形分别如下所示

4.选择菜单File→Create/Update→Create Symbol Files for current file,创建半加器模块; 5.新建一原理图文件,在原理图中调用半加器、或门模块和输入,输出引脚,按照图1所示连接电路。并将输入ain,bin,cin连接到FPGA的输出端,便于观察。完成后另保存full_adder。 电路图如下 6.对设计进行全编译,锁定引脚,然后分别进行功能与时序仿真,验证全加器的逻辑功能。其初始值、功能仿真波形和时序仿真波形分别如下所示

八位二进制加法器课程设计

长安大学电子技术课程设计 课题名称______________ 班级______________ 姓名______________ 指导教师 日期______________

前言 8位二进制加法器,它的功能主要是实现两个8位二进制数的相加,其结果的范围应该在00000000到111111110之间,即000到510之间。加法器在实际应用中占据着十分重大的地位,从我们呱呱坠地起,到小学,到初中,到高中,到大学,到工作,等等。我们能离开加法吗,不能!加法可以说是一切运算的基础,因此8位二进制加法器的设计是很有必要的。 那么我们如何设计一个8位二进制加法器呢?在实际应用中,我们通常输入的是十进制数,一个八位二进制数所对应的最大的十进制数是255,于是输入两个范围在000到255之间的数,首先通过二-十进制编码器将输入的三位十进制数的个位、十位、百位分别转换为8421BCD码,得到两个十二位字码,再通过加法器将它们相加,逢10进1,得到一个新的十二位字码,再用7447数字显示译码器将这个十二位字码还原到原来的三位十进制数。最后输出的就是一个三位十进制数,其范围在000到510之间。通过上述方法我们实现了八位二进制数的相加,从而达到了题目的要求。 为实现上述目的,我们需要查阅相关资料。通过查阅,理解以及加以运用,我们认识到了收集资料的不易性,但同时也得到了不少收获,可以说是有苦有甜。同时,虽然我们基本设计出了这个八位二进制加法器,但是不必可避免地会产生一些问题,比如说在连线上可能有更简便的途径,在元件的选用上可能还有其它更简便的方法,在控制上可能还不够精简,等等。我们希望在以后的实践中能找出更好的方法,也希望能吸取这次设计中的不足,逐渐改善。另外,在电子设计的过程中,与同组同学之间的合作配和是十分重要的。我在此次设计中也充分认识到这一点的重要性,我相信这次的电子设计能够为我们将来的工作奠定一定的基础。

《四位二进制》 汪洋

《电工与电子技术基础》课程设计报告 题目四位二进制加法器 学院(部)汽车学院 专业汽车运用工程 班级2013220202 学生姓名汪洋 学号201222020227 6 月20 日至6 月2 7 日共1 周

四位二进制加法器 一.主要技术指标和要求 (1)四位二进制加数与被加数输入; (2)二位数码管显示。 二.摘要 四位二进制加法器的设计包括:1、四位二进制加数和被加数的输入,2、两个数的相加运算及和的输出,3、将两个数的和通过译码器显示在数码管上。二进制数的输入可以通过数据开关实现,用加法器可以进行二进制数的加法运算。两个四位二进制数相加后的和在十进制数的0~30内,其中产生的进位和对十进制数十位的判断和显示是重点和难点,这需要通过译码器来实现。最后用两个BS204数码管进行二位显示。 三.总体方案的论证及选择 通过数据开关将A3,A2,A1,A0和B3,B2,B1,B0信号作为加数和被加数输入到超前进位加法器74LS283的8个输入端实现,四位二进制相加,将输出信号S4,S3,S2,S1和向高位的进位C1通过一译码器译码。再将输出X4,X3,X2,X1和Y4,Y3,Y2,Y1分别通过一个74LS247译码器,最后分别通过共阳极数码管BS204实现二位显示。

1.加法器的选择 加法器是一种逻辑组合电路,主要功能是实现二进制数的算数加法运算。加法器有两种:串行进位加法器和超前进位加法器。串行进位加法器高位的运算必须等到低位的加法运算完成后送来的进位才能进行,虽然电路简单,但运行速度慢,位数越多,进位越慢;超前进位加法器是由逻辑电路根据输入信号同时形成各位向高位的进位,使各位的进位直接由加数和被加数决定,而不依赖低位的进位,省去了逐级进位所用的时间,因此这种加法器速度快,所以我们选择超前进位加法器,其型号有多种,再此,选择74LS283型加法器。 2.译码器的选择 译码器是一种具有“翻译”功能的逻辑电路,这种电路能将输入二进制代码的各种状态,按照其原意翻译成对应的输入信号。译码器是组合逻辑电路的一个重要器件。译码器的种类有多种,其中显示译码器最典型,应用广泛,其又分为七段译码器和八段译码器,在此选择七段译码器,可供选择的译码器有74LS247,74LS47,74LS248,74LS48四种,74LS247,74LS47的引脚排列分别和74LS248,74LS48的引脚排列一模一样,功能也差不多,但前两者控制共阳极数码管,后两者控制共阴极数码管,最终我们选择74LS247译码器。 74LS247型七段显示译码器的主要功能是把8421BCD译成对应于数码管的7个字段信号并驱动数码管,显示出相应的十进制数码。

4位全加器实验报告.doc

四位全加器 11微电子黄跃1117426021 【实验目的】 采用modelsim集成开发环境,利用verilog硬件描述语言中行为描述模式、结构描述模式或数据流描述模式设计四位进位加法器。 【实验内容】 加法器是数字系统中的基本逻辑器件。多位加法器的构成有两种方式:并行进位和串行进位方式。并行进位加法器设有并行进位产生逻辑,运算速度快;串行进位方式是将全加器级联构成多位加法器。通常,并行加法器比串行级联加法器占用更多的资源,并且随着位数的增加,相同位数的并行加法器比串行加法器的资源占用差距也会越来越大。 实现多位二进制数相加的电路称为加法器,它能解决二进制中1+1=10的功能(当然还有 0+0、0+1、1+0). 【实验原理】 全加器 除本位两个数相加外,还要加上从低位来的进位数,称为全加器。图4为全 加器的方框图。图5全加器原理图。被加数A i 、加数B i 从低位向本位进位C i-1 作 为电路的输入,全加和S i 与向高位的进位C i 作为电路的输出。能实现全加运算 功能的电路称为全加电路。全加器的逻辑功能真值表如表2中所列。 信号输入端信号输出端 A i B i C i S i C i 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1

表2 全加器逻辑功能真值表 图4 全加器方框图 图5 全加器原理图 多位全加器连接可以是逐位进位,也可以是超前进位。逐位进位也称串行进位,其逻辑电路简单,但速度也较低。 四位全加器 如图9所示,四位全加器是由半加器和一位全加器组建而成: 图9 四位全加器原理图 【实验步骤】 (1)建立新工程项目: 打开modelsim软件,进入集成开发环境,点击File→New project建立一

四位二进制加法器电工电子课程设计

长安大学 电子技术课程设计 4位二进制加法器 专业车辆工程 班级22010901 姓名韩塽 指导教师顾樱华 日期2011、6、26

目录 一、技术要求 (2) 二、摘要 (2) 三、总体设计方案的论证及选择 (2) 1、加法器的选取 (2) 2、译码器的选取 (2) 3、数码管的选取 (3) 四.设计方案的原理框图,总体电路图,接线图及说明 (3) 1、总体原理图 (3) 2、总体接线图 (4) 五.单元电路设计,主要元器件选择与电路参数计算 (4) 1、逻辑开关 (4) 2、加法器设计 (5) 3、译码器设计 (7) 4、数码管设计 (9) 六、收获与体会 (10) 七、参考文献 (11) 八、附件(元器件清单) (12) 评语 (13)

一.技术要求 1.四位二进制加数与被加数输入 2.二位数码管显示 二.摘要 该设计主要包括两个部分:一是用加法器实现四位二进制加数与被加数的输入,二是将相加产生的二进制和数用二位数码管显示,在此设计中加法器是重点,数码显示是难点。数码显示采用计数器,译码器七段译码显示管来实现。加法器分为半加器和全加器,半加器只能实现两个一位二进制数的相加,其只考虑两个加数本身的求和而不考虑低位来的进数位。目前使用最广泛的二进制加法器是二进制并行加法器。 三.总体设计方案的论证及选择 1.加法器的选取 二进制并行加法器是一种能并行产生两个n位二进制算术和的组合逻辑电路。按其进位方式的不同,可分为串行进位二进制并行加法器和超前进位二进制并行加法器两种类型。所以根据加法器的工作速度选取超前进位加法器。这里供选取的超前进位加法器有74LS283,CT74LS283,SN74LS283,DM74LS283,HD74LS283,M74LS283 可供选择。由于我们是非电专业,对电子器件的选取要求不高,为使设计简单起见所以选74LS283加法器。 2.译码器的选取 译码器是一种具有“翻译”功能的逻辑电路,这种电路能将输入二进制代码的各种状态,按照其原意翻译成对应的输出信号。译码器是组合逻辑电路的一个重要的器件,在显示译码器的选择上有七段译码器和八段译码器。此

八位加法器设计实验报告

实验四:8位加法器设计实验 1.实验目的:熟悉利用quartus原理图输入方法设计简单组合电路,掌握层次化设计方法。 2.实验原理:一个八位加法器可以由八个全加器构成,加法器间的进位可以串行方式实现,即将低位加法器的进位输出cout与相邻的高位加法器的最低进位输入信号cin相接。 3.实验任务:完成半加器,全加器,八位加法器设计,使用例化语句,并将其设计成一个原件符号入库,做好程序设计,编译,程序仿真。 1)编译成功的半加器程序: module h_adder(a,b,so,co); input a,b; output so,co; assign so=a^b; assign co=a&b; endmodule 2)编译成功的全加器程序: module f_adder(ain,bin,cin,cout,sum); output cout,sum;input ain,bin,cin; wire net1,net2,net3; h_adder u1(ain,bin,net1,net2); h_adder u2(.a(net1),.so(sum),.b(cin),.co(net3));

or u3(cout,net2,net3); endmodule 3)编译成功的八位加法器程序: module f_adder8(ain,bin,cin,cout,sum); output [7:0]sum; output cout;input [7:0]ain,bin;input cin; wire cout0, cout1, cout2 ,cout3, cout4,cout5,cout6; f_adder u0(.ain(ain[0]),.bin(bin[0]),.cin(cin),.sum(sum[0]) ,.cout(cout0)); f_adder u1(.ain(ain[1]),.bin(bin[1]),.cin(cout0),.sum(sum[1 ]),.cout(cout1)); f_adder u2(.ain(ain[2]),.bin(bin[2]),.cin(cout1),.sum(sum[2 ]),.cout(cout2)); f_adder u3(.ain(ain[3]),.bin(bin[3]),.cin(cout2),.sum(sum[3 ]),.cout(cout3)); f_adder u4(.ain(ain[4]),.bin(bin[4]),.cin(cout3),.sum(sum[4

EDA课程设计八位二进制全加器

EDA课程设计八位二进制全加器

EDA设计说明书 课程名称: EDA技术实用教程 设计题目:八位二进制全加器 院系:电子信息与电气工程学院学生姓名: 学号: 专业班级: 指导教师:李响 年 6 月 1

1. 设计目的 熟悉利用QuartusⅡ的原理图输入法设计简单的组合电路,掌握层次化设计的方法,并经过一个八位全加器的设计把握利用EDA软件进行原理图输入方式的电子线路设计的详细流程。 2. 设计原理 2.1 一位全加器的原理 一位全加器能够用两个半加器及一个或门连接而成,因此需要首先完成半加器的设计。在本设计中,将采用原理图输入法来完成设计。 一位全加器的设计步骤: ①为本项工程设计建立文件夹; ②输入设计项目和存盘; ③将设计项目设计成可调用的元件; ④设计全加器顶层文件; ⑤将设计项日设置成工程和时序仿真。 2.2 八位全加器的原理 一个八位全加器能够由八个一位全加器构成,加法器之间的进位能够用串行方式实现,即将低位加法器的进位输出cout 与相邻的高位加法器的最低进位输入信号cin 相接。

3. 设计方案与仿真 3.1 一位全加器的设计与仿真 全加器的实现是以半加器的实现为基础的,因此,要设计全加器应首先设计一个一位的半加器。半加器的实现方案为: ①为此项工程建立文件夹; ②在基本元件库中,选中需要的元件,将元件(包含元件 and2、not 、xnor 和输入输出引脚input、output)调入原理图编辑窗口中; ③将己设计好的原理图文件存盘; ④将所设计的半加器设置成可调用的元件。 用原理图输入法所设计的半加器原理图如图3-1所示,利用QuartusⅡ软件平台,根据图3-1所示电路,可生成一个半加器元件符号,如图3-2所示。在半加器的基础上,为了建立全加器的顶层文件,必须再打开一个原理图编辑窗口,方法同上。其中,所选择的元件包含半加器、或门和输入输出引脚,由此可得到如图3-3所示的全加器原理图;进而可生成个全加器元件符号,如图3-4所示。 图3-1 半加器原理图图3-2 半加器元件符号

相关文档
相关文档 最新文档