异步复位8421码十进制计数器vhdl
- 格式:doc
- 大小:12.00 KB
- 文档页数:2
数字电路与逻辑设计实验报告学院:班级:姓名:学号:日期:一.实验名称:实验一:QuartusII 原理图输入法设计与实现实验二:用VHDL 设计与实现组合逻辑电路实验三:用VHDL 设计与实现时序逻辑电路实验四:用VHDL 设计与实现数码管动态扫描控制器二.实验所用器件及仪器:1.计算机2.直流稳压电源3.数字系统与逻辑设计实验开发板三.实验要求:实验一:(1)用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块单元。
(2)用(1)实现的半加器和逻辑门设计实现一个全加器,仿真并验证其功能,并下载到实验板上测试。
要求用拨码开关设定输入信号,发光二极管显示输出信号。
(3)用3—8线译码器和逻辑门设计实现函数F=/C/B/A+/CB/A+C/B/A+CBA,仿真验证其功能并下载到实验板测试。
要求用拨码开关设定输入信号,发光二极管显示输出信号。
注:实验时将三个元器件放在一个new block diagram中实现。
实验二:(1)用VHDL语言设计实现一个共阴极7段数码译码器,仿真验证其功能,并下载到实验板测试。
要求用拨码开关设定输入信号,7段数码管显示输出信号。
(2)用VHDL语言设计实现一个8421码转余三码的代码器,仿真验证其功能,并下载到实验板测试。
要求用拨码开关设定输入信号,发光二极管显示输出信号。
(3)用VHDL语言设计实现一个4位二进制奇校验器,输入奇数个‘1’时,输出1,否则出0;仿真验证其功能,并下载到实验板测试。
要求用拨码开关设定输入信号,发光二极管显示输出信号。
实验三:(1)用VHDL语言设计实现一个带异步复位的8421 十进制计数器,仿真验证其功能,并下载到实验板测试。
要求用按键设定输入信号,发光二极管显示输出信号。
(2)用VHDL语言设计实现一个分频系数为12,输出信号占空比为50%的分频器,仿真验证其功能。
注:实验时将(1)、(2)和数码管译码器 3 个电路进行链接,并下载到实验板显示计数结果。
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 十进制表示数值摘要:1.VHDL 简介2.VHDL 中十进制表示数值的方法3.实例:使用VHDL 编写一个十进制计数器4.总结正文:【1.VHDL 简介】VHDL(VHSIC 硬件描述语言)是一种硬件描述语言,主要用于描述数字电路和模拟混合信号电路。
VHDL 能够描述复杂的数字系统,并能够生成相应的硬件电路,因此广泛应用于数字电路设计和验证。
【2.VHDL 中十进制表示数值的方法】在VHDL 中,十进制表示数值的方法主要有两种:一位数表示法和多位数表示法。
一位数表示法:使用一个位(bit)来表示0-9 中的一个数字,如果需要表示十进制数,就需要使用10 个位。
例如,要表示十进制数123,就需要使用3 个位,分别表示1、2 和3。
多位数表示法:使用一个整数(integer)来表示0-9999 中的一个数字,如果需要表示更大的十进制数,可以使用更大的整数。
例如,要表示十进制数12345,就需要使用一个16 位的整数。
【3.实例:使用VHDL 编写一个十进制计数器】下面是一个使用VHDL 编写的十进制计数器的示例代码:```vhdllibrary IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity counter isPort ( clk : in STD_LOGIC;reset : in STD_LOGIC;enable : in STD_LOGIC;count_out : out STD_LOGIC_VECTOR (3 downto 0)); end counter;architecture Behavioral of counter isbeginprocess (clk, reset)beginif reset = "1" thencount_out <= (others => "0");elsif rising_edge(clk) thenif enable = "1" thenif count_out = "1001" thencount_out <= (others => "0");elsecount_out <= count_out + 1;end if;end if;end if;end process;end Behavioral;```在这个示例中,我们定义了一个名为“counter”的实体,它有4 个端口:clk(时钟信号)、reset(复位信号)、enable(使能信号)和count_out (计数值输出)。
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字);⑧参考文献;⑨其它必要内容等。
专业技能训练4题目:用VHDL设计8421BCD码24进制计数器班级:电子科学与技术1201姓名:王启正学号:120803039时间:2015.5—2015.6一、技能训练项目名称运用VHDL语言进行编程设计一个8421BCD码24进制计数器二、实训目的1.熟练掌握Quartus II软件的使用。
2.熟练掌握在QuartusII平台上用原理图或者VHDL语言进行电路设计的方法。
3.学会用例化语句对EDA电路设计中顶层电路进行描述三、实训要求1.熟悉仿真开发软件Quartus II的使用;2.根据功能要求,用原理图或文本输入方式完成设计;3.用Quartus II做波形仿真调试;4.下载至EDA试验仪调试设计。
四、基本原理(附源程序清单,原理图、RTL图)1、通过VHDL语言编程方法程序清单:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY lin IS PORT(CLK :IN STD_LOGIC; --时钟EN :IN STD_LOGIC; --使能端CR :IN STD_LOGIC; --清零端,低电平有效LD :IN STD_LOGIC; --数据载入控制,低电平有效D :IN STD_LOGIC_VECTOR(5 DOWNTO 0); --载入数据端CO : OUT STD_LOGIC; --进位Q :OUT STD_LOGIC_VECTOR(5 DOWNTO 0) --计时输出);END lin ;ARCHITECTURE a OF lin IS SIGNALQN :STD_LOGIC_VECTOR(5 DOWNTO 0);BEGIN --进位控制 CO<='1' WHEN(QN=X"23" AND EN='1')ELSE'0';PROCESS(CLK,CR)BEGINIF (CR='0')THENQN<="000000";ELSEIF (CLK'EVENT AND CLK='1') THENIF (LD='0') THEN --数据加载 QN<=D;ELSIF(EN='1') THENIF (QN(3 DOWNTO 0)=3 and QN(5 DOWNTO 4)=2) or QN(3 DOWNTO 0)=9 THENQN(3 DOWNTO 0)<="0000"; --个位数进位IF QN(5 DOWNTO 4)=2 THENQN(5 DOWNTO 4)<="00"; --十位数进位ELSEQN(5 DOWNTO 4)<= QN(5 DOWNTO 4)+1;END IF;ELSEQN(3 DOWNTO 0)<= QN(3 DOWNTO 0)+1;END IF ;END IF;END IF ;END IF;END PROCESS;Q<=QN;end a;2、原理图:3、RTL图:五、仿真调试:调试过程中,输出波形为24进制波形图。
EDA技术及应用实验报告
——同步计数器VHDL的设计
班级:XXX
姓名:XXX
学号:XXX
一、实验目的:
学习数控分频器的设计、分析和测试方法。
二、实验原理:
同步计数器的功能就是在时钟脉冲的控制下,构成计数器的各触发器状态同时发生变化的一类计数器。
本实验是一个模为60,具有异步复位、同步置数功能的8421BCD码计数器。
三、实验内容和步骤:
1、打开文本编辑器,完成同步计数器的设计。
2、完成同步计数器的设计输入、进行目标器件选择。
3、引脚锁定。
4、编译。
5、对同步计数器设计进行仿真。
四、实验下载并实测
该同步计数器具有异步复位,同步置数功能。
当load=1时,便把输入信号与指导输出端,然后开始计数,计数到60时,LED灯闪烁,计数器从0开始计数。
(读书报告、研究报告)考核科目: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的仿真环境中进行程序设计。
同步复位和异步复位的比较(转载)无论同步还是异步复位,在对触发器时序进行分析的时候,都要考虑复位端与时钟的相位关系。
对于同步复位,复位信号可以理解为一个普通的数据信号,它只有在时钟的跳变沿才会起作用,一般只要复位信号持续时间大于一个时钟周期,就可以保证正确复位。
对于异步复位,复位可以在任何时候发生,表面上看跟时钟没有关系,但真实情况是异步复位也需考虑时钟跳变沿,因为时钟沿变化和异步复位都可以引起Q端数据变化,如果异步复位信号跟时钟在一定时间间隔内发生变化,Q值将无法确定,即亚稳态现象。
这个时候既是异步复位信号持续时间再长都没有办法,因为不定态已经传递下去。
1:一、特点:同步复位:顾名思义,同步复位就是指复位信号只有在时钟上升沿到来时,才能有效。
否则,无法完成对系统的复位工作。
用Verilog描述如下:always @ (posedge clk) beginif (!Rst_n)...end异步复位:它是指无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。
用Verilog描述如下:always @ (posedge clk or negedge Rst_n) beginif (!Rst_n)...end二、各自的优缺点:1、总的来说,同步复位的优点大概有3条:a、有利于仿真器的仿真。
b、可以使所设计的系统成为100%的同步时序电路,这便大大有利于时序分析,而且综合出来的fmax一般较高。
c、因为他只有在时钟有效电平到来时才有效,所以可以滤除高于时钟频率的毛刺。
他的缺点也有不少,主要有以下几条:a、复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位任务。
同时还要考虑,诸如:clk skew,组合逻辑路径延时,复位延时等因素。
b、由于大多数的逻辑器件的目标库内的DFF都只有异步复位端口,所以,倘若采用同步复位的话,综合器就会在寄存器的数据输入端口插入组合逻辑,这样就会耗费较多的逻辑资源。
北京邮电大学实验报告实验名称: 数电电路与逻辑设计实验学院:信息与通信工程学院班 级: 姓 名: 学 号: 班内序号:日期:一. 实验一:QuartusII 原理图输入法设计1. 实验名称和实验任务要求(1)用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块 元。
(2)用(1)中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号入信号。
(3)用3线-8线译码器(74LS138)和逻辑门设计实现函数F=A B C +A B C +AB C +A B C 。
2.实验原理图及波形图(1)半加器(2)全加器(3)74LS383.仿真波形图分析(1)半加器:输入为a,b,输出S,CO(进位)。
当ab都为0时,半加和s=0,进位端co=0。
当ab都为1时,半加和s=0,进位端co=1。
当a=1,b=0或a=0,b=1时,半加和s=1,进位端co=0。
(2)全加器:输入a,b,输出S,CO(进位),ci(低进位)。
当a=0,b=0,ci=0,输出s=0,co=0。
当a=0,b=1或a=1,b=0又ci=0,输出s=1,co=0。
当a=0,b=0,ci=1,输出s=1,co=0。
(3)74LS138输入A,B,C,输出为3。
四个输出对应F中的四个最小项,Y0、Y2、Y4、Y7,以实现函数功能。
二.实验二:用VHDL设计与实现组合逻辑电路1.实验名称和实验任务要求(1)用VHDL语言设计实现一个共阴极7段数码管译码器,仿真验证其功能。
要求用拨码开关设定输入信号,7段数码管显示输出信号。
(2)用VHDL语言设计实现一个8421码转换为余3码的代码转换器,仿真验证其功能。
要求用拨码开关设定输入信号,发光二极管显示输出信号。
(3)用VHDL语言设计实现一个4位二进制奇校验器,输入奇数个’1’时,输出为’1’,否则输出’0’,仿真验证其功能。
数电时序电路设计报告(一)实验题目: JK触发器附加必要的门电路设计8421BCD码的十进制计数器。
(二)实验要求:(1)设计要求:用一个译码驱动器74LS48驱动1个LED七段显示器;轮流显示1位十进制数;(2)仿真测试电路的输出(用发光二极管指示)。
(三)实验思路:8421BCD码是四位编码方式,而一个JK触发器只能储存一位二进制代码,所以要用四个JK触发器才能构成一个十进制计数器,再在四个输出端接一个74LS48译码器,就能满足题目的要求。
(四)设计步骤(1)由设计要求画出真值表(2)由真值表画出卡诺图,并化简卡诺图Q3n+1Q2n+1Q1n+1Q0n+1与触发器的特征方程进行对比得,J0=K0=1; J1= Q0n·Q3n’(即Q3n非),K1=Q0n; J2=K2=Q1n·Q0n; J3= Q2n·Q1n·Q0n, K3=Q0n.(3)采用Quartus II 7.2软件画出设计电路图(4)对设计电路图进行仿真测试(5)参照型号EP2C5T144C8可编程芯片的实验板情况下,给设计好的原理图配置芯片引脚,并重新输出电路图。
则此时该实验电路设计已完成,连接实验板,下载设计好的文件,则可进行测试。
(四)设计电路图初始原理图仿真结果图配置好芯片引脚后的实验原理电路图:(一)心得体会1、在用Quartus II 7.2软件设计电路图时,会发现器件在纸上画的电路图略有不同,因此需要把他们进行一一对应。
2、明确分工不仅使每位成员都参与其中,也使得设计过程更高效。
3、Quartus软件仿真有一定的局限性,波形显示是其最简单明了的方式。
下⾯程序是位⼗进制计数器的VHDL描述下⾯程序是1位⼗进制计数器的VHDL 描述,试补充完整。
2. 下⾯是⼀个多路选择器的VHDL 描述,充完整。
LIBR ARY IE EE;USE IEE E.STD_LOGI C_1164.AL L ; USE IEE E.S TD_LOGI C_U NSI GNE D .ALL ;ENTI TY CNT 10 IS PORT ( CLK : IN S TD_LOG IC ; Q : O UT STD _LO GIC _VE CTO R (3 D OWN TO 0)) ;END CNT 10;ARCH ITE CTU RE bhv OF CNT 10 I S SIGN AL Q1 : S TD_L OGI C_V ECT O R(3 DOW NTO 0); BEGI N PROC ESS (C LK) BEGI N IF C LK'EVE NT AND CLK = '1' THEN -- 边沿检测 IF Q 1 > 10 TH EN Q1 <= (OTH ERS => '0'); -- 置零 ELSE Q1 <= Q 1 + 1 ; -- 加1 END IF; END IF; END PROCES S ; Q <= Q1; END bhv ; 三、VHDL 程序改错仔细阅读下列程序,回答问题LIBRARY IE EE;-- 1USE IEE E.S TD_LOGI C_1164.AL L ; -- 2 ENTITY LED 7SE G IS -- 3 PORT ( A : I N S TD_LOG IC_VECT OR(3 D O WNTO 0); -- 4 CLK : I N S TD_LOG IC; -- 5 LED7S : OU T STD_L OGI C_V ECT O R(6 DOW NTO 0)); -- 6 END LED 7SE G; -- 7 ARCHITE CTU RE one OF LED 7SE G IS -- 8 SIGN AL TMP : STD_LOG IC; -- 9 BEGIN -- 10 SYNC : PRO CES S(CL K, A) -- 11 BEGI N -- 12 IF C LK'EVE NT AND CLK = '1' THEN -- 13 TMP <= A; -- 14 END IF; -- 15 END PRO CES S; -- 16 OUTL ED : P ROC ESS(TMP ) -- 17 BEGI N -- 18 CASE TMP I S -- 19 WHEN "0000" => L ED7S <= "0111111"; -- 20 WHEN "0001" => LED7S <= "0000110"; -- 21 WHEN "0010" => L ED7S <= "1011011"; -- 22 WHEN "0011" => L ED7S <= "1001111"; -- 23 WHEN "0100" => L ED7S <= "1100110";-- 24LIBR ARY IE EE;USE IEE E.S TD_LOGI C_1164.AL L ; ENTI TY bmu x I S PORT ( sel : I N S TD_LOGI C; A, B : INSTD_LOG IC_VEC TOR(7 D OWN TO 0); Y : OU TSTD_LOG IC_VEC TOR(7 D OWN TO 0)) ; END bmu x;ARCH ITE CTU RE bhv OF bmu x I S BEGI N y <= A whe n s el = '1' E LSE B ; END bhv ;WHEN "0101" => L ED7S <= "1101101"; -- 25WHEN "0110" => L ED7S <= "1111101"; -- 26WHEN "0111" => L ED7S <= "0000111"; -- 27WHEN "1000" => L ED7S <= "1111111"; -- 28WHEN "1001" => L ED7S <= "1101111"; -- 29END CASE; -- 30 END PRO CES S; -- 31 END one; -- 321.在程序中存在两处错误,试指出,并说明理由:第14⾏ T MP附值错误第29与30⾏之间,缺少WHEN OTH ER S语句2 修改相应⾏的程序:错误1⾏号:9程序改为:T MP : STD_LO GIC_V ECT O R(3 DOW NT O 0);错误2⾏号: 29 程序改为:该语句后添加 W HEN OTHER S => L ED7S <= "0000000";四、阅读下列VHDL程序,画出原理图(RTL级)LIBR ARY IE EE;USE IEE E.S TD_LOGI C_1164.AL L;ENTI TY HAD ISPORT ( a : IN STD_LO GIC;b : IN STD_LO GIC;c : OUT ST D_L OGIC;d : OUT ST D_L OGIC);END ENT ITY HA D;ARCH ITE CTU RE fh1 OF HAD ISBEGI Nc <= NOT(a NA ND b);d <= (a OR b)AND(a N AND b);END ARC HIT ECT URE fh1;五、请按题中要求写出相应VHDL程序1.带计数使能的异步复位计数器输⼊端⼝:clk 时钟信号rst 异步复位信号en 计数使能loa d 同步装载data(装载)数据输⼊,位宽为10输出端⼝:q 计数输出,位宽为10LIBRARY IE EE;USE IEEE.S TD_LOGI C_1164.AL L ; USE IEEE.S TD_LOGI C_U NSI GNE D .ALL ; ENTITY CNT 1024 IS PORT ( CLK, RS T, EN, LOA D : IN ST D_L OGI C; DATA : IN STD _LOG IC_VEC TOR (9 D OWN TO 0);Q : OUT ST D_L OGIC _VE CTO R (9 DOW NTO 0) );END CNT1024;ARCHITECTU RE ONE OF CNT 1024 IS BEGIN PROC ESS (C LK, RST , E N, LOA D , DA TA) VARI ABLE Q 1 : STD _LO GIC _VE C TOR (9 DOW NTO 0); BEGI NIF R ST = '1' THEN Q1 := (OTH ERS => '0'); ELSI F CLK = '1' A ND CLK 'EV E NT T HEN IF L OAD = '1' THE N Q1 := D ATA ; ELSEIF E N = '1' T HENQ1 := Q 1 + 1;END IF;END IF;END IF;Q <= Q1;END PRO CES S;END ONE;2 看下⾯原理图,写出相应VHDL 描述LIBRARY IE EE;USE IEEE.S TD_LOGI C_1164.AL L ; ENTITY TRI_ST ATE IS PORT ( E, A : IN STD _LOG IC; Y : INO UT STD _LOG IC;B : OUT ST D_L OGIC );END TRI_ST ATE;ARCHITECTU RE BEHA V O F T RI_S TATE IS BEGIN PROC ESS (E , A , Y)BEGINe ab yIF E = '0' TH EN B <= Y; Y <= 'Z '; ELSEB <= 'Z ';Y <= A;END IF;END PRO CES S;END BEHAV; 六、综合题下图是⼀个A /D 采集系统的部分,要求设计其中的FPG A 采集控制模块,该模块由三个部分构成:控制器(C ontrol )、地址计数器(a ddrc nt )、内嵌双⼝RA M (a dram )。
实验八异步8421BCD计数器电路仿真实验一、实验目的1、用逻辑门和JK触发器构成异步8421BCD计数器。
2、验证其逻辑功能。
二、实验环境1、计算机。
2、Electronics Workbench 软件。
3、器件:四个JK触发器、译码管、与门、逻辑分析仪、时钟源、电源。
三、实验内容及步骤图3-8 电路图将各级饮品的J、K接高电平,启动电路,观察译码数码管是否从0到9循环变化,并打开逻辑分析仪面板,看Q1,Q2,Q3,Q4的波形。
附:8421BCD计数器电路仿真实验1.实验原理:异步8421BCD计数器,是由4个JK触发器构成的。
若初始状态Q^n4Q^n3 Q^n2 Q^n1=0000,在CP脉冲作用下Q^n+1=1,Q1为上跳使后3级触发器都保持不变。
再将0001作为当前状态,第二个CP脉冲使Q^n+11=0,Q1的下降沿送到CP2和CP4处。
J2= Q^n4反=1,K2=1则Q^n+12=1,Q2上跳使Q3保持不变,而J4=1,K4=1,因此Q1下跳使Q4置0也不变,状态变为0010。
当Q^n4 Q^n3 Q^n2 Q^n1=1001时,CP的作用使Q^n+1=0,Q1由1变为0使CP2和CP4下跳,此时J2=Q4=0,J4=0,K4=0,则Q2保持0不变,而Q4由1 变为0状态,Q2状态不变使Q3也保持不变,其下一状态为0000回到初始状态。
异步8421BCD计数器状态转移表1:2、实验内容及结果分析:进入实验仿真,将各级饮品的J、K接高电平,启动电路,观察译码数码管是否从0到9循环变化,并打开逻辑分析仪面板,看Q1,Q2,Q3,Q4的波形。
逻辑分析仪显示结果如下图所示:(1)、由图可知Q1,Q2,Q3,Q4的波形图在逐个往后推移。
(2)、我们看到数码管的数字变换是由0 9逐个变换的。
此实验结果与实验原理的叙述及计数器状态转移表相吻合。
十进制计数器十进制计数器是在计数脉冲作用下各触发器状态的转换按十进制数的编码规律进行计数的数字电路。
十进制计数器由哪些部分组成?它是如何工作的?8421BCD编码表十进制数有0~9共10个数码,至少要用4位二进制数。
十进制计数器分类同步十进制加法计数器同步十进制减法计数器异步十进制加法计数器异步十进制减法计数器一 、异步十进制加法计数器电路组成由4位二进制计数器和一个用于计数器清0的与非门组成。
与二进制加法计数器的主要差异是跳过了二进制数码1010~1111这6个状态。
二 、异步十进制加法计数器工作过程计数器输入0~9个计数脉冲时,工作过程与4位二进制异步计数器完全相同,第9个计数脉冲后Q 3Q 2Q 1Q 0=1001。
当第10个计数脉冲到来后,计数器状态为Q 3Q 2Q 1Q 0=1010:101000000 Q 3=Q 1=l ,与非门输入全1,输出为0,使各触发器复位,即Q 3Q 2Q 1Q 0=0000。
同时,使与非门输出又变为1,计数器重新开始工作。
11000011111异步十进制加法计数器能实现按8421BCD码的十进制计数,但在工作过程中有一个复位过渡状态,即计数器要在1010状态下使各触发器同步复位。
虽然复位过渡状态只是短暂的一瞬间,但若各触发器的翻转速度不一致,便会产生误动作。
十进制计数器一、电路组成二、工作过程异步十进制加法计数器由4位二进制计数器和一个用于计数器清0的与非门组成。
跳过了二进制数码1010~1111这6个状态。
计数器输入0~9个计数脉冲时,工作过程与4位二进制异步计数器完全相同,第9个计数脉冲后Q 3Q 2Q 1Q 0=1001。
当第10个计数脉冲到来后,各触发器复位,计数器重新开始工作。
谢谢!。
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;。