作业六蜂鸣器
- 格式:docx
- 大小:19.48 KB
- 文档页数:4
实验六实验板蜂鸣器演奏音阶一、实验目的1、熟悉EDA开发平台的基本操作。
2、掌握EDA开发工具的VHDL设计方法。
3、使实验板蜂鸣器能够演奏音阶二、实验仪器PC机一台QuartusII软件三、实验内容1、蜂鸣器音阶程序:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY buzzer ISPORT (clk : IN std_logic;rst : IN std_logic;out_bit : OUT std_logic);END buzzer;ARCHITECTURE arch OF buzzer ISSIGNAL clk_div1 : std_logic_vector(3 DOWNTO 0);SIGNAL clk_div2 : std_logic_vector(12 DOWNTO 0);SIGNAL cnt : std_logic_vector(21 DOWNTO 0);SIGNAL state : std_logic_vector(2 DOWNTO 0);CONSTANT duo : std_logic_vector(12 DOWNTO 0) :="0111011101110"; CONSTANT lai : std_logic_vector(12 DOWNTO 0) := "0110101001101"; CONSTANT mi : std_logic_vector(12 DOWNTO 0) := "0101111011010"; CONSTANT fa : std_logic_vector(12 DOWNTO 0) := "0101100110001"; CONSTANT suo : std_logic_vector(12 DOWNTO 0) := "0100111110111"; CONSTANT la : std_logic_vector(12 DOWNTO 0) := "0100011100001"; CONSTANT xi : std_logic_vector(12 DOWNTO 0) := "0011111101000"; CONSTANT duo1 : std_logic_vector(12 DOWNTO 0) := "0011101110111";SIGNAL out_bit_tmp :std_logic;BEGINout_bit<=out_bit_tmp;PROCESS(clk,rst)BEGINIF (NOT rst = '1') THENclk_div1 <= "0000";ELSIF(clk'EVENT AND clk='1')THENIF (clk_div1 /= "1001") THENclk_div1 <= clk_div1 + "0001";ELSEclk_div1 <= "0000";END IF;END IF;END PROCESS;PROCESS(clk,rst)BEGINIF (NOT rst = '1') THENclk_div2 <= "0000000000000";state<= "000";cnt<= "0000000000000000000000";out_bit_tmp<= '0';ELSIF(clk'EVENT AND clk='1')THENIF (clk_div1 = "1001") THENCASE state ISWHEN "000" =>cnt<= cnt + "0000000000000000000001";IF (cnt = "1111111111111111111111") THEN state<= "001";END IF;IF (clk_div2 /= duo) THENclk_div2 <= clk_div2 + "0000000000001";ELSEclk_div2 <= "0000000000000";out_bit_tmp<= NOT out_bit_tmp;END IF;WHEN "001" =>cnt<= cnt + "0000000000000000000001";IF (cnt = "1111111111111111111111") THEN state<= "010";END IF;IF (clk_div2 /=lai) THENclk_div2 <= clk_div2 + "0000000000001";ELSEclk_div2 <= "0000000000000";out_bit_tmp<= NOT out_bit_tmp;WHEN "010" =>cnt<= cnt + "0000000000000000000001";IF (cnt = "1111111111111111111111") THEN state<= "011";END IF;IF (clk_div2 /=mi) THENclk_div2 <= clk_div2 + "0000000000001";ELSEclk_div2 <= "0000000000000";out_bit_tmp<= NOT out_bit_tmp;END IF;WHEN "011" =>cnt<= cnt + "0000000000000000000001";IF (cnt = "1111111111111111111111") THEN state<= "100";END IF;IF (clk_div2 /=fa) THENclk_div2 <= clk_div2 + "0000000000001";ELSEclk_div2 <= "0000000000000";out_bit_tmp<= NOT out_bit_tmp;END IF;WHEN "100" =>cnt<= cnt + "0000000000000000000001";IF (cnt = "1111111111111111111111") THEN state<= "101";END IF;IF (clk_div2 /=suo) THENclk_div2 <= clk_div2 + "0000000000001";ELSEclk_div2 <= "0000000000000";out_bit_tmp<= NOT out_bit_tmp;END IF;WHEN "101" =>cnt<= cnt + "0000000000000000000001";IF (cnt = "1111111111111111111111") THEN state<= "110";END IF;IF (clk_div2 /= la) THENclk_div2 <= clk_div2 + "0000000000001";ELSEclk_div2 <= "0000000000000";out_bit_tmp<= NOT out_bit_tmp;WHEN "110" =>cnt<= cnt + "0000000000000000000001";IF (cnt = "1111111111111111111111") THEN state<= "111";END IF;IF (clk_div2 /= xi) THENclk_div2 <= clk_div2 + "0000000000001";ELSEclk_div2 <= "0000000000000";out_bit_tmp<= NOT out_bit_tmp;END IF;WHEN "111" =>cnt<= cnt + "0000000000000000000001";IF (cnt = "1111111111111111111111") THEN state<= "000";END IF;IF (clk_div2 /= duo1) THENclk_div2 <= clk_div2 + "0000000000001";ELSEclk_div2 <= "0000000000000";out_bit_tmp<= NOT out_bit_tmp;END IF;WHEN OTHERS =>NULL;END CASE;END IF;END IF;END PROCESS;END arch;四:管脚锁定实验板蜂鸣器发出“1234567”的音阶。