异步复位8421码十进制计数器vhdl
数字电路与逻辑设计实验

数字电路与逻辑设计实验报告学院:班级:姓名:学号:日期:一.实验名称:实验一: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设计

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 十进制表示数值摘要: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语言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字);⑧参考文献;⑨其它必要内容等。
《EDA技术实用教程》习题解答

习题 5-6 根据图 5-23,写出顶层文件 MX3256.VHD 的 VHDL 设计文件。
第 1 章 概述
9
图 5-21 习题 5-4 图
解: VHDL 设计文件内容如下:
library ieee; use ieee.std_logic_1164.all;
entity exen is
port ( cl
: in std_logic;
clk0 : in std_logic;
out1 );
: out std_logic
out1 <= not tmp; end hdlarch; ⊕习题 5-5 给出 1 位全减器的 VHDL 描述。要求: (1) 首先设计 1 位半减器,然后用例化语句将它们连接起来,图 5-22 中 h_suber 是半减器,diffr 是输出差, s_out 是借位输出,sub_in 是借位输入。
解:
图 5-19 4 选 1 多路选择器
图 5-20 双 2 选 1 多路选择器
architecture hdlarch of MUXK is
signal tmp : std_logic;
begin
process(s0,a2,a3) begin
if s0 = '0' then
tmp <= a2;
else
解:用同步计数器来实现。(事实上要求设计的是一个袼雷码计数器)
考虑不同状态时,对应的 DFF 输入端的值:
vhdl语言设计一个8421bcd码的24进制计数器

专业技能训练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进制波形图。
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的设计

EDA技术及应用实验报告
——同步计数器VHDL的设计
班级:XXX
姓名:XXX
学号:XXX
一、实验目的:
学习数控分频器的设计、分析和测试方法。
二、实验原理:
同步计数器的功能就是在时钟脉冲的控制下,构成计数器的各触发器状态同时发生变化的一类计数器。
本实验是一个模为60,具有异步复位、同步置数功能的8421BCD码计数器。
三、实验内容和步骤:
1、打开文本编辑器,完成同步计数器的设计。
2、完成同步计数器的设计输入、进行目标器件选择。
3、引脚锁定。
4、编译。
5、对同步计数器设计进行仿真。
四、实验下载并实测
该同步计数器具有异步复位,同步置数功能。
当load=1时,便把输入信号与指导输出端,然后开始计数,计数到60时,LED灯闪烁,计数器从0开始计数。