本科实验报告
实验名称: 可编程逻辑器件实验报告
课程名称: 可编程逻辑器件 任课教师: 实验教师: 学生姓名: 学号/班级: 学 院: 专 业: 实验时间: 实验地点: □ 原理验证 实验类型: ■ 综合设计 □ 自主创新 组 号: 同组搭档: 成 绩:
9999计数器
一、实验目的
编程实现一个含清零功能9999计数器,并用7段数码管显示。
二、实验器材
EPM7128STC100-15,计算机
三、实验过程
(1)原理分析
a、分频
要实现一个0-9999计数器,并且肉眼可观,但是EPM7128STC100-15系统只有一个6M的时钟,频率太高,肉眼不可见,因此得用一个分频器将系统时钟降下来。本实验用了6个74LS190 BCD计数器级联,可实现1000000分频,从而将系统时钟变为6HZ。
b、计数
系统分频之后,接下来实现计数,仍然用74LS190 BCD计数器4个级联实现0~9999的计数功能,将每个计数器的管脚输出。
c、扫描
实验要求用4个7段数码管输出,计数输出是4个二进制数,因此本步骤的功能是将每个二进制数对应于一个7段数码管,再把单片机系统的时钟(6M Hz)作为扫描的时钟,从而实现4个7段数码管同步显示。
d、译码
计数输出的是0000~1001二进制形式的数,而7段数码管是a~b~c~d~e~f~g七段数码管,要实现这两个的连接,需要一个译码器,来将这四个数同步的显示在七段数码管上。
(2)程序及图形设计
a、分频和计数
图形设计如下:
画好上面的图以后编译后再将上面的设计为一整个芯片,如下图所示:
b、扫描
代码:
--******************************************** LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;
--******************************************** ENTITY Scaner is PORT(
rst : in std_logic; -- System RST clk : in std_logic; -- System Clock a,b,c,d : in std_logic_vector(3 downto 0); o_data : out std_logic_vector(3 downto 0);
o_comm : out std_logic_vector(3 downto 0) -- disp bit ctrl );
END Scaner;
--********************************************* architecture action of Scaner is
type s_type is (LED0,LED1,LED2,LED3);
signal s_LED : s_type; begin
process(clk,rst) begin if rst = '0' then o_comm <= \ o_data <= \ s_LED <= LED0; elsif clk'Event and clk = '1' then case s_LED is when it begin when LED0 => o_comm <= \ o_data <= d; s_LED <= LED1; when LED1 => o_comm <= \ o_data <= c; s_LED <= LED2; when LED2 => o_comm <= \ o_data <= b; s_LED <= LED3; when LED3 => o_comm <= \ o_data <= a; s_LED <= LED0; when others => s_LED <= LED0; o_comm <= \ end case; end if; end process;
--///////////////////////////////////////////// end action;
-- State Signal Declare
-- enter the state of LED
同理,画好上面的图以后编译后再将上面的设计为一整个芯片,如下图所示:
c、译码
源代码:
--******************************************** LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;
--******************************************** ENTITY encoder is PORT( i_data : in std_logic_vector(3 downto 0); -- System Data Bus(in) i_rst : in std_logic; -- System RST o_code : out std_logic_vector(7 downto 0) -- LED SEGCODE );
END encoder;
--********************************************* architecture behavior of encoder is begin
process (i_rst,i_data) begin if i_rst = '0' then --Reset State o_code <= \ else case i_data is when \ => o_code <= \ when \ => o_code <= \ when \ => o_code <= \ when \ => o_code <= \ when \ => o_code <= \ when \ => o_code <= \ when \ => o_code <= \ when \ => o_code <= \ when \ => o_code <= \ when \ => o_code <= \ when others => o_code <= \ end case; end if; end process; end behavior;
同理,画好上面的图以后编译后再将上面的设计为一整个芯片,如下图所示: