vhdl通用十进制加法器

合集下载

VHDL加法器和减法器的原理

VHDL加法器和减法器的原理

VHDL加法器和减法器的原理加法器3.2.1 加法器的原理在将两个多位二进制数相加时,除了最低位以外,每一位都应该考虑来自低位的进位,即将两个对应位的加数和来自低位的进位3个数相加。

这种运算称为全加,所用的电路称为全加器。

多位加法器的构成有两种方式:并行进位和串行进位。

并行进位加法器设有进位产生逻辑,预算速度较快;串行进位方式是将全加器级联构成多位加法器。

并行进位加法器通常比串行级联加法器占用更多的资源。

随着为数的增加,相同位数的并行加法器与串行加法器的资源占用差距也越来越大,因此,在工程中使用加法器时,要在速度和容量之间寻找平衡点。

本次设计采用的是并行加法器方式。

3.2.2 加法器要求实现的功能实现两个二进制数字的相加运算。

当到达时钟上升沿时,将两数输入,运算,输出结果。

3.2.3 加法器的VHDL语言实现(以下以12位数加16位数生成16位数的加法器为例)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_arith.ALL;ENTITY add121616 isPORT(clk : in STD_LOGIC;Din1 :in signed (11 downto 0);Din2 :in signed (15 downto 0);Dout:out signed (15 downto 0));END add121616;ARCHITECTURE a of add121616 isSIGNAL s1: signed(15 downto 0);BEGINs1<=(Din1(11)&Din1(11)&Din1(11)&Din1(11)&Din1);PROCESS(Din1,Din2,clk)BEGINif clk'event and clk='1' thenDout<=s1+Din2;end if;end process;end a;3.2.4 加法器的模块图3.2.5 加法器的波形仿真完全符合设计要求。

VHDL语言10进制计数器

VHDL语言10进制计数器

VHDL语言10进制计数器以下是为大家整理的VhDL语言10进制计数器的相关范文,本文关键词为VhDL,语言,进制,计数器,课程,设计,任务书,学生,姓名,您可以从右上方搜索框检索更多相关文章,如果您觉得有用,请继续关注我们并推荐给您的好友,您可以在教育文库中查看更多范文。

课程设计任务书学生姓名:黄思羽专业班级:自动化0607指导教师:李向舜工作单位:自动化学院题目:10进制计数器初始条件:1.Quartus4.1以上版本软件;2.课程设计辅导资料:“数字电路eDA 入门”、“VhDL程序实例集”、“eDA技术与VhDL”、“eDA与数字系统设计”等;3.先修课程:电路、电子设计eDA、电子技术基础等。

4.主要涉及的知识点:门电路、组合逻辑电路、时序逻辑电路等。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.课程设计时间:1周;2.课程设计内容:根据指导老师给定的题目,按规定选择其中1套完成;3.本课程设计统一技术要求:研读辅导资料对应章节,对选定的设计题目进行理论分析,针对具体设计部分的原理分析、建模、必要的推导和可行性分析,画出程序设计框图,编写程序代码(含注释),上机调试运行程序,记录实验结果(仿真结果),并对实验结果进行分析和总结。

具体设计要求包括:①复习eDA的相关技术与方法;②掌握VhDL或者Verilog语言,并要求能编写程序。

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

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

4.课程设计说明书按学校“课程设计工作规范”中的“统一书写格式”撰写,具体包括:①目录;②计数器相关的理论分析、归纳和总结;③10进制计数器的结构组成及原理分析。

④程序设计框图、程序代码(含注释);⑤给出程序中主要函数或者语句的功能说明和使用说明;⑥给出程序仿真运行结果和图表、以及实验结果分析和总结;⑦课程设计的心得体会(至少500字);⑧参考文献;⑨其它必要内容等。

实验二-组合逻辑电路VHDL实现

实验二-组合逻辑电路VHDL实现

实验二组合逻辑电路的VHDL实现一、实验目的掌握使用VHDL语言进行时序逻辑电路设计的方法。

二、实验设备及器件IBM PC机一台三、实验内容(1)用VHDL 语言设计一个D触发器,对程序进行编译和仿真,并记录仿真波形。

提示:D触发器的符号如右图所示,当时钟信号输入端CLK接收到上升沿信号时,输入端D的信号被传送到输出端Q输出,否则输出端Q维持原来的状态不变。

实验代码:D触发器LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;ENTITY DFF1 ISPORT (CLK : IN STD_LOGIC ;D : IN STD_LOGIC ;Q : OUT STD_LOGIC );END ;ARCHITECTURE bhv OF DFF1 ISSIGNAL Q1 : STD_LOGIC ; --类似于在芯片内部定义一个数据的暂存节点BEGINPROCESS (CLK)BEGINIF CLK'EVENT AND CLK = '1'THEN Q1 <= D ;END IF;Q <= Q1 ; --将内部的暂存数据向端口输出END PROCESS ;END bhv;(2)用VHDL语言设计一个十进制加法计数器,对程序进行编译和仿真,并记录仿真波形。

提示:十进制加法计数器的电路如下图所示,在时钟信号的驱动下,计数器进行累加,每次加1,其输出状态由0000变化到1001,加满回零。

当复位输入端reset为低电平时,计数器复位,输出状态回到0000。

十进制加法计数器电路图实验代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY jsq10 ISPORT(CLK,RESET:IN STD_LOGIC;Q:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0));END jsq10;ARCHITECTURE ONE OF jsq10 ISBEGINPROCESS(CLK,RESET)BEGINIF(RESET='0') THEN Q<="0000";ELSIF(CLK' EVENT AND CLK='1') THENQ<="0000";ELSEQ<=Q+1;END IF;END IF;END PROCESS;END ONE;(3)用VHDL语言设计一个电平锁存器,对程序进行编译和仿真,并记录仿真波形。

vhdl通用十进制加法器

vhdl通用十进制加法器

湖南人文科技学院课程设计报告课程名称:VHDL语言与EDA课程设计设计题目:通用十进制加法器系别:通信与控制工程系专业:电子信息工程班级:学生姓名:学号:起止日期:指导教师:教研室主任:指导教师评语:指导教师签名:年月日成绩评定项目权重成绩1、设计过程中出勤、学习态度等方面0.22、课程设计质量与答辩0.53、设计报告书写及图纸规范程度0.3总成绩教研室审核意见:教研室主任签字:年月日教学系审核意见:主任签字:年月日摘要随着科技的发展,通用十进制加法器的应用已广泛融入到现实生活中。

EDA 技术的应用引起电子产品及系统开发的革命性变革。

本文采用EDA技术设计,并以VHDL语言为基础制作的通用十进制加法器。

该系统借助于强大的EDA工具和硬件描述语言可实现两个一位以上的十进制数的加法,在输入两个十进制数之后,给出两个数的相加结果。

本设计充分利用VHDL“自顶向下”的设计优点以及层次化的设计概念,提高了设计的效率。

设计主要步骤:首先利用QUARTUS‖来编辑、编译、仿真各个模块;然后以原理图为顶层文件建立工程,再进行引脚锁定、编译、下载,最后采用杭州康芯电子有限公司生产的GW48系列/SOPC/EDA实验开发系统,进行硬件测试。

关键词:通用十进制加法器;EDA技术;VHDL语言; QUARTUS‖目录设计要求 (1)1、方案论证与对比 (1)1.1方案一 (1)1.2方案二 (1)1.3 方案的对比与选择 (2)2、设计原理 (2)3、通用十进制加法器的主要硬件模块 (3)3.1 4位BCD码全加器模块 (3)3.2八加法器的实现框图 (3)4、调试与操作 (4)4.1通用十进制加法器的功能仿真 (4)4.2模式选择与引脚锁定 (4)4.2.1模式选择 (4)4.2.2引脚锁定 (5)4.3设备与器件明细表 (6)4.4调试 (6)4.4.1软件调试 (6)4.4.2硬件调试 (6)5、总结与致谢 (7)5.1总结与思考 (7)5.2致谢 (7)附录 (8)附录一 (8)附录二 (9)参考文献 (11)通用十进制加法器设计要求1、用VHDL 硬件描述语言设计4位的BCD 码全加器;2、以4位BCD 码全加器为模块设计两位十进制数的加法。

10进制加减计数器状态机的VHDL设计

10进制加减计数器状态机的VHDL设计

10进制加减计数器状态机的VHDL设计一、【设计目的】学习并掌握Quartus II 开发系统的基本操作。

掌握用Quartus II进行文本输入法进行电路设计、编译和仿真方法。

掌握CPLD/FPGA的开发流程。

掌握EDA实验开发系统的使用。

掌握状态机的原理。

掌握简单状态机的VHDL设计方法掌握计数器的设计方法。

掌握带有复位和和时钟使能的10进制计数器的原理。

掌握通用计数器的设计方法。

学习使用VHDL进行时序逻辑电路的设计。

学习利用真值表编写VHDL程序。

学习掌握7段数码显示译码器设计的原理。

掌握VHDL语言方式设计7段数码显示译码器。

学习掌握8位数码管动态扫描显示电路的原理。

掌握VHDL语言设计8位数码管动态扫描显示电路学习VHDL语言设计较复杂的电路方法。

二、【设计任务】设计要求用VHDL语言设计一个状态机,要求具有以下状态和功能中的四种或者四种以上:A.复位功能B.8、10或者16进制加法计数C.8、10或者16进制减法计数D.数码管以任何方式闪动E.8个LED灯以任何方式闪动F.蜂鸣器发声或者播放一段音乐G.并用两位数码管将结果显示出来本次设计选用的功能状态为:A.复位功能B.十进制加法计数C.十进制减法计数D.数码管闪动E.8个led灯闪动F.并用两位数码管将结果显示出来功能实现说明Clk为50MHz的时钟信号输入;rst为复位控制按键(低电平有效);en(0-2)通过三个按键分别控制3种状态(低电平有效)。

1.当en(0)=`0`时,启动加法计数并将结果动态显示到两位数码管上,同时另外的两位数码管的6段以相反方向按顺序闪烁2.当en(1)=`0`时,启动减法计数并将结果动态显示到两位数码管上,同时另外的两位数码管的6段以相反方向按顺序闪烁,闪烁方向与加法的相反;3.当en(2)=`0`时,启动LED闪烁功能,LED灯按顺序逐个流水闪动;4.当rst=`0`时,复位清零;三、【设计代码】library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;-----------------------------------------------------------------------------ENTITY cnt16 ISPORT (clk : IN std_logic; --50MHz时钟信号输入rst : IN std_logic; ---复位功能输入en : IN std_logic_vector(2 DOWNTO 0); ---状态选择输入led8 : OUT std_logic_vector(7 DOWNTO 0); --各段数据输出com8 : OUT std_logic_vector(7 DOWNTO 0)); ---各位数据输出END cnt16;-----------------------*****对各个信号进行定义****------------------------------------- ARCHITECTURE arch OF cnt16 ISsignal cnt : std_logic_vector(25 downto 0 );signal data : std_logic_vector(3 downto 0);signal led8_xhdl : std_logic_vector(7 downto 0);signal com8_xhdl : std_logic_vector(7 downto 0);signal coud1 : std_logic_vector(3 downto 0);signal coud2 : std_logic_vector(3 downto 0);signal s1 : std_logic;signal s2 : std_logic;signal s3 : std_logic;signal coud : std_logic_vector(3 downto 0);signal first : std_logic_vector(3 downto 0); --0000signal second : std_logic_vector(3 downto 0); --0000 0000 0000 1001 signal jinwei: std_logic;------------------------------------------------------------------------------------------------------------- beginled8<=led8_xhdl;com8<=com8_xhdl;----------------------- *****状态控制部分*************--------------------------------------------- process(en)beginif en="110"then ----状态控制,低电平有效s1<='1';s2<='0';s3<='0';else if en="101"thens2<='1';s1<='0';s3<='0';else if en="011"thens3<='1';s1<='0';s2<='0';end if;end if;end if;end process;-------------------------------------------------------------------------------------------------------------------------------**********时钟分频部分********----------------------------------process(clk,rst)beginif(rst='0')thencnt<="00000000000000000000000000";elsif(clk'event and clk='1')thencnt<=cnt+1; -----来一个时钟信号cnt加1end if;end process;----------------------------------------------------------------------------------------------------------------------*****-加减计数器的个位-*******------------------------------- process(cnt(24),rst,s1,s2)beginif(rst='0')thenfirst<="0000";jinwei<='0';elsif(cnt(24)'event and cnt(24)='1')then ---每隔(1/50)*48=0.96s计数一次if (s1='1')thenif(first="1001")then ---10进制计数first<="0000";jinwei<='1';elsejinwei<='0';first<=first+1; ---加法计数end if;else if(s2='1')thenif(first="0000")thenfirst<="1001";jinwei<='1';elsejinwei<='0';first<=first-1; ---减法计数end if;end if;end if;end if;end process;-------------------------------------------------------------------------------------------------------------------*********-加减计数器的十位*******-------------------------- process(jinwei,rst,s1,s2)beginif(rst='0')thensecond<="0000";elsif(jinwei'event and jinwei='1')then ---每来1个位产生的进位信号则十位加(减)1if (s1='1')thenif(second="1001")thensecond<="0000";elsesecond<=second+1;end if;else if(s2='1')thenif(second="0000")thensecond<="1001";elsesecond<=second-1;end if;end if;end if;end if;end process;------------------------------------------------------------------------------------------------------------------------------------------------*****闪动数码管的计数***--------------------------------------- process(cnt(23),rst,s1,s2)beginif(rst='0')thencoud<="0000";else if(cnt(23)'event and cnt(23)='1')then ----每隔(1/50)*46=0.92s计数一次if(s1='1')thenif(coud="0101")thencoud<="0000";elsecoud<=coud+1;end if;else if(s2='1')thenif(coud="0000")thencoud<="0101";elsecoud<=coud-1;end if;end if;end if;end if;end if;end process;--------------------------------------------------------------------------------------------------------------------------***码变换****---------------------------------------------process(coud,rst)begincase coud iswhen"0000" => coud1<="1010";coud2<="1010";when"0001" => coud1<="1011";coud2<="1111";when"0010" => coud1<="1100";coud2<="1110";when"0011" => coud1<="1101";coud2<="1101";when"0100" => coud1<="1110";coud2<="1100";when"0101" => coud1<="1111";coud2<="1011";when others => coud1<="0000";coud2<="0000";end case;end process;--------------------------------------------------------------------------------------------****************显示部分***************--process(rst,s1,s2,s3,cnt(17 downto 16),cnt(25 downto 23))beginif(rst='0')thencom8_xhdl<="11110000";led8_xhdl <= "00000000";else if s1='1'or s2='1'then ----计数以及数码管闪动部分的扫描case cnt(17 downto 16) iswhen"10" => com8_xhdl<="11111110";data<=first;when"01" => com8_xhdl<="11111101";data<=second;when"00" => com8_xhdl<="01111111";data<=coud1;when"11" => com8_xhdl<="10111111";data<=coud2;end case;case data isWHEN "0000" =>led8_xhdl <= "00111111"; --0WHEN "0001" =>led8_xhdl <= "00000110"; --1WHEN "0010" =>led8_xhdl <= "01011011"; --2WHEN "0011" =>led8_xhdl <= "01001111"; --3WHEN "0100" =>led8_xhdl <= "01100110"; --4WHEN "0101" =>led8_xhdl <= "01101101"; --5WHEN "0110" =>led8_xhdl <= "01111101"; --6WHEN "0111" =>led8_xhdl <= "00000111"; --7WHEN "1000" =>led8_xhdl <= "01111111"; --8WHEN "1001" =>led8_xhdl <= "01101111"; --9WHEN "1010" =>led8_xhdl <= "00000001";WHEN "1011" =>led8_xhdl <= "00000010";WHEN "1100" =>led8_xhdl <= "00000100";WHEN "1101" =>led8_xhdl <= "00001000";WHEN "1110" =>led8_xhdl <= "00010000";WHEN "1111" =>led8_xhdl <= "00100000";WHEN OTHERS =>led8_xhdl <= "00000011";END CASE;else if s3='1'then ----8个LED灯闪动的扫描,闪动周期为0.92s-1s case cnt(25 downto 23) iswhen"000" => com8_xhdl<="11111110";led8_xhdl<="10000000" ;when"001" => com8_xhdl<="11111101";led8_xhdl<="10000000" ;when"010" => com8_xhdl<="11111011";led8_xhdl<="10000000" ;when"011" => com8_xhdl<="11110111";led8_xhdl<="10000000" ;when"100" => com8_xhdl<="11101111";led8_xhdl<="10000000" ;when"101" => com8_xhdl<="11011111";led8_xhdl<="10000000" ;when"110" => com8_xhdl<="10111111";led8_xhdl<="10000000" ;when"111" => com8_xhdl<="01111111";led8_xhdl<="10000000" ;end case;end if;end if;end if;end process;end arch;。

三位的十进制加法计数器的VHDL语言

三位的十进制加法计数器的VHDL语言

三位的十进制加法计数器的VHDL语言--VHDL程序如下:LIBRARY ieee;UsE ieee。

std_logic_1164。

all;ENTITY cnt1000 IsPORT(clk : IN STD_LOGIC;clr : IN STD_LOGIC;en : IN STD_LOGIC;count : OUT I NTEGER RANGE 0 TO 999; co :OUT STD_LOGIC);END cnt1000;ARCHITECTURE a OF cnt1000 IsSIGNAL s : INTEGER RANGE 0 TO 999;BEGINPROCESS (clk, clr)BEGINIF clr = '0’ THENs 〈= 0;ELSIF (clk'EVENT AND clk = '1’) THENIF en = '1' THENIF s<999 THENs <= s + 1;ELSE s<=0;END IF;ELSEs <= s;END IF;IF s = 999 THEN co 〈='1’;ELSE co <=’0';END IF;END IF;END PROCESS;count 〈= s;END a;摘要:根据教学实践, 介绍了VHDL 硬件描述语言进行工程设计的优点。

他既是一种与实际技术相独立的语言, 不束缚于某一特定的模拟程序或数字装置上,也不把设计方法强加于设计者,他允许设计者在其使用范围内选择工艺和方法,描述能力极强, 覆盖了逻辑设计的诸多领域和层次,并支持众多的硬件模型;也是一种在数字电路教学中全新的理论联系实际的教学方法和全新的培养学生实际动手能力的有效工具。

同时简要地说明VHDL 硬件描述语言的支撑软件M ax+ Plus.并结合实例详细阐明VHDL 语言在M ax+ Plus 软件的环境下对数字电路的设计、应用方法及使用时需注意的几个方面事项。

VHDL加法器设计1

VHDL加法器设计1

VHDL 加法器设计设计要求:采用QuartusII 集成开发环境利用VHDL 硬件描述语言设计传播进位加法器,直接进位加法器,线形进位加法器,平方根进位加法器,并比较这四种加法器的性能。

为了便于比较性能,将四种加法器都设定为28位。

一、全加器设计全加器是上述四种加法器的基础部件,首先应当设计一位全加器。

设计原理:i i i iS ABC ABC ABC ABC A B C=+++=⊕⊕0i i C AB BC AC =++VHDL 程序:仿真结果:--一位全加器设计library ieee;use ieee.std_logic_1164.all; entity fulladd isport ( A: in std_logic;B: in std_logic; cin:in std_logic; sumbit:out std_logic; cout:out std_logic );end fulladd;architecture behav of fulladd is beginsumbit<=(A xor B) xor cin;cout<=(a and b) or (cin and a) or (cin and b); end behav;二、传播进位加法器设计实际上加法器就是是全加器的级联,其中的每个FA网络为一个全加器(采用上文所述的全加器)VHDL代码:--传播进位加法器library ieee;use ieee.std_logic_1164.all;use work.all;entity carry_propogate_adder isport (A: in std_logic_vector(27 downto 0);B: in std_logic_vector(27 downto 0);cin:in std_logic;sum:out std_logic_vector(27 downto 0);cout:out std_logic);end carry_propogate_adder;architecture behav of carry_propogate_adder issignal ct:std_logic_vector(28 downto 0);component fulladd isport (A: in std_logic;B: in std_logic;cin:in std_logic;sumbit:out std_logic;cout:out std_logic);end component;beginct(0)<=cin;cout<=ct(28);G1: for i in 0 to 27 generatel1:fulladd port map (A(i),B(i),ct(i),sum(i),ct(i+1));end generate G1;end behav;功能仿真:延时测定:由图中的两个时间bar 的差值可看出,sum 值和cout 值几乎同时计算出,其Tdelay=28.332ns (cin 无关)三、直接进位加法器设计 设计原理:首先将AB 输入转换为PG 输入,若每级的P 输入都是‘1’则直接将Ci 传给Co ,否则像传播进位加法器一样计算其AB-PG 转换网络原理:Fa 全加器原理:P A B G AB=⊕=o i iC G PC S P C =+=⊕VHDL 代码:-- FA 子单元 library ieee;use ieee.std_logic_1164.all;entity Fa isport (Pi,Gi,Ci:in std_logic; Coi,Si:out std_logic); end Fa;architecture Fabehav of Fa is beginCoi<=Gi or (Pi and Ci);Si<=Pi xor Ci; end Fabehav; --ABtoPG 转换网络 library ieee;use ieee.std_logic_1164.all;entity PGNet isport(Ai,Bi:in std_logic; Pi,Gi:out std_logic); end PGNet;architecture PGbehav of PGNet is beginPi<=Ai xor Bi;Gi<=Ai and Bi; end PGbehav; --传播进位加法器 library ieee;use ieee.std_logic_1164.all; entity bypass_adder is port(A,B:in std_logic_vector(27 downto 0); Ci:in std_logic; Sum:out std_logic_vector(27 downto 0); Co:out std_logic );end bypass_adder;architecture adderbehav of bypass_adder is component Fa is port (Pi,Gi,Ci:in std_logic; Coi,Si:out std_logic ); end component; component PGNet is port(Ai,Bi:in std_logic; Pi,Gi:out std_logic ); end component;signal P,G:std_logic_vector(27 downto 0); signal C:std_logic_vector(28 downto 0); signal BP:std_logic; begin C(0)<=Ci; G1: for i in 0 to 27 generate l1: PGNet port map(A(i),B(i),P(i),G(i)); end generate G1; G2: for i in 0 to 27 generate l2:Fa port map (P(i),G(i),C(i),C(i+1),Sum(i)); end generate G2; BP<='1' when P="11111111111111111111111111111111" else '0'; Co<=Ci when BP='1' else C(8); end adderbehav;功能仿真:延时仿真:当通过直接进位网络(图中testp值全部为1时),进位信号有一定提前,但由于计算所有的P值本身也需要一定时间,所以改善并不明显。

VHDL双向十进制加减法计数器(代码和截图)

VHDL双向十进制加减法计数器(代码和截图)
co: out std_logic
);
end entity;
architecture rtl of vh is
SIGNAL temp:std_logic_vector(3 downto 0);
begin
process (clk)
begin
if(we='1')then
temp<=d;
elsif(clk'event and clk='1')then
if(dir='0')then
if(temp<9)then
temp<=temp+'1';
co<=ห้องสมุดไป่ตู้0';
else
temp<="0000";
co<='1';
end if;
elsif(dir='1')then
if(temp>0)then
temp<=temp-'1';
co<='0';
else
temp<="1001";
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.ALL;
entity vh is
port
(
clk: in std_logic;
dir: in std_logic;
we: in std_logic;
d : in std_logic_vector(3 downto 0);
co<='1';
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

湖南人文科技学院课程设计报告课程名称:VHDL语言与EDA课程设计设计题目:通用十进制加法器系别:通信与控制工程系专业:电子信息工程班级:学生姓名:学号:起止日期:指导教师:教研室主任:指导教师评语:指导教师签名:年月日成绩评定项目权重成绩1、设计过程中出勤、学习态度等方面0.22、课程设计质量与答辩0.53、设计报告书写及图纸规范程度0.3总成绩教研室审核意见:教研室主任签字:年月日教学系审核意见:主任签字:年月日摘要随着科技的发展,通用十进制加法器的应用已广泛融入到现实生活中。

EDA 技术的应用引起电子产品及系统开发的革命性变革。

本文采用EDA技术设计,并以VHDL语言为基础制作的通用十进制加法器。

该系统借助于强大的EDA工具和硬件描述语言可实现两个一位以上的十进制数的加法,在输入两个十进制数之后,给出两个数的相加结果。

本设计充分利用VHDL“自顶向下”的设计优点以及层次化的设计概念,提高了设计的效率。

设计主要步骤:首先利用QUARTUS‖来编辑、编译、仿真各个模块;然后以原理图为顶层文件建立工程,再进行引脚锁定、编译、下载,最后采用杭州康芯电子有限公司生产的GW48系列/SOPC/EDA实验开发系统,进行硬件测试。

关键词:通用十进制加法器;EDA技术;VHDL语言; QUARTUS‖目录设计要求 (1)1、方案论证与对比 (1)1.1方案一 (1)1.2方案二 (1)1.3 方案的对比与选择 (2)2、设计原理 (2)3、通用十进制加法器的主要硬件模块 (3)3.1 4位BCD码全加器模块 (3)3.2八加法器的实现框图 (3)4、调试与操作 (4)4.1通用十进制加法器的功能仿真 (4)4.2模式选择与引脚锁定 (4)4.2.1模式选择 (4)4.2.2引脚锁定 (5)4.3设备与器件明细表 (6)4.4调试 (6)4.4.1软件调试 (6)4.4.2硬件调试 (6)5、总结与致谢 (7)5.1总结与思考 (7)5.2致谢 (7)附录 (8)附录一 (8)附录二 (9)参考文献 (11)通用十进制加法器设计要求1、用VHDL 硬件描述语言设计4位的BCD 码全加器;2、以4位BCD 码全加器为模块设计两位十进制数的加法。

1、方案论证与对比1.1方案一方案一,通过VHDL 语言设计一个4位的BCD 码全加器,以其作为底层文件,然后建立一个顶层文件,调用这个底层文件设计出双4位的BCD 码全加器,最后结果通过译码电路译为7段显示输出。

方案一原理方框图如图1所示:图1 方案一结构方框图1.2方案二方案二,采用原理图输入,先定制LPM_ROM 宏模块,然后再采用原理图输入的方法画出电路图。

方案二原理方框图如图2所示:4位的BCD 码全加器4位的BCD 码全加器显示结果译码器控制信号输入信号定制LPM_ROM宏模块译码器显示结果原理设计图图2 方案二结构方框图1.3 方案的对比与选择方案一:采用VHDL语言输入,它具有多层次的设计描述功能,层层细化,最后可直接生成电路描述,移植性很强。

而且采用VHDL语言输入设计不需要首先考虑选择完成设计的器件,就可以集中精力进行设计的优化。

当设计描述完成后,可以用多种不同的器件结构来实现其功能。

方案二:采用原理图输入,原理图输入的设计方法不能实现真实意义上的自顶向下的设计,并无法建立行为模型。

而且不同的EDA软件中的图形处理工具对图形的设计规则、存档格式和图形编译方式都不同,因此兼容性差。

选择方案一的理由:方案一比较方案二具有综合设计优点。

2、设计原理用VHDL 进行设计,首先应该了解,VHDL 语言是一种全方位硬件描述语言,包括系统行为级,寄存器传输级和逻辑门级多个设计层次。

应充分利用VHDL“自顶向下”的设计优点以及层次化的设计概念,层次概念对于设计复杂的数字系统是非常有用的,它使得人们可以从简单的单元入手,逐渐构成庞大而复杂的系统。

通用十进制加法器的功能为:输入两个十进制数,通过输入信号BTN相加得出十进制数结果,最后通过译码器来显示结果。

图3 加法器原理图3、通用十进制加法器的主要硬件模块3.1 4位BCD 码全加器模块C4A4[3..0]B4[3..0]BTNS4[3..0]CO4add_finst图3 4位的BCD 码全加器3.2八加法器的实现框图图4 8位加法器原理4、调试与操作4.1通用十进制加法器的功能仿真图5 时序仿真1图6 时序仿真24.2模式选择与引脚锁定4.2.1模式选择根据程序,结合电路设计情况,最终选择了模式3,以CTRA,CTRA1,CTRB,CTRB1为输入信号,每按一下输入信号CTRA(CTRB),两位的十进制数的个位就加一,同理,按一下输入信号CTRA1(CTRB1),这个十进制数的十位加一;并通过控制信号BTN来得出结果,最后译码显示出来。

4.2.2引脚锁定表1 引脚锁定表信号名类型(输入/输出)引脚号说明BTN IN PIN_233 控制信号CTRA IN PIN_239 输入信号CTRA1 IN PIN_240 输入信号CTRB IN PIN_237 输入信号CTRB1 IN PIN_238 输入信号A4[0] OUT PIN_161 BUFFER A4[1] OUT PIN_162 BUFFER A4[2] OUT PIN_163 BUFFER A4[3] OUT PIN_164 BUFFER A14[0] OUT PIN_165 BUFFER A14[1] OUT PIN_166 BUFFER A14[2] OUT PIN_167 BUFFER A14[3] OUT PIN_168 BUFFER B4[0] OUT PIN_137 BUFFER B4[1] OUT PIN_138 BUFFER B4[2] OUT PIN_139 BUFFER B4[3] OUT PIN_140 BUFFER B14[0] OUT PIN_141 BUFFER B14[1] OUT PIN_158 BUFFER B14[2] OUT PIN_159 BUFFER B14[3] OUT PIN_160 BUFFERS[0] OUT PIN_13 输出信号S[1] OUT PIN_14 输出信号S[2] OUT PIN_15 输出信号S[3] OUT PIN_16 输出信号S[4] OUT PIN_17 输出信号S[5] OUT PIN_18 输出信号S[6] OUT PIN_19 输出信号S[7] OUT PIN_20 输出信号S[8] OUT PIN_21 输出信号S[9] OUT PIN_41 输出信号S[10] OUT PIN_128 输出信号S[11] OUT PIN_132 输出信号4.3设备与器件明细表表2 设备与器件明细表名称型号/参数数量SOPC/EDA开发系统GW48系列1套微型计算机联想1台Quartus II开发软件Quartus II 1套4.4调试4.4.1软件调试本系统的软件系统很长,首先按照QuartusII设计流程,完成各项步骤,编好VHDL 程序。

然后运行,查看是否有语法错误,当确认程序没有语法错误的前提下,开始建立波形编辑器文件,开始时序仿真,查看结果是否符合题目要求,若符合,则进行下一步的硬件调试,否则,重新检查程序,以及仿真设置等等,直到符合要求。

软件调试采取的是自分断调试的方法,即单独调试好每一个模块,然后再连接成一个完整的系统,最后完成一个完整的系统调试。

4.4.2硬件调试锁定引脚后,然后进行硬件调试,本课程设计采用的是Cycone 系列的SOPC/EDA 开发系统,根据电路设计情况,通过分析,最终选择了模式7,选择CLOCK0作为输入的时钟信号的端口,16位预置输入数通过4个4位的按键控制。

引脚锁定后,开始下载到Cycone 系列的SOPC/EDA开发系统,通过按键输入不同的初始值,输入完毕后,通过按键2控制输出两输入数的和。

最后,通过嵌入式逻辑分析仪SignalTal II测试,然后通过设置以确定前后触发捕捉信号信息的比列。

5、总结与致谢5.1总结与思考本次EDA课程设计,是我们第一次深入接触电路设计和工程设计的内容。

作为一个学生,在过去的两年半中学习了专业的各方面知识,包括电路原理、模拟电路、数字电路等等,而这周的EDA课设,将我们学过的各方面电学知识和现代电路设计方法结合起来,应用计算机软件进行课题项目设计,不单夯实了我们的理论知识和对数字电路的理解,更极大的锻炼了我们实际动脑、动手能力。

我们的设计题目是通用十进制加法器,通过拨码开关输入两个十进制数,将输入的数通过数码管显示,相加后的结果也通过数码管显示出来。

这个设计题目是整体来看是比较简单的。

仔细分析这个题目,遇到的第一个问题是要对两个输入的数进行处理,当其大于9的时候要把它变成0后再输入加法器。

而后比较棘手的问题是怎样把输出的二进制结果转换成十进制数。

由此我们设计出一个查表方案。

至此,整个设计方案就比较完善了。

5.2致谢通过两周课程设计,我们受益良多。

在老师的指导下,我们逐步完善了各个环节的构思与设计。

在这两周的时间里,这次课设让我在实际中真正地运用了在课本中学到的东西,既加深理论知识的理解,又锻炼了自己的动手能力。

在此,对老师们致以衷心的感谢和崇高的敬意!最终,在老师及同学们的帮助与指导下顺利完成了本次的课程设计。

附录附录一底层源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY add_f ISPORT(C4: IN STD_LOGIC;--前一位的进位CA4: IN STD_LOGIC_VECTOR(3 DOWNTO 0);--被加数AB4: IN STD_LOGIC_VECTOR(3 DOWNTO 0);--被加数BS4: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--相加的和SBTN:in std_logic;CO4: OUT STD_LOGIC);--相加产生的进位CEND ENTITY add_f;ARCHITECTURE ART OF add_f ISSIGNAL S5,S6: STD_LOGIC_VECTOR(4 DOWNTO 0);SIGNAL A5,B5: STD_LOGIC_VECTOR(4 DOWNTO 0);BEGINprocess(BTN)beginif BTN'EVENT AND BTN='1' thenA5<='0'&A4;--扩展被加数A高位为0B5<='0'&B4;--扩展被加数B高位为0S5<=A5+B5+C4;--二数相加,并加上前一位的进位if S5>"01001" THENS6<=S5+"00110";ELSE S6<=S5;END IF;end if;S4<=S6(3 DOWNTO 0);CO4<=S6(4);end process;END ARCHITECTURE ART;附录二顶层源文件LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;use ieee.std_logic_arith.all;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY add ISPORT( A4,A14: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);--被加数A B4,B14: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);--被加数BBTN,CTRA,CTRA1,CTRB,CTRB1:IN std_logic;S: OUT STD_LOGIC_VECTOR(11 DOWNTO 0));--相加的和SEND ENTITY add;ARCHITECTURE ART OF add IScomponent add_fPORT(C4: IN STD_LOGIC;--前一位的进位CA4: IN STD_LOGIC_VECTOR(3 DOWNTO 0);--被加数AB4: IN STD_LOGIC_VECTOR(3 DOWNTO 0);--被加数BS4: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--相加的和S BTN:IN STD_LOGIC;CO4: OUT STD_LOGIC);--相加产生的进位Cend component;SIGNAL COUT,C1,C2: STD_LOGIC;BEGINPROCESS(CTRA,CTRA1,CTRB,CTRB1)BEGINIF CTRA'EVENT AND CTRA='1' THENIF A4<"1001" THEN A4<=A4+1; ELSE A4<="0000";END IF;END IF;IF CTRA1'EVENT AND CTRA1='1' THENIF A14<"1001" THEN A14<=A14+1; ELSE A14<="0000";END IF;END IF;IF CTRB'EVENT AND CTRB='1' THENIF B4<"1001" THEN B4<=B4+1; ELSE B4<="0000";END IF;END IF;IF CTRB1'EVENT AND CTRB1='1' THENIF B14<"1001" THEN B14<=B14+1; ELSE B14<="0000";END IF;END IF;END PROCESS;C1<='0';u1:add_f port map(C4=>C1,A4=>A4,B4=>B4,BTN=>BTN,CO4=>COUT,S4=>S(3 DOWNTO 0));u2:add_f port map(C4=>COUT,A4=>A14,B4=>B14,BTN=>BTN,CO4=>C2,S4=>S(7 DOWNTO 4));s(8)<=C2;S(11 DOWNTO 9)<="000";END ARCHITECTURE ART;参考文献[1]潘松,黄继业主编.EDA技术与VHDL[M].北京:清华大学出版社.2006年9月[2]潘松,王国栋编著.VHDL实用教程[M].成都:电子科技大学出版社,2006[3]江国强主编.EDA技术与应用[M].北京:电子工业出版社.2007[4]康华光主编.数字技术基础(第五版)[M].北京:高等教育出版社.2000[5]徐志军,徐光辉编著.CPLD/FPGA的开发与应用[M].北京:电子工业出版社.2002[6]李玉华.DEA技术与电子实验教学结合的探讨[J].长春师范学院报(自然科学版),2009,(06)[7]庄海军,林咏海.基于FPGA的数控分频器的实现[J].电子与封装,2008,(11)[8]周立功编著.EDA实验与实践[M].北京:北京航空航天大学出版社.2007年3月。

相关文档
最新文档