24进制计数器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学生实验报告
实验课名称:VHDL硬件描述语言
实验项目名称:同步计数器
专业名称:电子科学与技术
班级:
学号:
学生姓名:
教师姓名:
_____2010___年__11__月_ 13___日
实验日期2010 年11 月13日实验室名称____成绩_____
同步计数器
一、实验目的与要求:
设计一个同步二十四进制计数器,理解触发器同步计数工作机制,掌握同步触发控制的VHDL描述方法以及异步清零的描述方法。
通过VHDL编程,实现一个同步二十四进制计数器,要求有1个异步清零端、1个时钟脉冲输入、驱动7段数码管显示的个位和十位信号端,具体接口说明如下图所示。
clk:计数时钟脉冲输入;
clr:异步清零信号,高电平有效,此时输出显示为“00”;
ten[6..0]:十位数的7段数码管显示输出。
one[6..0]:个位数的7段数码管显示输出;
首先在QuartusII上进行功能和时序仿真,之后通过器件
及其端口配置下载程序到SOPC开发平台中。
在硬件实现中
1. 用实验平台的按键实现清零(clr)。
2.用实验平台的数码管实现计数输出的显示。
3.用实平台的LED发光阵列的LED8显示进位信号,要求当数码管输出23时,进位输出有效。
4. 计数器的时钟信号采用实验平台的clock0时钟资源。
三、实验内容:
算法流程
计数器的逻辑功能用来记忆时钟脉冲的具体个数,本实验的二十四进制计数器逻辑计算并物理显示出时钟个数,当计数超过23时自动清零,循环计数,并显示出进位输出。算法的第一部分为计数部分,设计了一个二十四进制计数器,具体流程如下:
1.定义相关的端口,输入:时钟clk,清零clr,输出:个位one十位ten,以及进位输
出端co
2.结构体部分:
2.(1).首先判断清零信号是否有效。若为’1’清零,否则进入下一步。
2.(2).当脉冲上升沿到来时,首先判断out_temp1是否已经计数到23,如果计数到23,进位co=1,效果是LED8点亮;否则,清零out_temp1,同时开始计数,out_temp1<=out_temp1+1;
2(3).调用显示代码部分:首先对 out_temp1分别取整,求余,赋值给十位以及个位的数字ten_temp,o ne_temp,然后显示在相应的数码管上。
3.数码管显示部分:通过case语句的选择,十位个位数字分别在相应的数码管上显示。
四、实验条件:
1. WindowsXP操作系统
2. QuartusII EDA开发系统
3. 杭州康芯SOPC硬件开发平台
五、实验源代码:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
use work.display_shuma.all;
--------------------------------------------------
entity jishu is
port(clk,clr:in std_logic;
ten,one:out std_logic_vector(6 downto 0);
co:out std_logic);
end entity;
--------------------------------------------------
architecture one of jishu is
signal out_temp1:integer range 0 to 23:=0;
begin
count:
process(clk,clr)
begin
if clr='1' then
out_temp1<=0;
co<='0';
elsif clk'event and clk='1' then
if out_temp1=22 then
out_temp1<=23;
co<='1';
else
out_temp1<=out_temp1+1;
end if;
if out_temp1=23 then
out_temp1<=0;
co<='0';
else
out_temp1<=out_temp1+1;
end if;
end if;
end process count;
show:
process(out_temp1)
variable ten_temp,one_temp:integer range 0 to 23;
begin
ten_temp:=out_temp1 mod 10;
one_temp:=out_temp1 rem 10;
ten<=display(ten_temp);
one<=display(one_temp);
end process;
end architecture;
--------------------------------以下为显示部分代码
library ieee;
use ieee.std_logic_1164.all;
package body display_shuma is
function display(data:integer range 0 to 10)return std_logic_vector is variable out_temp:std_logic_vector(6 downto 0);
begin
case data is
when 0 =>out_temp:="0111111";
when 1 =>out_temp:="0000110";
when 2 =>out_temp:="1011011";
when 3 =>out_temp:="1001111";
when 4 =>out_temp:="1101111";
when 5 =>out_temp:="1101101";
when 6 =>out_temp:="1111101";
when 7 =>out_temp:="0001111";
when 8 =>out_temp:="1111111";
when 9 =>out_temp:="1101111";
when others => out_temp:="0111111";
end case;
return out_temp;
end function ;
end package body display_shuma;
---------------结束
七、实验结果与分析: