logo资料库

VHDL实现0~999任意进制计数器报告.doc

第1页 / 共17页
第2页 / 共17页
第3页 / 共17页
第4页 / 共17页
第5页 / 共17页
第6页 / 共17页
第7页 / 共17页
第8页 / 共17页
资料共17页,剩余部分请下载后查看
1.1设计任务
1.2设计要求
2、设计内容
2.1 设计总体功能简介
2.2 计时模块功能
2.3 显示模块功能
2.4 逻辑模块功能
3、设计及实现方法
3.1 计时模块设计方法
3.2 显示模块设计方法待添加
4、调试及运行结果
4.1 计时模块调试及运行结果
4.2 显示模块调试及运行结果待添加
4.3 系统总体调试及运行结果
5、设计总结
5.1设计中的问题、原因分析及解决方法
5.2设计方案的优缺点
5.3心得体会
南京工程学院 工程基础实验与训练中心 本科课程设计说明书(论文) 题 目: 实现 0~999 任意进制计数器及数码管显示 自动化系统集成 学 号 专 业: 班 级: 学生姓名: 指导教师: 起迄日期: 2018/12/18-2019/1/1 设计地点: 工 程 中 心 C4 0 2
目录 1、设计任务及要求 ........................................ 2 1.1 设计任务 ............................................. 2 1.2 设计要求 ............................................. 2 2、设计内容 .............................................. 2 2.1 设计总体功能简介 ..................................... 2 2.2 计时模块功能 ......................................... 2 2.3 显示模块功能 ......................................... 2 2.4 逻辑模块功能 ......................................... 2 3、设计及实现方法 ........................................ 3 3.1 计时模块设计方法 ..................................... 4 3.2 显示模块设计方法 ..................................... 7 4、调试及运行结果 ........................................ 9 4.1 计时模块调试及运行结果 ............................... 9 4.2 显示模块调试及运行结果 .............................. 11 4.3 系统总体调试及运行结果 .............................. 13 5、设计总结 ............................................. 15 5.1 设计中的问题、原因分析及解决方法 .....................15 5.2 设计方案的优缺点 .................................... 15 5.3 心得体会 ............................................ 16 1
1、设计任务及要求 1.1 设计任务 利用 VHDL 语言,实现 0~999 任意进制 8421BCD 计数器,并将计数器输出的 8421BCD 进行共阳数码管显示。 1.2 设计要求  指标一:计数器具有同步置数功能、异步清零功能.  指标二:8421BCD 码 7 段译码部分可以参见 74LS48 功能  指标三:译码输出后驱动的数码管为共阳极数码管 2、设计内容 2.1 设计总体功能简介 设计具有同步置数、异步清零功能的计数器.用 8421BCD 码驱动 7 段译码器, 译码输出后驱动共阳极数码管进行计数。 2.2 计时模块功能 1、同步计数 2、异步清零 3、可实现任意进制计数 2.3 显示模块功能 1、三个共阳七段数码管显示 2.4 逻辑模块功能 1、判断计数器当前值是否为 0,若不为 0,进行清零为计数做准备。 2、在计数的过程中,判断是否有溢出,如若溢出要进行进位处理。 3、进位时发出提示。 2
3、设计及实现方法 CLK 为时钟脉冲信号,CO1,CO2,CO3 分别对应计数器 1,2,3 的进位信号,EN 为使能端(置 1 有效),CLR 为清零端(置 0 清零)Y1,Y2,Y3 分别对应计数器 1,2,3 的输出结果,A,B,C 为个位,十位,百位的数码管。 总体思路:首先提供一个时钟脉冲信号 CLK 给个位计数器 1,EN 给高电平, CLR 给高电平,CO1 再接入十位计数器 2 的 CLK 端,CO2 再接入百位计数器 3 的 CLK 端,起到级联作用。再将个、十、百位计数器的输出端与 CLR 相与,作用是 异步清零,实现任意进制的效果。流程图如图 1。 图 1 3
3.1 计时模块设计方法 采用三个十进制计数器级联,即可实现 0~999 任意进制计数,如图 2。 另外,为确保异步清零在手动输入和进位溢出都可效,增加了 4 输入与门程序, CLR 为 0 时异步清零,CLR=clr&溢出信号,如图 3。 图 2 4
--十进制计数器代码 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY cnt1 IS PORT( CLK,CLR,EN:IN BIT; CO1: OUT BIT; Y1: OUT INTEGER RANGE 0 TO 999); END cnt1; architecture RT of cnt1 is signal Q:INTEGER RANGE 0 TO 999; BEGIN PROCESS(CLK) BEGIN IF(CLR='0') THEN Q<=0; ELSIF(CLK'EVENT AND CLK='1')THEN IF(EN='1') THEN IF Q=9 THEN --单个数码管最高 所能达的数值 CO1<='1'; Q<=0; ELSE Q<=Q+1; CO1<='0'; END IF; END IF; END IF; Y1<=Q ; END PROCESS; END RT; 5
图 3 6
--四输入与门程序 library ieee; use ieee.std_logic_1164.all; entity and44 is port (a,b,c:in std_logic_vector(3 downto 0); --a:个位,b:十位,c:百位 d:in bit; --d:输入的 clr z:out bit); --最终输入的 clr,1 为计数,0 为清零 end and44; architecture one of and44 is begin process(a,b,c) begin IF a="0000" and b="0000" and c="0010" then 输入您所需的进制(a:个位,b:十位,c:百位) z<='0'; --当达到该进制时,异步清零 ELSE z<=d; 否则为 1,异步清零即输入的 clr end If; end process; end one; -- -- 3.2 显示模块设计方法待添加 将之前三个计数器的输出结果接入各对应的数码管输入端,如图 4。 7
分享到:
收藏