logo资料库

哈工大 可编程逻辑器件实验报告.pdf

第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
资料共10页,剩余部分请下载后查看
哈尔滨工业大学实验报告 综合实验 顺序延时关断三盏灯开关 一、实验原理 设计一个开关装置,该开关装置在第一次按下按钮 K 时,三盏灯 x、y、z 同时点亮;当再次按下按钮 K 时 x 灯立即熄灭;y 灯 5s 后熄灭,在 y 灯熄灭 8s 后 z 灯熄灭。 根据题意该数字系统的原理图如下: x Y Z 状态机 K Td5 Td8 T5 T8 五 进 制 计 数 器 译 码 显 示 八进制计数器 译码显示 二、实验环境 本次试验采用 CycloneⅡ EP2c70f896c6 芯片,系统时钟为 50MHz。实验环境 为: 1、PC 机一台。 2、Altera 的 Quartus 软件一套。 3、主芯片为 Altera 公司的 DE2-70 的 EDA 开发板一套。 三、实验要求 1、使用 VHDL 语言输入底层模块,使用图形输入顶层模块。 2、用数码管显示倒计时秒数。 该实验分为四个模块子实验,分别为:分频器实验、有限状态机实验、计 数器实验和数码管译码显示实验。本次试验由个人独立完成:
哈尔滨工业大学实验报告 (1) 完成 50M 分频程序,将 50MHz 的时钟分频成 1Hz 时钟; (2) 完成有限状态机模块,实现 x,y,z 三灯的亮灭控制; (3) 完成 5 进制和 8 进制计数器及其显示译码器控制数码管; (4) 完成数码管 5 进制和 8 进制减法的显示; (5) 对四个模块进行整合,在 DE2-70 开发板上调试实现按键控制和数 码管显示的功能。 整合的顶层文件采用图形输入的方法,实验板的晶振为 50MHz,分频后 1s 时钟的占空比为 1:1。 四、实验步骤 1、 分频器模块 在该模块实验中,系统输入时钟为 50MHz,自主设计基于 VHDL 语言的程 序,实现 50M 分频,输出 1Hz 秒脉冲信号。 port( clk_in,reset : in std_logic; clk_1Hz : out std_logic ); 实验程序: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; ENTity fenpin is end fenpin; architecture behave of fenpin is signal cnt : integer range 0 to 49999999; -- 定义:临时计数值 begin cnt <= 0; elsif (clk_in'event and clk_in='1') then else process (clk_in,reset) begin if (reset = '0') then if cnt= 49999999 then -- 计数至 50M cnt<=0; cnt<=cnt+1; end if;
哈尔滨工业大学实验报告 if cnt>24999999 then --占空比为 50% clk_1Hz<='1'; else clk_1Hz<='0'; end if; end if; -- endif reset end process; end behave; 2、 计数器模块与数码管显示模块 在该模块实验中,基于 VHDL 硬件设计语言,系统输入为上一模块输出的 1Hz 秒脉冲,作为系统时钟控制进程运行,设计实现 5 进制和 8 进制计数器, 以及计数器的减法显示。 计数器由计数启动控制,计数结束后结束标志为高,作为下一模块的控制 信号。 计数器减法显示采用译码器控制数码管的方法,本实验中数码管采用共阳 极连接,阳极驱动,低电平导通,数码管示意图如下图所示(hex:7 downto 0):
哈尔滨工业大学实验报告 实验程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY counter is port( clk_1Hz : in std_logic; reset : in std_logic; t8 : in std_logic; --控制启动倒计时 td8 : out std_logic; --td8 为‘1’时,倒计时结束标志 Q : out std_logic_vector(2 downto 0); LED7 : out std_logic_vector(6 downto 0) ); end counter; architecture behave of counter is signal Q1: std_logic_vector(2 downto 0); begin --倒计时进程 process(clk_1Hz,t8,reset) begin if reset='0' then Q1<="111"; elsif clk_1Hz'event and clk_1Hz='1' and t8='1'then Q1<=Q1-1; end if; if Q1="000" then Q1<="111"; td8<='1'; ELSE td8<='0';
哈尔滨工业大学实验报告 end if; -- end if reset; Q<=Q1; end process; --数码管显示进程 process(Q1) begin case Q1(2 downto 0) is when "111" => LED7 <= "1111000";-- 7 when "110" => LED7 <= "1111101";-- 6 when "101" => LED7 <= "0010010";-- 5 when "100" => LED7 <= "0011001";-- 4 when "011" => LED7 <= "0110000";-- 3 when "010" => LED7 <= "0100100";-- 2 when "001" => LED7 <= "1111001";-- 1 when "000" => LED7 <= "1000000";-- 0 end case; end process; end behave;
哈尔滨工业大学实验报告 3、 状态机模块 在该实验模块中,基于 VHDL 有限实现 x,y,z 三灯的亮灭控制。设计一 个开关装置,该开关装置在第一次按下按钮 K 时,三盏灯 x、y、z 同时点亮; 当再次按下按钮 K 时 x 灯立即熄灭;y 灯 5s 后熄灭,在 y 灯熄灭 8s 后 z 灯熄 灭。 该有限状态机模块共有四种状态,分别为三盏灯全亮、两盏灯亮、一盏灯 亮和三盏灯都不亮四种状态。状态转换通过时钟以及按键下降沿,计数器结束 标志控制。 程序设计如下:
哈尔滨工业大学实验报告 port( reset : in std_logic; --复位 td5,td8 : in std_logic; --计时器输出状态 x,y,z : out std_logic; --三盏灯 t5,t8 : buffer std_logic --计时器启动控制 ); LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY moore is K : in std_logic; --控制按钮 end moore; architecture behave of moore is type state_type is (s1,s2,s3,s4); signal state: state_type; begin -- process1:State_transition: PROCESS (K,reset,td5,td8) begin if reset = '0' then state <= s1; end if; case state is when s1=> --x=y=z='0'; when s2=> --x=y=z='1'; when s3=> --x='0'; y=z='1'; if K='0' then t5<='0'; t8<='0'; --if K'event and K='0' then else state<=s2; state <= s3; end if; t5<='0'; t8<='0'; --if K'event and K='0' then state <= s2; end if; else state<=s1; if K='0' then
哈尔滨工业大学实验报告 t5<='1'; t8<='0'; --if td5'event and td5='1' then if td5='1' then state <= s4; else state<=s3; end if; t5<='0'; t8<='1'; --if td8'event and td8='1' then if td8='1' then state <= s1; else state<=s4; end if; end process; when s4=> --x=y='0'; z='1'; end case; --end if; -- end if reset; --output process: process(state) begin when s2=> x<='1';y<='1';z<='1'; end process; end behave; 模块 RTL 图及仿真波形图: when s3=> x<='0';y<='1';z<='1'; when s4=> x<='0';y<='0';z<='1'; end case; case state is when s1=> x<='0';y<='0';z<='0';
分享到:
收藏