当前位置:文档之家› vhdl流水灯课程设计报告

vhdl流水灯课程设计报告

院系:姓名:学号:课程设计名称:指导老师:时间:摘要VHDL的特点应用VHDL进行系统设计,有以下几方面的特点。

(一)功能强大VHDL具有功能强大的语言结构。

它可以用明确的代码描述复杂的控制逻辑设计。

并且具有多层次的设计描述功能,支持设计库和可重复使用的元件生成。

VHDL是一种设计、仿真和综合的标准硬件描述语言。

(二)可移植性VHDL语言是一个标准语言,其设计描述可以为不同的EDA工具支持。

它可以从一个仿真工具移植到另一个仿真工具,从一个综合工具移植到另一个综合工具,从一个工作平台移植到另一个工作平台。

此外,通过更换库再重新综合很容易移植为ASIC设计。

(三)独立性VHDL的硬件描述与具体的工艺技术和硬件结构无关。

设计者可以不懂硬件的结构,也不必管最终设计实现的目标器件是什么,而进行独立的设计。

程序设计的硬件目标器件有广阔的选择范围,可以是各系列的CPLD、FPGA及各种门阵列器件。

(四)可操作性由于VHDL具有类属描述语句和子程序调用等功能,对于已完成的设计,在不改变源程序的条件下,只需改变端口类属参量或函数,就能轻易地改变设计的规模和结构。

(五)灵活性VHDL最初是作为一种仿真标准格式出现的,有着丰富的仿真语句和库函数。

使其在任何大系统的设计中,随时可对设计进行仿真模拟。

所以,即使在远离门级的高层次(即使设计尚未完成时),设计者就能够对整个工程设计的结构和功能的可行性进行查验,并做出决策。

VHDL的设计结构VHDL描述数字电路系统设计的行为、功能、输入和输出。

它在语法上与现代编程语言相似,但包含了许多与硬件有特殊关系的结构。

VHDL将一个设计称为一个实体Entity(元件、电路或者系统),并且将它分成外部的可见部分(实体名、连接)和内部的隐藏部分(实体算法、实现)。

当定义了一个设计的实体之后,其他实体可以利用该实体,也可以开发一个实体库。

所以,内部和外部的概念对系统设计的VHDL是十分重要的。

外部的实体名或连接由实体声明Entity来描述。

而内部的实体算法或实现则由结构体Architecture来描述。

结构体可以包含相连的多个进程process或者组建component等其他并行结构。

需要说明的是,它们在硬件中都是并行运行的。

VHDL的设计步骤采用VHDL的系统设计,一般有以下6个步骤。

1)要求的功能模块划分;2)VHDL的设计描述(设计输入);3)代码仿真模拟(前仿真);4)计综合、优化和布局布线;5)布局布线后的仿真模拟(后仿真);6)设计的实现(下载到目标器件)。

[实验说明]该流水灯除了输入有:时钟端、使能端和清零端,输出为8个led指示灯。

清零端为低电平时回到最初始状态,输出为O1灯亮,为高电平时无作用;使能端低电平时流水灯停止,高电平时流水灯继续流动;时钟端为系统时钟输入,要求8个led指示灯每秒变化一次,向右流动,变化顺序依次为O1灯亮→O2灯亮→O3灯亮→ O4灯亮→ O5灯亮→ O6灯亮→ O7灯亮→返回O1。

电路逻辑功能实现后,可将该逻辑功能下载到CPLD中。

注意选择:清零端选1脚,使能端选拨码开关,时钟端选83脚、输出线8根(接发光二极管指示灯);测试时根据输入信[实验要求]1用VHDL语言实现流水灯2设计仿真文件,进行软件验证3通过下载线下载到实验板上进行验证4灯有两种模式每种模式有四种变化。

5第一种模式下灯的花色循环变化不能控制,第二种情况下花色可以控制并且变化间有声音。

流水灯设计1、分频模块的VHDL设计:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity light isPORT( CLK_IN: IN STD_LOGIC;--输入时钟信号CLK_OUT: OUT STD_LOGIC;--分频后的输出时钟信号);end light;architecture Behavioral of light issignalcont: STD_logic_vector(1 downto 0);beginprocess(CLK_IN)BEGINIF RISING_EDGE(CLK_IN) THENIF CONT="11" THENCONT<="00";CLK_OUT<='1';ELSE CONT<=CONT+'1';CLK_OUT='0';END IF;END IF;END PROCESS;end Behavioral;2、流水灯从左至右连续显示library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity light2 isPORT(CLK :IN STD_LOGIC;--分频后的时钟信号EN :IN STD_LOGIC;--使能控制信号M :OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--控制8个灯的输出信号 );end light2;architecture Behavioral of light2 isSIGNAL SEL : STD_LOGIC_VECTOR(2 DOWNTO 0);beginPROCESS(EN,CLK,SEL)BEGINIF RISING_EDGE(CLK) THENIF EN='1' THENIF SEL="111" THENSEL<="000";ELSESEL<=SEL+'1';END IF;END IF;END IF;CASE SEL ISWHEN "000" =>M<="10000000";WHEN "001" =>M<="01000000";WHEN "010" =>M<="00100000";WHEN "011" => M<="00010000";WHEN "100" => M<="00001000";WHEN "101" =>M<="00000100";WHEN "110" =>M<="00000010";WHEN "111" => M<="00000001";WHEN OTHERS =>NULL;END CASE;END PROCESS;end Behavioral;3、流水灯从右到左连续显示:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity light3 isPORT(CLK :IN STD_LOGIC;--分频后的时钟信号EN :IN STD_LOGIC;--使能控制信号N :OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--控制8个灯的输出信号 );end light3;architecture Behavioral of light3 isSIGNAL SEL : STD_LOGIC_VECTOR(2 DOWNTO 0);beginPROCESS(EN,CLK,SEL)BEGINIF RISING_EDGE(CLK) THENIF EN='1' THENIF SEL="111" THENSEL<="000";SEL<=SEL+'1';END IF;END IF;END IF;CASE SEL ISWHEN "000" =>N<="00000001";WHEN "001" =>N<="00000010";WHEN "010" =>N<="00000100";WHEN "011" =>N<="00001000";WHEN "100" =>N<="00010000";WHEN "101" =>N<="00100000";WHEN "110" =>N<="01000000";WHEN "111" =>N<="10000000";WHEN OTHERS =>NULL;END CASE;END PROCESS;end Behavioral;4、流水灯从两边向中间显示,然后由中间向两边显示:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity light4 isPORT(CLK :IN STD_LOGIC;--分频后的时钟信号EN :IN STD_LOGIC;--使能控制信号L :OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--控制8个灯的输出信号 );end light4;architecture Behavioral of light4 isSIGNAL SEL : STD_LOGIC_VECTOR(2 DOWNTO 0);beginPROCESS(EN,CLK,SEL)BEGINIF RISING_EDGE(CLK) THENIF EN='1' THENIF SEL="111" THENSEL<="000";ELSESEL<=SEL+'1';END IF;END IF;CASE SEL ISWHEN "000" =>L<="10000001";WHEN "001" =>L<="01000010";WHEN "010" =>L<="00100100";WHEN "011" =>L<="00011000";WHEN "100" =>L<="00100100";WHEN "101" =>L<="01000010";WHEN "110" =>L<="10000001";WHEN "111" =>L<="11111111";WHEN OTHERS =>NULL;END CASE;END PROCESS;end Behavioral;5、流水灯从左至右每次显示两个灯:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity light5 isPORT(CLK :IN STD_LOGIC;--分频后的时钟信号EN :IN STD_LOGIC;--使能控制信号Q :OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--控制8个灯的输出信号 );end light5;architecture Behavioral of light5 isSIGNAL SEL : STD_LOGIC_VECTOR(2 DOWNTO 0);beginPROCESS(EN,CLK,SEL)BEGINIF RISING_EDGE(CLK) THENIF EN='1' THENIF SEL="111" THENSEL<="000";ELSESEL<=SEL+'1';END IF;END IF;END IF;CASE SEL ISWHEN "000" => Q <="10100000";WHEN "001" => Q <="01010000";WHEN "010" => Q <="00101000";WHEN "011" => Q <="00010100";WHEN "100" => Q <="00001010";WHEN "101" => Q <="00000101";WHEN "110" => Q <="00001010";WHEN "111" => Q <="00001010";WHEN OTHERS =>NULL;END CASE;END PROCESS;end Behavioral;6、扫描模块程序libraryieee;use ieee.std_logic_1164.all;useieee.std_logic_unsigned.all; useieee.std_logic_arith.all;entity SELTIME isport(daout:outstd_logic_vector(7downto 0); sel:instd_logic_vector(1downto 0));end SELTIME;architecture fun of SELTIME is signalcount:std_logic_vector(1downto 0); beginsel<=count;process(sel)begincase count iswhen"00"=>daout<=M;when"01"=>daout<=N;when"10"=>daout<=L;when"11"=>daout<=Q;when others =>null;end case;end process;end fun;。

相关主题