带有复位和时钟使能的十进制计数器

合集下载

十进制计数器设计教案资料

十进制计数器设计教案资料

十进制计数器设计十进制计数器设计一、实验目的:熟悉Quartus II的Verilog文本设计流程全过程,学习十进制计数器的设计、仿真,掌握计数器的工作原理。

二、实验原理:计数器属于时序电路的范畴,其应用十分普遍。

该程序设计是要实现带有异步复位、同步计数使能和可预置型的十进制计数器。

该计数器具有5个输入端口(CLK、RST、EN、LOAD、DATA)。

CLK输入时钟信号;RST起异步复位作用,RST=0,复位;EN是时钟使能,EN=1,允许加载或计数;LOAD是数据加载控制,LOAD=0,向内部寄存器加载数据;DATA是4位并行加载的数据。

有两个输出端口(DOUT和COUT)。

DOUT的位宽为4,输出计数值,从0到9;COUT是输出进位标志,位宽为1,每当DOUT为9时输出一个高电平脉冲。

RST在任意时刻有效时,如CLK非上升沿时,计数也能即刻清0;当EN=1,且在时钟CLK的上升沿时刻LOAD=0,4位输入数据DATA被加载,但如果此时时钟没有上升沿,尽管出现了加载信号LOAD=0,依然未出现加载情况;当EN=1,RST=1,LOAD=1时,计数正常进行,在计数数据等于9时进行输出高电平。

三、实验任务:在Quartus II上将设计好的程序进行编辑、编译、综合、适配、仿真,从时序仿真图中学习计数器工作原理,了解计数器的运行情况及时钟输入至计数器数据输出的延时情况。

四、实验步骤:(一)、建立工作库文件和编辑设计文件任何一项设计都是一项Project(工程),而把一个工程下的所有文件放在一个文件夹内是一个非常好的习惯,以便于我们整理,利用和提取不同工程下的文件,而此文件夹将被EDA软件默认为Work Library(工作库),所以第一步先根据自己的习惯,建立个新的文件夹。

(1)新建文件夹:在盘建立并保存工程,将文件夹取名Jishuqi。

(2)输入源程序:打开Quartus II,选择菜单File→New→DesignFiles→VerilogHDL File→OK(如图1所示)。

十进制计数器的原理

十进制计数器的原理

十进制计数器的原理十进制计数器的原理是指根据十进制系统进行数字计数的一种电子设备,广泛应用于各个领域的数码显示、时钟、计时器等设备中。

它能够按从0到9的顺序依次显示数字,并且能够根据输入信号进行数字的增减。

十进制计数器通常由若干个触发器组成,其中每个触发器负责表示一个十进制位上的数值。

对于一个n位的计数器来说,从右到左第一位为个位,第二位为十位,以此类推,最高位为第n位。

每个触发器都有两个状态:置位(1)和复位(0),用于表示不同的数字值。

在计数器中,每个触发器都与下一个触发器相连,并且通过一个时钟信号进行同步。

当时钟信号发生边缘跳变时,即从低电平到高电平(上升沿)或从高电平到低电平(下降沿)时,计数器开始进行计数操作。

在计数开始时,所有的触发器都会被置位并显示数字0。

当时钟信号发生上升沿时,计数器开始计数。

这时,个位触发器会进行状态翻转,并显示数字1;当个位触发器再次接收到一个上升沿信号时,它会再次翻转状态,并显示数字2。

依此类推,当个位触发器显示数字9时,在下一个上升沿到来时,个位触发器会复位为0并产生一个进位信号。

进位信号会传递到十位触发器,使得十位触发器也进行状态翻转。

十位触发器进行状态翻转的规则与个位触发器相同,但是进位信号只会在个位触发器显示数字9时才会产生。

同样的规则适用于其他所有的位上的触发器。

当最高位触发器接收到进位信号时,说明整个计数器已经完成一次完整的计数周期。

此时,最高位触发器进行状态翻转并显示数字1,从而开始下一个计数周期。

这样,计数器就能够一直进行自动的循环计数。

除了通过递增的时钟信号进行计数外,计数器还可以通过递减的时钟信号进行递减。

在递减的过程中,计数器会按照相反的顺序显示数字,并且每当最低位触发器显示数字0时,会产生一个借位信号传递到上一位触发器,从而使得上一位触发器进行状态翻转。

总结起来,十进制计数器的原理是通过一组触发器来表示各个位上的数字,并根据时钟信号的边缘跳变进行状态翻转,以实现数字的递增或递减。

74LS192是双时钟方式的十进制可逆计数器

74LS192是双时钟方式的十进制可逆计数器

74LS192是双时钟方式的十进制可逆计数器。

(bcd,二进制)。

◆ CPU为加计数时钟输入端,CPD为减计数时钟输入端。

◆ LD为预置输入控制端,异步预置。

◆ CR为复位输入端,高电平有效,异步清除。

◆ CO为进位输出:1001状态后负脉冲输出,◆ BO为借位输出:0000状态后负脉冲输出。

74ls192引脚图:74ls192功能表:74LS192是属8421BCD码的十进制计数器,其功能真值表如表4所示。

其中MR是异步清零端,高电平有效。

PL(———)是并行置数端,低电平有效,且在MR=0有效。

CPU和CPu是两个时钟脉冲,当CPd=1,时钟脉冲由CPU端接入。

并且MR=0,PL(———)=1时,74LS192处于加法计数状态;当CPu脉冲从CPd端输入,且MR=0,PL(———)=1时,74LS192处于减法计数状态;CPd=CPu=1时,计数器处于保持状态。

TCu是进位端,TCd是借位端。

表4 74LS192功能真值表MR PL(———)CPu CPd P3 P2 P1 P0 Q3x+1 Q2x+1 Q1x+1 1 ×××××××00 00 1 ×↑d3 d2 d1 d0 d3d2 d10 1 ↑ 1 ××××加法计数0 1 1 ↑××××减法计数0 1 1 1 ××××保持74192的工作原理是:当LD(———)=1,MR=0时,若时钟脉冲加到CPu端,且CPd =1则计数器在预置数的基础上完成加计数功能,当加计数到9时,TCu端发出进位下跳变脉冲;若时钟脉冲加到CPd端,且CPu =1,则计数器在预置数的基础上完成减计数功能,当减计数到0时,TCd 端发出借位下跳变脉冲。

74LS192具有下述功能:①异步清零:MR=1,Q3Q2Q1Q0=0000②异步置数:MR=0,PL(———)=0,Q3Q2Q1Q0=P3P2P1P0③保持:MR=0,PL(———)=1,CPu=CPd=1,Q3Q2Q1Q0保持原态④加计数:MR=0, PL(———)=1,CPu=CP,CPd=1,Q3Q2Q1Q0按加法规律计数⑤减计数:MR=0, PL(———)=1,CPu=1,CPd= CP,Q3Q2Q1Q0按减法规律计数。

同步可逆十进制计数器verilog代码

同步可逆十进制计数器verilog代码

同步可逆十进制计数器verilog代码以下是一个同步可逆十进制计数器的Verilog代码:```module sync_reversible_counter(input clk, // 输入时钟信号input reset, // 输入复位信号output reg [3:0] count // 输出计数器值);// 定义状态变量reg [2:0] state;// 初始化状态变量和计数器值initial beginstate = 3'b000;count = 4'b0000;end// 状态转移逻辑always @(posedge clk) beginif (reset) begin // 复位信号为高电平时,将状态变量和计数器值重置为初始值state <= 3'b000;count <= 4'b0000;end else begin // 否则进行状态转移操作case (state)3'b000: begin // 当前状态为000时,下一状态为001,计数器加1state <= 3'b001;count <= count + 1;end3'b001: begin // 当前状态为001时,下一状态为010,计数器加1state <= 3'b010;count <= count + 1;end3'b010: begin // 当前状态为010时,下一状态为011,计数器加1state <= 3'b011;count <= count + 1;end3'b011: begin // 当前状态为011时,下一状态为100,计数器加1state <= 3'b100;count <= count + 1;end3'b100: begin // 当前状态为100时,下一状态为101,计数器加1state <= 3'b101;count <= count + 1;end3'b101: begin // 当前状态为101时,下一状态为110,计数器加1state <= 3'b110;count <= count + 1;end3'b110: begin // 当前状态为110时,下一状态为111,计数器加1state <= 3'b111;count <= count + 1;end3'b111: begin // 当前状态为111时,下一状态为000,计数器加1state <= 3'b000;count <= count + 1;endendcaseendendendmodule```这个Verilog代码实现了一个同步可逆十进制计数器。

74ls160十进制计数器原理

74ls160十进制计数器原理

74ls160十进制计数器原理
74LS160十进制计数器原理74LS160是一种常用的十进制计数器,它能够实现0至9的循环计数。

它的原理基于二进制计数和锁存器的结合。

该计数器由四个D触发器组成,每个触发器都能存储一个二进制位。

在计数过程中,每当一个触发器的输出从低电平变为高电平时,它会向高位触发器传递一个脉冲信号。

这样,当最低位的触发器计数到9时,它会向高位触发器传递一个脉冲信号,使得高位触发器加1,而最低位触发器归零。

为了实现循环计数,74LS160还包含一个复位功能。

当外部信号复位输入为低电平时,所有触发器的输出都会被清零,计数器重新从0开始计数。

除了计数功能,74LS160还具有一个使能输入。

当使能输入为低电平时,计数器将会被禁用,不再进行计数。

这个功能可以用于控制计数器的启动和停止。

总结起来,74LS160十进制计数器通过二进制计数和锁存器的结合,实现了0至9的循环计数。

它具有复位和使能功能,可以灵活控制计数器的启动和停止。

这使得它在很多应用中都有广泛的使用,如时钟、计时器、频率分析等。

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;。

带有异步复位、同步计数使能和可预置型十进制计数器的verilog设计

带有异步复位、同步计数使能和可预置型十进制计数器的verilog设计

电子设计自动化实验报告(二)学院:电气学院班级:电子122班姓名:覃思远一、实验题目:带有异步复位、同步计数使能和可预置型十进制计数器的verilog设计。

二、实验目的:讨论学习经典数字计数器的Verilog描述方法和相关语法。

三、实验程序:module CNT10(CLK,RST,EN,LOAD,COUT,DOUT,DATA);input CLK,EN,RST,LOAD;input [3:0] DA TA;output [3:0] DOUT;output COUT;reg [3:0] Q1;reg COUT;assign DOUT = Q1;always @(posedge CLK or negedge RST) beginif(!RST) Q1 <= 0;else if(EN) beginif (!LOAD) Q1<= DATA;else if (Q1<9) Q1<=Q1+1;else Q1 <= 4'b0000;endendalways @(Q1)beginif (Q1==4'h9) COUT = 1'b1;else COUT = 1'b0;endendmodule四、实验仿真结果:五、仿真结果分析:(1)RST在任意时刻有效时,如CLK非上升沿时,计数也能清0。

(2)计数器正常计数到RST=0时,4位输入数据DA TA被清零,之后在LOAD=1后计数器重新计数,如图所示计数从0000加载到0100的时序。

计数到9时,COUT输出进位1。

(3)当EN=1,LOAD=1,RST=1时,计数正常进行,在计数数据等于9时进位输出高电平。

六、硬件下载设置及测试过程:根据板子给定的引脚锁定图,选定相应的硬件把程序中的输入输出端和板子的相应引脚给锁定,编译并下载程序,定好DA TA,选择合适的CLK,手动改变EN和LOAD的值,观察实验现象看是否符合程序的结果。

带有复位和时钟使能的10进制计数器和带有并行置位的移位寄存器

带有复位和时钟使能的10进制计数器和带有并行置位的移位寄存器

实验课程名称 EDA技术实验带有复位和时钟使能的10进制计数器和实验项目名称带有复位和时钟使能的10进制计数器年级 21010级专业电子信息工程学生姓名蒋林萍学号 1020040442科技学院实验时间:2012 年 11 月 28 日EDA技术实验报告贵州大学科技学院电子信息工程2010级蒋林萍学号:1020040442实验名称:带有复位和时钟使能的10进制计数器和带有并行置位的移位寄存器1、实验目的(1)熟悉进程和V ARIABLE的运用(2)学习移位寄存器的设计方法(3)进一步熟悉VHDL语法、语句2 、实验内容(1)运用QuartusII集成环境下的VHDL文本设计方法设计带有复位和时钟使能的十进制计数器,要求对输入的脉冲信号进行计数。

要求具有复位和使能功能,并能输出进位信号。

进行波形仿真和分析。

(2)运用QuartusII集成环境下的VHDL文本设计方法设计带有并行置位的移位寄存器,要求具有置位功能。

进行波形仿真和分析。

3、实验步骤及参考程序(1)带有复位和时钟使能的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);COUT:OUT STD_LOGIC);END CNT10;ARCHITECTURE behav OF CNT10 ISBEGINPROCESS(CLK,RST,EN)V ARIABLE 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;CQ<=CQI;END PROCESS;END behav;①.实验程序功能分析:当时钟信号CLK、复位信号RST或时钟使能信号EN中任一信号发生变化,都将启动PROCESS进程语句。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

EDA实验报告班级:电子系
姓名:
学号:
一实验名称:带有复位和时钟使能的十进制计数器
二实验分析:
实验步骤:
1建立工作库
2输入设计项目
3保存
4将当前文件设立为为目标文件
5编译
6建立仿真波形
7时序仿真
8保存
9引脚锁定
输入引脚rst锁定54引脚对应K1, en锁定58引脚对应K2, clk锁定1引脚, 输出引脚cout锁定3引脚对应喇叭,cq锁定5,6,7,8引脚对应显示数码管。

10再次编译
11下载
VHDL描述为:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity cnt10 is
port( clk,rst,en:in std_logic;
cq:out std_logic_vector(3 downto 0);
cout:out std_logic);
end cnt10;
architecture behav of cnt10 is
begin
process(clk,rst,en)
variable cqi:std_logic_vector(3 downto 0);
begin
if rst='1' then cqi:=(others=>'0');
elsif clk'event and clk='1' then
if en='1' then
if cqi<9 then cqi:=cqi+1;
else cqi:=(others=>'0');
end if;
end if;
end if;
if cqi=9 then cout<='1';
else cout<='0';
end if;
cq<=cqi;
end process;
end behav;
仿真结果:
三实验结果:
Rst为复位信号,当rst为高电平是计数清0。

En为使能信号高电平有效。

计数从0到9完成时就会有一个进位。

相关文档
最新文档