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,语言,进制,计数器,课程,设计,任务书,学生,姓名,您可以从右上方搜索框检索更多相关文章,如果您觉得有用,请继续关注我们并推荐给您的好友,您可以在教育文库中查看更多范文。
课程设计任务书学生姓名:黄思羽专业班级:自动化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语言进行时序逻辑电路设计的方法。
二、实验设备及器件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语言与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设计一、【设计目的】学习并掌握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程序如下: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 加法器设计设计要求:采用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双向十进制加减法计数器(代码和截图)
);
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';
基于VHDL语言的十进制计数显示设计
(读书报告、研究报告)考核科目:S O P C(片上可编程系统)及E D A 技术学生所在院(系):电气工程及其自动化学院学生姓名:学号:考核结果阅卷人第 1 页(共页)基于VHDL语言的十进制计数显示设计1 引言我们熟知的各种数字系统终端设备都需要对于十进制的信息进行数码显示,从万用表,电压源等等仪器仪表到生活中的各种电气设备,其中最常用的显示器件就是LED和LCD。
在大规模可编程逻辑器件FPGA的硬件基础上,根据译码器原理运用VHDL语言对十进制计数译码显示电路进行了设计,同时通过Quartus II 的软件开发环境对设计电路进行了仿真,同时下载到课程所发的实验箱中验证了硬件功能。
2 十进制译码器显示的原理计数器是一种中规模的集成电路,其种类繁多,不但可以实现计数分频,而且可以实现测量、运算、定时、延时等等控制功能。
目前各类计数器均有典型产品,二进制计数器74LS161、十进制计数器74LS90、十六进制计数器74LS191等。
十进制计数器的工作原理,同二进制计数器相比较为复杂。
一般分析步骤是:(1)从逻辑图上得出每个触发器的输入信号表达式;(2)将上述表达式带入各触发器的状态方程,得到表示该计数器工作状态的状态方程;(3)根据状态方程得到计数器的状态转换表;(4)判断计数器的功能;图1 为由D触发器组成的四位数码计数电路图在上图所示的同步十进制加法计数器中有:将上述关系代入各JK触发器的特征方程,则计数器的状态方程为:设计数器初始状态为0000,第一个计数脉冲来到后有:即计数器的状态为0001。
同理计数可得,第2个计数脉冲来到后,状态为0010,类推可得到表1所示的状态转换表。
由于是这里是十进制计数器,所以在计数器状态为1001时,即计数为9时需要跳过后面的6个状态,在下一个脉冲到来时,状态变为0000,完成一次十进制计数循环。
表1 同步十进制加法计数器状态表其中利用开发箱上的开关1作为计数脉冲给出端,开关2作为清零信号给出端,显示由7段LED给出,计数与数码显示所需七位二进制数对应关系表2所示:表2 7段数码管显示对应二进制数3 程序框图及程序清单根据上述原理,利用VDHL语言在Altera公司研发的Quartus II的仿真环境中进行程序设计。
VHDL语言10进制计数器
课程设计任务书学生姓名: 黄思羽 专业班级: 自动化0607指导教师: 李向舜 工作单位: 自动化学院题 目: 10进制计数器初始条件:1. Quartus4.1以上版本软件;2. 课程设计辅导资料:“数字电路EDA入门”、“VHDL程序实例集”、“EDA技术与VHDL”、“EDA与数字系统设计”等;3. 先修课程:电路、电子设计EDA、电子技术基础等。
4. 主要涉及的知识点:门电路、组合逻辑电路、时序逻辑电路等。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1. 课程设计时间:1周;2. 课程设计内容:根据指导老师给定的题目,按规定选择其中1套完成;3. 本课程设计统一技术要求:研读辅导资料对应章节,对选定的设计题目进行理论分析,针对具体设计部分的原理分析、建模、必要的推导和可行性分析,画出程序设计框图,编写程序代码(含注释),上机调试运行程序,记录实验结果(仿真结果),并对实验结果进行分析和总结。
具体设计要求包括:1 复习EDA的相关技术与方法;2 掌握VHDL或者Verilog语言,并要求能编写程序。
3 Quartus软件的使用:掌握程序编辑、编译、调试、仿真方法。
4 设计相关简单的电路,完成既定的功能。
4. 课程设计说明书按学校“课程设计工作规范”中的“统一书写格式”撰写,具体包括:1 目录;2 计数器相关的理论分析、归纳和总结;3 10进制计数器的结构组成及原理分析。
4 程序设计框图、程序代码(含注释);5 给出程序中主要函数或者语句的功能说明和使用说明;6 给出程序仿真运行结果和图表、以及实验结果分析和总结;7 课程设计的心得体会(至少500字);8 参考文献;9 其它必要内容等。
时间安排:具体时间设计内容8月3日指导老师就课程设计内容、设计要求、进度安排、评分标准等做具体介绍。
学生确定选题,明确设计要求8月4日开始查阅资料,完成相关电路原理分析、代码或原理图设计。
VerilogHDL十进制计数器实验Quartus非常详细的步骤
实验二十进制计数器实验该实验将使用Verilog 硬件描述语言在DE2-70 开发平台上设计一个基本时序逻辑电路——1 位十进制计数器。
通过这个实验,读者可以了解使用Quartus 工具设计硬件的基本流程以及使用Quartus II 内置的工具进行仿真的基本方法和使用SignalTap II 实际观察电路运行输出情况。
SignalTap II 是Quartus 工具的一个组件,是一个片上的逻辑分析仪,可以通过JTAG 电缆将电路运行的实际输出传回Quartus 进行观察,从而省去了外界逻辑分析仪时的很多麻烦。
实验步骤3.1建立工程并完成硬件描述设计1. 打开Quartus II 工作环境,如图3-1 所示。
图3-1 Quartus II工作环境界面2. 点击菜单项File->New Project Wizard 帮助新建工程。
参看图3-2。
图3-2 选择New Project Wizard打开Wizard 之后,界面如图3-3 所示。
点击Next,如图3-3。
第23 页共208 页图3-3 New Project Wizard界面3. 输入工程工作路径、工程文件名以及顶层实体名。
这次实验会帮助读者理解顶层实体名和工程名的关系,记住目前指定的工程名与顶层实体名都是Counter10,输入结束后,如图3-4 所示。
点击Next。
图3-4输入设计工程信息4. 添加设计文件。
界面如图3-5 所示。
如果用户之前已经有设计文件(比如.v 文件)。
第24 页共208 页那么再次添加相应文件,如果没有完成的设计文件,点击Next 之后添加并且编辑设计文件。
图3-5添加设计文件5. 选择设计所用器件。
由于本次实验使用Altera 公司提供的DE2-70 开发板,用户必须选择与DE2-70 开发板相对应的FPGA 器件型号。
在Family 菜单中选择Cyclone II,Package 选FBGA,Pin Count 选896,Speed grade 选6,确认Available devices 中选中EP2C70F896C6,如图3-6。
maxplus2 cpld vhdl 流水灯的设计 十进制加法计数器的设计 奇偶校验电路的
实验六流水灯的设计(文本输入方式)[实验目的]1.学习设计一个流水灯程序,并在实验板上验证;2.学习使用VHDL语言进行逻辑设计输入;3.学习设计仿真工具的使用方法;[实验说明]该流水灯除了输入有:时钟端、使能端和清零端,输出为8个led指示灯。
清零端为低电平时回到最初始状态,输出为O1灯亮,为高电平时无作用;使能端低电平时流水灯停止,高电平时流水灯继续流动;时钟端为系统时钟输入,要求8个led指示灯每秒变化一次,向右流动,变化顺序依次为O1灯亮→O2灯亮→O3灯亮→ O4灯亮→ O5灯亮→ O6灯亮→ O7灯亮→返回O1。
电路逻辑功能实现后,可将该逻辑功能下载到CPLD中。
注意选择:清零端选1脚,使能端选拨码开关,时钟端选83脚、输出线8根(接发光二极管指示[实验要求]1用VHDL语言实现流水灯2设计仿真文件,进行软件验证3通过下载线下载到实验板上进行验证4若初始状态为O8灯亮,流水灯向左流动,试重新设计并下载验证[实验报告要求]1写出VHDL编程语言源文件2给出软件仿真和硬件测试结果3通过下载线下载到实验板上进行验证4写出学习总结参考程序见下页:library ieee;use ieee.std_logic_1164.all;entity liushuideng isport(ena,clk_in,clr: in std_logic;y: out std_logic_vector(7 downto 0));end liushuideng;architecture a of liushuideng issignal clk: std_logic;beginclock:process(clk_in) --输入的时钟为4Mvariable clock_buffer:std_logic; ----定义一个标准逻辑变量clock_buffervariable count_time:integer range 0 to 1999999; ---定义一个整型变量count_time beginif clk_in'event and clk_in='1' thenif count_time=1999999 thencount_time:=0;clock_buffer:=not clock_buffer; --每计2M次数时翻转一次elsecount_time:=count_time+1;end if;end if;clk<=clock_buffer; --输出的时钟为1HZend process;process(clr,clk,ena)variable q: std_logic_vector(7 downto 0); ----定义一个标准逻辑矢量的变量qbeginif(clr='0')thenq:="11111110"; ----按下清零键让它回到O1灯亮elseif clk'event and clk='1' then ---时钟的上升沿if ena='1' then ---ena为高开始移位,ena为低停止移位q:=q(6 downto 0)&q(7); --向右移动移位end if;end if;end if;y<=q;end process;end a;实验七十进制加法计数器的设计(文本输入方式)[实验目的]1.学习设计一个十进制加法计数器程序,并在实验板上验证;2.熟练掌握VHDL语言进行逻辑设计输入;3.学习设计仿真工具的使用方法;[实验说明]该计数器输入有:时钟端、使能端和清零端,输出为1个数码管。
vhdl 加法器
ADD4, 8, 164-, 8-, 16-Bit Cascadable Full Adders with Carry-In, Carry-Out, and OverflowAArchitectures SupportedADD4, ADD8, and ADD16 add two words and a carry-in (CI), producing a sum output and carry-out (CO) or overflow (OFL). ADD4 adds A3 – A0, B3 – B0, and CI producing the sum output S3 – S0 and CO (or OFL). ADD8 adds A7 – A0, B7 – B0, and CI, producing the sum output S7 – S0 and CO (or OFL). ADD16 adds A15 – A0, B15 – B0 and CI, producing the sum output S15 – S0 and CO (or OFL).Unsigned Binary Versus Twos ComplementADD4, ADD8, ADD16 can operate on either 4-, 8-, 16-bit unsigned binary numbers or 4-, 8-, 16-bit twos-complement numbers, respectively. If the inputs are interpreted as unsigned binary, the result can be interpreted as unsigned binary. If the inputs are interpreted as twos complement, the output can be interpreted as twos complement. The only functional difference between an unsigned binary operation and a twos-complement operation is how they determine when “overflow” occurs. Unsigned binary uses CO, while twos-complement uses OFL to determine when “overflow” occurs. To interpret the inputs as unsigned binary, follow the CO output. To interpret the inputs as twos complement, follow the OFL output.Unsigned Binary OperationFor unsigned binary operation, ADD4 can represent numbers between 0 and 15, inclusive; ADD8 between 0 and 255, inclusive; ADD16 between 0 and 65535, inclusive. CO is active (High) when the sum exceeds the bounds of the adder.OFL is ignored in unsigned binary operation.T wos-Complement OperationFor twos-complement operation, ADD4 can represent numbers between -8 and +7, inclusive; ADD8 between -128 and +127, inclusive; ADD16 between -32768 and +32767, inclusive. OFL is active (High) when the sum exceeds the bounds of the adder. CO is ignored in twos-complement operation.ADD4, 8, 16Spartan-II, Spartan-IIE No Spartan-3No Virtex, Virtex-ENo Virtex-II, Virtex-II Pro, Virtex-II Pro X NoXC9500, XC9500XV , XC9500XL Primitive CoolRunner XPLA3Primitive CoolRunner-IIPrimitiveADD8 Implementation Spartan-II, Spartan-IIE, Virtex, Virtex-E Libraries GuideADD8 Implementation Spartan-3, Virtex-II, Virtex-II Pro, Virtex-II Pro XADD4 Implementation XC9500/XV/XL, CoolRunner XPLA3, CoolRunner-II Libraries GuideADD8 Implementation XC9500/XV/XL, CoolRunner XPLA3, CoolRunner-II UsageThis design element is schematic or inference only -- no instantiation.VHDL Inference Code (ADD4)architecture Behavioral of ADD issignal sum: std_logic_vector(WIDTH-1 downto 0);signal zeros: std_logic_vector(WIDTH-1 downto 0) := (others => '0'); beginprocess (CI, A, B, sum)beginsum <= ('0' & A) + ('0' & B) + (zeros & CI);S <= sum(WIDTH-1 downto 0);CO <= sum(WIDTH);end process;end Behavioral;Verilog Inference Code (ADD4)always @ (A or B or CI)begin{CO,sum} <= A + B + CI;end Libraries Guide。
十进制计数器VHDL描述及操作流程6
第二章软硬件操作流程2.1 十进制计数器流程2.11 建立工作库文件夹和编辑设计文件任何一项设计都是一项工程(Project),都必须首先为此工程建立一个放置与此工程相关的所有设计文件的文件夹。
此文件夹将被EDA软件默认为工作库(Work Library)。
一般,不同的设计项目最好放在不同的文件夹中,而同一工程的所有文件都必须放在同一文件夹中。
在建立了文件夹后就可以将设计文件通过Quartus II的文本编辑器编辑并存盘,步骤如下:(1)新建一个文件夹。
这里假设本项设计的文件夹取名为CNT10B,在D盘中,路径为d:\cnt10b 。
注意,文件夹名不能用中文,也最好不要用数字。
(2)输入源程序。
打开QuartusII,选择菜单File→New。
在New窗口中的Device Design Files中选择编译文件的语言类型,这里选择“VHDL File”(如图2-1所示)。
然后在VHDL 文本编译窗中输入(键入)例3-22所示的VHDL示例程序。
图2-1 选择编辑文件的语言类型《示例程序和实验指导课件位置》:\EDA_BOOK3_FOR_1C6\chpt4\EXPT53_cnt10\工程cnt10【例3-22】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT10 ISPORT (CLK,RST,EN : IN STD_LOGIC;CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT : OUT STD_LOGIC );END CNT10;ARCHITECTURE behav OF CNT10 ISBEGINPROCESS(CLK, RST, EN)VARIABLE CQI : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF RST = '1' THEN CQI := (OTHERS =>'0') ; --计数器异步复位ELSIF CLK'EVENT AND CLK='1' THEN --检测时钟上升沿IF EN = '1' THEN --检测是否允许计数(同步使能)IF CQI < 9 THEN CQI := CQI + 1; --允许计数, 检测是否小于9 ELSE CQI := (OTHERS =>'0'); --大于9,计数值清零END IF;END IF;END IF;IF CQI = 9 THEN COUT <= '1'; --计数大于9,输出进位信号ELSE COUT <= '0';END IF;CQ <= CQI; --将计数值向端口输出END PROCESS;(3)文件存盘。
FPGA VHDL10进制计数器
《FPGA原理及应用》实验报告书(6)7段显示译码器的设计题目学院专业自动化姓名学号指导教师2015年 10-12月1.实验目的(1)进一步熟悉和掌握Qartus II的使用方法;(2)进一步掌握FPGA实验箱使用方法;(3)学习和掌握电路原理图的设计流程;(4)深化理解VHDL语言的使用方法2.实验内容使用Qartus II的元件库,通过VHDL语言进行设计7段显示译码器,并使用FPGA实验箱对程序进行硬件下载,验证。
3.实验条件开发软件:Qartus II 8.0实验设备:FPGA实验箱拟用芯片:Altera EP3C55F484C84.实验设计1)系统原理根据7段显示译码器的设计原理,7段数码是纯组合电路,通常的小规模专用IC,如74或4000系列的器件只能作十进制BCD码译码,然而数字系统中的数据处理和运算都是2进制的,所以输出表达都是16进制的,为了满足16进制的译码显示,最方便的方法就是利用译码程序在FPGA/CPLD中来实现。
例3-5作为7段译码器,输处信号LED7S的7位分别接数码管的7个段,例如当LED7S输出为“1101101”时,数码管的7个段:g、f、e、d、c、b、a分别接1、1、0、1、1、0、1;接有高电平的段发亮,于是数码管显示“5”。
注意,这里没有考虑表示喜爱哦书店的发光管,如果要考虑,需要增加段h。
7段显示译码管字形对应输出输入2)程序如下所示为7段显示译码器程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY LED ISPORT(A:IN STD_LOGIC_VECTOR(3 DOWNTO 0);LED7S:OUT STD_LOGIC_VECTOR(6 DOWNTO 0) );END ENTITY LED;ARCHITECTURE bhv OF LED ISBEGINPROCESS(A)BEGINCASE A(3 DOWNTO 0) ISWHEN "0000"=>LED7S<="0111111";WHEN "0001"=>LED7S<="0000110";WHEN "0010"=>LED7S<="1011011";WHEN "0011"=>LED7S<="1001111";WHEN "0100"=>LED7S<="1100110";WHEN "0101"=>LED7S<="1101101";WHEN "0110"=>LED7S<="1111101";WHEN "0111"=>LED7S<="0000111";WHEN "1000"=>LED7S<="1111111";WHEN "1001"=>LED7S<="1101111";WHEN "1010"=>LED7S<="1011000";WHEN "1011"=>LED7S<="1001100";WHEN "1100"=>LED7S<="1100010";WHEN "1101"=>LED7S<="1101001";WHEN "1110"=>LED7S<="1111000";WHEN "1111"=>LED7S<="0000000";WHEN OTHERS=> NULL;END CASE;END PROCESS;END bhv;1电路波形图工程编译完成后,必须对其功能和时序性质进行仿真测试。
VHDL加法器
VHDL加法器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY F_ADDER ISPORT(ain,bin,cin:IN STD_LOGIC;sum,cout:OUT STD_LOGIC);END ENTITY F_ADDER;ARCHITECTURE BEHAVIOR OF F_ADDER ISSIGNAL D:STD_LOGIC;BEGIND<=(ain XOR bin);sum<=cin XOR D;cout<=(cin AND D) OR (ain AND bin);END ARCHITECTURE BEHAVIOR;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADDER8 ISPORT( a:IN STD_LOGIC_VECTOR(7 DOWNTO 0);b:IN STD_LOGIC_VECTOR(7 DOWNTO 0);c:IN STD_LOGIC;s:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);co:OUT STD_LOGIC);END ENTITY ADDER8;ARCHITECTURE BEHAVIOR1 OF ADDER8 ISCOMPONENT F_ADDERPORT(ain,bin,cin:IN STD_LOGIC;sum,cout:OUT STD_LOGIC);END COMPONENT;--SIGNAL m:STD_LOGIC_VECT0R(7 DOWNTO 0);--SIGNAL s:STD_LOGIC_VECT0R(7 DOWNTO 0);SIGNAL wire: STD_LOGIC_VECTOR(8 DOWNTO 0);BEGINwire(0)<=c;co<=wire(8);gen:FOR i IN 7 DOWNTO 0 GENERATEu1:F_ADDER PORT MAP(ain=>a(i),bin=>b(i),cin=>wire(i),cout=>wire(i+1),sum=>s(i) );END GENERATE gen;--u1:F_ADDER PORT MAP(ain=>a(0),bin=>b(0),cin=>c,cout=>d,sum=>s(0));--u2:F_ADDER PORT MAP(ain=>a(1),bin=>b(1),cin=>m(i),cout=>e,sum=>s(1));--u3:F_ADDER PORT MAP(ain=>a(2),bin=>b(2),cin=>m(i),cout=>f,sum=>s(2));--u4:F_ADDER PORT MAP(ain=>a(3),bin=>b(3),cin=>m(i),cout=>g,sum=>s(3));--u5:F_ADDER PORT MAP(ain=>a(4),bin=>b(4),cin=>m(i),cout=>h,sum=>s(4));--u6:F_ADDER PORT MAP(ain=>a(5),bin=>b(5),cin=>m(i),cout=>i,sum=>s(5)); --u7:F_ADDER PORT MAP(ain=>a(6),bin=>b(6),cin=>m(i),cout=>j,sum=>s(6)); --u8:F_ADDER PORT MAP(ain=>a(7),bin=>b(7),cin=>m(i),cout=>co,sum=>s(7)); --su<=s;END ARCHITECTURE BEHAVIOR1;。
十进制计数器VHDL
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity CNT10 isport(CLK,RST,EN:in std_logic;CQ:out std_logic_vector(3 downto 0);a,b,c,d,e,f,g:out std_logic;COUT:out std_logic);end;architecture behave of CNT10 isSIGNAL SEGOUT:STD_LOGIC_VECTOR(0 TO 6);SIGNAL dout:STD_LOGIC_VECTOR(0 TO 6); beginprocess(CLK,RST,EN)variable CQI:std_logic_vector(3 downto 0);beginif RST='1' then CQI:=(others=>'0');elsif CLK'event and CLK='1' thenif EN='1' thenif CQI<"1001" then CQI:=CQI+1;else CQI:=(others=>'0');end if;end if;end if;if CQI="1001" then COUT<='1';else COUT<='0';end if;CASE CQI ISWHEN"0000"=>SEGOUT<="1111110";WHEN"0001"=>SEGOUT<="0110000";WHEN"0010"=>SEGOUT<="1101101";WHEN"0011"=>SEGOUT<="1111001";WHEN"0100"=>SEGOUT<="0110011";WHEN"0101"=>SEGOUT<="1011011";WHEN"0110"=>SEGOUT<="1011111";WHEN"0111"=>SEGOUT<="1110000";WHEN"1000"=>SEGOUT<="1111111";WHEN"1001"=>SEGOUT<="1111011";WHEN OTHERS=>SEGOUT<="0000000";END CASE;a<=dout(0);b<=dout(1;c<=dout(2);d<=dout(3);e<=dout(4);f<=dout(5);g<=dout(6;end process; end;。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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月。