EDA与VHDL实现8位加法器

合集下载

EDA实验六8位二进制全加法器的设计说明

EDA实验六8位二进制全加法器的设计说明

《电子设计自动化》实验报告实验六实验名称:8位二进制全加法器的设计专业及班级:姓名:学号:一、实验目的:1.掌握VHDL语言的基本结构。

2.掌握全加器原理,能进行多位加法器的设计。

3.掌握VHDL语言的基本描述语句特别是元件例化语句的使用方法。

二、实验内容设计并实现一个由两个4位二进制并行加法器级联而成的8位二进制并行加法器。

要求编写4位加法器的VHDL语言程序,顶层8位加法器的设计要求利用元件例化语句进行设计,并利用开发工具软件对其进行编译和仿真,最后通过实验开发系统对其进行硬件验证。

三、实验步骤〔附源代码及仿真结果图:1.根据4位二进制加法器的原理,利用VHDL语言的基本描述语句编写出4位加法器的VHDL语言程序。

--ADDER4B.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADDER4B ISPORT< C4: IN STD_LOGIC;A4: IN STD_LOGIC_VECTOR<3 DOWNTO 0>;B4: IN STD_LOGIC_VECTOR<3 DOWNTO 0>;S4: OUT STD_LOGIC_VECTOR<3 DOWNTO 0>;CO4: OUT STD_LOGIC>;END ENTITY ADDER4B;ARCHITECTURE ART OF ADDER4B ISSIGNAL S5:STD_LOGIC_VECTOR<4 DOWNTO 0>;SIGNAL A5,B5:STD_LOGIC_VECTOR<4 DOWNTO 0>;BEGINA5<='0'& A4;B5<='0'& B4;S5<=A5+B5+C4;S4<=S5<3 DOWNTO 0>;CO4<=S5<4>;END ARCHITECTURE ART;2.对所设计的4位二进制加法器的VHDL程序进行编译,然后对其进行仿真,初步验证程序设计的正确性。

EDA8位二进制并行加法器

EDA8位二进制并行加法器

实验二:8位加法器的设计1.实验目的(1)学习Quartus Ⅱ/ISE Suite/ispLEVER软件的基本使用方法。

(2)学习GW48-CK或其他EDA实验开发系统的基本使用方法。

(3)了解VHDL程序的基本结构。

2.实验内容设计并调试好一个由两个4位二进制加法器级联而成的8位二进制并行加法器,并用GW48-CK或其他EDA实验开发系统(事先应选定拟采用的实验芯片的型号)进行硬件验证。

3.实验要求(1)画出系统的原理图,说明系统中各主要组成部分的功能。

(2)编写各个VHDL源程序。

(3)根据系统的功能,选好测试用例,画出测试输入信号波形或编号测试程序。

(4)根据选用的EDA实验开发装置编好用于硬件验证的管脚锁定表格或文件。

(5)记录系统仿真、逻辑综合及硬件验证结果。

(6)记录实验过程中出现的问题及解决办法。

4.实验条件(1)开发条件:Quartus Ⅱ 8.0。

(2)实验设备:GW48-CK实验开发系统。

(3)拟用芯片:EPM7128S-PL84。

5.实验设计1)系统原理图为了简化设计并便于显示,本加法器电路ADDER8B的设计分为两个层次,其中底层电路包括两个二进制加法器模块ADDER4B,再由这两个模块按照图2.1所示的原理图构成顶层电路ADDER8B。

ADDER4B图2.1 ADDER4B电路原理图A8[7..0]图 2.1 ADDER8B电路原理图2)VHDL程序加法器ADDER8B的底层和顶层电路均采用VHDL文本输入,有关VHDL程序如下。

ADDER4B的VHDL源程序:--ADDER4B.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADDER4B ISPORT(C4:IN STD_LOGIC;A4:IN STD_LOGIC_VECTOR(3 DOWNTO 0);B4:IN STD_LOGIC_VECTOR(3 DOWNTO 0);S4:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CO4: OUT STD_LOGIC);END ENTITY ADDER4B;ARCHITECTURE ART OF ADDER4B ISSIGNAL S5:STD_LOGIC_VECTOR(4 DOWNTO 0);SIGNAL A5,B5:STD_LOGIC_VECTOR(4 DOWNTO 0);BEGINA5<='0'&A4;B5<='0'&B4;S5<=A5+B5+C4;S4<=S5(3 DOWNTO 0);CO4<=S5(4);END ARCHITECTURE ART;ADDER8B的VHDL源程序:--ADDER8B.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADDER8B ISPORT(C8: IN STD_LOGIC;A8: IN STD_LOGIC_VECTOR(7 DOWNTO 0);B8: IN STD_LOGIC_VECTOR(7 DOWNTO 0);S8: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);CO8: OUT STD_LOGIC );END ENTITY ADDER8B;ARCHITECTURE ART OF ADDER8B ISCOMPONENT ADDER4B ISPORT(C4: IN STD_LOGIC;A4: IN STD_LOGIC_VECTOR(3 DOWNTO 0);B4: IN STD_LOGIC_VECTOR(3 DOWNTO 0);S4: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CO4: OUT STD_LOGIC );END COMPONENT ADDER4B;SIGNAL SC: STD_LOGIC;BEGINU1:ADDER4B PORT MAP(C4=>C8,A4=>A8(3 DOWNTO 0),B4=>B8(3 DOWNTO 0),S4=>S8(3 DOWNTO 0),CO4=>SC);U2:ADDER4B PORT MAP(C4=>SC,A4=>A8(7 DOWNTO 4),B4=>B8(7 DOWNTO 4),S4=>S8(7 DOWNTO 4),CO4=>CO8);END ARCHITECTURE ART;CTRLS的VHDL程序--CTRLS.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CTRLS ISPORT(CLK: IN STD_LOGIC;SEL: OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END ENTITY CTRLS;ARCHITECTURE ART OF CTRLS ISSIGNAL CNT:STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINPROCESS(CLK) ISBEGINIF CLK'EVENT AND CLK='1' THENIF CNT="111" THENCNT<="000";ELSECNT<=CNT+'1';END IF;END IF;END PROCESS;SEL<=CNT;END ARCHITECTURE ART;DISPLAY的VHDL程序--DISPLAY.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DISPLAY ISPORT( SEL: IN STD_LOGIC_VECTOR(2 DOWNTO 0); -- DATAIN: IN STD_LOGIC_VECTOR(15 DOWNTO 0); DATAIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0); COM: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); --LEDW: OUT STD_LOGIC_VECTOR(2 DOWNTO 0); SEG: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END ENTITY DISPLAY;ARCHITECTURE ART OF DISPLAY ISSIGNAL DATA: STD_LOGIC_VECTOR(3 DOWNTO 0);-- SIGNAL DATA: STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINP1:PROCESS(SEL) ISBEGINCASE SEL ISWHEN"000"=>COM<="11111110";WHEN"001"=>COM<="11111101";WHEN"010"=>COM<="11111011";WHEN"011"=>COM<="11110111";WHEN"100"=>COM<="11101111";WHEN"101"=>COM<="11011111";WHEN"110"=>COM<="10111111";WHEN"111"=>COM<="01111111";WHEN OTHERS=>COM<="11111111";END CASE;END PROCESS P1;--LEDW<=SEL;P2:PROCESS(SEL)BEGINCASE SEL ISWHEN"000"=>DATA<=DATAIN(3 DOWNTO 0);WHEN"001"=>DATA<=DATAIN(7 DOWNTO 4);-- WHEN"010"=>DATA<=DATAIN(11 DOWNTO 8);-- WHEN"011"=>DATA<=DATAIN(15 DOWNTO 12); WHEN OTHERS=>DATA<="0000";END CASE;CASE DATA ISWHEN"0000"=>SEG<="00111111";WHEN"0001"=>SEG<="00000110";WHEN"0010"=>SEG<="01011011";WHEN"0011"=>SEG<="01001111";WHEN"0100"=>SEG<="01100110";WHEN"0101"=>SEG<="01101101";WHEN"0110"=>SEG<="01111101";WHEN"0111"=>SEG<="00000111";WHEN"1000"=>SEG<="01111111";WHEN"1001"=>SEG<="01101111";WHEN OTHERS=>SEG<="00000000";END CASE;END PROCESS P2;END ARCHITECTURE ART;ADDER8B动态扫描的VHDL程序--ADDER8B.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADDER8B ISPORT(C8: IN STD_LOGIC;A8: IN STD_LOGIC_VECTOR(7 DOWNTO 0);B8: IN STD_LOGIC_VECTOR(7 DOWNTO 0);CLK:IN STD_LOGIC;-- S8: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); S8: BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0); CO8: OUT STD_LOGIC ;COM: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);SEG: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END ENTITY ADDER8B;ARCHITECTURE ART OF ADDER8B IS--COMPONENT ADDER4BCOMPONENT ADDER4B ISPORT(C4: IN STD_LOGIC;A4: IN STD_LOGIC_VECTOR(3 DOWNTO 0);B4: IN STD_LOGIC_VECTOR(3 DOWNTO 0);S4: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CO4: OUT STD_LOGIC );END COMPONENT ADDER4B;--COMPONENT CTRLSCOMPONENT CTRLS ISPORT(CLK: IN STD_LOGIC;SEL: OUT STD_LOGIC_VECTOR(2 DOWNTO 0)); END COMPONENT CTRLS;--COMPONENT DISPLAYCOMPONENT DISPLAY ISPORT(SEL: IN STD_LOGIC_VECTOR(2 DOWNTO 0);--DATAIN: IN STD_LOGIC_VECTOR(15 DOWNTO 0);DATAIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0);COM: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);SEG: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END COMPONENT DISPLAY;SIGNAL SC: STD_LOGIC;SIGNAL SB: STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINU1:ADDER4B PORT MAP(C4=>C8,A4=>A8(3 DOWNTO 0),B4=>B8(3 DOWNTO 0),S4=>S8(3 DOWNTO 0),CO4=>SC);U2:ADDER4B PORT MAP(C4=>SC,A4=>A8(7 DOWNTO 4),B4=>B8(7 DOWNTO 4),S4=>S8(7 DOWNTO 4),CO4=>CO8);U3:CTRLS PORT MAP(CLK,SB);U4:DISPLAY PORT MAP(SB,S8(7 DOWNTO 0),COM(7 DOWNTO 0),SEG(7 DOWNTO 0));END ARCHITECTURE ART;3)仿真波形设置本设计包括两个层次,因此先进行底层的二进制加法器ADDER4B的仿真,再进行顶层ADDER8B的仿真。

8位全加器的设计

8位全加器的设计

二、实验原理:一个8位全加器可以由2个4位全加器构成,加法器间的进位可以用串行方式实现,即将低位加法器的进位输出与相临的高位加法器的低进位输入信号相接。

4位全加器采用VHDL语言输入方式进行设计,将设计的4位全加器变成一个元件符号,在8位全加器的设计中进行调用。

三、实验内容和步骤:1. 采用VHDL语言输入方式设计4位全加器(1)打开QuartusII,执行File|New,在New窗口中的Device Design Files 中选择VHDL Files,然后在VHDL文本编译窗中输入程序。

执行File|Save As,找到已设立的文件夹,存盘文件名应该与实体名一致。

(2)将设计项目设置成可调用的元件选择File→create/update→create symbol Files for current file命令,将转换好的元件存在当前工程的路径文件夹中。

2.采用原理图输入方式设计8位全加器(1)打开QuartusII,执行File|New,选择block diagram/schematic file,在原理图编辑窗口中连接好8位全加器电路图(注意元件的调用),存盘。

(2)创建工程:执行File|New Project Wizard,选择目标芯片。

(3)编译:执行Processing|Start Compilation命令,进行编译。

(4)引脚锁定:在菜单Assignments中选Assignments Editor按钮,先单击右上方的Pin,再双击下方最左栏的“New”选项,弹出信号名栏,锁定所有引脚,进行编译,存盘。

选择编程模式1,键2、键1输入8位加数,键4、键3输入8位被加数,键8输入进位cin,数码管6/5显示和,D8显示进位cout。

5. 编程下载及验证:执行Tool|Programmer命令,选择program/config;执行start,进行验证,记录结果。

4位全加器的参考源程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY adder4b ISPORT(cin:IN STD_LOGIC;a,b:IN STD_LOGIC_VECTOR(3 DOWNTO 0);s:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);cout:OUT STD_LOGIC);END ENTITY adder4b;ARCHITECTURE art OF adder4b ISSIGNAL sint,aa,bb:STD_LOGIC_VECTOR(4 DOWNTO 0);BEGINaa<='0'&a;bb<='0'&b;sint<=aa+bb+cin;s<=sint(3 downto 0);cout<=sint(4);END art;触发器功能的模拟实现三、实验内容:基本RS触发器、同步RS触发器、集成JK触发器和D触发器同时集成在一个芯片上,实现的原理图如下:输入信号Sd、Rd对应的管脚接按键开关,CLK1、CLK2接时钟源(频率<5Hz);J,K,D,R,S对应的管脚分别接拨码开关;输出信号QRS,NQRS,QRSC,NQRSC,QJK,NQJK,QD,NQD对应管脚分别接LED灯。

EDA实验_设计一个8位加法器

EDA实验_设计一个8位加法器

XXXX大学计算机科学学院实验/上机报告一、实验目的设计一个8位加法器。

二、实验环境Quartus II 7.0 开发系统三、实验内容利用全加器,设计一个8位加法器。

四、实验过程设计思想:8位二进制加法器可以由8个全加器通过级联的方式构成。

根据全加器级联的原理,用VHDL设计一个8位二进制数的加法器,可以先设计一个一位全加器,然后利用一位全加器采用元件例化的方式实现加法器。

实验步骤:1、设计一个全加器新建工程,建立源文件,输入VHDL设计文件,如下图所示:完成设计文件输入后,保存文件,对文件进行编译、仿真,以下是仿真结果,如图所示:由图可知仿真结果正确。

2、元件例化把VHDL设计文件转为原理图中使用的元件。

在文件菜单File中选择Creat/Update选项,单击Create Symbol File for Current File 选项,系统自动生成相应的元件标号。

重复新建文件的操作,选择Block Diagram/Schmatic File 选项,新建一个原理图文件,在添加元件列表中可以看到自动生成的元件,选择full_adder这个元件添加到原理图中,如下图所示:3、完成顶层图的设计用生成的元件标号,完成顶层图的设计。

这里有两种方法,一种是直接用原理图设计,根据原理图设计工具的使用方法,完成顶层文件的设计,这个方法比较复杂,所以这里选择另一种方法,通过VHDL设计文件。

继续建立源文件,输入VHDL设计文件,如下图所示:依照上述步骤,保存文件,对文件进行编译、仿真,以下是仿真结果,如图所示:五、实验总结本次实验的目的是设计一个8位二进制加法器,而8位二进制加法器可以由8个全加器通过级联的方式构成。

根据全加器级联的原理,用VHDL设计一个8位二进制数的加法器,可以先设计一个一位全加器,然后利用一位全加器采用元件例化的方式实现加法器。

根据实验设计思路,我先用VHDL设计了一个全加器full_adder.vhd,编译、仿真成功后,通过元件例化的方式,采用原理图设计了一个8位的加法器adder8.bdf,但是在这个过程中出现了很多问题,即由于我是把这个8位的加法器的每个全加器元件输入输出引脚分开的,因此一开始就设计了17个输入引脚,这使得我在给输入引脚添加信号时不知道添加什么信号,才能够起到验证仿真结果是否正确的目的。

EDA试描述一个带进位输入、输出的8位全加器。端口:A、B为加数,CIN为进位输入,S 为加和,COUT为进位输出

EDA试描述一个带进位输入、输出的8位全加器。端口:A、B为加数,CIN为进位输入,S 为加和,COUT为进位输出

2.试描述一个带进位输入、输出的8位全加器。

端口:A、B为加数,CIN为进位输入,S 为加和,COUT为进位输出。

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity adder8 isport( a, b : in std_logic_vector(7 downto 0);cin : in std_logic;c o u t:o u t s t d_l o g i c;s : out std_logic_vector(7 downto 0));end adder8;architecture one of adder8 issignal ts : std_logic_vector(8 downto 0);begints <= ('0' & a) + ('0' & b) + cin;s <= ts(7 downto 0);c o u t<=t s(8);e n d o n e;3.以下是一个含有异步清零和计数使能的8位二进制加法计数器的原理图符号元件,试根据此符号元件写出相应的VHDL模型。

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity count8 isport(clk,clr,en : in std_logic;cnt : out std_logic_vector(7 downto 0));end count8;architecture behav of count8 issignal cnt1 : std_logic_vector(7 downto 0);beginprocess(clk,clr)beginif (clr='1') thencnt1 <= "00000000";elsif (clk'event and clk='1') thenif (en='1') thenif (cnt1="11111111") thencnt1 <= "00000000";elsecnt1 <= cnt1 + 1;end if;end if;end if;end process;cnt <= cnt1;end behav;写出下列缩写的中文(或者英文)含义:1. ASIC 专用集成电路2. FPGA 现场可编程门阵列3.CPLD 复杂可编程逻辑器件4. EDA 电子设计自动化4.5. IP 知识产权核6. SOC 单芯片系统。

第4章 应用VHDL语言方法设计八位二进制加法器 《EDA技术》PPT 教学课件

第4章  应用VHDL语言方法设计八位二进制加法器 《EDA技术》PPT 教学课件
返回
§4.2 完成工作任务的引导
第三种方案在设计上不是很简单,但性能好,在加法器的位数比 较大时应采用此法。可在学习第5章时再做练习。
四、实施
在应用第一种方案设计时,请参考下一节例4.1或例4.2。先设计 底层模块全加器,再在顶层文件中调用全加器元件,构成八位二进制 加法器。在应用第一种方案设计时,请参考下一节例4.3。
将“Add file to current project”选项选上,使该文件 添加到刚建立工程中去,如图4-14所示。 3.编辑VHDL文件
在VHDL编辑器下输入编辑下面源代码,并保存,如图4-15 所示。 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_ signed.all; entity fulladd is port( cin : in std_ logic;----来自低位的进位
五、检查
对所设计的八位二进制加法器的各个底层模块和顶层模块进行编译 仿真,以验证所设计电路否符合设计的要求。
上一页 下一页
§4.2 完成工作任务的引导
六、评估
应用第一种方案设计八位二进制加法器在编译后,可以看到它的 延时情况,如图4-1所示。
第一种设计方案占用资源的情况如图4-2所示。 应用第一种方案设计八位二进制加法器在编译后,可以看到它的 延时情况,如图4-3所示。 第一种设计方案占用资源的情况如图4-4所示。 所以,无论从输出信号对输入信号的延迟时间或占用资源的情况 来看,第一种方案性能都好一些。
a,b : in std_ogic; ---加数及被加数
上一页 下一页
§4.3 相关技术基础知识与基本技能
s : out std_ logic;---本位和 cout : out std_logic ---向高位的进位 ); End; architecture one of fulladd is signal crlt: std_logic_vector(1 downto 0); begin crlt>=('0'&a)+('0'&b)+cin; s>=crlt(0); cout>=crlt(1); end;

EDA技术》实验报告8位二进制加法器设计

EDA技术》实验报告8位二进制加法器设计

《EDA技术》实验报告实验名称: 8位二进制全加器设计
姓名:
班级:
学号:
实验日期:2010-3-29
指导教师:
一、实验设计要求
以一位二进制全加器为基本元件,用例化语句写出8位并行二进制全加器的顶层文件,并讨论此加法器的电路特性。

二、设计原理
电路结构图或原理图
电路功能描述
定义了8位二进制全加器顶层设计元件端口信号,输入端口:AIN, BIN,是八个二进制数,数据类型被定义为STD_LOGIC_VECTOR。

CIN是输入的进位,数据类型IN STD_LOGIC;输出端口:SUM为和,数据类型IN STD_LOGIC COUT 为输出的进位。

三、实验程序
程序1:一位二进制全加器设计顶层描述
程序2:8位并行二进制全加器顶层文件
四、编译及仿真结果
选用器件型号cyclone
编译后使用器件资源情况、引脚配置情况(硬件实验)
仿真结果显示:
该设计是成功的。

输入的进位也要加上去。

0---255 全加器的COUNT 没有进位,而当加到256,COUNT=1,SUM输出0.
五、总结
.1 编译不通过,检查后发现在建立工程时,同一工程的所有文件都必须放在同一文件夹中,而这一步没做。

2 程序中没有将文件名与实体名保持一致出错。

输入半加器的VHDL程序保存文件,将输入的VHDL语言程序保存为h _adder.vhd.
3不知道如何将输入/输出引脚号都添加到矢量波形编辑窗口中。

解决办法:view—utility window—noder finder 将需要引脚拖拽。

eda8位二进制

eda8位二进制

实验报告课程名称电子设计自动化实验项目 8为二进制带符号数的加减电路设计实验仪器计算机系别:通信学院专业:电子信息工程班级/学号:电信1105班 /2011010612学生姓名:张正实验日期:2013年5月29日成绩: _______________________指导教师: _______李春云_____________电子自动化设计实验一、实验目的:1学习多字节压缩BCD码加减运算的程序设计2学习单字节有符号数加减运算的程序设计二、实验内容:1用VHDL代码实现8为二进制带符号数的加减电路设计2实现二进制码和BCD码之间的转换3实现用七段BCD码显示译码器显示源代码三、实验原理:加减法实验电路原理:二进制带符号数的加减电路,是将输入的带符号数转化成补码,利用补码进行运算,并且对运算结果的符号进行判断,还原成真值。

四、源代码:library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_arith.all;use IEEE.std_logic_unsigned.all;entity adder isport ( a:in STD_LOGIC_VECTOR(7 downto 0);b:in STD_LOGIC_VECTOR(7 downto 0);ctrol:in std_logic;bcd_symbol:out std_logic;binaryout:out STD_LOGIC_VECTOR(7 downto 0);dataout: out STD_LOGIC_vector( 20 downto 0));end adder;architecture adder_arch of adder issignal x:std_logic_vector(9 downto 0);signal y:std_logic_vector(9 downto 0);signal z:std_logic_vector(9 downto 0);signal c:std_logic_vector(8 downto 0);signal c1:std_logic_vector(7 downto 0);signal ga_hundred:std_logic_vector(3 downto 0);signal cc:std_logic_vector(7 downto 0);signal ga:std_logic_vector(7 downto 0);signal ga0,ga1,ga2:std_logic_vector(6 downto 0);beginaddsub:blockbeginprocess(a)beginif a(7)='0'then x<='0'&'0'&a;else x(9 downto 8)<='1'&'1';x(7 downto 0)<=not('0'&a(6 downto 0))+1;end if;end process;process(ctrol,b)beginif ctrol='0'thenif b(7)='0'then y<='0'&'0'&b;else y<='1'&'1'&(not('0'& b(6 downto 0))+1);end if;else if b(7)='1' then y<='0'&'0'&(not('0'& b(6 downto 0))+1);else y<='1'&'1'&(not('0'&b(6 downto 0))+1);end if;end if;end process;process(a,b)beginif a(6 downto 0)=0 then z<=y;elseif b(6 downto 0)=0 then z<=x;elsez<=x+y;end if;end if;end process;process(z)beginif z(9)='1' thenc(7 downto 0)<=not z(7 downto 0)+1; c(8)<='1';else c(8 downto 0)<='0'& z(7 downto 0);end if;end process;end block addsub;bcd_symbol<=c(8);binaryout<=c(7 downto 0);bcd:blockbegincc<=c(7 downto 0); process(cc)beginif cc>199 then c1<=cc-200;ga_hundred<="0010";elsif cc>99 then c1<=cc-100;ga_hundred<="0001";else ga_hundred<="0000";c1<=cc;end if;if c1>=90 and c1<100 then ga<=c1+54;elsif c1>80 and c1<90 then ga<=c1+48;elsif c1>70 and c1<80 then ga<=c1+42;elsif c1>60 and c1<70 then ga<=c1+36;elsif c1>50 and c1<60 then ga<=c1+30;elsif c1>40 and c1<50 then ga<=c1+24;elsif c1>30 and c1<40 then ga<=c1+18;elsif c1>20 and c1<30 then ga<=c1+12;elsif c1>10 and c1<20 then ga<=c1+6;else ga<=c1;end if;end process;end block bcd;xianshi0:blockbeginga0<="0111111" when ga_hundred<=0 else"0000110" when ga_hundred<=1 else"1011011" when ga_hundred<=2 else"1001111" when ga_hundred<=3 else"1100110" when ga_hundred<=4 else"1101101" when ga_hundred<=5 else"1111101" when ga_hundred<=6 else"0000111" when ga_hundred<=7 else"1111111" when ga_hundred<=8 else"1101111" when ga_hundred<=9 else"0000000" when ga_hundred<=10 else"0000000" when ga_hundred<=11 else"0000000" when ga_hundred<=12 else"0000000" when ga_hundred<=13 else"0000000" when ga_hundred<=14 else"0000000" ;dataout( 20 downto 14) <= ga0;end block xianshi0;xianshi1:blockbeginga1<="0111111" when ga(7 downto 4)<=0 else"0000110" when ga(7 downto 4)<=1 else"1011011" when ga(7 downto 4)<=2 else"1001111" when ga(7 downto 4)<=3 else"1100110" when ga(7 downto 4)<=4 else"1101101" when ga(7 downto 4)<=5 else"1111101" when ga(7 downto 4)<=6 else"0000111" when ga(7 downto 4)<=7 else"1111111" when ga(7 downto 4)<=8 else"1101111" when ga(7 downto 4)<=9 else"0000000" when ga(7 downto 4)<=10 else"0000000" when ga(7 downto 4)<=11 else"0000000" when ga(7 downto 4)<=12 else"0000000" when ga(7 downto 4)<=13 else"0000000" when ga(7 downto 4)<=14 else"0000000" ;dataout( 13 downto 7) <= ga1;end block xianshi1;xianshi2:blockbeginga2<="0111111" when ga(3 downto 0)<=0 else"0000110" when ga(3 downto 0)<=1 else"1011011" when ga(3 downto 0)<=2 else"1001111" when ga(3 downto 0)<=3 else"1100110" when ga(3 downto 0)<=4 else "1101101" when ga(3 downto 0)<=5 else "1111101" when ga(3 downto 0)<=6 else "0000111" when ga(3 downto 0)<=7 else "1111111" when ga(3 downto 0)<=8 else "1101111" when ga(3 downto 0)<=9 else "0000000" when ga(3 downto 0)<=10 else "0000000" when ga(3 downto 0)<=11 else "0000000" when ga(3 downto 0)<=12 else"0000000" when ga(3 downto 0)<=13 else"0000000" when ga(3 downto 0)<=14 else"0000000" ;dataout( 6 downto 0) <= ga2;end block xianshi2;end adder_arch;五、项目实施六、实验总结:通过本次试验,加深了我对例化语句和分模块显示的理解。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

EDA技术与VHDL实训姓名:李*班级:电信**-*学号:12********电子与信息工程学院8位加法器设计一实训目的1.学习使用VHDL语言设计电路,加深对VHDL语言的理解与应用。

2.学习8位加法器的VHDL程序设计方法。

3.学习例化语句的应用,并能够利用例化语句完成从半加器到全加器的设计。

二加法器加法器是为了实现加法的。

即是产生数的和的装置。

加数和被加数为输入,和数与进位为输出的装置为半加器。

若加数、被加数与低位的进位数为输入,而和数与进位为输出则为全加器。

常用作计算机算术逻辑部件,执行逻辑操作、移位与指令调用。

对于1位的二进制加法,相关的有五个的量:1,被加数A,2,被加数B,3,前一位的进位CIN,4,此位二数相加的和S,5,此位二数相加产生的进位COUT。

前三个量为输入量,后两个量为输出量,五个量均为1位。

对于32位的二进制加法,相关的也有五个量:1,被加数A(32位),2,被加数B(32位),3,前一位的进位CIN(1位),4,此位二数相加的和S(32位),5,此位二数相加产生的进位COUT(1位)。

要实现32位的二进制加法,一种自然的想法就是将1位的二进制加法重复32次(即逐位进位加法器)。

这样做无疑是可行且易行的,但由于每一位的CIN都是由前一位的COUT 提供的,所以第2位必须在第1位计算出结果后,才能开始计算;第3位必须在第2位计算出结果后,才能开始计算,等等。

而最后的第32位必须在前31位全部计算出结果后,才能开始计算。

这样的方法,使得实现32位的二进制加法所需的时间是实现1位的二进制加法的时间的32倍。

三实训内容首先设计半加器,然后用例化语句将它们连接起来。

利用半加器和或门构成1位全加器,以1位全加器为基本硬件,构成串行进位的8位加法器。

3.1 设计1位半减器利用真值表设计1位半减器。

图3-1中的h_add是半加器,sum是输出和,a_out是进位输出,add_in是进位输入。

表3-1 加法真值表加数x加数y和sum进位a_out0000011010101101图3-1 半加器原理图实现1位半减器VHDL 程序。

LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ;ENTITY h_add IS PORT (x ,y : IN STD_LOGIC ; a_out ,sum : OUT STD_LOGIC); END ENTITY h_add ;ARCHITECTURE add0 OF h_add ISSIGNAL s:STD_LOGIC_VECTOR(1 DOWNTO 0); BEGINs<=x&y ; PROCESS(s) BEGINCASE s ISWHEN “00”=>a_out<=‘0’;add<=‘0’; WHEN “01”=>a_out<=‘1’;add<=‘0’; WHEN “10”=>a_out<=‘1’;add<=‘0’; WHEN “11”=>a_out<=‘0’;add<=‘1’; WHEN OTHERS=>NULL ; END CASE ;END PROCESS ;END ARCHITECTURE add0;3.2 设计或逻辑门实现或逻辑门的VHDL 程序。

LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ;ENTITY or IS PORT (a ,b : IN STD_LOGIC ; c :OUT STD_LOGIC); END ENTITY or ;ARCHITECTURE orr OF or IS BEGINc<=a OR b ;END ARCHITECTURE orr ;add_inedsumadd_outfyx x yh_adds a x yh_addsa3.3 设计1位全加器实现1位全加器的VHDL 程序。

LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ;ENTITY f_add IS PORT (x ,y ,add_in : IN STD_LOGIC ; add_out ,sum : OUT STD_LOGIC); END ENTITY f_add ;ARCHITECTURE add1 OF f_add IS COMPONENT h_add ISPORT (x ,y :IN STD_LOGIC ;a_out ,summ :OUT STD_LOGIC); END COMPONENT h_add ; COMPONENT or ISPORT (a ,b :IN STD_LOGIC ; c: OUT STD_LOGIC); END COMPONENT OR ; SIGNAL d ,e ,f: STD_LOGIC ; BEGINu1:h_add PORT MAP (x=>x ,y=>y ,sum=>d ,a_out=>e);u2:h_add PORT MAP (x=>d ,y=>add_in ,sum=>summ ,a_out=>f); u3:or PORT MAP (a=>f ,b=>e ,c=>add_out); END ARCHITECTURE add1;3.4 设计8位加法器8位加法器原理图图3-2 8位加法器原理图add_outx0 y0summ0u0x yadd_inadd_out f_add x1 y1 summ1u1x yadd_inadd_out f_add x2 y2 summ2u2x yadd_inadd_out f_add x3 y3 summ3u3x yadd_inadd_out f_add x4 y4 summ4u4x yadd_inadd_out f_add x5 y5 summ5u5x yadd_inadd_out f_add x6 y6 summ6u6x yadd_inadd_out f_add x7 y7 summ7u7x yadd_inadd_out f_add实现8位加法器VHDL程序。

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY 8f_add ISPORT (x0,x1,x2,x3,x4,x5,x6,x7:IN STD_LOGIC;y0,y1,y2,y3,y4,y5,y6,y7:IN STD_LOGIC;add_in:IN STD_LOGIC;add_out:OUT STD_LOGIC;summ0,summ1,summ2,summ3:OUT STD_LOGIC;summ4,summ5,summ6,summ7:OUT STD_LOGIC);END ENTITY 8f_add;ARCHITECTURE 8fadd OF 8f_add ISCOMPONENT f_add ISPORT (x,y,add_in:IN STD_LOGIC;a_out,summ:OUT STD_LOGIC);END COMPONENT f_add;SIGNAL a,b,c,d,e,f,g: STD_LOGIC;BEGINu0:f_add PORT MAP (x=>x0,y=>y0,add_in=>,a_out=>a,summ=> summ 0);u1:f_add PORT MAP (x=>x1,y=>y1,add_in =>a,a_out=>b,summ => summ 1);u2:f_add PORT MAP (x=>x2,y=>y2,add_in =>b,a_out=>c,summ => summ 2);u3:f_add PORT MAP (x=>x3,y=>y3,add_in =>c,a_out=>d,summ => summ 3);u4:f_add PORT MAP (x=>x4,y=>y4,add_in =>d,a_out=>e,summ => summ 4);u5:f_add PORT MAP (x=>x5,y=>y5,add_in =>e,a_out=>f,summ => summ 5);u6:f_add PORT MAP (x=>x6,y=>y6,add_in =>f,a_out=>g,summ => summ 6);u7:f_add PORT MAP (x=>x7,y=>y7,add_in =>g,a_out=>,summ => summ 7);END ARCHITECTURE 8fadd;四实训总结与体会加法器是产生数的和的装置。

加数和被加数为输入,和数与进位为输出的装置为半加器。

若加数、被加数与低位的进位数为输入,而和数与进位为输出则为全加器。

全加器可以由两个半加器和一个或门连接而成。

设计全加器之前,必须首先设计好半加器和或门电路,把它们作为全加器内的元件,再按照全加器的电路结构连接起来,从而得到全加器电路,再利用级联方法构成8位加法器。

短暂的两周实训已经过去,对于我来说这两周的实训赋予了我太多实用的东西了,不仅让我更深层次的对课本的理论知识深入了理解,而且还让我对分析事物的逻辑思维能力得到了锻炼。

通过此次实训,我对例化语句有了更深刻的认识,了解了例化语句的格式、功能以及应用,能够利用例化语句进行简单的层次化设计。

同时对于加法器的设计有了一定的了解,能够使用半加器完成到全加器的设计。

不仅巩固了以前学过的知识,而且还学到了怎样运用EDA设计8位加法器的整个过程和思路,同时也提高了我们的思考能力的锻炼,这次实训为我今后的学习和工作打下了基础。

相关文档
最新文档