24进制计数器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

---------------结束

七、实验结果与分析:

相关文档
最新文档