EDA与VHDL实现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位二进制并行加法器
实验二: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位全加器可以由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位加法器
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为进位输出
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.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位二进制全加器设计
姓名:
班级:
学号:
实验日期: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位二进制
实验报告课程名称电子设计自动化实验项目 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;五、项目实施六、实验总结:通过本次试验,加深了我对例化语句和分模块显示的理解。
组成原理课下报告_8位并串行加法器
组成原理课外实践报告(第二次)院系:计算机学院专业班:信息安全0902学号:U200915316姓名:丁洪鑫老师:秦磊华时间:2011.5一.题目要求利用EDA 软件分别设计一个先行进位和行波进位的8位加法器,分别对它们进行时序分析,比较先行进位和行波进位在时间上的差别。
二.实践准备1. 了解EDA (基于MAX+plus )在做这个实践题目之前,并未接触过EDA 技术和实际的EDA 软件。
在查阅了相关书籍后,对EDA 技术有了两方面的初步认识(足以解决本实践问题):1. VHDL 语言算法(自顶向下)。
这种语言以前并未接触学习过,故在实践开始前做了一些粗浅的自学功课。
总的说来即是避开复杂的逻辑运算与原理图设计,用比较简洁的VHDL 语言直接描述器件的逻辑结构,编译成功后可利用该EDA 软件(本实践中利用的是MAX+plus 工具)进行时序仿真并进行延时分析。
本实践中的先行进位8位加法器即用VHDL 语言来描述实现。
2. 原理图输入设计(自底向上)。
这是传统的电子设计技术,在这里结合VHDL 语言(即先利用VHDL 语言设计一位全加器封装后用于原理图设计)用原理图的传统方法来设计8位行波进位加法器。
2.理论分析1)行波进位加法器行波进位加法器即串行进位加法器。
可以用一位全加器FA 直接相连得到(低FA 的进位输出直接与相邻的高位FA 的进位输出相连),如图C0 A0B0A7 B7 F7F0 C7FA FAFA FA FA FA FA FA图中进位表达式为:C 0=X(未知)C 1=A 0B 0+(A 0+B 0)C 0C 2=A 1B 1+(A 1+B 1)C 1……C 7=A 6B 6+(A 6+B 6)C 6由公式知,高位进位产生依赖于相邻地位的进位输出,由于高位运算需要等待地位的运算,因此串行进位加法器的速度较慢。
2)并行进位加法器由串行进位的进位表达式,得到下式:C 0=0C 1=A 0B 0+(A 0+B 0)C 0=A 0B 0C 2=A 1B 1+(A 1+B 1)C 1=A 1B 1+(A 1+B 1)A 0B 0C 3=A 2B 2+(A 2+B 2)C 2=A 2B 2+(A 2+B 2)A 1B 1+(A 2+B 2)(A 1+B 1)A 0B 0……C 7=A 6B 6+(A 6+B 6)A 5B 5+(A 6+B 6)(A 5+B 5)A 4B 4+(A 6+B 6)(A 5+B 5)(A 4+B 4)A 3B 3+(A 6+B 6)(A 5+A 5)(A 4+B 4)(A 3+B 3)A 2B 2+(A 6+B 6)(A 5+B 5)(A 4+B 4)(A 3+B 3)(A 2+B 2)A 1B 1由公式可以看出,每一个进位的产生都不不互相依赖,只要给出C 0 ,加数和被加数即可算出所有的进位,即可同时计算。
分别使用原理图和VHDL语言输入方法设计8位全加器
分别使用原理图和VHDL语言输入方法设计8位全加器大庆石油学院课程设计2006年9 月12 日大庆石油学院课程设计任务书课程硬件课程设计题目分别使用原理图和VHDL语言输入方法设计8位全加器专业计算机科学与技术姓名孟庆军学号040702140408主要内容、基本要求、主要参考资料等一、主要内容:利用EDA-V型实验系统、微机和Maxplus-II软件系统,分别使用原理图和VHDL语言输入方法设计8位全加器。
要求利用层次设计方法,首先设计1位半加器,仿真和测试成功后把它保存到元件库中去;之后以1位半加器为底层元件设计1位全加器,仿真和测试成功后把它也保存到元件库中去;最后以1位全加器为基本元件,设计8位全加器的顶层文件,进行仿真和测试。
二、基本要求:1、熟练掌握EDA软硬件系统的使用方法。
2、设计出8位全加器,精通原理图输入方法,初步学会使用VHDL语言输入方法。
3、学会功能仿真和时序仿真。
大庆石油学院硬件课程设计4、按照规范写出论文,要求字数在4000字以上,并进行答辩。
论文内容包括概述(学习、调研、分析、设计的内容摘要)、EDA技术的现状和发展趋势、对EDA_V型实验系统和MaxplusII软件的掌握程度、8位全加器设计过程(包括原理图或程序设计、编译、仿真分析、硬件测试的全过程),论文中含有原理图、程序、仿真波形图及其分析报告。
三、主要参考资料:[1] 潘松.EDA技术实用教程[M].北京:科学出版社,2003.11-13.[2] 杨恒.FPGA/CPLD最新实用技术指南[M].北京:清华大学出版社, 2005.20-22.[3] EDA先锋工作室.Altera FPGA/CPLD设计(基础篇)[M].北京:人民邮电出版社2005.32-33.[4] 求是科技.CPLD/FPGA应用开发技术与工程实践[M].北京:人民邮电出版社2005. 55-58.[5] 潘松.SOPC技术实用教程[M] .清华大学出版社.2005.1-15.完成期限第28周指导教师专业负责人年月日大庆石油学院课程设计成绩评价表指导教师:年月日摘要本文介绍了利用EDA-V硬件系统和微机上的MaxPlus-I I等软件系统,分别使用原理图和VHDL语言输入方法设计8位全加器。
基于VHDL的八位全加器
EDA技术课程大作业设计题目:基于VHDL的八位全加器院系:电子信息与电气工程学院学生姓名:学号: ************专业班级: 09电子信息专升本2010 年12 月5日基于VHDL的八位全加器1. 设计背景和设计方案1.1设计背景全加器是数字电路中一种典型的集成电路功能元件,它在有关数值运算的系统中得到广泛的应用。
就产品而言,对于各集成电路族,均有现成的双全加器、四位全加器,可供使用,从而为使用全加器的逻辑设计提供了物质基础。
它是一种由被加数、加数和来自低位的进位数三者相加的运算器,基本功能是实现二进制加法。
进位传送速度快,主要用于高速数字计算机、数据处理及控制系统。
与其它专用的中规模集成电路不同, 它同时具有多种重要的特性和功能,具有多种用途的潜力。
1.2设计方案多位加法器的构成有两种方式:并行进位和串行进位方式。
并行进位加法器设有并行进位产生逻辑,运算速度快;串行进位方式是将全加器级联构成多位加法器。
通常,并行加法器比串行级联加法器占用更多的资源,并且随着位数的增加,相同位数的并行加法器比串行加法器的资源占用差距也会越来越大。
4 位二进制并行加法器和串行级联加法器占用几乎相同的资源。
这样,多位数加法器由4 位二进制并行加法器级联构成是较好的折中选择。
因此本文中的8 位加法器采用两个4位二进制并行加法器级联而成。
2. 方案实施2.1 并行四位全加器2.1.1 源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity adder8 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 adder8;architecture art of adder8 iscomponent adder4 isport(c: in std_logic;a: in std_logic_vector(3 downto 0);b: in std_logic_vector(3 downto 0);s: out std_logic_vector(3 downto 0);co: out std_logic);end component adder4;signal sc: std_logic;beginu1: adder4 port map(c8,a8(3 downto 0),b8(3 downto 0),s8(3 downto 0),sc); u2: adder4 port map(sc,a8(7 downto 4),b8(7 downto 4),s8(7 downto 4),co8); end architecture art;2.1.2 波形仿真图高位运算必须要等低位进位来到后才能进行,并行四位全加器可以胜任高速运算。
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 将需要引脚拖拽。
分别使用原理图和VHDL语言输入方法设计8位全加器
分别使用原理图和VHDL语言输入方法设计8位全加器大庆石油学院课程设计2006年9 月12 日大庆石油学院课程设计任务书课程硬件课程设计题目分别使用原理图和VHDL语言输入方法设计8位全加器专业计算机科学与技术姓名孟庆军学号040702140408主要内容、基本要求、主要参考资料等一、主要内容:利用EDA-V型实验系统、微机和Maxplus-II软件系统,分别使用原理图和VHDL语言输入方法设计8位全加器。
要求利用层次设计方法,首先设计1位半加器,仿真和测试成功后把它保存到元件库中去;之后以1位半加器为底层元件设计1位全加器,仿真和测试成功后把它也保存到元件库中去;最后以1位全加器为基本元件,设计8位全加器的顶层文件,进行仿真和测试。
二、基本要求:1、熟练掌握EDA软硬件系统的使用方法。
2、设计出8位全加器,精通原理图输入方法,初步学会使用VHDL语言输入方法。
3、学会功能仿真和时序仿真。
大庆石油学院硬件课程设计4、按照规范写出论文,要求字数在4000字以上,并进行答辩。
论文内容包括概述(学习、调研、分析、设计的内容摘要)、EDA技术的现状和发展趋势、对EDA_V型实验系统和MaxplusII软件的掌握程度、8位全加器设计过程(包括原理图或程序设计、编译、仿真分析、硬件测试的全过程),论文中含有原理图、程序、仿真波形图及其分析报告。
三、主要参考资料:[1] 潘松.EDA技术实用教程[M].北京:科学出版社,2003.11-13.[2] 杨恒.FPGA/CPLD最新实用技术指南[M].北京:清华大学出版社, 2005.20-22.[3] EDA先锋工作室.Altera FPGA/CPLD设计(基础篇)[M].北京:人民邮电出版社2005.32-33.[4] 求是科技.CPLD/FPGA应用开发技术与工程实践[M].北京:人民邮电出版社2005. 55-58.[5] 潘松.SOPC技术实用教程[M] .清华大学出版社.2005.1-15.完成期限第28周指导教师专业负责人年月日大庆石油学院课程设计成绩评价表指导教师:年月日摘要本文介绍了利用EDA-V硬件系统和微机上的MaxPlus-I I等软件系统,分别使用原理图和VHDL语言输入方法设计8位全加器。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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位加法器的整个过程和思路,同时也提高了我们的思考能力的锻炼,这次实训为我今后的学习和工作打下了基础。