实验九_步长可变的加减计数器
数字计步器实验报告无错版
数字电路课程设计任务书20 12 -20 13 学年第1学期第19 周-20周题目数字记步器容及要求〖基本要求〗采用4位数字显示步数,传感器采用水银开关,主人走一步的时候,开关闭合一次〖提高要求〗〖参考原理、框图〗本系统的原理和计数器相同、但是要注意开关的抖动以及信号的整形问题。
〖主要参考元器件〗74LS390,74LS48,74LS08进度安排1.仿真、画PCB线路板图、领元器件:2天;2. 制作、焊接:2天3.调试:3天4. 验收:1天5. 提交报告:2012-2013学年第一学期3~7周学生:100421 24 10042129指导时间:第2~3周指导地点:综合楼508室任务下达20 13年 1 月 5 任务完成20 13年 1 月18日日考核方式 1.评阅□√ 2.答辩□√ 3.实际操作□√ 4.其它□指导教师小林系(部)主任付崇芳注:1、此表一组一表二份,课程设计小组组长一份;任课教师授课时自带一份备查。
2、课程设计结束后与“课程设计小结”、“学生成绩单”一并交院教务存档。
课程设计说明书课程设计名称:数字电路课程设计课程设计题目:数字计步器学院名称:信息工程学院专业:通信工程班级:100421学号:24 :**评分:教师:20 12 年 1 月18 日摘要本课程设计是设计数字计步器,要求采用4位数字显示步数,传感器采用水银开关,主人走一步的时候,开关闭合一次,同时还应具备清零的功能。
为了实现对移动步数的累计,在人体移动时水平位置发生变化从而触动水银开关使电路实现间断性的接触,从而产生脉冲信号使计数电路实现累计,达到记录人体移动步数的目的。
在设计该电路时,由于要实现对移动步数的累计故要用计数器来计数。
为了清楚的知道自己任何时候走了多少步采用了LED数码管来显示数据并用BCD七段译码器来驱动数码管。
故该电路由输入电路,计数电路,译码电路三部分构成。
其中,输入电路由一个脉冲计数产生电路和一个置零电路组成;记数电路由两块74LS390和一块74LS08连接而成;译码电路是通过四片74LS247和电阻以及LED管。
可变步长计数器的设计
东南大学电工电子实验中心实验报告课程名称:电路与电子线路实验1第 2 次实验实验名称:可变步长计数器的设计院(系):专业:姓名:学号:实验室: 实验组别:同组人员:实验时间:年月日评定成绩:审阅教师:一、实验内容要求1.可变步长计数器的设计内容:实现N步长计数器●实现1/N步长计数器●N为四位二进制数,可现场设置要求:●在Multisim软件平台上设计实验电路●运行并检验实验结果二、实现方案1.N步长计数器设计方案(1)使用1个全加器和4个D触发器实现N步长加减计数器。
4个D触发器用来存储表示运算结果的4位二进制数,其D输入端分别接全加器的运算结果输出端SUM_1, SUM_2, SUM_3, SUM_4,时钟信号端CP接控制开关A。
控制开关A闭合一次,相当于加一次脉冲信号。
全加器的其中一个4位二进制数输入端A1, A2, A3, A4分别接4个D触发器的输出端Q,另一个4位二进制输入端B1, B2, B3, B4则分别接控制开关B,C,D,E。
这四个开关用于控制步长,每个开关代表着4位二进制数的一位。
设置好步长N后(通过设置控制开关B,C,D,E的闭合与断开实现),每闭合一次控制开关A,全加器将前一次的运算结果+N(二进制加法)后送到4个D触发器,因此4个D触发器的输出结果为前一次结果+N(二进制加法),从而实现了N步长加法计数器。
N步长减法计数器只需在设置步长N时取N的补码即可实现。
(2)使用1个全加器,1个二输入与门,1个二输入与非门,2个74LS47和2个七段数码管实现结果的十进制表示。
运算结果的量程为15,一个数码管用于显示结果的十位数,另一个数码管用于显示结果的个位数。
上述4个D触发器的结果Q输出到全加器的一个4位二进制数输入端,全加器的另一个4位二进制数输入端则或者输入0000,或者输入0110,具体输入哪一个要看与门输出的结果。
全加器的4个输出端接到74LS47上,该74LS47再接到显示个位数的数码管。
99进制加减手动自动计数器.
基础工程设计(论文)说明书题目:M=99的十进制加/减可逆计数器院(系):电子工程与自动化学院专业:测控技术与仪器学生姓名:黄昭阳学号:1100820216指导教师:黄源2013年9月13日目录引言 (2)1 设计方案 (3)1.1 手动方案 (3)1.2 自动方案 (4)2 实现方案 (5)2.1 脉冲电路实现方案 (5)2.2 手动加减可逆计数方案 (6)2.3 自动加减可逆计数方案 (7)2.4 74LS192功能介绍 (8)2.5 译码电路及LED数码管 (9)2.6 画出完整电路原理图 (10)3 制作电路板与调试 (11)3.1 制作板子过程 (11)3.1.1 注意事项 (11)3.2 调试步骤 (11)3.2.1 调试结果与分析 (11)4 基础工程设计总结 (12)谢辞 (13)参考文献 (14)附录 (15)引言我们从数电的学习中可以知道,计数器是数电最基本也是最重要的知识。
以74LS192为首的计数器电路单元也是很常见的电路。
本次基础工程设计的目的就是强化我们对计数器的基础学习,同时深化学习掌握利用74LS192设计不同功能的计数器电路的能力。
同时在本次基础工程设计中我们也掌握了proteus仿真软件的使用,以及加减可逆计数器的设计和调试方法。
本次课题先是简要说明了M=99进制加减可逆计数器的基本原理和技术指标。
本次报告中,我将陈述自己的设计方案和思路,制作过程还有总结体会。
功能指标要求可以实现0到99和99到0的加减计数方式,要求加减计数切换为手动和自动。
即加减计数可利用数据选择器来实现加减自动转换。
主要元器件74LS00,74LS20,NE555,74LS76,74LS192,74LS48及LED共阴数码管数码管。
1 设计方案1.1 手动方案用开关人为选择控制脉冲和高电平的输出从方案设计图1.1—a可以看出,我可以手动控制让电路输出CLK给CPU且输出高电平给CPD让其实现加法计数。
实验九 计数器及其应用 实验内容、原理及表格
实验九 计数器及其应用实验内容:一、用D 触发器构成异步二进制加法计数器说明:本电路用两块74LS74共四只D 触发器构成,图中第一、二只为第一块,第三、四只为第二块;除了图中标注的引脚外,电源端14、地端7记住连接;3Q 、2Q 、1Q 、0Q 接到电平显示。
请大家在实验报告中将减法电路图画出。
该电路的特点是每一个D 触发器都构成T '触发器,利用了其具有的翻转功能。
在计数器清零后(如何清零?),第一个T '触发器的状态为0=Q 、1=Q 。
(1)当第一个CP 0到来时,变化为1=Q 、0=Q ,此时输出结果为0001。
(2)当第二个CP 0到来时,第一个T '触发器的状态变化为0=Q 、1=Q ,即Q 由0→1,此时CP 1得到一个上升沿触发信号,第二个T '触发器的状态变为1=Q 、0=Q ,输出结果为0010。
(3)接着重复步骤(1),得到0011,依此类推。
表一 用D 触发器构成异步二进制加/减法计数器二、按下表格测试CC40192同步十进制可逆计数器的逻辑功能三、用CC40192同步十进制可逆计数器实现8421码十进制加/减法计数器表二实现8421码十进制加/减法计数器四、按图9—3,用两片CC40192级联组成两位十进制加法计数器,输入1Hz连续脉冲,实现00—99累加计数。
说明:CR、LD、CP应接计数为加计数时相应的电平。
请大家在实验报告中将实现由D99—00递减的减法计数器电路图画出。
五、用CC40192同步十进制可逆计数器实现六进制加法计数器(复位法)表三实现六进制加法计数器六、用CC40192同步十进制可逆计数器实现九进制加法计数器(复位法)表四实现九进制加法计数器七、利用置数功能(LD )获得421进制计数器421进制计数器的计数原理:当第10个脉冲输入CC40192(1)后,CC40192(1)的CO 将向CC40192(2)进位,而当第100脉冲输入CC40192(1)后,CC40192(2)的CO 就向CC40192(3)进位,当第400个脉冲输入CC40192(1)后,CC40192(3)计数器输出的32100100Q Q Q Q =,即相当于百位的十进制数4。
可编程逻辑器件实验EDA-步长可变的加减计数器
实验六步长可变的加减计数器
一、实验目的
1、掌握加减法计数器以及特殊功能计数器的设计原理;
2、用HDL语言设计多功能计数器。
二、硬件需求
EDA/SOPC实验箱一台。
三、实验原理
计数器的步长是指计数器每次的改变量。
在很多应用场合,都希望计数器的步长可变。
所谓步长可变,也就是计数器的步长是一个不定值,具体是多少是要靠外部干预的,比如外部给定其步长为5,那么该计数器每次要么增加5,要么减少5,也就是说计数器每次的改变量是5。
这种步长可变的计数器才具有一定的实际意义,比如在直接数字频率合成DDFS 中的地址累加器就是一个步长可变的递增计数器。
四、实验内容
本实验要完成的任务就是设计一个8位的计数器,步长的改变量要求从0~15,实验中用拨挡开关模块的SW1A~SW4A来作为步长改变量的输入,用按键F1来控制计数器的增减,具体要求为:当F1输入为高时,计数器为步长可变的加计数器;当F1输入为低时,计数器为步长可变的减计数器。
计数器输出的Q值用七段数码管模块来表示。
实验中计数器的时钟频率为了便于眼睛观察,同上个实验一样用1Hz的时钟。
五、实验步骤
(1)实现程序
本实验采用顶层设计
元件例化
(2)仿真波形图
从仿真波形图可以看出,LED输出波形持续变化,以设定的步长,增减计数,产生相应的七位译码值。
(3)实际结果。
实验:计数器功能及其应用
实验计数器功能及其应用实验目的:通过实验,熟悉中规模集成计数器的功能及应用,掌握利用中规模集成电路计数器构成任意进制计数器的方法,学会综合测试的方法,让学生加深对相关理论知识的理解。
实验原理:计数器对输入的时钟脉冲进行计数,来一个CP脉冲计数器状态变化一次。
根据计数器计数循环长度M,称之为模M计数器(M进制计数器)。
通常,计数器状态编码按二进制数的递增或递减规律来编码,对应地称之为加法计数器或减法计数器。
一个计数型触发器就是一位二进制计数器。
N个计数型触发器可以构成同步或异步N位二进制加法或减法计数器。
当然,计数器状态编码並非必须按二进制数的规律编码,可以给M进制计数器任意地编排M个二进制码。
在数字集成产品中,通用的计数器是二进制和十进制计数器。
按计数长度、有效时钟、控制信号、置位和复位信号的不同有不同的型号。
74LS161是集成TTL四位二进制加法计数器,其符号和管脚分布分别如下图所示:表 8-1为74LS161的功能表:表8-1A B C D从表1在为低电平时实现异步复位(清零需要时钟信号。
在复位端高电平条件下,预置端LD为低电平时实现同步预置功能,即需要有效时钟信号才能使输出状态等于并行输入预置数 A B C D。
在复位和预置端都为无效电平时,两计数使能端输入使能信号,74LS161实现模16加法计数功能,;两计数使能端输入禁止信号,,集成计数器实现状态保持功能,。
在时,进位输出端OC=1。
在数字集成电路中有许多型号的计数器产品,可以用这些数字集成电路来实现所需要的计数功能和时序逻辑功能。
用M进制集成计数器构成任意N进制计数器:1、M>N,需一片M进制计数器一种为反馈清零法,另一种为反馈置数法。
(1)反馈清零法反馈清零法是利用反馈电路产生一个给集成计数器的复位信号,使计数器各输出端为零(清零)。
反馈电路一般是组合逻辑电路,计数器输出部分或全部作为其输入,在计数器一定的输出状态下即时产生复位信号,使计数电路同步或异步地复位。
实验九_步长可变的加减计数器
实验九步长可变的加减计数器一、实验目的1.掌握加减法计数器以及特殊功能计数器的的设计原理。
2用VHDL语言设计多功能计数器。
二、实验原理计数分同步计数器和异步计数器,如果按工作原理和使用情况来分那就更多了。
1.加减工作原理加减计数也称为可逆计数,就是根据计数控制信号的不同,在时钟脉冲的作用下,计数器可以进行加1计数操作或者减1计数操作。
2.变步长工作原理如步长为3的加法计数器,计数状态变化为0、3、6、9、12……,步长值由输入端控制。
在加法计数时,当计数值达到或超过99时,在计数器下一个时钟脉冲过后,计数器清零;在减法计数时,当计数值达到或小于0时,在计数器下一个时钟脉冲过后,计数器也清零。
三、实验内容1 设计的计数步长可在0~79之间变化2 通过仿真或观察波形图验证设计的正确性。
3 编译下载验证结果。
四、设计提示1.注意IF语句的嵌套。
2.注意加减计数状态的变化,计数值由9变0(加法)及由0变9(减法)各位的变化。
由于计数器为十进制计数器,还应考虑进位或借位后进行加6及减6校正。
五、实验报告要求1.写出多模加减计数器的VHDL源程序。
2.叙述多模加减计数器的工作原理。
SF = ‘1’加标志,SF=’0’减标志3.画出计数器工作波形图.LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CHANGABLE ISPORT(CLK,RESET,SF:IN STD_LOGIC;SIZE:IN STD_LOGIC_VECTOR(6 DOWNTO 0);DO:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END ENTITY CHANGABLE;ARCHITECTURE C_SIZE OF CHANGABLE ISSIGNAL C_COUNT: STD_LOGIC_VECTOR(6 DOWNTO 0); BEGINPROCESS(CLK,RESET,SF,SIZE)V ARIABLE TP:STD_LOGIC_VECTOR(6 DOWNTO 0); BEGINIF(RESET = '1')THENC_COUNT<=(OTHERS=>'0');ELSIF(CLK'EVENT AND CLK = '1')THENIF(SF='1')THENTP:=C_COUNT+SIZE;IF(TP>79)THENC_COUNT<=(OTHERS=>'0');ELSEC_COUNT<=C_COUNT+SIZE;END IF;ELSEIF(TP < SIZE)THENC_COUNT<=(OTHERS=>'0');ELSEC_COUNT<=C_COUNT-SIZE;END IF;END IF;END IF;DO<=C_COUNT;END PROCESS;END ARCHITECTURE C_SIZE;。
长整数加减运算实验报告
计算机存储的数据是有范围限制的,对于超出存储限制的数据无法直接在计算机中计算,为此需要设计相应的程序来完成这种超出范围限制的长整数间的四则运算。
设计一个实现任意长的整形数进行四则运算的程序,要求完成长整数的加、减运算,乘除运算可选做。
在这里长整数没有范围限制,可任意长。
运算后的进位、借位等都要进行正确处理,可实现动态的输入,实时的输出。
学习使用基本的数据结构解决实际应用中的问题,将学习的理论知识应用于实践,增强学生解决实际问题的能力。
这里可采用的基本数据结构为线性表。
1) 输入:动态输入以数字开头,可以任意长度,中间不用输入分隔符,直接输入即可。
2) 输出:实时输出的结果是加减运算后的结果。
3) 功能:实现长整数的加减运算。
4) 测试数据: 0、0;输出“0”2345,6789、-7654,3211;输出“1,0000,0000”1,0000,0000,0000、9999,9999;输出“9999,0000,0001”1,0001,0001、;1,0001,0001;输出“0”此实验采用的数据结构是双向循环链表。
这样可以很容易的找到他的前驱以及它的后继。
节点采用结构体类型,代码如下:typedef struct Node // 双向链表的结构体定义{int data;struct Node *prior;struct Node *next;}DLNode;1) void ListInitiate(DLNode **head)操作结果:初始化一个头结点为head 的双向循环链表;2) int ListLength(DLNode *head)操作结果:计算以head 为头结点的链表的长度3) int ListInsert(DLNode *head,int i,int x)操作结果:将节点数据为x 的节点插到第i 个位置上去。
4) int abs(int x)操作结果:绝对值函数,返回x 的绝对值。
5) int InputNumber(DLNode *head)操作结果:将从键盘中接收数据并把得到的数据存入以head 为头结点的链表中。
vhdl 计数器的使用
实验四计数器的使用一、实验目的熟悉步长可变的加减计数器的工作原理、设计过程和实现方法。
二、实验内容与要求学习用VHDL设计步长可变的加减计数器电路,完成编译、综合、适配、仿真和实验箱上的硬件测试,通过LED数码管显示输入输出各部分数据。
三、实验原理通过输入一组4BIT二进制数据,控制计数方式,即步长,决定每个脉冲到来时计数器增加的数值,同时还有一个单BIT的控制位,选择加计数或者减计数,并通过电路显示各部分数据(输入及输出)。
拨码开关置为MODEL_SEL5-8,全部置为ON,通过USB下载;全部置为OFF,则通过LAB_JTAG_PS_AS接口下载。
DISP_SEL8,处于“ON”状态,这样可以使用静态共阳数码管DISP_SEL1,DISP_SEL2处于“OFF”状态,通过F1,F2的十六进制的输入,在静态共阳数码管DP1B,DP2B上显示输出。
F1,F2预置数据,通过计数器,总的计数值控制电平宽度,其中一组控制高电平,一组控制低电平。
在DP1B上显示的是0-F的步长可变的加减计数器。
四、实验平台(1)硬件:计算机、GX-SOC/SOPC-DEV-LABCycloneII EP2C35F672C8核心板(2)软件:Quartus II软件五、六、仿真截图七、硬件实现八、程序代码1--10 位计数SCAN TOP_LEVEL程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;use ieee.std_logic_unsigned.all;ENTITY ACOUNT100 ISPORT(clk,clr,en,en6:IN STD_LOGIC ;count1 : out std_logic ;ledseg : out std_logic_vector(6 downto 0);ledcom :out std_logic_vector(5 downto 0)); END;ARCHITECTURE ONE OF ACOUNT100 IS COMPONENT clkgen ISPORT(clkin:IN STD_LOGIC ;clkout: OUT STD_LOGIC);END COMPONENT;COMPONENT COUNT10a ISPORT(clk,clr,en:IN STD_LOGIC ;q:OUT STD_LOGIC_vector(3 downto 0);count1:OUT STD_LOGIC);end COMPONENT;COMPONENT bcd_7seg isport(bcd_led :in std_logic_vector(3 downto 0);--input bcdledseg : out std_logic_vector(6 downto 0));--output to 7 segmentend COMPONENT;COMPONENT mx isport(s:in std_logic;a,b:in std_logic_vector(3 downto 0);q:out std_logic_vector(3 downto 0));end COMPONENT;COMPONENT comcoun isport(clk : in std_logic;--synchronouse clockenable : in std_logic;--scan clockcomclk : out std_logic_vector(2 downto 0));--output countend COMPONENT;COMPONENT com_encode isport(s :in std_logic;--input countledcom :out std_logic_vector(5 downto 0));--output encodeend COMPONENT ;signal clk1,c10: std_logic;signal q1,q2,bcd: std_logic_vector(3 downto 0);BEGINU1:clkgen PORT MAP(CLKIN=>CLK,CLKOUT=>CLK1);U2:COUNT10a PORT MAP(clk=>CLK1,clr=>clr,en=>en,q=>q1,count1=>c10);U3:COUNT10a PORT MAP(clk=>CLK1,clr=>clr,en=>c10,q=>q2,count1=>count1); U4:MX PORT MAP(S=>CLK1,A=>q1,b=>q2,q=>bcd);U5:bcd_7seg PORT MAP(bcd_led=>bcd,ledseg=>ledseg);U6:com_encode PORT MAP(s=>clk1,ledcom=>ledcom );end;2---clkgen.vhdLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;use ieee.std_logic_unsigned.all;ENTITY clkgen ISPORT(clkin:IN STD_LOGIC ;clkout: OUT STD_LOGIC);END;ARCHITECTURE even OF clkgen ISconstant N:Integer:=50000000;--constant N:Integer:=10;SIGNAL coun:integer range 0 to N;SIGNAL clk1:STD_LOGIC;BEGINPROCESS(clkin)BEGINIF(clkin'EVENT AND clkin='1')THENIF(coun=N)THENcoun<=0;clk1<=Not clk1;elsecoun<=coun+1;END IF;END IF;END PROCESS;clkout<=clk1;END even;3--10 位计数器程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY COUNT10a ISPORT(clk,clr,en:IN STD_LOGIC;count1:OUT STD_LOGIC;q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END COUNT10a ;ARCHITECTURE rtl OF COUNT10a ISSIGNAL qs:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL ca:STD_LOGIC;BEGINPROCESS(clk)BEGINIF(clk'EVENT AND clk='1')THENIF(clr='1')THENqs<="0000";ELSIF(en='1')THENIF(qs="1001")THENqs<="0000";ca<='0';ELSIF(qs="1000")THEN --在计数到8时,即让进位赋值1,--由于信号会产生一个滞后,使得实际ca在9时出现qs<=qs+1;ca<='1';ELSEqs<=qs+1;ca<='0';END IF;END IF;END IF;END PROCESS;PROCESS(ca,en)BEGINq<=qs;count1<=ca AND en;END PROCESS;END rtl;4library ieee;use ieee.std_logic_1164.all;entity mx isport(s:in std_logic;a,b:in std_logic_vector(3 downto 0);q:out std_logic_vector(3 downto 0));end mx;architecture rtl of mx isbeginq<= a WHEN s = '0' ELSE b ;end rtl;5--七段显示扫描电路--comcoun.vhd 7 segment com scan counterlibrary ieee ;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity comcoun isport(clk : in std_logic;--synchronouse clockenable : in std_logic;--scan clockcomclk : out std_logic_vector(2 downto 0));--output countend comcoun;architecture behavior of comcoun issignal q : std_logic_vector(2 downto 0);--internal counted signal beginfscan:process(clk)beginif (clk'event and clk='1') thenif (enable='1') thenif q>=1 thenq<="000";--initial counterelseq<=q+1;--countingend if;end if;end if;end process fscan;comclk<=q; --output internal countend behavior;6library ieee ;use ieee.std_logic_1164.all;entity bcd_7seg isport(bcd_led :in std_logic_vector(3 downto 0);--input bcdledseg : out std_logic_vector(6 downto 0));--output to 7 segment end bcd_7seg;architecture behavior of bcd_7seg isbeginwith bcd_led selectledseg<="0111111" when "0000",--0,3f"0000110" when "0001",--1,06"1011011" when "0010",--2,5b"1001111" when "0011",--3,4f"1100110" when "0100",--4,66"1101101" when "0101",--5,6d"1111101" when "0110",--6,7d"0100111" when "0111",--7,27"1111111" when "1000",--8,7f"1101111" when "1001",--9,6f"1110111" when "1010",--A"1111100"when "1011", --b"0111001"when "1100",--c"1011110" when "1101",--d"1111001"when "1110",--E"1110001" when "1111",--F"0000000" when others;end behavior;7--计数译码电路-- 6 共阴--com_encode.vhd 7 segment com encoderlibrary ieee ;use ieee.std_logic_1164.all;entity com_encode isport(s :in std_logic;--input countledcom :out std_logic_vector(5 downto 0));--output encode end com_encode;architecture behavior of com_encode isbeginledcom<="000001" when s='0' else"000010" ;end behavior;九、实验总结。
实验九-可逆计数器的功能测试及应用电路
实验九可逆计数器的功能测试及应用电路实验目的:(1)掌握可逆计数器74LS191、74LS191、74LS192、74LS193的逻辑功能及使用方法。
(2)熟悉可逆计数器实现任意进制的数码倒计时电路的工作原理。
实验仪器与器件:实验箱一个;双踪示波器一台;稳压电源一台;函数发生器一台.74LS191、74LS191、74LS191或74HC48、74LS00和74LS04。
实验内容:1测试74LS190和74LS191的逻辑功能,并用数码管显示,验证是否与表2—9—4一致,分别画出各单元的电路图,写出各自的状态实验原理:单时钟74LS191二进制同步加/减计数器的功能表如下:表2-9—4 单时钟74LS191二进制同步加/减计数器的功能表单时钟74LS191二进制同步加/减计数器是十进制的,其他功能与74LS191一样。
它的有效状态为0000~1001。
实验电路:如图所示是减计数时当计数器的状态变为0时的电路状态:RCO=0,MAX/=1;MIN实验现象与结果:该结果是当CTEN =0,D L =1,D U /=1时,A B C D Q Q Q Q 的 波形图;该结果是当CTEN =0,D L =1,D U /=1时, RCO 与MIN MAX /的波形图需要说明的是:当CTEN=DL=1时,电路保持原来的状态。
2测试74LS192和74LS193的逻辑功能,并用数码管显示,验证是否与表2-9—3及2—9—5一致。
画出测试电路图。
实验原理:双时钟74LS192同步十进制可逆计数器的功能表如下表所示,74LS192是十进制计数器。
表2—9—3双时钟74LS192同步十进制可逆计数器的功能表输入输出工作状态U CP UPDCPDOWNCLRDLDCBAABCDQQQQUTCDTC**H H ****0000 H H 异步清零** L L 1001 1001 H H 异步置数H ↑L H ****1001→0001→0000HHHL减法计数↑H L H **** 0000→1000→1001HLHH加法计数双时钟74LS193二进制同步加/减法计数器的功能表如下表所示,74LS193是一个十六进制的计数器。
加减计数器及其应用实验注意事项
加减计数器及其应用实验注意事项加减计数器是采用加减信号直接传递的一种定量测量仪器。
它的基本原理是:当输入信号为两位元且与输出信号对应的频率相同时以两位元为单位进行加减。
在实际使用中通常采用分步法测定输出的结果。
根据分度值,即可分别得到两个变量的结果值。
在实际工作中注意:①使用计数器前需注意其测量值与输出值的关系(实际值与输出值之间误差);②在称量或计算时所用的电极必须可靠(可选用铜电极或镍铬铜),要防止电极损伤或电极材料有熔渣等情况发生;③操作过程中禁止使用其它电器设备或电源等会对仪器造成损坏甚至烧毁事故;或用来代替仪器使用,如果使用不当,将严重影响实验效果;所以为了保证使用目的必须事先进行正确判断和调试确定正确后方可使用。
1、仪表性能指标精度=(1-被测介质的最大流速)/(1-工作介质的最大流速);防干扰:抗干扰能力=有效抗干扰能力×2.分度数:每个被测介质经过分度数运算后取整分度得到两个分度数之和除以两个不同数值。
2、测量原理通过传感器传递来的测量信号的频率,一般与实验室设计规定的标准频率范围保持一致。
如:交流电压信号的频率在50 Hz~10 Hz,此时输出功率I的值一般为5 mW~10 mW,当输入信号频率为200 Hz时,其输出功率为0 mW~0 mW。
则可分别得到该频率范围内被测量件输出的输入功率在10 mW~10 mW范围内的输出功率值(单位:伏/瓦)。
3、测量精度测量精度是指单位体积内对测量结果的实际准确性。
它是用两个不同时钟频率对应的读数对输出值的误差进行换算得到的。
由于各测量精度不同在设计和操作中都要注意这一点,所以在测量精度上应注意以下几点:(1)所用测量单元最好具有相应的精度标准或可校验性标准;(2)所用测量单元及测量方法必须经过试验验证并获得计量部门准许后方可进行测量;(3)对测量精度有要求、已做过测量实验、测量仪器未损坏的单元可采用标准制(可自行设计或选择)。
微机原理与接口技术课程设计报告-加减计数器-完整版
目录1.课程设计题目 (1)2.课程设计任务及要求 (1)3.总体方案与设计说明 (1)4.硬件电路设计及描述 (3)5.软件设计流程及描述 (6)6.源程序代码 (8)7.系统调试 (12)8.结论与说明 (13)9.课程设计体会 (13)10.参考文献 (13)一.课程设计题目加减计数器设计二.课程设计任务及要求通过键盘输入0到9之间的数字,可以在LED灯上显示出来;通过键盘进行简单的9之内的加减运算;运算过程和结果在LED灯上显示出来。
三.总体方案与设计说明3.1 通过小键盘做加减运算。
七段数码管显示器作输入数据和结果数据的显示。
3.2 数字用小键盘0~9,R,P,M,G作功能键R开始运算(包括撤销运算),显示‘0'p+m-g=E退出返回dos3.3 运算顺序:a.输入一原始数据显示器跟随显示b.按+或-显示器内容不变c.再输入一数据,显示器跟随显示。
d.按=显示器显示结果数据,当超出能显示的最大值,显示F(溢出)e.按R重新开始运算f.按E,结束退出设计思路:首先利用程序不断扫描键盘是不是有输入,如果没有就一直扫描,如果有就停止扫描,完成输入,利用汇编的程序核对输入键的数值,通过调用子程序实现2位十进制数以内的及减法运算。
运算完成后将运算的结果储存并显示到LED显示器上。
四.硬件电路设计及描述(含所需器件、硬件原理图)4.1硬件电路键盘输入及LED数码管通过8255A接口与系统总线连接,键盘的16个按键组成8*2矩阵,其中8根矩阵线作为8255A的输出线与PB7~PB0连接,2根矩阵线作为8255A的输入线与PC7、PC6连接。
键盘采用逐次扫描原理,16个按键中0~9座位数字健,+、-、=作为加、减和等号功能键,C为清零键。
4.2键盘输入模块键盘是常用信息输入元件,其实键盘也是由一个个按钮组成,如果是独立按钮的话必须要需要一个I/O口对它进行检测,而键盘往往这需要键盘按钮数一半的I/O口数对它进行检测,也许对一个比较简单的系统I/O口数一般不是问题,但对于一个大型、复杂的系统来说I/O资源就显得非常珍贵了,尽量减少I/O使用是非常利于降低成本,另外一方面键盘比用独立按键要美观。
计算机组成原理加减器实验报告
网工二班 陈衍席 1205110125实验四 加减器实验【实验环境】1. Windows 2000 或 Windows XP2. QuartusII9.1 sp2、DE2-115计算机组成原理教学实验系统一台,排线若干。
1.实验原理加减器是以二进制方式进行数字的加法或减法运算的器件,它能进行加法或减法运算,做减法运算时,是通过将减法运算转化为加法运算来实现的。
它可以用全加器做成。
(1)1位加法器的原理图设计两个二进制数字A ,B 和一个进位输入C 0相加,产生一个和输出S ,以及一个进位输出C 1,这种运算电路成为全加器(1位加法器)。
1位加法器有两个输出S 和C1,其中S 为加法器的和,C1为进位位输出。
下表中列出一位全加器进行加法运算的输入输出真值表: 加法器的真值表如下表所示:根据以上真值表,可以得到1位加法器的输入与输出逻辑关系。
0)(C B A S ⊕⊕= ; )()()())(()(01C A C B B A C B A B A C ∙+∙+∙=∙⊕+∙=1位加法器的原理图文件:1位加法器的封装图为:(2)8位加法器的原理图设计8位加法器用于对两个8位二进制数进行加法运算,并产生进位。
8位加法器真值表如下所示:8位加法器真值表表中 A[7..0]表示A 有8位输入端:A7-A0;B[7..0]表示B 有8位输入端:B7-B0;S[7..0]表示S 有8位输入端:S7-S0。
8位加法器的A 、B 都有8个输入端,加上进位CIN ,共有17个输入端。
它有9个输出端,即S7-S0和COUT ,因此8位加法器可由8个1位加法器构成。
建立8位加法器原理图文件:输 入 输 出 A[7..0] B[7..0] CIN S[7..0] COUT A B 进位输入 A+B+CIN 进位输出8位加法器的封装图为:(3)32位加法器的原理图设计32位加法器用于对两个32位二进制数进行加法运算,并产生进位。
实验十二计数器实验
STE-3A 数字电路实验—12实验十二同步计数器和异步计数器一.实验目的1. 进一步掌握异步和同步计数器的工作原理和逻辑功能。
2. 掌握中规模集成计数器逻辑功能的测试方法。
3. 熟悉用中规模集成计数器实现N进制计数器的方法。
二.电路原理简述计数器是具有计数功能的时序逻辑电路,是数字系统中的基本数字部件,它的功能是用触发器统计脉冲的个数。
它的应用十分广泛,不仅用来计数、还可以用于分频、定时。
按输入计数时钟脉冲方式的不同,可分为异步计数器和同步计数器;按计数值的加减不同,可分为加法计数器和减法计数器(也包括加减法功能同时具备的可逆计数器;按数制的不同,可分为二进制计数器,十进制计数器(即二-十进制计数器),N进制计数器。
三.实验设备名称数量型号1.适配器1只SD1282.2JK触发器2只SD1193.4与门1只SD1034.LED显示器1只SD1125.四位计数器1只SD1056.电源1只5V7.实验板1块5孔8.电子导线若干四.实验内容与步骤1. 异步二进制计数器由四只JK触发器组成四位异步二进制加法计数器(见图12-1)。
计数时钟脉冲不是同时加到所有触发器的cp输入端,应翻转的触发器并不同时翻转的计数器称为异步计数器。
JK 触发器作计数触发器使用时,只要将J、K接高电平1即可。
根据JK触发器的状态表,J=K =1时,每当一个计数时钟脉冲结束时,触发器就翻转一次,实现了计数触发。
低位触发器翻转两次即计两数就产生一个进位脉冲,因此,高位触发器的CP端应接低位的Q端。
该计数器的工作波形图如图12-2所示。
图12-1图12-2表12-1按图12-3连接线路,用手控方式按表4发计数时钟脉冲,观察A、B、C、D四个输出端的变化,并将实验结果记入表12-1中。
图12-32. 同步二进制计数器由四只JK触发器再加二只与门就可组成四位同步二进制加法计数器(见图12-4),计数时钟脉冲同时加到所有触发器的时钟输入端,使应翻转的触发器同时翻转的计数器称为同步计数器。
加减计数器课程设计
加减计数器课程设计一、课程目标知识目标:1. 学生能够理解加法和减法的基本概念,掌握加减计数器的基本操作方法。
2. 学生能够运用加减计数器进行100以内整数的加法和减法运算,并正确读取结果。
3. 学生能够理解加减运算中的进位和退位概念,并应用于实际计算中。
技能目标:1. 学生能够熟练操作加减计数器,提高计算速度和准确性。
2. 学生能够通过实际操作,培养解决问题的能力和逻辑思维能力。
3. 学生能够运用所学知识解决生活中的加减问题,将理论知识与实际应用相结合。
情感态度价值观目标:1. 学生通过参与课程活动,培养对数学的兴趣和好奇心,形成积极的学习态度。
2. 学生在小组合作中,学会互相尊重、倾听他人意见,培养团队协作精神。
3. 学生在解决实际问题的过程中,体验数学的实用性和乐趣,增强自信心和成就感。
课程性质:本课程为一年级数学课程,以加减运算为基础,结合加减计数器的使用,注重培养学生的动手操作能力和解决问题的能力。
学生特点:一年级学生好奇心强,动手能力强,但注意力集中时间较短,需要通过有趣的教学活动来激发学习兴趣。
教学要求:教师应注重启发式教学,引导学生通过实际操作发现问题、解决问题,关注学生的个体差异,鼓励学生积极参与,提高课堂互动性。
同时,教师需关注学生的学习进度,确保课程目标的达成。
二、教学内容本章节教学内容围绕以下几方面进行组织:1. 加法和减法概念介绍:通过讲解和实例,使学生理解加法和减法的基本含义,为后续学习打下基础。
2. 认识加减计数器:介绍加减计数器的结构和功能,指导学生如何进行操作,学会使用计数器进行加减运算。
3. 100以内整数的加减运算:依据教材章节,引导学生学习100以内整数的加法和减法运算,包括进位和退位的处理方法。
4. 实践应用:设计实际情境题目,让学生运用加减计数器解决生活中的问题,巩固所学知识。
具体教学安排如下:第一课时:加法和减法概念介绍,引导学生通过观察、讨论,理解加法和减法的意义。
基于CPLD/FPGA的出租车计费器
基于CPLD/FPGA的出租车计费器摘要:介绍了出租车计费器系统的组成及工作原理,简述了在EDA平台上用单片CPLD器件构成该数字系统的设计思想和实现过程。
论述了车型调整模块、计程模块、计费模块、译码动态扫描模块等的设计方法与技巧。
关键词:CPLD/PPGA 硬件描述语言出租车计费器MAX+PLUS软件数字系统随着EDA技术的高速发展,电子系统的设计技术和工具发生了深刻的变化,大规模可编程逻辑器件CPLD /FPGA的出现,给设计人员带来了诸多方便。
利用它进行产品开发,不仅成本低、周期短、可靠性高,而且具有完全的知识产权。
本文介绍了一个以Altera公司可编程逻辑芯片EPM7128SLC84-15为控制核心、附加一定外围电路组成的出租车计费器系统。
1 系统组成基于CPLD/FPGA的出租车计费器的组成如图1所示。
各部分主要功能如下:(1)A计数器对车轮传感器送来的脉冲信号进行计数(每转一圈送一个脉冲)。
不同车型的车轮直径可能不一样,通过“设置1”对车型做出选择,以实现对不同车轮直径的车进行调整。
(2)B计数器对百米脉冲进行累加,并输出实际公里数的BCD码给译码动态扫描模块。
每计满500送出一个脉冲给C计数器。
“设置2”实现起步公里数预制。
(3)C 计数器实现步长可变(即单价可调)的累加计数,每500米计费一次。
“设置3”用来完成超价加费、起步价预制等。
(4)译码/动态扫描将路程与费用的数值译码后用动态扫描的方式驱动数码管。
(5)数码管显示将公里数和计费金额均用四位LED数码管显示(三位整数,1位小数)。
2 功能模块设计出租车计费器由车型调整模块、计程模块、计费模块、译码动态及扫描等模块组成,整个系统采用模块化设计,首先用VHDL编写功能模块,然后用顶层原理图将各功能模块连接起来。
图22.4.2 动态扫描显示动态扫描是利用人眼的视觉暂留原理,只要扫描频率不小于24Hz,人眼就感觉不到显示器的闪烁。
应用d触发器构成加法减法计数器的实验原理
应用d触发器构成加法减法计数器的实验原理实验背景在数字电路中,触发器是一种重要的元件,可以用来存储和传递信号,在数字电路设计中起着重要的作用。
D触发器是一种基本的触发器,它具有输入端D、时钟端CLK和输出端Q,并且可以实现各种逻辑功能。
本实验旨在通过应用D触发器构成加法减法计数器,通过递增和递减的方式实现计数。
实验器材•D触发器x2•逻辑门(与门、非门)•开关x2•电源•示波器实验步骤1. 连接电路首先将两个D触发器、与门和非门按照实验电路图连接起来。
其中,一个D触发器用于计数器的低四位,另一个D触发器用于计数器的高四位。
与门用于连接两个D触发器,将其时钟信号进行与运算。
非门用于反相将低位的进位信号送到高位。
2. 给D触发器设置初始值将D触发器的输入D连接到开关上,通过设置开关的状态,给D触发器设置初始值。
初始值可以是二进制数,代表计数器开始的值。
3. 连接示波器将示波器连接到D触发器的输出端,以便观察计数器的输出情况。
4. 进行计数实验通过操作开关,改变D触发器的输入信号,观察示波器上计数器的输出结果。
可以通过递增的方式进行计数,也可以通过递减的方式进行计数。
当计数器的值达到最大值或最小值时,可进行复位操作,将计数器的值重新设置为初始值。
5. 分析实验结果根据示波器上计数器的输出情况,分析实验结果。
观察D触发器的工作原理,分析为何可以通过D触发器构成加法减法计数器,以及不同的输入信号对计数结果的影响。
实验结果与分析实验进行了多次,通过改变D触发器的输入信号和操作开关,观察了计数器的输出结果。
实验结果表明,D触发器可以通过递增和递减的方式实现计数。
当输入信号改变时,D触发器将其值存储在触发器中,并在时钟信号到来时,将存储的值传递到输出端。
通过与门的连接,可以将两个D触发器的时钟信号进行与运算,以保证二者同步进行。
这样,计数器的高四位和低四位可以同时进行计数,确保计数的准确性。
通过非门的连接,可以将低位的进位信号反相,送到高位触发器的输入端,实现进位的传递。
可变程计数器及其应用PPT学习教案
然后就可从相应的计数器的输出所存器中读取当 前计数值。读取计数值的方法由对8253进行初 始化编程时所写入的控制字中的RL1RL0位来确 定,当RL1RL0=01时,只读取计数器的低字节 ,RL1RL0=10时,只读取计数器的高字节, RL1RL0=11时,先读写计数器低字节,后读写 高字节。
MOV AL, 00110111B
;控制字;选择通道0, 先读/写低字节,后高字
节
MOV DX, 3F6H ;指向控制口
OUT DX, AL ;送控制字
MOV AL, 34H ;计数值低字节
MOV DX, 3FDH ;指向计数器0端口
0UT DX, AL
;先写入低字节
MOV AL, 12H ;计数值高字节
第29页/共50页
暂停计数可以用外部硬件切断计数脉冲信号,或 者使门控信号变为低电平,迫使8253停止计数 。这种方法的缺点是需要硬件电路配合。此外, 由于外部事件源被切断或正常的计数过程被禁止 ,干扰了实际的计数过程,可能出现漏计情况。 因此,这不是一种好的方法。但这种方法可以实 现多个计数器的同步比较。
(5)方式4——软件触发的选通信号发生器 一次定时,重写初值,启动新一轮的计数
(6)方式5——硬件触发的选通信号发生器 GATE边沿触发新一轮计数
第16页/共50页
方式0——计数结束产生中断
第17页/共50页
模式0 注: 计数结束产生中断
① 在GATE=1时,执行部件获得初值之后便开始计 数。在计数过程中,如果GATE=0,则暂停计数 ,但不影响OUT的状态;
③ 模式3具有自动重装初值功能,当计数器计数到0 的同时把初值寄存器的内容重新装入计数执行部 件,自动重新计数。该过程自动循环,直到 GATE=0或改变计数器的模式。
步长可变的加减计数器
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity buchang isgeneric(N: integer:=4);port(clk,f1,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16:in std_logic;--k :std_logic;--cq :out std_logic_vector(7 downto 0);q :out std_logic_vector(7 downto 0);ledag,ledag1 :out std_logic_vector(6 downto 0));end buchang;Architecture a of buchang issignal cnt: integer range 0 to n-1;signal k: integer range 0 to 15;signal clkout: std_logic;signal cq: std_logic_vector(7 downto 0);--q1<=q(3 downto 0);--q2<=q(7 downto 4);signal q1,q2: std_logic_vector(3 downto 0);Beginprocess(clk)beginif(clk'event and clk='1') thenif(cnt<n-1) thencnt <= cnt+1;elsecnt <= 0;end if;end if;end process;--------------------------------process(cnt)beginif(cnt<n/2) thenclkout <= '1';elseclkout <= '0';end if;end process;--------------------------------------------------------process(clkout)beginif(clkout'event and clkout='1') thenif f1='1' thencq<=cq+1+k;if cq="11111111"then cq<="00000000";end if;end if;end if;if(clkout'event and clkout='1') thenif f1='0' thencq<=cq-1-k;if cq="00000000"then cq<="11111111";end if;end if;end if ;-- else--cq<=cq-1-k;--if cq="00000000"then cq<="11111111";-- end if;--end if;end process;q<= cq;q1<=cq(7 downto 4);q2<=cq(3 downto 0);process(k)beginif a1='1'then k<= 0;elsif a2='1' then k<= 1;elsif a3='1' then k<= 2;elsif a4='1' then k<= 3;elsif a5='1' then k<= 4;elsif a6='1' then k<= 5;elsif a7='1' then k<= 6;elsif a8='1' then k<= 7;elsif a9='1' then k<= 8;elsif a10='1' then k<= 9;elsif a11='1' then k<= 10;elsif a12='1' then k<= 11;elsif a13='1' then k<= 12;elsif a14='1' then k<= 13;elsif a15='1' then k<= 14;elsif a16='1' then k<= 15;end if;end process;process(q1)begincase q1 iswhen "0000" => ledag <="0111111"; when "0001" => ledag <="0000110"; when "0010" => ledag <="1011011"; when "0011" => ledag <="1001111"; when "0100" => ledag <="1100110"; when "0101" => ledag <="1101101"; when "0110" => ledag <="1111101"; when "0111" => ledag <="0000111"; when "1000" => ledag <="1111111"; when "1001" => ledag <="1101111"; when "1010" => ledag <="1110111"; when "1011" => ledag <="1111100"; when "1100" => ledag <="0111001"; when "1101" => ledag <="1011110"; when "1110" => ledag <="1111001"; when "1111" => ledag <="1110001"; when others => null;end case;end process;process(q2)begincase q2 iswhen "0000" => ledag1 <="0111111"; when "0001" => ledag1 <="0000110"; when "0010" => ledag1 <="1011011"; when "0011" => ledag1 <="1001111"; when "0100" => ledag1 <="1100110"; when "0101" => ledag1 <="1101101";when "0110" => ledag1 <="1111101"; when "0111" => ledag1 <="0000111"; when "1000" => ledag1 <="1111111"; when "1001" => ledag1 <="1101111"; when "1010" => ledag1 <="1110111"; when "1011" => ledag1 <="1111100"; when "1100" => ledag1 <="0111001"; when "1101" => ledag1 <="1011110"; when "1110" => ledag1 <="1111001"; when "1111" => ledag1 <="1110001"; when others => null;end case;end process;end a;。
科安达计轴加减轴实验
科安达计轴加减轴实验科安达计轴加减轴实验是一种用于测量物体线性位移的实验方法。
它通过使用科安达计轴和加减轴的组合,可以准确地测量物体的位移,并得出相应的数据。
科安达计轴是一种用于测量物体位移的装置。
它由一个固定的支撑和一个可移动的游标组成。
当物体发生位移时,游标也会随之移动,通过读取游标的位置,可以得到物体的位移量。
加减轴是一种用于调整游标位置的装置。
通过旋转加减轴,可以使游标向左或向右移动,从而实现对物体位移的微调。
在进行科安达计轴加减轴实验时,首先需要确定一个参考点。
这个参考点可以是物体的起始位置,也可以是实验者自行确定的一个位置。
然后,将科安达计轴的游标放置在参考点上,并将加减轴调整到初始位置。
接下来,移动物体,使其产生位移。
在移动过程中,实验者需要保持手轻,以避免对物体产生额外的力量。
当物体停止运动后,读取科安达计轴游标的位置,并记录下来。
此时,游标的位置与参考点之间的距离即为物体的位移量。
如果需要对位移进行微调,可以通过旋转加减轴来实现。
当游标的位置偏离目标位置时,实验者可以通过旋转加减轴,使游标向左或向右移动,直到达到目标位置。
然后再次读取游标的位置,并记录下来。
通过多次实验,可以得到一系列不同位移量对应的游标位置。
根据这些数据,可以绘制出位移与游标位置之间的关系曲线。
这条曲线可以用于后续实验的数据分析和结果判断。
科安达计轴加减轴实验具有简单、直观、准确的特点。
它可以用于各种需要测量物体位移的实验中,例如弹簧的伸长量测量、机械装置的运动分析等。
通过科安达计轴加减轴实验,实验者可以快速、精确地获取物体的位移数据,并为后续的实验和研究工作提供可靠的依据。
科安达计轴加减轴实验是一种有效的测量物体位移的方法。
它通过使用科安达计轴和加减轴,可以准确地测量物体的位移,并得出相应的数据。
这种实验方法简单、直观、准确,适用于各种需要测量位移的实验。
通过科安达计轴加减轴实验,实验者可以获取可靠的位移数据,并为后续的实验和研究工作提供有力的支持。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验九步长可变的加减计数器
一、实验目的
1.掌握加减法计数器以及特殊功能计数器的的设计原理。
2用VHDL语言设计多功能计数器。
二、实验原理
计数分同步计数器和异步计数器,如果按工作原理和使用情况来分那就更多了。
1.加减工作原理
加减计数也称为可逆计数,就是根据计数控制信号的不同,在时钟脉冲的作用下,计数器可以进行加1计数操作或者减1计数操作。
2.变步长工作原理
如步长为3的加法计数器,计数状态变化为0、3、6、9、12……,步长值由输入端控制。
在加法计数时,当计数值达到或超过99时,在计数器下一个时钟脉冲过后,计数器清零;在减法计数时,当计数值达到或小于0时,在计数器下一个时钟脉冲过后,计数器也清零。
三、实验内容
1 设计的计数步长可在0~79之间变化
2 通过仿真或观察波形图验证设计的正确性。
3 编译下载验证结果。
四、设计提示
1.注意IF语句的嵌套。
2.注意加减计数状态的变化,计数值由9变0(加法)及由0变9(减法)各位的变化。
由于计数器为十进制计数器,还应考虑进位或借位后进行加6及减6校正。
五、实验报告要求
1.写出多模加减计数器的VHDL源程序。
2.叙述多模加减计数器的工作原理。
SF = ‘1’加标志,SF=’0’减标志
3.画出计数器工作波形图.
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CHANGABLE IS
PORT(CLK,RESET,SF:IN STD_LOGIC;
SIZE:IN STD_LOGIC_VECTOR(6 DOWNTO 0);
DO:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)
);
END ENTITY CHANGABLE;
ARCHITECTURE C_SIZE OF CHANGABLE IS
SIGNAL C_COUNT: STD_LOGIC_VECTOR(6 DOWNTO 0); BEGIN
PROCESS(CLK,RESET,SF,SIZE)
V ARIABLE TP:STD_LOGIC_VECTOR(6 DOWNTO 0); BEGIN
IF(RESET = '1')THEN
C_COUNT<=(OTHERS=>'0');
ELSIF(CLK'EVENT AND CLK = '1')THEN
IF(SF='1')THEN
TP:=C_COUNT+SIZE;
IF(TP>79)THEN
C_COUNT<=(OTHERS=>'0');
ELSE
C_COUNT<=C_COUNT+SIZE;
END IF;
ELSE
IF(TP < SIZE)THEN
C_COUNT<=(OTHERS=>'0');
ELSE
C_COUNT<=C_COUNT-SIZE;
END IF;
END IF;
END IF;
DO<=C_COUNT;
END PROCESS;
END ARCHITECTURE C_SIZE;。