EDA实验报告
eda实验报告实验总结心得

eda实验报告实验总结心得1.引言1.1 概述本实验报告旨在总结分析EDA实验的过程和结果,并分享实验中的心得体会。
通过本次实验,我学习了EDA(Exploratory Data Analysis)的基本概念和方法,了解到其在数据分析和数据挖掘领域的重要性。
EDA是一种数据分析技术,通过对数据集进行探索性分析,揭示出数据之间的关系、趋势和规律,为后续的数据处理和模型建立提供有效的指导。
通过可视化和统计方法,EDA可以帮助我们深入理解数据集的特征,并发现其中的异常值、缺失值、重复值等问题,为数据清洗和预处理提供依据。
在本次实验中,我们使用了Python编程语言以及相关的数据分析库(如Pandas、Matplotlib等)来进行EDA实验。
实验过程包括了数据集的加载、数据的基本统计信息分析、数据可视化等环节。
通过对数据集进行统计描述和可视化展示,可以更直观地了解数据的分布情况、关联关系以及异常值的存在情况。
本次实验的目的是通过实际操作来掌握EDA技术的应用方法,并能够运用其提供的工具和技巧来解决实际问题。
通过对数据的探索和分析,我们可以更好地理解数据集本身的特点和规律,为后续的数据处理和建模工作打下基础。
总之,本篇实验报告将分享我在进行EDA实验过程中的所见所闻、所思所感,希望能够对读者对于EDA技术的理解和应用有所启发,并为数据分析和挖掘领域的学习提供一些借鉴思路。
1.2 文章结构本篇实验报告共分为引言、正文和结论三个部分。
引言部分主要对本次实验进行概述,说明文章的目的和意义。
在概述中,将简要介绍本次实验的背景以及实验所涉及的主要内容。
接下来,将介绍文章的结构,明确各个章节的内容,使读者可以更好地理解整篇文章的组织结构。
正文部分是本次实验报告的核心部分。
首先,将详细讲述实验的背景,包括实验的目的、相关理论知识和实验的重要性。
其次,将详细描述实验的具体过程,包括实验所使用的材料与方法、实验的步骤和操作,以及实验中的关键数据和实验结果。
EDA实验报告

EDA实验报告班级:姓名:目录实验一:七段数码显示译码器设计 (1)摘要 (1)实验原理 (1)实验方案及仿真 (1)引脚下载 (2)实验结果与分析 (3)附录 (3)实验二:序列检测器设计 (6)摘要 (6)实验原理 (6)实现方案及仿真 (6)引脚下载 (7)实验结果与分析 (8)实验三:数控分频器的设计 (11)摘要 (11)实验原理 (11)方案的实现与仿真 (11)引脚下载 (12)实验结果及总结 (12)附录 (12)实验四:正弦信号发生器 (14)摘要 (14)实验原理 (14)实现方案与仿真 (14)嵌入式逻辑分析及管脚下载 (16)实验结果与分析 (17)附录 (18)实验一:七段数码显示译码器设计摘要:七段译码器是一种简单的组合电路,利用QuartusII的VHDL语言十分方便的设计出七段数码显示译码器。
将其生成原理图,再与四位二进制计数器组合而成的一个用数码管显示的十六位计数器。
整个设计过程完整的学习了QuartusII的整个设计流程。
实验原理:七段数码是纯组合电路,通常的小规模专用IC,如74或4000系列的器件只能作十进制BCD码译码,然而数字系统中的数据处理和运算都是2进制的,所以输出表达都是16进制的,为了满足16进制数的译码显示,最方便的方法就是利用译码程序在FPGA\CPLD中来实现。
本实验作为7段译码器,输出信号LED7S的7位分别是g、f、e、d、c、b、a,高位在左,低位在右。
例如当LED7S 输出为“1101101”时,数码管的7个段g、f、e、d、c、b、a分别为1、1、0、1、1、1、0、1。
接有高电平段发亮,于是数码管显示“5”。
实验方案及仿真:I、七段数码显示管的设计实现利用VHDL描述语言进行FPGA上的编译实现七段数码显示译码器的设计。
运行QuartusII在G:\QuartusII\LED7S\下新建一个工程文件。
新建一个vhdl语言编译文件,编写七段数码显示管的程序见附录1-1。
EDA-实验报告

实验一五人表决器设计一、实验目的1 加深对电路理论概念的理解3 加深计算机辅助分析及设计的概念4 了解及初步掌握对电路进行计算机辅助分析的过程二、实验要求制作一个五人表决器,共五个输入信号,一个输出信号。
若输入信号高电平数目多于低电平数目,则输出为高,否则为低。
三、实验原理根据设计要求可知,输入信号共有2^5=32种可能,然而输出为高则有15种可能。
对于本设计,只需一个模块就能完成任务,并采用列写真值表是最简单易懂的方法。
四、计算机辅助设计设A,B,C,D,E引脚为输入引脚,F为输出引脚。
则原理图如1所示图1.1 五人表决器原理图实验程序清单如下:MODULE VOTEA,B,C,D,E PIN;F PIN ISTYPE 'COM';TRUTH_TABLE([A,B,C,D,E]->[F])[0,0,1,1,1]->[1];[0,1,1,1,0]->[1];[0,1,0,1,1]->[1];[0,1,1,0,1]->[1];[1,0,1,1,1]->[1];[1,1,0,1,1]->[1];[1,1,1,0,1]->[1];[1,1,1,1,0]->[1];[1,1,1,0,0]->[1];[1,1,0,1,0]->[1];[1,1,1,1,1]->[1];[1,1,0,0,1]->[1];[1,0,0,1,1]->[1];[1,0,1,0,1]->[1];[1,0,1,1,0]->[1];END五、实验测试与仿真根据题目要求,可设输入分别为:0,0,0,0,0;1,1,1,1,1;1,0,1,0,0;0,1,0,1,1。
其测试程序如下所示:MODULE fivevoteA,B,C,D,E,F PIN;X=.X.;TEST_VECTORS([A,B,C,D,E]->[F])[0,0,0,0,0]->[X];[1,1,1,1,1]->[X];[1,0,1,0,0]->[X];[0,1,0,1,1]->[X];END测试仿真结果如图1.2所示:图1.2 五人表决器设计仿真图可知,设计基本符合题目要求。
EDA实验 报告范文

实验一:五人表决器一、程序清单library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity vote5 isport(v_in:in std_logic_vector(4 downto 0);lock,clr:in std_logic;v_over:out std_logic_vector(2 downto 0);num_agr,num_opp:out std_logic_vector(3 downto 0);v_out:out std_logic_vector(4 downto 0);led_agr,led_opp:out std_logic);end entity vote5;architecture one of vote5 isbeginprocess(clr,v_in,lock)variable agr,opp: std_logic_vector(3 downto 0);beginif(clr='1')thenled_agr<='0';led_opp<='0';agr:="0000";opp:="0000";if agr="0000" thennum_agr<="0000";end if;if opp="0000"thennum_opp<="0000";end if;v_out<="00000";v_over<="000";elsif(lock'event and lock='1')thenv_out<=v_in;v_over<="111";agr:="0000";opp:="0000";for i in 0 to 4 loopif (v_in(i)<='0') then opp:=opp+1;end if;agr:=5-opp;end loop;num_agr<=agr;num_opp<=opp;if(agr>opp)thenled_agr<='1';led_opp<='0';elseled_agr<='0';led_opp<='1';end if;end if;end process;end architecture one;三.仿真1. 功能仿真波形2.时序仿真波形实验二:九九乘法表系统的设计一、程序清单library ieee;use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;entity multiply is --构造体描述4位乘法器port( clk:in std_logic;a,b:in std_logic_vector(3 downto 0);led_data:out std_logic_vector(7 downto 0);seg_sel:out std_logic_vector(2 downto 0) );end multiply;architecture rtl of multiply issignal led_data2,led_data1,led_data0: std_logic_vector(7 downto 0);--LED显示代码,寄存十位个位的数signal displayclk: std_logic;beginprocess(a,b)variable s: std_logic_vector(7 downto 0);--乘积variable bai,shiwei,gewei: std_logic_vector(3 downto 0);--乘积的十位个位begins(7 downto 0):=a(3 downto 0)*b(3 downto 0);if s>="11001000" then bai:="0010";s:=s-"11001000";elsif s>="01100100" then bai:="0001";s:=s-"01100100";else bai:="0000";end if;if s>="01011010" then shiwei:="1001";s:=s-"01011010";gewei:=s(3 downto 0);--90以上 elsif s>="01010000" then shiwei:="1000";s:=s-"01010000";gewei:=s(3 downto 0);--80以上 elsif s>="01000110" then shiwei:="0111";s:=s-"01000110";gewei:=s(3 downto 0); --70以上 elsif s>="00111100" then shiwei:="0110";s:=s-"00111100";gewei:=s(3 downto 0);--60以上 elsif s>="00110010" then shiwei:="0101";s:=s-"00110010";gewei:=s(3 downto 0);--50以上 elsif s>="00101000" then shiwei:="0100";s:=s-"00101000";gewei:=s(3 downto 0);--40以上 elsif s>="00011110" then shiwei:="0011";s:=s-"00011110";gewei:=s(3 downto 0);--30以上 elsif s>="00010100" then shiwei:="0010";s:=s-"00010100";gewei:=s(3 downto 0);--20以上 elsif s>="00001010" then shiwei:="0001";s:=s-"00001010";gewei:=s(3 downto 0);--10以上 else gewei:=s(3 downto 0);shiwei:="0000";end if;case bai iswhen "0001" => led_data2<="11111001";when "0010" => led_data2<="10100100";when others => led_data2<="11111111";end case;case shiwei iswhen "0000" => led_data1<="11000000";when "0001" => led_data1<="11111001";when "0010" => led_data1<="10100100";when "0011" => led_data1<="10110000";when "0100" => led_data1<="10011001";when "0101" => led_data1<="10010010";when "0110" => led_data1<="10000010";when "0111" => led_data1<="11111000";when "1000" => led_data1<="10000000";when "1001" => led_data1<="10010000";when others => led_data1<="11111111";end case;case gewei iswhen "0000" => led_data0<="11000000";when "0001" => led_data0<="11111001";when "0010" => led_data0<="10100100";when "0011" => led_data0<="10110000";when "0100" => led_data0<="10011001";when "0101" => led_data0<="10010010";when "0110" => led_data0<="10000010";when "0111" => led_data0<="11111000";when "1000" => led_data0<="10000000";when "1001" => led_data0<="10010000";when others => led_data0<="11111111";end case;end process;process(clk)variable cnt:integer range 0 to 20000; --1KHZ扫描显示时钟 beginif clk'event and clk='1' then cnt:=cnt+1;if cnt<10000 then displayclk<='1';elsif cnt<20000 then displayclk<='0';else cnt:=0;displayclk<='0';end if;end if;end process;process (displayclk) --显示两位variable cnt2: std_logic_vector(1 downto 0);beginif displayclk'event and displayclk='1' then cnt2:=cnt2+1;if cnt2="01" then seg_sel<="001";led_data<=led_data0;elsif cnt2="010" then seg_sel<="010";led_data<=led_data1;elsif cnt2="11" then cnt2:="00"; seg_sel<="100";led_data<=led_data2;end if;end if;end process;end rtl;二、仿真设计输入文件经maxplus软件开发系统编译、处理,由功能仿真器进行模拟,获得仿真波形如图6所示。
eda技术实验报告

eda技术实验报告EDA技术实验报告引言EDA(Electronic Design Automation)技术是电子设计自动化的缩写,是现代电子设计中不可或缺的一环。
它通过计算机辅助设计,提高了电路设计的效率和质量。
本文将介绍EDA技术的背景、应用和实验结果。
背景随着电子产品的不断发展,电路设计变得越来越复杂,传统的手工设计已经无法满足需求。
EDA技术的出现填补了这一空白。
它利用计算机的强大计算能力和算法,帮助设计师完成电路设计、仿真、布局和验证等工作。
应用1. 电路设计EDA技术的核心应用是电路设计。
通过EDA工具,设计师可以绘制电路图、选择器件、进行参数设置等。
EDA工具还可以自动进行电路优化,提高电路性能。
2. 仿真验证在电路设计完成后,需要对电路进行仿真验证。
EDA技术可以提供准确的仿真结果,帮助设计师分析电路的性能和稳定性。
仿真验证可以帮助设计师发现潜在的问题,提前解决。
3. 物理布局物理布局是将电路逻辑转化为实际的物理结构。
EDA技术可以自动进行物理布局,优化电路的面积和功耗。
物理布局的好坏直接影响到电路的性能和可靠性。
4. 电路验证在电路设计完成后,需要进行电路验证,确保电路的正确性和可靠性。
EDA技术可以自动进行电路验证,提供准确的验证结果。
电路验证可以帮助设计师发现设计缺陷,提高电路的可靠性。
实验设计在本次实验中,我们选择了一款EDA工具进行实验。
首先,我们设计了一个简单的数字电路,包括与门和或门。
然后,利用EDA工具进行电路仿真和优化。
最后,对电路进行物理布局和验证。
实验结果通过实验,我们得到了以下结果:1. 仿真结果显示,设计的数字电路在不同输入条件下均能正确输出结果,验证了电路的正确性。
2. 通过优化算法,我们成功提高了电路的性能,减少了功耗和面积。
3. 物理布局结果显示,电路的布局紧凑,满足了设计要求。
4. 电路验证结果显示,电路的功能和性能均符合设计要求,验证了电路的可靠性。
EDA实验报告(12份).pdf

实验一组合电路的设计1. 实验目的:熟悉MAX + plus II 的VHDL 文本设计流程全过程,学习简单组合电路的设计、多层次电路设计、仿真和硬件测试。
2. 实验内容:设计一个2选1多路选择器,并进行仿真测试,给出仿真波形。
3. 实验程序如下:library ieee;use ieee.std_logic_1164.all; entity mux21a isport(a,b,s:in std_logic;y:out std_logic); end entity mux21a; architecture one of mux21a is beginy<=a when s='0' else b ; end architecture one ;4. 仿真波形(如图1-1所示)图1-1 2选1多路选择器仿真波形5. 试验总结:从仿真波形可以看出此2选1多路选择器是当s为低电平时,y输出为b, 当s为高电平时,y输出为a(y<=a when s='0' else b ;),完成2路选择输出。
实验二时序电路的设计1. 实验目的:熟悉MAX + plus II VHDL文本设计过程,学习简单的时序电路设计、仿真和测试。
2. 实验验内容:设计一个锁存器,并进行仿真测试,给出仿真波形。
3. 实验程序如下:library ieee;use ieee.std_logic_1164.all;entity suocun7 isport(clk: in std_logic;en: in std_logic;D: in std_logic_vector(7 downto 0);B:out std_logic_vector(7 downto 0)); end suocun7;architecture one of suocun7 issignal K: std_logic_vector(7 downto 0); beginprocess(clk,en,D)beginif clk'event and clk='1' thenif en ='0'thenK<=D;end if;end if;end process;B<=K;end one;4.仿真波形(如图2-1所示)图2-1 8位锁存器仿真波形此程序完成的是一个8位锁存器,当时钟上升沿到来(clk'event and clk='1')、使能端为低电平(en ='0')时,输出为时钟上升沿时的前一个数,从仿真波形看,实现了此功能。
EDA实验报告完结版
EDA实验报告完结版一、实验目的本次 EDA 实验的主要目的是通过实际操作和设计,深入理解和掌握电子设计自动化(EDA)技术的基本原理和应用。
具体而言,包括熟悉 EDA 工具的使用方法,学会运用硬件描述语言(HDL)进行逻辑电路的设计与描述,以及通过综合、仿真和实现等流程,将设计转化为实际的硬件电路,并对其性能进行评估和优化。
二、实验环境本次实验所使用的 EDA 工具为_____,该工具提供了丰富的功能模块和强大的设计支持,包括原理图编辑、HDL 代码编写、综合、仿真和下载等。
实验所使用的硬件平台为_____开发板,其具备多种接口和资源,便于对设计的电路进行实际验证和测试。
三、实验内容1、基本逻辑门电路的设计与实现使用 HDL 语言(如 Verilog 或 VHDL)设计常见的基本逻辑门电路,如与门、或门、非门等。
通过编写代码,对逻辑门的输入输出关系进行描述,并进行综合和仿真,验证设计的正确性。
2、组合逻辑电路的设计与实现设计并实现较为复杂的组合逻辑电路,如加法器、减法器、编码器、译码器等。
运用 HDL 语言描述电路的功能,进行综合和仿真,确保电路在各种输入情况下的输出结果符合预期。
3、时序逻辑电路的设计与实现设计常见的时序逻辑电路,如计数器、寄存器、移位寄存器等。
在设计过程中,考虑时钟信号、同步复位和异步复位等因素,通过仿真验证时序逻辑的正确性,并对电路的性能进行分析。
4、有限状态机(FSM)的设计与实现设计一个有限状态机,实现特定的功能,如交通信号灯控制器、数字密码锁等。
明确状态转移条件和输出逻辑,通过编写 HDL 代码实现状态机,并进行综合和仿真,验证其功能的准确性。
5、综合与优化对设计的电路进行综合,生成门级网表,并通过优化工具对电路进行面积、速度等方面的优化,以满足特定的设计要求。
6、硬件实现与测试将综合后的设计下载到硬件开发板上,通过实际的输入输出信号,对电路的功能进行测试和验证。
观察电路在实际运行中的表现,对出现的问题进行分析和解决。
EDA实验报告
实验一:不同设计输入方式比较1、实验目的(1) 学习MAX+plus II软件的基本使用方法。
(2) 学习EDA实验开发系统的基本使用方法。
(3) 掌握VHDL程序的原理图和文本输入方式。
2、实验内容(1) 原理图输入(mux21.vhd) 方式的2选1多路选择器的设计(2) 文本编辑输入(mux41.vhd) 方式的4选1多路选择器的设计3、实验要求(1) MAX+plus II软件画出系统的原理框图,说明系统中各主要组成部分的功能。
(2) 编写VHDL源程序。
(3) 在MAX+plus II工具下编译、综合、适配、仿真、实验板上的硬件测试。
(4) 根据EDA实验开发装置编好用于硬件验证的管脚锁定文件。
(5) 记录系统仿真、硬件验证结果。
(6) 记录实验过程中出现的问题及解决办法。
4:实验步骤:程序编译过程:新建text文件→输入程序并保存其中保存名为实体名,并以vhd类型结尾→点击file下的project设定为current file点击maxplus 中的compiler按钮→显示无误后→点击新建按钮建立wave 文件→点击node 按钮添加管脚→保存并按text 的步骤检验wave 文件。
(1):用原理图法实现二选一多路选择器。
二选一选择器原理图其中B端为控制端,A,C为控制端(2):用文本输入法实现四选一多路选择器。
其文本程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MUX41 ISPORT(INPUT:IN STD_LOGIC_VECTOR(3 DOWNTO 0);A,B:IN STD_LOGIC;Y:OUT STD_LOGIC);END MUX41;ARCHITECTURE BE_MUX41 OF MUX41 ISSIGNAL SEL:STD_LOGIC_VECTOR(1 DOWNTO 0); BEGINSEL<=A&B;PROCESS(INPUT,SEL)BEGINIF(SEL="00")THENY<=INPUT(0);ELSIF(SEL="01")THENY<=INPUT(1);ELSIF(SEL="10")THENY<=INPUT(2);ELSEY<=INPUT(3);END IF;END PROCESS;END BE_MUX41;实验二:VHDL语言编程—组合逻辑电路设计1、实验目的(1) 学习VHDL三种描述风格;(2) 学习元件例化语句的使用方法;(3) 学习VHDL程序层次化设计方法2、实验内容用元件例化语句方法和原理图方法设计四位全加器。
EDA实验报告 (2)
实验一QUARTUS II软件安装、基本界面及设计入门一、实验目的:QUARTUSII是Altera公司提供的EDA工具,是当今业界最优秀的EDA设计工具之一。
提供了一种与结构无关的设计环境,使得电子设计人员能够方便地进行设计输入、快速处理和器件编程。
通过本次实验使学生熟悉QUARTUSII软件的安装,基本界面及基本操作,并练习使用QUARTUS的图形编辑器绘制电路图。
二、实验内容:1、安装QUARTUSII软件;2、熟悉QUARTUSII基本界面及操作;3通过一个4位加法器的设计实例来熟悉采用图形输入方式进行简单逻辑设计的步骤。
三、实验仪器:1、PC机一台;2、QUARTUSII软件;3、EDA实验箱。
四、实验原理:4位加法器是一种可实现两个4位二进制数的加法操作的器件。
输入两个4位二进制的被加数A和B,以及输入进位Ci,输出为一个4位二进制和数D和输出进位数Co。
半加操作就是求两个加数A、B的和,输出本位和数S及进位数C。
全加器有3位输入,分别是加数A、B和一个进位Ci。
将这3个数相加,得出本位和数(全加和数)D和进位数Co。
全加器由两个半加器和一个或门组成。
五、实验步骤:安装QUARTUSII软件;因为实验时我的机器了已经有QUARTUSII软件,所以我并没有进行安装软件的操作。
设计半加器:在进行半加器模块逻辑设计时,采用由上至下的设计方法,在进行设计输入时,需要由下至上分级输入,使用QuartusIIGraphic Editor进行设计输入的步骤如下。
(1)、打开QUARTUSII软件,选择File-new project wizard…新建一个设计实体名为has的项目文件;(2)、新建文件,在block.bdf窗口下添加元件符号,并连接。
如下图:半加器原理图(3)、将此文件另存为has.gdf的文件。
(4)、在主菜单中选择Processing→Start Compilation命令,系统对设计进行编译,同时打开Compilation Report Flow Summary窗体,Status视图显示编译进程。
eda仿真实验报告
eda仿真实验报告EDA仿真实验报告一、引言EDA(Electronic Design Automation)是电子设计自动化的缩写,是指利用计算机技术对电子设计进行辅助、自动化的过程。
在现代电子设计中,EDA仿真是不可或缺的一环,它可以帮助工程师验证电路设计的正确性、性能和可靠性。
本篇报告将介绍我在EDA仿真实验中的经验和收获。
二、实验背景本次实验的目标是对一个数字电路进行仿真,该电路是一个4位加法器,用于将两个4位二进制数相加。
通过仿真,我们可以验证电路设计的正确性,并观察其在不同输入情况下的输出结果。
三、实验步骤1. 电路设计:首先,我们根据给定的要求和电路原理图进行电路设计。
在设计过程中,我们需要考虑电路的逻辑关系、时序要求以及输入输出端口的定义等。
2. 仿真环境搭建:接下来,我们需要选择合适的EDA仿真工具,并搭建仿真环境。
在本次实验中,我选择了Xilinx ISE Design Suite作为仿真工具,并创建了一个仿真项目。
3. 仿真测试向量生成:为了对电路进行全面的测试,我们需要生成一组合适的仿真测试向量。
这些测试向量应该覆盖了电路的所有可能输入情况,以验证电路的正确性。
4. 仿真运行:在仿真环境搭建完成后,我们可以开始进行仿真运行了。
通过加载测试向量,并观察仿真结果,我们可以判断电路在不同输入情况下的输出是否符合预期。
5. 仿真结果分析:仿真运行结束后,我们需要对仿真结果进行分析。
通过对比仿真输出和预期结果,可以判断电路设计的正确性。
如果有不符合预期的情况,我们还可以通过仿真波形分析,找出问题所在。
四、实验结果与讨论在本次实验中,我成功完成了4位加法器的仿真。
通过对比仿真输出和预期结果,我发现电路设计的正确性得到了验证。
无论是正常情况下的加法运算,还是特殊情况下的进位和溢出,电路都能够正确地输出结果。
在实验过程中,我还发现了一些有趣的现象。
例如,在输入两个相同的4位二进制数时,电路的输出结果与输入完全一致。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
EDA实验报告姓名:XX 学号:50903XXXXXX 一.项目名称:自动音乐播放器。
二.项目功能:1.自动播放音乐;2.乐曲自选;3.数码管实时显示乐曲播放的音阶的简谱名称;4.可以暂停正在播放的乐曲;5.用点阵显示随音乐播放时的动画效果,美化播放器。
三.设计方案:如下图所示四.模块实现1.电源、乐曲选择和暂停模块:A.定义:将电源开关定义到一个拨码开头,乐曲选择和暂停按钮分别定义到四个微支开关。
B.乐曲选择响应部分:根据乐曲选择按钮的信号,将不同选择信号和相应频率送到乐曲存储模块,然后将乐曲存储模块反馈回来的音乐信号送给后面的乐曲播放和显示板块。
其详细代码另附。
C.控制:当电源开关未打开时,乐曲选择和暂停按钮都被屏蔽;当电源开关打开时,按下乐曲选择按钮,选择乐曲;当暂停按钮被按下时,停止正在播放的乐曲;在按下暂停按钮以后,选择原乐曲,从断点开始播放;否则从选择乐曲的开头播放。
D.选用元件:4个SR锁存器、3个反相器,4个与门和1个GND元件。
2.分频器counter11:一个正数的12位计数器;3.乐曲存储模块:由于三个相似的部分组成,每一部分存储一首音乐。
送入的频率对应相应乐曲的最小拍号值,如:最小为是1/4时,送入的频率为4Hz。
详细代码另附。
4.音乐播放模块:模块输入时钟频率为4MHz,设计一个2272进制的计数器,当其时钟输入为4MHz,其进位信号就是2272MHz。
用4MHz除以各个音名的频率就可以得到相应的频率信号。
由于频率较高,需要加入一个t触发器。
根据音乐上的十二平均律:每两个相邻半音的频率比为:,同时规定名A的频率为440HZ。
音名B到C之间、E到F之间为半音,其余为全间。
从而得各个音名的频率如下表所示。
当音乐播放模块收到乐曲选择响应模块送来的音乐信号,其将相应的频率送到Speaker,使其发5.效果显示模块:A.灯显示模块:根据乐曲选择响应送来的音乐信号,将各个音阶用4个小灯将其对应的十六进制数显示出来。
详细代码另附。
B.数码管显示模块:根据乐曲选择响应送来的音乐信号,将各个音阶对的简谱用3个数码管显示到来。
其中,A~G用第一个数码管显示a~b用第二个数码管显示,al用第三个数码管显示。
用一个选择扫描器,控制不断给3个数码管加高电压。
详细选择扫描代码和7段码驱动代码另附。
6.C.点阵显示模块:左边8X8点阵显示一个随音阶不同而跳动的阶梯,右边8X8点阵显示一个随音阶不同而变动的符号。
由点阵显示驱动和点阵扫描器两部分组成。
其详细代码另附。
五.顶层逻辑设计图:如下图所示:六.实验项目效果图:如下图所示:七.遇到的问题和解决的方法:1.问题一:直接写一个musicswitch文件,其定义三个接口与三首乐定义的按键相联接。
后来发现,只有按着那个按键乐曲才可以持续播放。
解决方法:使用SR锁存器,建立状态机,使其选中后一能保持高被选中的状态。
若要选择其他乐曲,只需用相应的选择trigger来将其清零即可。
2.问题二:存储各个音乐的文件用Table语句来实现。
发现,只会读第一音,且不循环。
解决方法:存储各个音乐的文件用IF...THEN...ELSE...语句来实现。
并在其中写上自循环的条件语句,以实现自动循环。
3.问题三:直接将多根关系为“或”线接到同一个入口,机器报错。
解决方法:加在一个有应引脚数的“或”门,然后再将相应的结果接到那个入口。
八.心得体会:说真的,自动对这个实验非常感兴趣。
说不出自己在最初时是多么的激动。
我选择做的实验是音阶发生器。
开始时,我想把这个音阶发生器做得功能很强大,功能很全面,就像我们平时在生活见到的那样。
可是,后来我发这并不那么容易。
就比如说:怎么写音乐存储文件呢?最初的想法是,写一个时序电路,让它自动按的数据顺序变动。
可是,在实现时发现,每一个曲谱有都可能有那15个音阶,要做一个在0~14之间按一定顺序变化的计数器,是一件很困难的事。
最可怕的还是,每一个曲谱的自己要得设计一个这样的电路!怎么办?自己不得不各种方法。
终于,想到用table语句来写这个曲谱文件!自己迅速写好,本以为马上就可以播放出美妙的乐子。
那知,table语句对同一个文件中counter[]组件只响应第一个音!自己的激情被狂降100度——这东西,不好玩!看来以前想实现的功能得裁剪!后来,将table语句改用IF语句实现,终于播放出音乐了!激动。
从此,自己多了一些冷静——对实验中问题,认真思考。
最后,终于这样自己认为还算满意的音乐播放器完成了!这次实验中,自己收获了不少:1.事上无难事,只怕有心人。
只要自己遇事能够冷静,认真思考,自己定能找到解决的办法。
2.要敢于探索与尝试。
如果自己对对自己暂时不能解决的事就畏首畏尾,不敢尝试,自己将很难将这些问题解决。
其实,它们,只是一张纸,挡住了自己的双眼,只要自己敢于尝试,就能将这张纸凿破——这时,眼前将会一片开阔。
3.从小学到现在,我们算学了不少知识,可是有时我们还以为学了很多很多,能力很强,没有事情能难住自己。
可是,一实验,就发自己动手能力不强;一动手,就发现自己问题频出,就发现自己的知识还太少。
以后自己,当多学一些知识,学好科学知识,同时,还要加强实验实践。
因为,实践才能出真知。
只有用实践,才能让自己学到很多课本学不到知识。
要知道,我们课本的知识也是来源来前人实践!4.学习的目的——应用!九.致谢:感谢助教在实验过程给自己的热情指导。
十.附录1.乐曲选择响应文件:SUBDESIGN MUsicSwitch(in1[3..0],in2[3..0],in3[3..0] : INPUT;k1,k2,k3,clock1,kT : INPUT;outClk1[1..0],outClk2[1..0],outClk3[1..0] : OUTPUT;out[3..0] : OUTPUT;)BEGINIF K1==B"1" & !kT THEN outClk1[0]=clock1;outClk1[1]=k1;out[]=in1[]; END IF;%选择乐曲1%IF K2==B"1" & !kT THEN outClk2[0]=clock1;outClk2[1]=k2;out[]=in2[]; END IF; %选择乐曲2%IF K3==B"1" & !kT THEN outClk3[0]=clock1;outClk3[1]=k3;out[]=in3[]; END IF; %选择乐曲3%IF K1==B"1" & kT THEN outClk1[0]=GND;outClk1[1]=k1; out[]=GND;END IF;%乐曲1暂停%IF K2==B"1" & kT THEN outClk2[0]=GND;outClk2[1]=k2; out[]=GND;END IF; %乐曲2暂停%IF K3==B"1" & kT THEN outClk3[0]=GND;outClk3[1]=k3; out[]=GND;END IF; %乐曲3暂停%END;2.乐谱——《沂蒙山小调》SUBDESIGN ymsanXiaodiao(clkANDclr[1..0] : INPUT;out[3..0] : OUTPUT;)VARIABLEcount[6..0]:DFF;BEGINDEFAULTScount[].CLRN=VCC;END DEFAULTS;IF !clkANDclr[1] THEN count[].CLRN=GND;ELSE count[].clk=clkANDclr[0];END IF;IF count[]==h"0" THEN out[]=B"0000"; END IF;IF count[]==h"1" THEN out[]=B"0000"; END IF;%本段为空白%IF count[]==h"2" THEN out[]=B"0010"; END IF;IF count[]==h"3" THEN out[]=B"0010"; END IF;IF count[]==h"4" THEN out[]=B"0101"; END IF;IF count[]==h"5" THEN out[]=B"0101"; END IF;IF count[]==h"6" THEN out[]=B"0011"; END IF;IF count[]==h"7" THEN out[]=B"0010"; END IF;%===1=====%IF count[]==h"8" THEN out[]=B"0011"; END IF;IF count[]==h"9" THEN out[]=B"0011"; END IF;IF count[]==h"a" THEN out[]=B"0101"; END IF;IF count[]==h"b" THEN out[]=B"0011"; END IF;IF count[]==h"c" THEN out[]=B"0010"; END IF;IF count[]==h"d" THEN out[]=B"0001"; END IF;%===2====%IF count[]==h"e" THEN out[]=B"0010"; END IF;IF count[]==h"f" THEN out[]=B"0010"; END IF;IF count[]==h"10" THEN out[]=B"0010"; END IF;IF count[]==h"11" THEN out[]=B"0010"; END IF;IF count[]==h"12" THEN out[]=B"0010"; END IF;IF count[]==h"13" THEN out[]=B"0010"; END IF;IF count[]==h"14" THEN out[]=B"0000"; END IF;%====3====%IF count[]==h"15" THEN out[]=B"0010"; END IF;IF count[]==h"16" THEN out[]=B"0010"; END IF;IF count[]==h"17" THEN out[]=B"0101"; END IF;IF count[]==h"18" THEN out[]=B"0101"; END IF;IF count[]==h"19" THEN out[]=B"0010"; END IF;IF count[]==h"1a" THEN out[]=B"0010"; END IF;%====4====%IF count[]==h"1b" THEN out[]=B"0011"; END IF;IF count[]==h"1c" THEN out[]=B"0101"; END IF;IF count[]==h"1d" THEN out[]=B"0011"; END IF;IF count[]==h"1e" THEN out[]=B"0010"; END IF;IF count[]==h"1f" THEN out[]=B"0001"; END IF;IF count[]==h"20" THEN out[]=B"1101"; END IF;%===5===%IF count[]==h"21" THEN out[]=B"0001"; END IF;IF count[]==h"22" THEN out[]=B"0001"; END IF;IF count[]==h"23" THEN out[]=B"0001"; END IF;IF count[]==h"24" THEN out[]=B"0001"; END IF;IF count[]==h"25" THEN out[]=B"0001"; END IF;IF count[]==h"26" THEN out[]=B"0001"; END IF;IF count[]==h"27" THEN out[]=B"0000"; END IF;%===6===%IF count[]==h"28" THEN out[]=B"0001"; END IF;IF count[]==h"29" THEN out[]=B"0001"; END IF;IF count[]==h"2a" THEN out[]=B"0011"; END IF;IF count[]==h"2b" THEN out[]=B"0011"; END IF;IF count[]==h"2c" THEN out[]=B"0010"; END IF;IF count[]==h"2d" THEN out[]=B"0011"; END IF;%==7===%IF count[]==h"2e" THEN out[]=B"1100"; END IF;IF count[]==h"2f" THEN out[]=B"1100"; END IF;IF count[]==h"30" THEN out[]=B"0010"; END IF;IF count[]==h"31" THEN out[]=B"1110"; END IF;IF count[]==h"32" THEN out[]=B"1101"; END IF;IF count[]==h"33" THEN out[]=B"1100"; END IF;%===8===%IF count[]==h"34" THEN out[]=B"1101"; END IF;IF count[]==h"35" THEN out[]=B"1101"; END IF;IF count[]==h"36" THEN out[]=B"1101"; END IF;IF count[]==h"37" THEN out[]=B"1101"; END IF;IF count[]==h"38" THEN out[]=B"1101"; END IF;IF count[]==h"39" THEN out[]=B"1101"; END IF;IF count[]==h"3a" THEN out[]=B"0000"; END IF;%===9===%IF count[]==h"3b" THEN out[]=B"0001"; END IF;IF count[]==h"3c" THEN out[]=B"0001"; END IF;IF count[]==h"3d" THEN out[]=B"0001"; END IF;IF count[]==h"3e" THEN out[]=B"0010"; END IF;IF count[]==h"3f" THEN out[]=B"1110"; END IF;IF count[]==h"40" THEN out[]=B"1101"; END IF;%===10===%IF count[]==h"41" THEN out[]=B"1100"; END IF;IF count[]==h"42" THEN out[]=B"1010"; END IF;IF count[]==h"43" THEN out[]=B"1100"; END IF;IF count[]==h"44" THEN out[]=B"1100"; END IF;IF count[]==h"45" THEN out[]=B"1100"; END IF;IF count[]==h"46" THEN out[]=B"1100"; END IF;%===11===%IF count[]==h"47" THEN out[]=B"1100"; END IF;IF count[]==h"48" THEN out[]=B"1100"; END IF;IF count[]==h"49" THEN out[]=B"1100"; END IF;IF count[]==h"4a" THEN out[]=B"1100"; END IF;IF count[]==h"4b" THEN out[]=B"1100"; END IF;IF count[]==h"4c" THEN out[]=B"1100"; END IF;%===12===%IF count[]==h"4f" THEN out[]=B"0000"; count[].d=h"0";ELSE count[].d=count[].q+1; END IF;%循环% END;3.乐曲——《世上只有妈妈好》SUBDESIGN SHIshangZYMMH(clkANDclr[1..0] : INPUT;out[3..0] : OUTPUT;)VARIABLEcount[6..0]:DFF;BEGINDEFAULTScount[].CLRN=VCC;END DEFAULTS;IF !clkANDclr[1] THEN count[].CLRN=GND;ELSE count[].clk=clkANDclr[0];END IF;IF count[]==h"0" THEN out[]=h"0"; END IF;IF count[]==h"1" THEN out[]=h"0"; END IF;IF count[]==h"2" THEN out[]=h"6"; END IF;IF count[]==h"3" THEN out[]=h"6"; END IF;IF count[]==h"4" THEN out[]=h"6"; END IF;IF count[]==h"5" THEN out[]=h"5"; END IF;IF count[]==h"6" THEN out[]=h"3"; END IF;IF count[]==h"7" THEN out[]=h"3"; END IF;IF count[]==h"8" THEN out[]=h"5"; END IF;IF count[]==h"9" THEN out[]=h"5"; END IF;IF count[]==h"a" THEN out[]=h"f"; END IF;IF count[]==h"b" THEN out[]=h"f"; END IF;IF count[]==h"c" THEN out[]=h"6"; END IF;IF count[]==h"d" THEN out[]=h"5"; END IF;IF count[]==h"e" THEN out[]=h"6"; END IF;IF count[]==h"f" THEN out[]=h"6"; END IF;IF count[]==h"10" THEN out[]=h"6"; END IF;IF count[]==h"11" THEN out[]=h"6"; END IF;%===1=====%IF count[]==h"12" THEN out[]=h"3"; END IF;IF count[]==h"13" THEN out[]=h"3"; END IF;IF count[]==h"14" THEN out[]=h"5"; END IF;IF count[]==h"15" THEN out[]=h"6"; END IF;IF count[]==h"16" THEN out[]=h"5"; END IF;IF count[]==h"17" THEN out[]=h"5"; END IF;IF count[]==h"18" THEN out[]=h"3"; END IF;IF count[]==h"19" THEN out[]=h"3"; END IF;IF count[]==h"1a" THEN out[]=h"1"; END IF;IF count[]==h"1b" THEN out[]=h"d"; END IF;IF count[]==h"1c" THEN out[]=h"6"; END IF;IF count[]==h"1d" THEN out[]=h"5"; END IF;IF count[]==h"1e" THEN out[]=h"3"; END IF;IF count[]==h"1f" THEN out[]=h"2"; END IF;IF count[]==h"20" THEN out[]=h"2"; END IF;IF count[]==h"21" THEN out[]=h"2"; END IF;IF count[]==h"22" THEN out[]=h"2"; END IF;%===2===%IF count[]==h"23" THEN out[]=h"0"; END IF;IF count[]==h"24" THEN out[]=h"2"; END IF;IF count[]==h"25" THEN out[]=h"2"; END IF;IF count[]==h"26" THEN out[]=h"2"; END IF;IF count[]==h"27" THEN out[]=h"3"; END IF;IF count[]==h"28" THEN out[]=h"5"; END IF;IF count[]==h"29" THEN out[]=h"5"; END IF;IF count[]==h"2a" THEN out[]=h"5"; END IF;IF count[]==h"2b" THEN out[]=h"6"; END IF;IF count[]==h"2c" THEN out[]=h"3"; END IF;IF count[]==h"2d" THEN out[]=h"3"; END IF;IF count[]==h"2e" THEN out[]=h"2"; END IF;IF count[]==h"2f" THEN out[]=h"2"; END IF;IF count[]==h"30" THEN out[]=h"1"; END IF;IF count[]==h"31" THEN out[]=h"1"; END IF;IF count[]==h"32" THEN out[]=h"1"; END IF;IF count[]==h"33" THEN out[]=h"1"; END IF;%===3===%IF count[]==h"34" THEN out[]=h"5"; END IF;IF count[]==h"34" THEN out[]=h"5"; END IF;IF count[]==h"35" THEN out[]=h"5"; END IF;IF count[]==h"36" THEN out[]=h"3"; END IF;IF count[]==h"37" THEN out[]=h"2"; END IF;IF count[]==h"39" THEN out[]=h"1"; END IF;IF count[]==h"3a" THEN out[]=h"d"; END IF;IF count[]==h"3b" THEN out[]=h"1"; END IF;IF count[]==h"3c" THEN out[]=h"c"; END IF;IF count[]==h"3d" THEN out[]=h"c"; END IF;IF count[]==h"3e" THEN out[]=h"c"; END IF;IF count[]==h"3f" THEN out[]=h"c"; END IF;IF count[]==h"40" THEN out[]=h"c"; END IF;%===4===%IF count[]==h"41" THEN out[]=h"0"; count[].d=h"0";ELSE count[].d=count[].q+1; END IF; %循环% END;4.乐曲——《送别》SUBDESIGN SHONGBie(clkANDclr[1..0] : INPUT;out[3..0] : OUTPUT;)VARIABLEcount[6..0]:DFF;BEGINDEFAULTScount[].CLRN=VCC;END DEFAULTS;IF !clkANDclr[1] THEN count[].CLRN=GND;ELSE count[].clk=clkANDclr[0];END IF;IF count[]==h"0" THEN out[]=h"0"; END IF;IF count[]==h"1" THEN out[]=h"0"; END IF;IF count[]==h"2" THEN out[]=h"5"; END IF;IF count[]==h"3" THEN out[]=h"5"; END IF;IF count[]==h"5" THEN out[]=h"5"; END IF;IF count[]==h"6" THEN out[]=h"f"; END IF;IF count[]==h"7" THEN out[]=h"f"; END IF;IF count[]==h"8" THEN out[]=h"f"; END IF;IF count[]==h"9" THEN out[]=h"f"; END IF;IF count[]==h"a" THEN out[]=h"6"; END IF;IF count[]==h"b" THEN out[]=h"6"; END IF;IF count[]==h"c" THEN out[]=h"f"; END IF;IF count[]==h"d" THEN out[]=h"f"; END IF;IF count[]==h"e" THEN out[]=h"5"; END IF;IF count[]==h"f" THEN out[]=h"5"; END IF;IF count[]==h"10" THEN out[]=h"5"; END IF;IF count[]==h"11" THEN out[]=h"5"; END IF;%===1=====%IF count[]==h"12" THEN out[]=h"0"; END IF;IF count[]==h"13" THEN out[]=h"5"; END IF;IF count[]==h"14" THEN out[]=h"5"; END IF;IF count[]==h"15" THEN out[]=h"1"; END IF;IF count[]==h"16" THEN out[]=h"2"; END IF;IF count[]==h"17" THEN out[]=h"3"; END IF;IF count[]==h"18" THEN out[]=h"3"; END IF;IF count[]==h"19" THEN out[]=h"2"; END IF;IF count[]==h"1a" THEN out[]=h"1"; END IF;IF count[]==h"1b" THEN out[]=h"2"; END IF;IF count[]==h"1c" THEN out[]=h"2"; END IF;IF count[]==h"1d" THEN out[]=h"2"; END IF;IF count[]==h"1e" THEN out[]=h"2"; END IF;IF count[]==h"1f" THEN out[]=h"2"; END IF;IF count[]==h"20" THEN out[]=h"2"; END IF;IF count[]==h"21" THEN out[]=h"0"; END IF;IF count[]==h"22" THEN out[]=h"0"; END IF;%===2===%IF count[]==h"23" THEN out[]=h"5"; END IF;IF count[]==h"24" THEN out[]=h"5"; END IF;IF count[]==h"25" THEN out[]=h"3"; END IF;IF count[]==h"26" THEN out[]=h"5"; END IF;IF count[]==h"27" THEN out[]=h"f"; END IF;IF count[]==h"28" THEN out[]=h"f"; END IF;IF count[]==h"2a" THEN out[]=h"7"; END IF;IF count[]==h"2b" THEN out[]=h"6"; END IF;IF count[]==h"2c" THEN out[]=h"6"; END IF;IF count[]==h"2d" THEN out[]=h"f"; END IF;IF count[]==h"2e" THEN out[]=h"f"; END IF;IF count[]==h"2f" THEN out[]=h"5"; END IF;IF count[]==h"30" THEN out[]=h"5"; END IF;IF count[]==h"31" THEN out[]=h"5"; END IF;IF count[]==h"32" THEN out[]=h"5"; END IF;IF count[]==h"33" THEN out[]=h"0"; END IF;%===3===%IF count[]==h"34" THEN out[]=h"5"; END IF;IF count[]==h"35" THEN out[]=h"5"; END IF;IF count[]==h"36" THEN out[]=h"2"; END IF;IF count[]==h"37" THEN out[]=h"3"; END IF;IF count[]==h"38" THEN out[]=h"4"; END IF;IF count[]==h"39" THEN out[]=h"4"; END IF;IF count[]==h"3a" THEN out[]=h"4"; END IF;IF count[]==h"3b" THEN out[]=h"e"; END IF;IF count[]==h"3c" THEN out[]=h"1"; END IF;IF count[]==h"3d" THEN out[]=h"1"; END IF;IF count[]==h"3e" THEN out[]=h"1"; END IF;IF count[]==h"3f" THEN out[]=h"1"; END IF;IF count[]==h"40" THEN out[]=h"0"; END IF;%===4===%IF count[]==h"41" THEN out[]=h"0"; count[].d=h"0";ELSE count[].d=count[].q+1; END IF; %循环% END;5.LED灯显示驱动文件:SUBDESIGN lamp4(address[3..0] : INPUT;a,b,c,d : OUTPUT;)BEGINTABLEaddress[] => a,b,c,d;h"0" => 1,1,1,1;h"1" => 1,1,1,0;h"2" => 1,1,0,1;h"3" => 1,1,0,0;h"4" => 1,0,1,1;h"5" => 1,0,1,0;h"6" => 1,0,0,1;h"7" => 1,0,0,0;h"8" => 0,1,1,1;h"9" => 0,1,1,0;h"A" => 0,1,0,1;h"B" => 0,1,0,0;h"C" => 0,0,1,1;h"D" => 0,0,1,0;h"E" => 0,0,0,1;h"F" => 0,0,0,0;END TABLE;END;6.数码管电压扫描文件:SUBDESIGN selectLOWHIGH(address[3..0] : INPUT;outlow,outhigh,outhihi : OUTPUT;)BEGINDEFAULTSoutlow=GND;outhigh=GND;END DEFAULTS;IF address[]==h"1" THEN outhigh=VCC; END IF;IF address[]==h"2" THEN outhigh=VCC; END IF;IF address[]==h"3" THEN outhigh=VCC; END IF;IF address[]==h"4" THEN outhigh=VCC; END IF;IF address[]==h"5" THEN outhigh=VCC; END IF;IF address[]==h"6" THEN outhigh=VCC; END IF;IF address[]==h"7" THEN outhigh=VCC; END IF;IF address[]==h"8" THEN outlow=VCC; END IF;IF address[]==h"9" THEN outlow=VCC; END IF;IF address[]==h"a" THEN outlow=VCC; END IF;IF address[]==h"b" THEN outlow=VCC; END IF;IF address[]==h"c" THEN outlow=VCC; END IF;IF address[]==h"d" THEN outlow=VCC; END IF;IF address[]==h"e" THEN outlow=VCC; END IF;IF address[]==h"f" THEN outhihi=VCC; END IF;END;7.数码管显示驱动文件:SUBDESIGN 7MUSICsegment(address[3..0] : INPUT;a,b,c,d,e,f,g : OUTPUT;)BEGINTABLEaddress[] => a,b,c,d,e,f,g;h"0" => 1,1,1,1,1,1,1;h"1" => 1,0,0,1,1,1,1;h"2" => 0,0,1,0,0,1,0;h"3" => 0,0,0,0,1,1,0;h"4" => 1,0,0,1,1,0,0;h"5" => 0,1,0,0,1,0,0;h"6" => 0,1,0,0,0,0,0;h"7" => 0,0,0,1,1,1,1;h"8" => 1,0,0,1,1,1,1;h"9" => 0,0,1,0,0,1,0;h"A" => 0,0,0,0,1,1,0;h"B" => 1,0,0,1,1,0,0;h"C" => 0,1,0,0,1,0,0;h"D" => 0,1,0,0,0,0,0;h"E" => 0,0,0,1,1,1,1;h"F" => 1,0,0,1,1,1,1;END TABLE;END;8.点阵扫描文件:SUBDESIGN select(sel : INPUT;data[16..1] : INPUT;dataout0[16..1] : OUTPUT;dataout1[16..1] : OUTPUT;)BEGINIF sel THEN dataout0[]=H"ffff";dataout1[]=data[];ELSE dataout0[]=data[];dataout1[]=H"ffff";END IF;END;9.点阵动态显示驱动文件:SUBDESIGN dianzhen(clk : INPUT;INPUTclk[3..0] : INPUT;row[8..1] : OUTPUT;colred[16..1] : OUTPUT;)VARIABLEcount[3..0]:DFF;BEGINcount[].clk=clk;IF INPUTclk[]==h"0" THEN %一个外部输入时,用一个循环显示一个图形%IF count[] == h"0" THEN row[] = h"1"; colred[]=h"ffff";END IF;IF count[] == h"1" THEN row[] = h"2"; colred[]=h"83fe";END IF;IF count[] == h"2" THEN row[] = h"4"; colred[]=h"bbfe";END IF;IF count[] == h"3" THEN row[] = h"8"; colred[]=h"bbfe";END IF;IF count[] == h"4" THEN row[] = h"10"; colred[]=h"bbfe";END IF;IF count[] == h"5" THEN row[] = h"20"; colred[]=h"99fe";END IF;IF count[] == h"6" THEN row[] = h"40"; colred[]=h"99fe";END IF;IF count[] == h"7" THEN row[] = h"80"; colred[]=h"ffff";count[].d=h"0";ELSE count[].d=count[].q+1; END IF;END IF;%一个外部输入时,用一个循环显示一个图形%IF INPUTclk[]==h"1" # INPUTclk[]==h"8" THENIF count[] == h"0" THEN row[] = h"1"; colred[]=h"ffff";END IF;IF count[] == h"1" THEN row[] = h"2"; colred[]=h"83fc";END IF;IF count[] == h"2" THEN row[] = h"4"; colred[]=h"bbfc";END IF;END IF;IF count[] == h"4" THEN row[] = h"10"; colred[]=h"99fc"; END IF;IF count[] == h"5" THEN row[] = h"20"; colred[]=h"99fc"; END IF;IF count[] == h"6" THEN row[] = h"40"; colred[]=h"fffc"; END IF;IF count[] == h"7" THEN row[] = h"80"; colred[]=h"ffff"; count[].d=h"0";ELSE count[].d=count[].q+1; END IF;END IF;%一个外部输入时,用一个循环显示一个图形%IF INPUTclk[]==h"2" # INPUTclk[]==h"9" THENIF count[] == h"0" THEN row[] = h"1"; colred[]=h"ffff"; END IF;IF count[] == h"1" THEN row[] = h"2"; colred[]=h"83fa"; END IF;IF count[] == h"2" THEN row[] = h"4"; colred[]=h"bbfa"; END IF;IF count[] == h"3" THEN row[] = h"8"; colred[]=h"bbfa"; END IF;IF count[] == h"4" THEN row[] = h"10"; colred[]=h"bbfa"; END IF;IF count[] == h"5" THEN row[] = h"20"; colred[]=h"99fa"; END IF;IF count[] == h"6" THEN row[] = h"40"; colred[]=h"99fa"; END IF;IF count[] == h"7" THEN row[] = h"80"; colred[]=h"ffff"; count[].d=h"0";ELSE count[].d=count[].q+1; END IF;END IF;%一个外部输入时,用一个循环显示一个图形%IF INPUTclk[]==h"3" # INPUTclk[]==h"a" THENIF count[] == h"0" THEN row[] = h"1"; colred[]=h"ffff"; END IF;IF count[] == h"1" THEN row[] = h"2"; colred[]=h"fff6"; END IF;IF count[] == h"2" THEN row[] = h"4"; colred[]=h"83f6"; END IF;IF count[] == h"3" THEN row[] = h"8"; colred[]=h"bbf6"; END IF;END IF;IF count[] == h"5" THEN row[] = h"20"; colred[]=h"99f6"; END IF;IF count[] == h"6" THEN row[] = h"40"; colred[]=h"fff6"; END IF;IF count[] == h"7" THEN row[] = h"80"; colred[]=h"ffff"; count[].d=h"0";ELSE count[].d=count[].q+1; END IF;END IF;%一个外部输入时,用一个循环显示一个图形%IF INPUTclk[]==h"4" # INPUTclk[]==h"b" THENIF count[] == h"0" THEN row[] = h"1"; colred[]=h"ffff"; END IF;IF count[] == h"1" THEN row[] = h"2"; colred[]=h"83ee"; END IF;IF count[] == h"2" THEN row[] = h"4"; colred[]=h"bbee"; END IF;IF count[] == h"3" THEN row[] = h"8"; colred[]=h"bbee"; END IF;IF count[] == h"4" THEN row[] = h"10"; colred[]=h"bbee"; END IF;IF count[] == h"5" THEN row[] = h"20"; colred[]=h"99ee"; END IF;IF count[] == h"6" THEN row[] = h"40"; colred[]=h"99ee"; END IF;IF count[] == h"7" THEN row[] = h"80"; colred[]=h"ffff"; count[].d=h"0";ELSE count[].d=count[].q+1; END IF;END IF;%一个外部输入时,用一个循环显示一个图形%IF INPUTclk[]==h"5" # INPUTclk[]==h"c" THENIF count[] == h"0" THEN row[] = h"1"; colred[]=h"ffff"; END IF;IF count[] == h"1" THEN row[] = h"2"; colred[]=h"83de"; END IF;IF count[] == h"2" THEN row[] = h"4"; colred[]=h"bbde"; END IF;IF count[] == h"3" THEN row[] = h"8"; colred[]=h"bbde"; END IF;IF count[] == h"4" THEN row[] = h"10"; colred[]=h"99de"; END IF;END IF;IF count[] == h"6" THEN row[] = h"40"; colred[]=h"ffde"; END IF;IF count[] == h"7" THEN row[] = h"80"; colred[]=h"ffff"; count[].d=h"0";ELSE count[].d=count[].q+1; END IF;END IF;%一个外部输入时,用一个循环显示一个图形%IF INPUTclk[]==h"6" # INPUTclk[]==h"d" THENIF count[] == h"0" THEN row[] = h"1"; colred[]=h"ffff"; END IF;IF count[] == h"1" THEN row[] = h"2"; colred[]=h"83be"; END IF;IF count[] == h"2" THEN row[] = h"4"; colred[]=h"bbbe"; END IF;IF count[] == h"3" THEN row[] = h"8"; colred[]=h"bbbe"; END IF;IF count[] == h"4" THEN row[] = h"10"; colred[]=h"bbbe"; END IF;IF count[] == h"5" THEN row[] = h"20"; colred[]=h"99be"; END IF;IF count[] == h"6" THEN row[] = h"40"; colred[]=h"99be"; END IF;IF count[] == h"7" THEN row[] = h"80"; colred[]=h"ffff"; count[].d=h"0";ELSE count[].d=count[].q+1; END IF;END IF;%一个外部输入时,用一个循环显示一个图形%IF INPUTclk[]==h"7" # INPUTclk[]==h"e" THENIF count[] == h"0" THEN row[] = h"1"; colred[]=h"ffff"; END IF;IF count[] == h"1" THEN row[] = h"2"; colred[]=h"837e"; END IF;IF count[] == h"2" THEN row[] = h"4"; colred[]= h"bb7e"; END IF;IF count[] == h"3" THEN row[] = h"8"; colred[]=h"bb7e"; END IF;IF count[] == h"4" THEN row[] = h"10"; colred[]=h"997e"; END IF;IF count[] == h"5" THEN row[] = h"20"; colred[]=h"997e"; END IF;。