异步清零
任意进制计数器的设计
任意进制计数器的设计【摘要】计数器集成芯片一般有4位二进制、8位二进制或十进制计数器,而在实际应用中,往往需要设计一个任意n进制计数器,本文给出它的设计方法和案例。
【关键词】计数器;清零一、利用反馈清零法获得计数器1 集成计数器清零方式异步清零方式:与计数脉冲cp无关,只要异步清零端出现清零信号,计数器立即被清零。
此类计数器有同步十进制加法计数器ct74ls160、同步4位二进制加法计数器ct74ls161、同步十进制加/减计数器ct74ls192、同步4位二进制加/减计数器ct74ls193等。
同步清零方式:与计数脉冲cp有关,同步清零端获得清零信号后,计数器并不立刻被清零,只是为清零创造条件,还需要再输入一个计数脉冲cp,计数器才被清零。
属于此类计数器有同步十进制加法计数器ct74ls162、同步4位二进制加法计数器ct74ls163、同步十进制加/减计数器ct74ls190、同步4位二进制加/减计数器ct74ls191等。
2 反馈清零法对于异步清零方式:应在输入第n个计数脉冲cp后,利用计数器状态sn进行译码产生清零信号加到异步清零端上,立刻使计数器清零,即实现了n计数器。
在计数器的有效循环中不包括状态sn,所以状态sn只在极短的瞬间出现称为过渡状态。
对于同步清零方式:应在输入第n-1个计数脉冲cp后,利用计数器状态sn-1进行译码产生清零信号,在输入第n个计数脉冲cp 时,计数器才被清零,回到初始零状态,从而实现n计数器。
可见同步清零没有过渡状态。
利用计数器的清零功能构成n计数器时,并行数据输入端可接任意数据,其方法如下:①写出n计数器状态的二进制代码。
异步清零方式利用状态sn,同步清零方式利用状态sn-1。
②写出反馈清零函数。
③画逻辑图。
例1 试用ct74ls160的异步清零功能构成六进制计数器。
解:①写出sn的二进制代码。
sn=s6=0110②写出反馈清零函数。
③画逻辑图。
如图1所示。
运用QuartusⅡ研究74LS161异步清零问题
数字电子技术仿真实验报告——运用QuartusⅡ研究74LS161异步清零问题一、实验目的:1. 熟悉芯片74LS161的逻辑功能及其使用方法,并仿真出其异步清零实现模9计数功能的波形图。
2. 研究解决芯片74LS161异步清零中由于信号变化时的过渡过程和信号在电路内部的传输延时时间所遇到的冒险问题,仿真出正确波形。
3. 了解EDA软件平台Quartus II的使用方法及主要功能。
二、实验原理:4位二进制同步计数器(异步清零)——芯片74LS16174LS161十六进制计数器功能表芯片74LS161是一个二进制可预置同步计数器,它采用四个主从JK触发器作为记忆单元,故又称为4位二进制同步计数器。
它的功能有:异步清零、同步预置、计数、保持。
(见上图功能表所示)现用异步清零法实现芯片74LS161模9计数的功能,并解决输出波形中出现的冒险(毛刺)问题。
三、实验步骤:1. 建立工程项目(工程目录、名称和选择合适器件)2. 编辑设计图形文件(放置元件、连线、设定输入输出管脚名称)3. 编译设计图形文件(检查电路是否有错误)4. 时序仿真设计文件(得到仿真波形验证设计结果)(1)新建用于仿真的波形文件:执行File-New…命令,可建立和编辑的文件有三类:器件设计文件Device Design Files、软件文件Software Files和其他文件Other Files。
选择Other Files中的波形文件:双击左部区域,选中Node Finder选中list 和>>号把要显示的信号显示到右边的区域点:OK(2)设置仿真时间:设置Time 为100 单位为:us 下一个Grid Time 是设置合适的间隔时间。
设置好4个输入、预置端、清零端的高低电平和时钟信号后进行编译:显示:0 errors, 0 warnings 编译完成:放大后:结论:与74LS161异步清零模9计数态序表一致,达到实际要求。
同步清零与异步清零
资料【题目1】:如何理解数码寄存器和锁存器在时序电路中的作用?【相关知识】:数码寄存器结构,时序电路信号分类,集成电路输出方式等。
【解题方法】:数码是最简单的时序电路,其主要作用是并行寄存数据。
掌握寄存器的输入控制方式,了解寄存器的输出方式是应用数字寄存器的关键。
【解答过程】:图1是74LS451中规模集成并行数码寄存器。
数码寄存器的输入信号可分成三种:(1)锁存使能控制端,如图1中的LE。
只有当锁存使能信号有效(图1是上升沿)时,寄存器才能锁存输入数据(d3d2d1d0),寄存器状态得到更新。
时钟信号经常作为锁存使能端的输入,以便协调时序电路的工作。
(2)控制输入端,它的作用可同时影响寄存器的多个输出,如图1中的CR。
有些控制输入端需要与锁存使能输入端配合才能生效,称这种控制为同步控制。
例1的清零属于异步控制。
(3)数据输入端,如图1的。
在微控制器单元(MCU)中,寄存器是十分重要的资源。
寄存器的主要作用是快速寄存算术逻辑运算单元(ALU)运算过程中的数据。
熟悉和了解MCU的寄存器是掌握MCU应用的关键。
MCU内部寄存器的位数通常与MCU的总线宽度相同,如普通51系列单片机的寄存器宽度是8位,嵌入式控制器和DSP处理器的寄存器宽度通常是32位或48位。
当寄存器应用在MCU单元的外部时,由独立的一片中规模集成电路组成,通常称之为锁存器。
常用的8位锁存器有74LS373,74LS374,74LS377,74LS573等。
应用锁存器时了解锁存器的锁存使能输入端的有效方式,控制输入端的控制方式和输出端的输出形式十分重要。
锁存使能输入控制方式有:低电平有效,高电平有效,时钟上升沿有效,时钟下降沿有效。
控制输入端有:异步清零,异步置数,同步清零,同步置数。
输出形式:普通TTL输出,OC输出,三态输出。
例1,74LS373的结构如图2所示,试分析其输入控制方式和输出方式。
观察74LS373逻辑电路图,配合74LS373提供的数据手册可知74LS373是高电平触发、低电平输出全能控制、输出具有三态功能的8位锁存器。
异步清零法原理
异步清零法原理
异步清零法是一种用于数字电路中的异步复位技术,用于将电路中的寄存器或触发器的状态清零。
该方法基于电路中逻辑门的特性,实现异步清零功能。
异步清零法的原理是利用与门和非门(反相器)来实现异步复位功能。
异步复位信号通常为一个低电平信号(例如0V),当接收到复位信号时,寄存器或触发器的状态会被强制清零。
以下是异步清零法的一种基本实现方式:
1. 异步复位信号:一个低电平信号(例如0V),表示需要将寄存器或触发器的状态清零。
2. 与门(AND gate):将异步复位信号和需要清零的寄存器或触发器的时钟信号作为输入,输出连接到寄存器或触发器的清零端(例如CLR端)。
3. 非门(NOT gate):将异步复位信号作为输入,输出连接到与门的另一输入端,将异步复位信号进行取反(反相)。
当异步复位信号为低电平时(0V),与门的输入为低电平与时钟信号,输出为低电平,对应于清零端(CLR端)的激活信号。
寄存器或触发器的状态被强制清零。
当异步复位信号为高电平时,与门的输入为高电平与时钟信号,输出为高电平,不会对寄存器或触发器的状态造成影响。
异步清零法可以确保在任何情况下都能及时清零寄存器或触发器,即使其他电路出现故障或异常情况。
它在数字电路设计中广泛应用,可以实现稳定和可靠的复位功能。
设计一个含有异步清零和计数使能的16位二进制加减可控的计数器
设计一个含有异步清零和计数使能的 16位二进制加减可控的计数器
28. 设计一个含有异步清零和计数使能的16位二进制加减可控计数器。P91- 3. 1.程序 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY cnt16 IS PORT(EN,RST,UPD,CLK : IN STD_LOGIC; OUT1: OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); END cnt16; ARCHITECTURE bhv OF cnt16 IS SIGNAL QQ:STD_LOGIC_VECTOR(15 DOWNTO 0); BEGIN PROCESS(EN,RST,UPD) BEGIN IF RST='1' THEN QQ<=(OTHERS=>'0'); --有复位信号清零 ELSIF EN='1' THEN --EN位高电平开始计数 IF CLK'EVENT AND CLK='1' THEN IF UPD='1' THEN --当UDP为1加计数 QQ<=QQ+1; ELSE --当UDP不为1减计数 IF QQ > "0" THEN --当减到0时 QQ<=QQ-1; --给QQ全1 ELSE QQ<=(OTHERS=>'1'); END IF; END IF; END IF; END IF; END PROCESS; OUT1<=QQ; END bhv;
实验五 含异步清零和同步使能4位加法计数器的VHDL设计
实验五含异步清零和同步使能4位加法计数器的VHDL设计一、实验目的1掌握计数器的VHDL设计方法;2掌握异步复位和同步复位和使能的概念;3掌握寄存器性能的分析方法(即分析芯片所能达到的最高时钟频率)。
二、实验内容1异步复位4位加法计数器的设计;2同步复位4位加法计数器的设计。
3异步清0和同步时钟使能的4位加法计数器三、实验原理复位:给计数器一个初值叫复位,如果所给初值为0,则称复位为清零。
异步复位:复位跟时钟无关,只要复位信号的复位电平出现,计数器立即复位,如图5-1所示;同步复位:复位跟时钟有关,当复位信号的复位电平出现时,计数器并不立即复位,而是要等到时钟沿到来时才复位,如图5-2所示。
异步复位4位加法计数器的VHDL设计代码见教材P122-P123,仿真波形如图5-3所示。
同步复位4位加法计数器的VHDL部分代码如下,仿真波形如图5-4所示。
.图5-1异步复位图5-2同步复位图5-3异步复位计数器仿真波形图5-4同步复位计数器仿真波形四、实验步骤(一)异步复位4位加法计数器的设计1建立一个设计工程,工程名为CNT4B;2打开文本编辑器,建立一个VHDL设计文件,其VHDL代码见教材P164中的例6-20,文件名存为CNT4B.VHD。
注意文件的扩展名要选为.vhd,而且要求工程名、文件名和设计实体名必须相同。
3选器件:ACEX1K,EP1K30TC144-3(旧)或Cyclone,EP3C40Q240C8目标芯片。
4编译;5建立波形文件,然后保存,其文件名必须与工程名一致;【波形设置:①设置仿真时间为10us:②设置输入信号的波形:时钟周期设置为200ns,其他输入信号的波形设置参看图6-3。
】6仿真,观察输出波形是否正确;7时序分析:分析芯片所能达到的最高时钟频率。
【打开时序分析器,然后执行菜单命令:analysis/register performance/start,可以看到最高时钟频率为100.00MHZ】(二)同步复位4位加法计数器的设计8建立一个设计工程,工程名为CNT4B_SYS;9打开文本编辑器,建立一个VHDL设计文件,其VHDL代码参看异步计数器代码和实验原理中的参考代码,文件名存为CNT4B_SYS.VHD。
含异步清零和同步时钟使能的4位加法器
含异步清零和同步时钟使能的4位加法器宁波⼯程学院电信学院EDA系统设计与实践实验报告实验名称含异步清零和同步时钟使能的4位加法器班级电科(系统设计)08-2 姓名学号 0840*******组员姓名实验⽇期2011-5-12指导⽼师实验四含异步清零和同步时钟使能的4位加法器⼀.实验⽬的学习计数器的设计,仿真和硬件测试。
进⼀步熟悉VHDL的编程⽅法。
⼆.实验内容本实验的内容是Quartus 11建⽴⼀个含计数使能、异步复位的4位加分计数器,SmartSOPC试验箱上进⾏硬件测试,由KEY1控制技术使能端ena并由LED指⽰,KEY2控制复位端rst并由LED2指⽰。
计数值由数码管指⽰。
三.实验原理Rst是异步清零信号,⾼电平有效。
Ema为是能端,能开始与暂停程序,当ena为0时,能所存信号。
四.实验步骤(1)破解Quartus 11;(2)建⽴⼯程:启动Quartus 11,建⽴空⽩⼯程。
命名为giui;(3)创建源程序⽂件:新建VHDL源程序⽂件giui,输⼊程序代码并保存,进⾏编译,若在编译过程中发现错误,则找出并更正,直⾄编译成功。
(4)编译并运⾏:编译并运⾏程序或者原理图,编译⽆误后,进⾏引脚锁定;(5)外部连接⽅式跟第2节相似。
五.实验程序⼀.在⼀个数码管上显⽰0~Flibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity giui isport(clk48:in std_logic;key_2bit:in std_logic;dig_4bit:out std_logic_vector(3 downto 0);seg:out std_logic_vector(7 downto 0));end giui;architecture m1 of giui issignal num1:std_logic_vector(3 downto 0);signal cnt:std_logic_vector(23 downto 0);signal t: std_logic;signal q:std_logic;beginfre:process(clk48,cnt)beginif clk48'event and clk48='1' thencnt<=cnt+1;end if;q<=cnt(23);end process fre;coun:process(q)beginif q'event and q='1' thenif t='1' then num1<="0000";elsenum1<=num1+1;end if;end if;end process;SEG<= "11000000" when num1="0000" else "11111001" when num1="0001" else "10100100" when num1="0010" else"10110000" when num1="0011" else"10011001" when num1="0100" else"10010010" when num1="0101" else"10000010" when num1="0110" else"11111000" when num1="0111" else"10000000" when num1="1000" else"10010000" when num1="1001" else"10001000" when num1="1010" else"10000011" when num1="1011" else"01000110" when num1="1100" else"10100001" when num1="1101" else"10000110" when num1="1110" else"11111111";dig_4bit<="1110" when t='1' else"1111" when t='0';end m1;⼆.4位加法器Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sun_adder isport(clk:in std_logic;key:in std_logic;led1:out std_logic;dig:out std_logic_vector(3 downto 0);seg:out std_logic_vector(7 downto 0)); end sun_adder;architecture a of sun_adder issignal tmp:std_logic_vector(23 downto 0); signal tmp1:std_logic_vector(10 downto 0); signal address,pp:std_logic_vector(3 downto 0); signal p:std_logic_vector(1 downto 0);signal tt,t,q,q1: std_logic;signal num1,num2,num3,num4:std_logic_vector(3 downto 0);beginprocess(clk)beginif clk'event and clk='1' then tmp<=tmp+1;tmp1<=tmp1+1;end if;end process;q<=tmp(23);q1<=tmp1(10);process(q1)beginif q1'event and q1='1' then case p iswhen "00"=>pp<="1110";when "01"=>pp<="1101";when "10"=>pp<="1011";when others=>pp<="0111";end case;dig<=pp;case pp iswhen "1110"=>address<=num1;when "1101"=>address<=num2;when "1011"=>address<=num3;when others=>address<=num4;end case;p<=p+1;end if;end process;process(key)beginIf key'event and key='1' thent<= not t;end if;end process;process(q)beginif q'event and q='1' thenif t='1' then num1<="0000";num2<="0000";num3<="0000";num4<="0000";else num1<=num1+1;if num1="1001" then num1<="0000";tt<='1';if num2="1001" then num2<="0000";if num3="1001" then num3<="0000";if num4="1001" then num4<="0000";else num4<=num4+1; end if;else num3<=num3+1; end if;else num2<=num2+1; `1212212345123451233123`12341234123412341312end if; else num1<=num1+1;tt<='0'; end if; end if;end if;end process;seg<= "11000000" when address="0000" else"11111001" when address="0001" else"10100100" when address="0010" else"10110000" when address="0011" else"10011001" when address="0100" else"10010010" when address="0101" else"10000010" when address="0110" else "11111000" when address="0111" else "10000000" when address="1000" else "10010000" when address="1001" else "11111111";led1<='0' when tt='1' else'1' when tt='0';end a;六.实验现象。
altera fifo异步清零信号的时序
altera fifo异步清零信号的时序一、引言在数字电路设计中,FIFO(First In First Out)是一种常见的数据缓冲器,用于解决不同速度的数据传输之间的数据流失问题。
Altera是一家知名的FPGA芯片制造商,其FIFO模块提供了异步清零信号来实现清空缓冲区的功能。
二、FIFO异步清零信号的定义FIFO异步清零信号是一种特殊的控制信号,用于将FIFO缓冲区中的数据全部清空。
当该信号被激活时,FIFO模块会将缓冲区中的数据全部丢弃,并将指针重置为初始状态。
三、FIFO异步清零信号的工作原理FIFO异步清零信号的工作原理如下:1. 当FIFO异步清零信号被激活时,FIFO模块会检测到该信号的变化。
2. FIFO模块会立即停止写入数据和读取数据的操作,并将指针重置为初始状态。
3. FIFO模块会将缓冲区中的数据全部丢弃,不再进行任何处理。
4. FIFO异步清零信号被取消激活后,FIFO模块会恢复正常的读写操作。
四、FIFO异步清零信号的时序特性FIFO异步清零信号的时序特性如下:1. 异步清零信号可以随时激活,无需与其他信号同步。
2. 异步清零信号的激活时间和激活持续时间可以根据设计要求进行调整。
3. FIFO模块在接收到异步清零信号后会立即响应,无需等待时钟信号。
4. 异步清零信号的取消激活时间可以根据设计要求进行调整。
5. 异步清零信号的取消激活时间应保证足够长,以确保FIFO模块完全恢复正常操作。
五、FIFO异步清零信号的注意事项在使用FIFO异步清零信号时,需要注意以下几点:1. 异步清零信号的激活和取消激活应遵循设计规范,不得出现脉冲信号或持续激活导致异常操作。
2. 异步清零信号的激活和取消激活时间应考虑到FIFO模块的响应时间和恢复时间,避免信号过短或过长导致操作不稳定。
3. 在设计中,应考虑到异步清零信号与其他控制信号的相互作用,避免冲突或误操作。
六、总结FIFO异步清零信号是一种重要的控制信号,用于清空FIFO缓冲区中的数据。
实验报告七
选预置数D3D2D1D0=0000;
写出D5-1的二进制数码:D4=0100;
再根据D4数码写出置数信号表达式: Q2 ; LD
最后根据置数信号表达式画出连线图。
例 用 74LS160的置数法构成七进制加法计数器
741LS60的有效状态是10个状态,在此选后七个状态为循环 计数状态即0011~1001。所以选预置数为:D3D2D1D0=1001 ; 74LS160是同步置数的,选
1) 异步清零:当 RD 0 时,不管其他输入端的状态如何, 不论有无时钟脉冲CP,计数器输出将被直接置零(Q3Q2QlQ0= 0000),称为异步清零。 2) 同步并行预置数:当 RD 1, LD 0 时,在输入时钟脉 冲CP上升沿的作用下,并行输入端的数据d3d2d1d0被置入计数 器的输出端,即Q3Q2QlQ0=d3d2d1d0。由于这个操作要与CP上 升沿同步,所以称为同步预置数。 3)计数功能:当 RD LD EP ET 1 时,在CP端输入 计数脉冲,计数器进行二进制加法计数。 4)保持功能:当 R D LD 1 ,且 EP ET 0 ,即两个 使能端中有0时,则计数器保持原来的状态不变。这时,如 EP=0、ET=1,则进位输出信号CO保持不变;如ET=0则不 管EP状态如何,进位输出信号CO为低电平0。
集成计数器产品多数是二进制和十进制计数器,如果需要其 他进制的计数器,可用现有的二进制或十进制计数器,利用 其清零端或预置数端,外加适当的门电路连接构成任意进制 计数器。如果手边有M进制的集成计数器,要构成N进制的计 数器,当M>N时用一片M进制的计数器就可以实现;当M<N时 则需要多片M进制的计数器下面分别介绍实现的方法。
LD CO ;
最后根据置数信号表达式画出连线图。
BCD计数器和一般二进制计数器有何差
1、什么是同步清零和异步清零?本设计应该用何种清零方法?为什么?答:同步是指与时钟同步,即时钟触发条件满足时检测清零信号是否有效,有效则在下一个时间周期的触发条件下,执行清零,异步是清零信号有效时,无视触发脉冲,立即清零。
本设计应该用异步清零;因为异步清零,当RST被置零时,触发器立即置零,不受时钟信号的控制,这个过程符合我们本设计的需求。
2、BCD计数器和一般二进制计数器有何差别?答:BCD计数器是将4位二进制数转换成十进制显示结果;而一般二进制计数器与位数长短有关。
3、键盘为什么要防抖动?如何防抖动?(选做)答:当按一次按健时,由于按健有反应时间、有抖动,可能你按一次机器感应到几次,所以键盘需要防抖。
防抖就是让在按键正常反应时间内机器只感应一次按键效果,防止误操作;防抖动有多种方法,可以采用在按键检测语句后加适当的延时程序来防抖动,也可以用while语句检测若按键按下就进入死循环,松动时程序执行下一句。
4、所设计的频率计有测量误差吗?误差是多少?如何减小误差?答:有误差;误差范围在0.5%左右;误差来源主要有计数误差和闸门误差;为了减小误差,我们可以进行多次测量,并取平均值。
5、为什么需要锁存器?锁存器锁存信号应在什么时刻锁存?为什么?答:锁存器(Latch)是一种对脉冲电平敏感的存储单元电路,它们可以在特定输入脉冲电平作用下改变状态。
需要锁存器是因为数据有效滞后于控制信号有效;锁存信号应该在感应到特定电平后锁存;因为输出端的状态不会随输入端的状态变化而变化,只有在有锁存信号时输入的状态被保存到输出,直到下一个锁存信号。
6、分频电路如何设计?答:分频电路可以用Verilog语言编程设计;也可以通过Megafunction目录下找到ipm_ counter宏功能模块,进行端口和参数设置,创建一个计数器(即分频器)。
7、所用状态机是moore状态机还是mealy状态机?为什么?答:moore状态机;因为所用状态机输出的只是当前状态的函数,输入发生变化时还需要等待时钟的到来,必须等待状态发生变化时才导致输出发生变化。
74LS161的逻辑功能-谭
表5-14 74LS161的功能表
异步清0功 能最优先
CP上升 沿有效
同步并 行置数
CO= Q3 Q2 Q1 Q0 CTT
第六页,共23页。
图5-22 74LS161的时序图
第七页,共23页。
2.应用举例
(1)同步二进制加法计数
返回
实现四位二进制加法计数
1/9/2022
8
第八页,共23页。
(2)构成16以内的任意进制加法计数器: ① 设计思想:利用脉冲反馈法 用S0,S1,S2…,SM…SN表示输入0,1,2,…,
触发器的 CP之间的 型号
关系
74X160
74X161
74X162
同步
74X163
74X190
74X191
74X192
74X193
74X290
74X293
异步
74X90
74X92
1/9/2022 74X93
计数模式
清零方式
预置数方式
十进制 “加” 计数器
异步(低电平有效) 同步(低电平有效)
4 位二进制“加” 计数器 异步(低电平有效) 同步(低电平有效)
有进位时,高位计数功能T =1; 无进位时,高位保持功能T =0。
第十五页,共23页。
用两片CT74LS161级联成16×16进制同步加法计数器
低位片
高位片
在计到1111以前,CO1=0,高位片保持原状态不变 在计到1111时,CO1=1,高位片在下一个CP加一
② 再用脉冲反馈法
第十六页,共23页。
二-八-十六进制“加” 计数器 异步(高电平有效)
无
二-五-十进制“加” 计数器 异步(高电平有效) 预置 9,异步(高电平有效)
含有异步清零和计数使能的16位二进制加减可控计数器
1.含有异步清零和计数使能的16位二进制加减可控计数器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cnt16 ISPORT(EN,RST,UPD,CLK : IN STD_LOGIC;OUT1: OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); END cnt16;ARCHITECTURE bhv OF cnt16 ISSIGNAL QQ:STD_LOGIC_VECTOR(15 DOWNTO 0); BEGINPROCESS(EN,RST,UPD)BEGINIF RST='1' THENQQ<=(OTHERS=>'0'); --有复位信号清零ELSIF EN='1' THEN --EN位高电平开始计数IF CLK'EVENT AND CLK='1' THENIF UPD='1' THEN --当UDP为1加计数QQ<=QQ+1;ELSE --当UDP不为1减计数IF QQ > "0" THEN --当减到0时QQ<=QQ-1; --给QQ全1ELSEQQ<=(OTHERS=>'1');END IF;END IF;END IF;END IF;END PROCESS;OUT1<=QQ;END bhv;图1-1 16位二进制加减可控计数器的RTL图图1-2 16位二进制加减可控计数器的波形仿真图2.1 计数器和译码器合起来的程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT4_YM ISPORT(CLK,RST,ENA:IN STD_LOGIC;COUT:OUT STD_LOGIC;LED7S:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END CNT4_YM;ARCHITECTURE BEHV OF CNT4_YM ISSIGNAL CQI:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINPROCESS(CLK,RST,ENA)BEGINIF RST='1' THEN CQI<=(OTHERS=>'0');ELSIF CLK'EVENT AND CLK='1' THENIF ENA='1' THENIF 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;END PROCESS;PROCESS(CQI)BEGINCASE CQI 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<="1110111";WHEN"1011"=>LED7S<="1111100";WHEN"1100"=>LED7S<="0111001";WHEN"1101"=>LED7S<="1011110";WHEN"1110"=>LED7S<="1111001";WHEN"1111"=>LED7S<="1110001";WHEN OTHERS=>NULL;END CASE;END PROCESS;END BEHV; 2.2 计数器和译码器分开的程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY JSYM ISPORT(CLK,RST,ENA:IN STD_LOGIC;COUT:OUT STD_LOGIC;OUTY:OUTSTD_LOGIC_VECTOR(3 DOWNTO 0)); END JSYM;ARCHITECTURE BEHV OF JSYM ISBEGINPROCESS(CLK,RST,ENA)V ARIABLE CQI:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF RST='1' THEN CQI:=(OTHERS=>'0');ELSIF CLK'EVENT AND CLK='1' THENIF ENA='1' THENIF 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;OUTY<=CQI;END PROCESS;END BEHV;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DECL7S ISPORT(A:IN STD_LOGIC_VECTOR(3 DOWNTO 0);LED7S:OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ); END DECL7S;ARCHITECTURE BEHV OF DECL7S ISBEGINPROCESS(A)BEGINCASE A ISWHEN"0000"=>LED7S<="0111111";WHEN"0001"=>LED7S<="0000110";WHEN"0010"=>LED7S<="1011011";WHEN"0011"=>LED7S<="1001111";WHEN"0100"=>LED7S<="1100110";WHEN"0100"=>LED7S<="1101101";WHEN"0101"=>LED7S<="1111101";WHEN"0110"=>LED7S<="0000111";WHEN"0111"=>LED7S<="1111111";WHEN"1000"=>LED7S<="1101111";WHEN"1010"=>LED7S<="1110111";WHEN"1011"=>LED7S<="1111100";WHEN"1100"=>LED7S<="0111001";WHEN"1101"=>LED7S<="1011110";WHEN"1110"=>LED7S<="1111001";WHEN"1111"=>LED7S<="1110001";WHEN OTHERS=>NULL;END CASE;END PROCESS;END;图2-1 计数器和译码器合起来的RTL图CLK RST ENACOUT LED7S[6..0]CNT4_YMinst图2- 2 计数器和译码器合起来的顶层文件原理图图2-3 计数器和译码器合起来的功能仿真波形A[3..0]LED7S[6..0]DECL7SinstCLKRST ENACOUT OUTY[3..0]cnt10inst1VCCrst0INPUT VCCclock0INPUT VCCena0INPUT cout0OUTPUTled[6..0]OUTPUT图2-4 计时器和译码器连接电路的顶层文件原理图。
同步清零与异步清零的区别
“同步”输入信号和时钟信号有关,实际上输入信号和时钟信号进行了与运算或者与非运算,输入信号和时钟信号的运算结果是有效的器件的状态才会改变。
同步信号可以过滤掉不正确状态跳变对逻辑的影响,但是需要保证有效输入信号在时钟信号跳变钱完成跳变,否则输入信号就是无效的。
异步信号则ቤተ መጻሕፍቲ ባይዱ同步信号的效果正好相反。使用时请根据实际情况考虑。
同步清零就是把清零信号和时钟信号与或者与非处理后输入到清零端,
异步清零的清零信号直接输入到清零端。
同步清零可以保证状态在时钟的有效期内不会改变。
同步、异步、清零、置数的概念;
同步和异步是两种数据传输方式,而清零和置数是两种对寄存器或存储器的操作方式。
下面我会详细解释这四个概念:
同步(Synchronous):
在同步数据传输中,数据是根据一个共享的时钟信号来传输的。
时钟信号会控制数据的传输开始和结束,确保数据的正确性。
同步传输通常用于微处理器、微控制器和其他数字系统,因为它们需要一个可靠的时钟信号来协调操作。
异步(Asynchronous):
在异步数据传输中,数据是根据控制信号(如开始和结束信号)来传输的,而不是共享的时钟信号。
异步传输不需要一个精确的时钟信号,因此它比同步传输更简单,但也可能更容易出错。
异步传输通常用于简单的数字逻辑或通信协议,如串行通信。
清零(Reset):
清零是将寄存器或存储器的值设置为0的操作。
当需要将寄存器或存储器重置到初始状态时,可以使用清零操
作。
清零操作通常由硬件或软件控制,用于初始化或恢复寄存器或存储器的状态。
置数(Load):
置数是将一个值写入寄存器或存储器的操作。
当需要将一个特定的值存储在寄存器或存储器中时,可以使用置数操作。
置数操作通常由硬件或软件控制,用于将数据存储在寄存器或存储器中。
这四个概念在数字系统和计算机架构中非常重要,它们是实现可靠、高效的数据传输和控制的关键部分。
含有异步清零同步时钟使能和同步数据加载功能的十进制计数器
含有异步清零同步时钟使能和同步数据加载功能的十进制计数器实验目的:了解硬件计数器的工作原理熟悉QuartusII及其使用Verilog 语言编写代码设计一个功能全面十进制计数器Quartus II简介Quartus II 是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL 以及AHDL等多种设计输入形式,内嵌自由的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。
Quartus II 可以在XP、Linux以及Unix上使用,除了可以使用TCL脚本完成设计流程外,提供了完善的用户图形界面设计方式。
具有运行速度快,界面统一,功能集中,易学易用等特点。
Quartus II 支持Altera的IP核,包括了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性,加快了设计速度。
对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。
此外,Quartus II 通过和DSP Builder工具和Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。
Maxplus II 作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。
目前Altera已经停止了对Maxplus II 的更新支持,Quartus II 与之相比不仅仅是支持器件类型的丰富和图形界面的改变。
Altera在Quartus II 中包括了许多诸如SignalTap II、Chip Editor 和RTL Viewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并继承了Maxplus II友好的图形界面及简便的使用方法。
Altera Quartus II 作为一种可编程逻辑的设计环境,由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。
异步清零法和同步置数法的异同
异步清零法和同步置数法的异同1.引言1.1 概述概述部分的内容可以按照以下方式编写:引言部分是对异步清零法和同步置数法这两种方法进行概述的地方。
这两种方法在数字电路和计算机系统设计中广泛应用,目的是实现对寄存器、存储器等数字元件的清零或置数操作。
异步清零法是一种基于时序和触发器的方法,通过在数据线上施加特定的清零信号来将要清零的元件的状态全部清零。
它的特点是清零操作是异步的,即不需要与时钟信号同步,只要清零信号有效,即可立即进行清零。
同步置数法是一种基于时钟和触发器的方法,通过在特定的时钟脉冲下,将特定的数值送入要置数的元件,从而实现置数操作。
它的特点是置数操作是同步的,即需要与时钟信号同步,仅在时钟上升沿或下降沿进行置数操作。
在异步清零法和同步置数法的比较中,它们有一些共同之处,如都是通过控制信号实现对数字元件的操作,都需要借助于触发器等相关电路进行实现。
而它们在操作时的特点上存在不同之处,异步清零法不需要时钟信号,立即进行清零,而同步置数法则需要与时钟信号同步,仅在时钟信号的边沿进行操作。
本文将分析异步清零法和同步置数法的原理、特点以及适用场景等方面的差异,结合具体的实例进行说明。
通过对这两种方法的比较和分析,希望能够对读者深入理解和掌握异步清零法和同步置数法的异同点,以及在实际应用中的选择和使用。
1.2文章结构文章结构部分旨在向读者介绍本文的结构和内容安排。
本文按照以下结构组织:第一部分是引言部分。
在这一部分中,我们将对异步清零法和同步置数法进行概述,并介绍文章的结构和目的。
第二部分是正文部分。
在这一部分中,我们将详细探讨异步清零法和同步置数法。
首先,我们将介绍异步清零法的要点,包括要点1和要点2。
然后,我们将转向同步置数法,并介绍它的要点,包括要点1和要点2。
第三部分是结论部分。
在这一部分中,我们将总结异步清零法和同步置数法的异同点,并对整篇文章进行总结。
通过以上结构,本文将全面介绍和比较异步清零法和同步置数法的异同点,帮助读者更好地理解这两种方法的特点和适用场景。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
指导教师签字:
年 月 日
if load='0' then cqi:=data;else
if cqi<15 then cqi:=cqi+1;
else cqi:=(others =>'0');
end if;
end if;
end if;
end if;
if cqi>9 then cout<='1';--输出进位信号
else cout<='0';
实验报告
课程名称EDA技术应用
专 业电子信息工程
班 级
学 号
学 生 姓 名
实验报告
实验名称
含异步清零和同步使能的加法计数器
实验时间
学生学号
学生姓名
同组人员
专业班级
实验类型
设计性
指导老师
实验地点
学时
一、实验目的
1.了解二进制计数器的工作原理。
2.进一步熟悉QUARTUSII软件的使用方法和VHDL输入。
3.时钟在编程过程中的作用。
二、实验设备
1.PC机一台;
2.Altera Blaster下载器一根;
3.KHF-5实验箱一台。
三、实验原理
二进制计数器是应用中最多、功能最全的计数器之一,含异步清零和同步使能的加法计数器的具体工作过程如下:在时钟上升沿的情况下,检测使能端是否允许计数,如果允许计数(定义使能端高电平有效)则开始计数,否则一直检测使能端信号。在计数过程中再检测复位信号是否有效(低电平有效),当复位信号起作用时,使计数值清零,继续进行检测和计数。
9.实验完毕,关闭电源,整理实验器材。
六、实验结果
程序:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
--------------------------------------------------------------------
variable cqi : std_logic_vector(3 downto 0);
begin
if ret='0' then cqi:=(others =>'0');--计数器异步复位
elsif clk'event and clk='1' then--检测时钟上升沿
if en='1' then--检测是否允许计数(同步使能)
end if;
cq<=cqi;--计数值向端口输出
end process;
end behavHale Waihona Puke ;时序图:引脚配置图:
实验结果:
在时钟信号的作用下,通过使能端和复位信号来完成加法计数器的计数。实验中时钟信号使用数字时钟源模块的1HZ信号,用一位拨动开关SW1表示使能端信号,用复位开关S1表示复位信号,用LED模块的D1~D5来表示计数的二进制结果。实验LED亮表示对应的位为‘1’,LED灭表示对应的位为‘0’。
四、实验内容
本实验要求完成的任务是在时钟信号的作用下,通过使能端和复位信号来完成加法计数器的计数。实验中时钟信号使用数字时钟源模块的1HZ信号,用一位拨动开关SW1表示使能端信号,用复位开关S1表示复位信号,用LED模块的D1~D5来表示计数的二进制结果。实验LED亮表示对应的位为‘1’,LED灭表示对应的位为‘0’。通过输入不同的值模拟计数器的工作时序,观察计数的结果。实验箱中的拨动开关与FPGA的接口电路,LED灯与FPGA的接口电路以及按键开关模块与FPGA的管脚连接在《用户手册》做了详细说明。
五、实验过程
1.打开QUARTUSII软件,新建一个工程。
2.建完工程之后,再新建一个VHDL File,打开VHDL编辑器对话框。
3.按照实验原理和自己的想法,在VHDL编辑窗口编写VHDL程序,用户可参照光盘中提供的示例程序。
4.编写完VHDL程序后,保存起来。方法同实验一。
5.对自己编写的VHDL程序进行编译并仿真,对程序的错误进行修改。
七、实验分析与总结
通过本次试验的学习,更加了解了二进制的工作原理,能够更熟练的使用QUARTUSII软件能够进行基本的VHDL语句的输入,了解了什么是时钟信号,基本掌握了含异步清零和同步使能的加法计数器的使用,通过使能端和复位信号来完成加法计数器的计数,能够顺利的解决实验过程中遇到的问题,比之前有了较大进步。
entity cnt11 is
port( clk,ret,en,load : in std_logic; --定义时钟、异步复位、同步使能信号
data : in std_logic_vector(3 downto 0); --计数结果
cq : out std_logic_vector(3 downto 0); --计数结果
cout : out std_logic --进位信号
);
end cnt11;
--------------------------------------------------------------------
architecture behave of cnt11 is
begin
process(clk,ret,en)
6.编译仿真无误后,依照《用户手册》进行管脚分配。分配完成后,再进行全编译一次,以使管脚分配生效。
7.用下载电缆通过JTAG口将对应的sof文件加载到FPGA中。
8.将数字信号源F的时钟选择为1HZ,使拨动开关SW1置为高电平(使拨动开关向上),观察四位发光管D1~D4的亮灭变化,以及D5(进位信号)的变化情况。当复位键(底板上的按键开关S1键)按下后,计数是否被清零。拨动开关SW1置为低电平(拨动开关向下)观察加法器的工作情况。记录实验现象是否与自己的编程思想一致。