VHDL课程设计报告
- 格式:doc
- 大小:400.50 KB
- 文档页数:33
vhdl实验报告VHDL实验报告引言:VHDL(Very High Speed Integrated Circuit Hardware Description Language)是一种硬件描述语言,广泛应用于数字电路设计和仿真。
本篇实验报告将介绍我在VHDL实验中的学习和实践经验,包括实验目的、实验过程、实验结果以及对VHDL的理解和展望。
一、实验目的VHDL实验的主要目的是让我们掌握VHDL语言的基本语法和使用方法,能够利用VHDL描述数字电路,并通过仿真和综合工具进行验证和实现。
通过这些实验,我们可以深入了解数字电路的原理和设计方法,提高我们的逻辑设计能力和工程实践能力。
二、实验过程在实验过程中,我们首先学习了VHDL的基本语法,包括实体声明、端口声明、信号声明等。
然后,我们通过实例学习了VHDL的建模方法,包括组合逻辑电路的建模和时序逻辑电路的建模。
在组合逻辑电路的建模中,我们学习了使用逻辑运算符和条件语句描述电路的功能;在时序逻辑电路的建模中,我们学习了使用过程语句和时钟信号描述电路的状态转换。
在学习了VHDL的基础知识后,我们开始进行实验设计。
我们选择了一个简单的数字电路,如4位加法器,来进行实验验证。
首先,我们通过VHDL语言描述了加法器的功能和结构,包括输入端口、输出端口和中间信号。
然后,我们使用仿真工具进行了功能仿真,验证了加法器的正确性。
接着,我们使用综合工具将VHDL代码综合成门级电路,并进行了时序仿真和时序优化,验证了加法器的时序正确性和性能。
三、实验结果通过实验,我们成功地实现了4位加法器的功能,并验证了其正确性和性能。
在功能仿真中,我们输入了不同的测试数据,观察了输出结果,发现加法器能够正确地进行加法运算,并得到了正确的结果。
在时序仿真中,我们观察了电路的时序行为,包括输入信号的变化、输出信号的响应和中间信号的传播延迟等,发现加法器能够在时序上满足要求,并且具有较好的性能。
VHDL分频器课程设计一、课程目标知识目标:1. 学生能理解VHDL语言的基本概念,掌握VHDL语言的基本语法结构;2. 学生能掌握分频器的工作原理,了解分频器在数字系统中的应用;3. 学生能运用VHDL语言设计简单的分频器电路,并实现预期的分频功能。
技能目标:1. 学生能运用所学知识,独立完成VHDL分频器代码编写;2. 学生能通过仿真软件对所设计的分频器进行功能验证,并分析其性能;3. 学生能运用所学技能解决实际工程问题,具备一定的实践操作能力。
情感态度价值观目标:1. 学生对VHDL语言及数字系统设计产生兴趣,提高学习积极性;2. 学生通过课程学习,培养团队协作精神,提高沟通与交流能力;3. 学生在课程实践中,养成严谨、认真的学习态度,树立正确的工程观念。
课程性质:本课程为实践性较强的专业课,要求学生具备一定的数字电路基础和VHDL语言知识。
学生特点:学生处于高年级阶段,具有一定的专业基础知识和实践能力,但个体差异较大。
教学要求:结合学生特点,注重理论与实践相结合,充分调动学生的学习积极性,提高学生的实践操作能力。
在教学过程中,注重培养学生的团队协作精神和工程观念。
通过本课程的学习,使学生能够掌握VHDL分频器的设计方法,为后续相关课程的学习和实际工程应用打下坚实基础。
二、教学内容1. VHDL语言基础回顾:复习VHDL的基本语法、数据类型、信号与变量、行为描述与结构描述等基本概念,确保学生具备扎实的VHDL编程基础。
教材章节:第二章 VHDL语言基础内容列举:基本语法、数据类型、信号与变量、行为描述与结构描述2. 分频器原理及分类:介绍分频器的工作原理、分类及性能指标,使学生了解不同类型分频器的优缺点及适用场景。
教材章节:第五章 分频器设计与实现内容列举:分频器原理、分类、性能指标3. VHDL分频器设计方法:讲解基于VHDL语言的分频器设计方法,包括计数器法、移位寄存器法等,并分析各种方法的优缺点。
vhdl设计实验报告VHDL设计实验报告引言VHDL(Very High Speed Integrated Circuit Hardware Description Language)是一种硬件描述语言,广泛应用于数字电路设计和验证。
本实验旨在通过设计一个简单的电路来熟悉VHDL语言的基本语法和设计流程。
一、实验背景数字电路是现代电子系统的基础,而VHDL则是描述和设计数字电路的重要工具。
VHDL可以帮助工程师们以一种形式化的语言来描述电路的功能和结构,从而实现电路的模拟和验证。
二、实验目的本实验的目的是通过使用VHDL语言设计一个简单的电路,加深对VHDL语言的理解,并掌握基本的电路设计流程。
三、实验步骤1. 确定电路功能在设计电路之前,首先需要明确电路的功能。
本实验中,我们选择设计一个4位加法器电路。
2. 设计电路结构根据电路功能的要求,设计电路的结构。
在本实验中,我们需要设计一个4位加法器,因此需要使用4个输入端口和一个输出端口。
3. 编写VHDL代码使用VHDL语言编写电路的描述代码。
在代码中,需要定义输入和输出端口的类型和位宽,并实现电路的功能。
4. 进行仿真使用仿真工具对设计的电路进行仿真,以验证电路的功能是否符合预期。
通过输入不同的测试数据,观察输出是否正确。
5. 下载到FPGA开发板将设计好的电路代码下载到FPGA开发板上进行验证。
通过连接输入信号和观察输出信号,验证电路在实际硬件上的运行情况。
四、实验结果与分析经过仿真和实际验证,我们设计的4位加法器电路在功能上符合预期。
输入不同的数据进行加法运算时,输出结果都正确。
五、实验总结通过本次实验,我们深入了解了VHDL语言的基本语法和设计流程。
通过设计一个简单的电路,我们掌握了VHDL的应用方法,并通过仿真和实际验证,加深了对电路设计的理解。
六、实验心得本实验让我对VHDL语言有了更深入的认识。
通过实际操作,我更加熟悉了VHDL的编写和仿真流程。
VHDL与数字电路设计实验报告引言本实验旨在通过使用VHDL编程语言和数字电路设计技术,实现特定功能的电路设计。
本文档将对实验的步骤、设计原理和结果进行详细描述。
实验步骤1. 步骤一:熟悉VHDL编程语言在实验开始之前,团队成员对VHDL编程语言进行了研究和熟悉。
我们了解了VHDL的基本语法、数据类型和结构,并获得了对VHDL设计原理的初步理解。
2. 步骤二:设计功能电路在本实验中,我们选择了一个特定的功能电路进行设计。
我们首先进行了功能需求分析,并根据需求确定了电路的输入输出信号以及主要的逻辑运算。
然后,我们使用VHDL编程语言将电路的逻辑运算实现为代码,并进行了仿真和测试。
3. 步骤三:电路仿真和验证为了验证我们设计的电路功能的正确性,我们使用了VHDL仿真工具进行了电路的仿真和验证。
我们根据输入信号的不同组合,观察输出信号的变化,并与我们预期的结果进行比较。
通过这一步骤,我们确认了我们设计的电路能够按照预期工作。
4. 步骤四:电路实现和测试在确认电路的设计和仿真结果无误之后,我们进一步将电路实现到实际的数字电路平台上,并进行了硬件测试。
我们使用实际的输入信号来测试电路的性能和稳定性,并对输出信号进行观察和分析。
通过这一步骤,我们验证了电路在实际环境中的可行性。
设计原理我们设计的电路基于特定的功能需求,采用了经典的数字电路设计原理。
通过使用VHDL编程语言,我们将电路的逻辑运算实现为逻辑门和触发器的组合。
通过将输入信号连接到适当的逻辑门和触发器,我们实现了所需的功能。
结果与分析经过实验步骤的完成,我们成功地设计和实现了一个具有特定功能的数字电路。
在仿真测试和实际测试中,电路都表现出了良好的性能和稳定性。
根据结果的分析,我们验证了电路的设计原理和逻辑的正确性。
结论本实验通过使用VHDL编程语言和数字电路设计技术,成功地实现了一个具有特定功能的电路设计。
我们的实验结果表明,VHDL和数字电路设计技术在电路设计领域具有重要的应用价值。
华工vhdl课程设计一、教学目标本课程的教学目标是使学生掌握VHDL的基本知识和应用技能,能够使用VHDL进行简单的数字电路设计和仿真。
具体目标如下:1.知识目标:学生能够理解VHDL的基本概念、语法和规则,掌握数字电路的设计原理和方法。
2.技能目标:学生能够使用VHDL语言编写简单的数字电路模块,进行电路仿真和测试,并能够分析和解决设计过程中遇到的问题。
3.情感态度价值观目标:培养学生对电子工程领域的兴趣和热情,提高学生的问题解决能力和创新意识,培养学生的团队合作精神和沟通协调能力。
二、教学内容本课程的教学内容主要包括VHDL基本语法、数字电路设计方法和仿真技术。
具体安排如下:1.VHDL基本语法:介绍VHDL的基本元素、数据类型、信号声明、实体描述、架构描述等。
2.数字电路设计方法:介绍组合逻辑电路、时序逻辑电路的设计方法和步骤。
3.仿真技术:介绍使用VHDL进行电路仿真的方法和技巧,包括波形显示、信号分析等。
三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。
1.讲授法:通过教师的讲解和演示,向学生传授VHDL的基本知识和设计方法。
2.讨论法:学生进行小组讨论,鼓励学生提出问题、分享经验和互相学习。
3.案例分析法:通过分析具体的数字电路设计案例,让学生理解和掌握设计方法和技巧。
4.实验法:学生动手进行电路设计和仿真实验,培养学生的实际操作能力和问题解决能力。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将准备以下教学资源:1.教材:选用《华工VHDL课程设计》教材,作为学生学习的基本参考资料。
2.参考书:提供相关的数字电路设计和VHDL编程的参考书籍,供学生进一步学习和深入研究。
3.多媒体资料:制作课件、教学视频等多媒体资料,帮助学生更好地理解和掌握教学内容。
4.实验设备:提供必要的实验设备和工具,如电路仿真器、示波器等,让学生进行实际操作和验证。
VHDL课程设计报告一、题目要求(1)、EDA实验板组装调试参照提供的EDA实验板电路原理图、PCB图以及元器件清单进行电路板的组装,组装过程中要求能读懂电路原理图,了解各部分电路工作的原理。
电路板组装完成后,编写以下三个小程序进行电路板测试:1、流水灯程序编写一个流水灯程序,使实验板上DS2—DS13十二个LED依次循环点亮。
2、数码管动态扫描程序了解BCD—七段锁存译码器CD4511的工作原理及数码管动态扫描技术,编写一个程序,使EDA实验板上的8位数码管由“0000 0000”按一定的频率自加一直到“9999 9999”,然后归零不断循环以上过程。
3、矩阵键盘扫描程序了解矩阵键盘扫描原理,编写一程序,当按下实验板上十六个按键任一键,数码管上显示相应键值1—16。
以上测试程序先经软件仿真通过后下载到实验板上进行测试,观察实验结果,若与预期设计不符则应对软、硬件进行细心检查,排除故障。
完成以上电路板组装且调试通过后可进行第二部分红外遥控系统的设计。
(2)、红外遥控系统的设计红外遥控系统由发射编码和接收解码两个部分组成,本课程设计要求制作发射编码电路板(遥控器)以及编写程序在EDA实验板上实现接收解码,具体说明如下:1、发射编码部分发射编码部分要求使用指定的元器件在万用板上完成红外遥控器的制作,该部分电路原理图参照《PT2248数据手册》,制作前请详细阅读《红外遥控器制作说明》,制作时要求元器件在万用板上排列整齐,布局合理,焊接良好,各按键功能正常,均能发送编码。
2、接收解码部分接收解码用VHDL语言编写程序,在EDA实验板上实现解码,要求具有以下功能:(1)基本要求:(a)将一体化红外接收解调器的输出信号解码(12个单击键、6个连续键,单击键编号为7-18,连续键编码为1-6),在EDA实验板上用七段数码管显示出来;(b)当按下遥控器1—6号连续键时,在EDA实验板上用发光二极管点亮作为连续键按下的指示,要求遥控器上连续键接下时指示灯点亮,直到松开按键时才熄灭,用于区别单击键。
VHDL 实验报告******班级:电子0701学号:************实验一组合逻辑电路设计一实验目的:1. 熟悉mux+pluxII软件,可以进行新文件的编辑和文件的修改。
2. 掌握门电路VHDL语言程序设计方法。
3. 掌握选择器VHDL语言程序设计方法。
4. 掌握加法器VHDL语言程序设计方法。
5. 熟悉VHDL编程的基本方法。
二实验设备:1.计算机2.Max+PlusII软件三实验原理及内容:1 二输入与门(1)实验原理二输入与门是我们数字电路中的一个基础逻辑门电路,是最基本的逻辑门电路之一,也是最简单的逻辑门之一。
它能实现两个输入端的相与,一般有三个端口。
二输入与门的表达式是:Y=ab二输入与门的逻辑符号如图(1)所示,真值表如表(1)所示。
图(1)与门逻辑符号表(1)与门真值表(2)实验内容a.在mux+pluxII文本编辑环境下,打开新文本,编写两输入与门VHDL语言源程序,程序设计如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY and2 ISPORT(a,b: IN STD_LOGIC;Y: OUT STD_LOGIC);END and2;ARCHITECTURE behave OF and2 ISBEGINY <= a and b;END behave;b.对源程序进行编译,按照提示进行修改,直至编译通过。
c.对编译程序进行仿真,分析并记录仿真波形,其仿真波形图如图(2)所示。
图(2)二输入与门仿真图d.在自己的目录下保存相应的源文件、波形文件。
2 四选一选择器(1)实验原理四选一选择器如图(3)所示,真值表如表(2)所示。
图(3)mux4管脚图表(2)mux4真值表(2)实验内容a.在mux+plusII文本编辑环境下,打开新文件,编辑四选一VHDL源程序文件,其程序设计如下:LIBRARY IEEEUSE IEEE.STD_LOGIC_1164.ALL;ENTITY mux4 ISPORT(A: IN STD_LOGIC_VECTOR (1 DOWNTO 0);D0,D1,D2,D3:IN STD_LOGIC;G:IN STD_LOGIC;Y: OUT STD_LOGIC);END mux4;ARCHITECTURE dataflow OF mux4 ISBEGINPROCESS (A,D0,D1,D2,D3,G)BEGINIF (G ='0') THENIF (A="00")THEN Y <= D0;ELSIF(A="01")THEN Y <= D1;ELSIF(A="10")THEN Y <= D2;ELSE Y <= D3;END IF;ELSE Y <='0';END IF;END PROCESS;END dataflow;b.对源程序进行编译,按照提示进行修改,直到编译通过。
数字钟的设计一、系统功能概述(一)、系统实现的功能:1、具有“时”、“分”、“秒”的十进制数字显示(小时从00 ~ 23)。
2、具有手动校时、校分、校秒的功能。
3、有定时和闹钟功能,能够在设定的时间发出闹铃声。
4、能进行整点报时。
从59分50秒起,每隔2秒发一次低音“嘟”的信号,连续5次,最后一次为高音“嘀”的信号。
(二)、各项设计指标:1、显示部分采用的6个LED显示器,从高位至低位分别显示时、分、秒。
2、有一个设置调闹钟定时时间、正常时间的按钮,选择调的对象。
3、有三个按钮分别调时、分、秒的时间。
4、有一个按钮用作开启/关闭闹铃。
5、另外需要两个时钟信号来给系统提供脉冲信号,使时钟和闹钟正常工作,分别为1Hz、1kHz的脉冲。
二、系统组成以及系统各部分的设计1、系统结构描述//要求:系统(或顶层文件)结构描述,各个模块(或子程序)的功能描述;(一)系统的顶层文件:1、顶层文件图:(见下页)2、各模块的解释:(1)、7个输入量clk_1khz、clk_1hz、key_slt、key_alarm、sec_set、min_set、hour_set:其中clk_1khz为闹铃模块提供时钟,处理后能产生“嘟”、“嘀”和变化的闹铃声音;clk_1hz为计时模块提供时钟信号,每秒计数一次;key_slt选择设置对象:定时或正常时间;key_alarm能够开启和关闭闹铃;sec_set、min_set、hour_set用于设置时间或定时,与key_slt相关联。
各按键输出为脉冲信号。
(2)、T60_A_SEC模块:这个模块式将clk_1hz这个时钟信号进行60进制计数,并产生一个分钟的触发信号。
该模块能将当前计数值实时按BCD码的格式输出。
将该输出接到两位LED数码后能时时显示秒的状态。
通过alarm_clk可以选择设置对象为时间还是定时值。
在设置时间模式上,key上的一个输入脉冲可以将clk的输入信号加一。
VHDL数字电路课程实验报告实验一8分频器一、实验要求:分别用信号量和变量实现八分频器二、实验过程:1、代码:8分频器vhdlibrary ieee;use ieee.std_logic_1164.all;entity freq_divider isport(clk: in std_logic;out1, out2: buffer bit);end freq_divider;architecture example of freq_divider issignal count1: integer range 0 to 7;beginprocess(clk)variable count2: integer range 0 to 7;beginif(clk'event and clk='1') thencount1<=count1+1;count2:=count2+1;if(count1=3) thenout1<=not out1;count1<=0;end if;if(count2=4) thenout2<=not out2;count2:=0;end if;end if;end process;end example;八分频器tbLIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY fd_tb isEND fd_tb;architecture behavior of fd_tb iscomponent freq_dividerport(clk:IN STD_LOGIC;out1, out2: buffer bit);end component;signal clk:std_logic;signal out1,out2:bit;beginu1: freq_divider port map(clk,out1,out2);processbeginclk<='0';wait for 50 ns;loopclk<=not clk;wait for 25 ns;end loop;end process;end behavior;2、结果图:实验二实现例8.6一、实验要求:电路只有一个输入时钟信号,输出信号在适中的两个边沿都会发生变化二、实验内容:1、代码信号发生器vhdENTITY signal_gen ISPORT (clk: IN BIT;outp: OUT BIT);END signal_gen;ARCHITECTURE fsm OF signal_gen ISTYPE state IS (one, two, three);SIGNAL pr_state1, nx_state1: state;SIGNAL pr_state2, nx_state2: state;SIGNAL out1, out2: BIT;BEGINPROCESS(clk)BEGINIF (clk'EVENT AND clk = '1') THENpr_state1 <= nx_state1;END IF;END PROCESS;PROCESS (clk)BEGINIF (clk'EVENT AND clk = '0') THENpr_state2 <= nx_state2;END IF;END PROCESS;PROCESS (pr_state1)BEGINCASE pr_state1 ISWHEN one =>out1 <= '0';nx_state1 <= two;WHEN two =>out1 <= '1';nx_state1 <= three;WHEN three =>out1 <= '1';nx_state1 <= one;END CASE;END PROCESS;PROCESS (pr_state2)BEGINCASE pr_state2 ISWHEN one =>out2 <= '1';nx_state2 <= two;WHEN two =>out2 <= '0';nx_state2 <= three;WHEN three =>out2 <= '1';nx_state2 <= one;END CASE;END PROCESS;outp <= out1 AND out2;END fsm;信号发生器tbentity tb_fsm isend tb_fsm;architecture behavior of tb_fsm is component signal_gen isport( clk: in bit;outp: out bit);end component;signal clk,outp:bit;beginu1: signal_gen port map(clk,outp); processbeginclk<='0';wait for 20 ns;loopclk<=not clk;wait for 10 ns;end loop;end process;end behavior;2、结果图实验三常数比较器一、实验要求常数比较器,用于比较的变量位宽应大于等于常数二、实验内容1、代码常数比较器vhdLIBRARY ieee;USE ieee.std_logic_1164.all;entity compare isport(b: in integer range 0 to 15;x1,x2,x3: out std_logic);end compare;architecture compare of compare isconstant a: integer:=10;beginx1<='1' when a>b else '0';x2<='1' when a=b else '0';x3<='1' when a<b else '0';end compare;常数比较器tbLIBRARY ieee;USE ieee.std_logic_1164.all;entity tb_compare isend tb_compare;architecture behavior of tb_compare iscomponent compareport(b: in integer range 0 to 15;x1,x2,x3: out std_logic);end component;signal b: integer;signal x1,x2,x3: std_logic;beginu1: compare port map(b, x1,x2,x3);processbeginb<=5; wait for 10 ns;b<=8; wait for 10 ns;b<=10; wait for 10 ns;b<=13; wait for 10 ns; b<=10; wait for 10 ns; b<=3; wait for 10 ns; end process;end behavior;2、结果图实验四序列检测器一、实验要求序列检测’1001’弱检测到,输出‘1‘,否则输出’0‘二、实验内容1、状态图2、代码序列检测器vhdlibrary ieee;use ieee.std_logic_1164.all;entity string_detector isport(datain,clk: in bit;q: out bit);end string_detector;architecture sd of string_detector istype state is (zero, one, two, three, four);signal pr_state, nx_state: state;beginprocess(clk)beginif(clk'event and clk='1') thenpr_state<=nx_state;end if;end process;process(datain, pr_state)begincase pr_state iswhen zero=>q<='0';if(datain='1') then nx_state<=one;else nx_state<=zero;end if;when one=>q<='0';if(datain='0') then nx_state<=two;else nx_state<=zero;end if;when two=>q<='0';if(datain='0') then nx_state<=three;else nx_state<=zero;end if;when three=>q<='0';if(datain='1') then nx_state<=four;else nx_state<=zero;end if;when four=>q<='1';nx_state<=zero;end case;end process;end sd;序列检测器tb------------------------------------------------------------------ library ieee;use ieee.std_logic_1164.all;------------------------------------------------------------------ entity testBench isend testBench;------------------------------------------------------------------architecture test of testBench iscomponent string_detector isport(datain,clk: in bit;q: out bit);end component;signal datain,clk:bit;signal q:bit;beginSD: string_detector port map(datain,clk,q);processbeginfor i in 0 to 100 loopclk<='0';wait for 10 ns;clk<='1';wait for 10 ns;end loop;end process;processbegindin<='1';wait for 20ns;din<='0';wait for 20ns;din<='0';wait for 20ns;din<='0';wait for 20ns;din<='1';wait for 20ns;din<='0';wait for 20ns;din<='0';wait for 20ns;din<='1';wait for 20ns;din<='0';wait for 20ns;din<='1';wait for 20ns;din<='0';wait for 20ns;end process;end test;3、结果图。
课程设计课程名称:交通灯设计.一、课程设计内容1.学习ALTERA公司的FPGA/CPLD的结构、特点和性能。
2.学习集成开发软件MAX+plus II/Quartus II的使用及设计过程。
3.熟悉EDA工具设计数字电路设计方法,掌握VHDL硬件描述语言设计方法。
4.根据给定题目设计数字电路,来加深对可编程逻辑器件的理解和掌握。
二、课程设计应完成的工作1.在所选择器件内完成交通灯控制器的设计,要求设计完成后芯片具有交通灯控制器的全部功能、包括显示和操作接口。
2.交通灯控制器要求控制十字路口两道路的交通灯,两道路交替通行,每次通行时间可设定20——60秒之间,每个路口要求有前行、禁止、人行灯。
(根据实际设计进度考虑可以增加左右转向灯,等待和通行时间显示等)。
3.撰写设计说明书一份(不少于2000字),阐述系统的工作原理,软、硬件设计方法,重点阐述软件思路。
说明书应包括封面、任务书、目录、摘要、正文、参考文献(资料)等内容,以及硬件电路综合图和软件程序清单等材料。
注:设计说明书题目字体用小三,黑体,正文字体用五号字,宋体,小标题用四号及小四,宋体,并用A4纸打印。
三、课程设计进程安排四、设计资料及参考文献1.康华光主编,《电子技术基础-数字部分》,高等教育出版社,1998。
2.谭会生等主编,《EDA技术及应用》,西安电子科技大学出版社,2001 3.潘松等主编,《EDA技术实用教程》,科学出版社,20064.雷伏容主编,《VHDL电路设计》,清华大学出版社,2006 5.Charles H.Roth等著,《数字系统设计与VHDL》,电子工业出版社,2008五、成绩评定综合以下因素:(1) 说明书及设计图纸的质量(占50%)。
(2) 独立工作能力及设计过程的表现(占30%)。
(3) 回答问题的情况(占20%)。
说明书和图纸部分评分分值分布如下:1、任务分析与设计思路(10分)要求说明设计任务的具体技术指标打算如何实现,根据实现各技术指标的解决方法,提出总体设计的思路和解决方案,说明其中关键问题及其解决办法。
2、详细设计(50分)根据总体设计完成下面任务:1)用Quartus 综合出电路原理图;(10分)2)列出芯片引脚分配并有注释;(10分)3)提供波形图并给出具体分析;(10分)4)提交程序清单,程序清单必须有详细注释。
(10分)六、其他说明1.课程设计需独立完成,每人必须提交课程设计说明书。
2.课程设计说明书内容不得雷同,雷同者本课程设计成绩一律不及格。
指导老师不负责甄别原创者与抄袭者。
正文目录一.摘要..........................二.设计思路........................三.设计过程........................1.分频模块div..................2.红绿的现实模块crosslight与crosslight2......3.计数兼译码模块.................4.模块连接图....................五.设计分析与总结.....................六.程序清单........................一、摘要EDA技术是以计算机为工具,根据硬件描述语言VHDL完成的设计文件,自动的完成逻辑编译,化简,分割,综合及优化,布局布线,仿真以及对特定目标芯片的适配编译和编程下载等工作.随着基于CPLD的EDA技术的发展和应用领域的扩大与深入,EDA技术在电子信息,通信,自动控制用计算机等领域的重要性日益突出。
作为一个学习通信工程专业的学生,我们必须不断的了解更多的新产品信息,这就更加要求我们对EDA有个全面认识。
本程序设计的是基于VHDL的数字时钟,采用EDA 作为开发工具,VHDL语言为硬件描述语言,QUARTUSII作为程序的运行平台,所开发的程序经过调试运行,波形仿真验证,初步实现了设计目标。
本程序使用的硬件描述语言VHDL,可以大大降低了硬件数字系统设计的入门级别,让人感觉就是C语言的亲近。
通过本次的课程设计,不但使同学们进一步了解EDA技术在实际中的应用,也使同学们对EDA的综合应用有了更深一步的应用,这次的课程设计给同学们以后的学习与工作中有了一个全面的指导作用.典型的EDA工具中必须包含两个特殊的软件包,即综合器和适配器,综合器的功能就是将设计者在EDA平台上完成的针对某个系统项目的VHDL原理图或状态图形描述,针对给定的硬件系统组件,进行编译,优化,转换和综合,最终获得我们欲将实现的功能的描述文件。
综合器在工作前,必须给定要实现的硬件结构参数,它的功能就是将软件描述与给定的硬件结构用一定的方式联系起来,也就是说综合器是软件描述与硬件实现的一座桥梁。
综合过程就是将电路的高级语言描述转换成低级的,可与目标器件CPLD相映射的网表文件。
适配器的功能是将由综合器产生的网表文件配置与指定的目标器件中,产生最终的下载文件。
适配器所选的目标器件(CPLD芯片)必须包含于在综合器中已指定的目标器件系列。
硬件描述语言VHDL的英文全名是Very-High-Speed Integrated Circuit Hardware Description Language。
它主要用于描述数字系统的结构,行为,功能和接口。
除了还有很多硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似与一般的高级计算机语言。
VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。
在对一个设实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。
这种将设计实体内外部分的概念是VHDL系统设计的基本点。
二、设计思路首先,既然是要用VHDL语言设计就必须得先学会VHDL语言,这是设计前必须的准备工作;其次,要求学会软件的仿真使用,此次设计中所用的软件工具是QUARTUSII 5.1;再者就是具体设计过程的构想了。
在车流不需交叉转弯的单十字路口可以仅用简单的四组的红、黄、绿灯来控制,其中两两相同。
假设一个十字路口有东西南北方向,则南北方向红、黄、绿灯时序完全相同,东西方向亦如此。
当南北方向为绿灯时东西方向为红灯,此时南北方向通行而东西方向禁止通行,同时来至东、西方的车辆均可以右转,但不能左转,这是此设计的最大不足。
当一个直通方向的红灯停止时为该直通方向的出发的车辆不与另一直通方向已经进入十字路交叉处但还为使出的车辆发生碰撞事故,必须设置黄灯等待指示作为缓冲。
即为红灯停了亮黄灯,黄灯停了亮绿灯,绿灯停了亮红灯,依次循环。
同时可以设置黄等2秒,绿灯20秒,红灯22秒。
采用模块化设计,先将各个功能模块设计调试成功之后再用例化语句将各个功能模块连接起来,即建立顶层模块。
三、设计过程1、分频模块div其功能就是根据所提供的晶振频率进行分频,以予驱动计数模块和红绿灯显示模块能,此模块可以通过改变软件的个别参数实现任意倍数的分频。
Clk接晶振,fpclk用于驱动后续模块,rst接复位信号,低电平复位。
2、红绿的显示模块crosslight与crosslight2用于对红绿灯的显示控制,分别控制两个直通方向的红绿灯,clk为时钟输入端,接分频模块的输出,rst1与rst0分别为复位信号输入端,高电平复位,greenlgt、yellowlgt、redlgt与greenlgt0、yellowlgt0、redlgt0 分别作为两个直通方向的绿灯黄灯和红灯的显示。
3、计数兼译码模块这六个模块均为计数模块,其输出直接为字形码,即兼备译码的功能。
具体原理为采用加计数器的方向显示,利用直接查表赋值的方法逐一赋值,于是就可以实现正序的加一计数行成倒序的减一计数。
此六个模块的功能实现原理完全一致,EN02 EN20 EN22 ENe02 ENe20 ENe22即为复位输入端,低电平复位。
右端均为输出端,输出与七段显示码对应的字型码可以直接驱动数码管。
4、模块连接图通过顶层模块的例化语句连接得到此图(输入端口)(输出端口)四、仿真波形图中第一个为分频器时钟输入,第二到七个信号为红绿灯的输出信号,以下为计数输出,计数输出全为字型码,可直接驱动七段数码管显示,例如图中的“1111110”为十进制“0”的字型码。
五、设计分析与总结本次课程设计的程序的设计和调试都花了我不少精力,虽然结果并不如意但至少最后还是仿真陈功了,而且通过本次课程设计是我进一步加深了对VHDL硬件描述语言的理解及其运用,VHDL描述数字电路系统设计的行为、功能、输入和输出,它在语法上与现代编程语言相似,但包含了许多与硬件有特殊关系的结构。
VHDL将一个设计称为一个实体Entity(元件、电路或者系统),并且将它分成外部的可见部分(实体名、连接)和内部的隐藏部分(实体算法、实现)。
当定义了一个设计的实体之后,其他实体可以利用该实体,也可以开发一个实体库。
所以,内部和外部的概念对系统设计的VHDL是十分重要的。
外部的实体名或连接由实体声明Entity来描述。
而内部的实体算法或实现则由结构体Architecture来描述。
结构体可以包含相连的多个进程process或者组建component等其他并行结构。
在此过程中,程序的反复调试简直让人想哭,有时候就仅仅是一个标点符号的错误都会花费大量的时间,特别是顶层模块的调用,一不小心就错误一大堆。
不过尽管感觉这次设计好难,但这也可以作为一次宝贵的人生体验,可以加强独立学习的能力,也许有同学会觉得快毕业了就没必要学习了但我不这样认为,我以前没学好是现在更应该抓住着大学剩下的短短时间。
尽管很累,但我觉得很值得,谢谢老师给予我这个“累”的机会。
六、程序清单(由于六个计数兼显示模块设计思想完全一致,在注释部分仅对前面两个模块进行注释)--顶层模块,完成各个功能模块的链接LIBRARY IEEE;--主程序库说明部分USE IEEE.Std_Logic_1164.ALL;ENTITY yintong IS--实体说明port( rst0,rst1,rst,clk: in std_logic;yellowlgt,greenlgt,redlgt: out std_logic;greenlgt0,yellowlgt0,redlgt0: out std_logic;DOUT02M: out std_logic_vector(6 downto 0);DOUTe02M:out std_logic_vector(6 downto 0);DOUT22M,DOUT22B:out std_logic_vector(6 downto 0);DOUT20M,DOUT20B:out std_logic_vector(6 downto 0);DOUTe20M,DOUTe20B:out std_logic_vector(6 downto 0);DOUTe22M,DOUTe22B:out std_logic_vector(6 downto 0));end yintong;architecture tong of yintong is--结构体说明component div--分频模块引用port( rst: in std_logic;clk: in std_logic;fpclk: out std_logic);end component;component crosslight2-- 一直通方向红绿灯显示模块引用port(clk: in std_logic;rst1: in std_logic;greenlgt: out std_logic;yellowlgt: out std_logic;redlgt: out std_logic);end component;component crosslight-- 另一直通方向的红绿灯显示模块引用port(clk: in std_logic;rst0: in std_logic;greenlgt0: out std_logic;yellowlgt0: out std_logic;redlgt0: out std_logic);end component;component cnt02s-- 一直通方向的黄灯显示模块引用port(clk,EN02B:in std_logic;DOUT02M:out std_logic_vector(6 downto 0)); end component;component cnte02s-- 另一直通方向的黄的显示模块引用port(clk,ENe02B:in std_logic;DOUTe02M:out std_logic_vector(6 downto 0)); end component;component CNT22s-- 一直通方向的红灯显示模块引用port(clk,EN22A:in std_logic;DOUT22M,DOUT22B:out std_logic_vector(6 downto 0));end component;component CNT20s-- 一直通方向的绿灯显示模块引用port(clk,EN20A:in std_logic;DOUT20M,DOUT20B:out std_logic_vector(6 downto 0));end component;component CNTe20s-- 另一直通方向的绿灯显示模块引用port(clk,ENe20A:in std_logic;DOUTe20M,DOUTe20B:out std_logic_vector(6 downto 0));end component;component CNTe22s-- 另一直通方向的红灯显示模块引用port(clk,ENe22A:in std_logic;DOUTe22M,DOUTe22B:out std_logic_vector(6 downto 0));end component;signal o1:std_logic;-- 信号量的定义signal yl:std_logic; -- 信号量的定义signal eyl:std_logic; -- 信号量的定义signal rl:std_logic; -- 信号量的定义下同signal erl:std_logic;signal gl:std_logic;signal egl:std_logic;beginu1:div port map(rst,clk,o1);-- 位置映射方法完成信号连接下同u2:crosslight port map(o1,rst1,egl,eyl,erl);u3:crosslight2 port map(o1,rst0,gl,yl,rl);u4:cnt02s port map(o1,yl,DOUT02M);u5:cnt22s port map(o1,rl,DOUT22M,DOUT22B);u6:CNT20s port map(o1,gl,DOUT20M,DOUT20B);u7:cnte02s port map(o1,eyl,DOUTe02M);u8:CNTe20s port map(o1,egl,DOUTe20M,DOUTe20B);u9:cnte22s port map(o1,rl,DOUTe22M,DOUTe22B);yellowlgt<=yl;-- 赋值输出下同yellowlgt0<=eyl;redlgt<=rl;greenlgt<=gl;greenlgt0<=egl;redlgt0<=erl;end tong;-- 顶层模块结束--分频模块library ieee;-- 库说明use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity div is-- 实体说明port( rst: in std_logic;clk: in std_logic;fpclk: out std_logic);end div;architecture arc of div is-- 结构体说明beginprocess(clk)-- 并行进程语句variable count: integer range 0 to 1000000000;-- 定义允许分频为0到--1000000000 variable clk0: std_logic;beginif rst='0' then -- rst为低电平时复位clk0:='0' ;elsif clk'event and clk='1' thenif count=1000 thenclk0:=not clk0;count:=0; --上升沿敏感,定义1000分频elsecount:=count+1;end if;end if;fpclk<=clk0;end process;end arc;--一方向红绿灯显示模块library ieee;-- 库说明use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity crosslight is-- 实体说明generic(yellow:integer:=2;-- 定义黄灯显示时间green:integer:=20;-- 定义绿灯显示时间red:integer:=22-- 定义红灯显示时间);port(clk: in std_logic;rst0: in std_logic;greenlgt0: out std_logic;yellowlgt0: out std_logic;redlgt0: out std_logic);end crosslight;architecture a of crosslight is-- 结构体说明type states is (st0,st1,st2);signal state :states;signal cnt : integer;signal cnt_end: std_logic;beginprocess(rst0,clk) -- 并行进程语句实现红绿灯信号输入beginif(rst0='1')then-- 定义高电平复位state<=st0; cnt<=0;elsif(rising_edge(clk))thenif(cnt_end='1')thencnt<=cnt+1;-- 计数加一else cnt<=0;end if;case state iswhen st0=>if(cnt=green)thenstate<=st1;else state<=st0;end if;when st1=>if(cnt=yellow)thenstate<=st2;else state<=st1;end if;when st2=>if (cnt=red)thenstate<=st0;else state<=st2;end if;end case;end if;end process;process (state) -- 并行进程语句实现红绿灯信号输出case state is when st0=> yellowlgt0<='1'; greenlgt0<='0'; redlgt0<='0';cnt_end<='1';if(cnt=green)then cnt_end<='0'; end if;when st1=> yellowlgt0<='0'; greenlgt0<='1'; redlgt0<='0';cnt_end<='1';if(cnt=yellow)then cnt_end<='0'; end if;when st2=> yellowlgt0<='0'; greenlgt0<='0'; redlgt0<='1';cnt_end<='1';if(cnt=red)then cnt_end<='0';end case;end process;end a;--另一方向红绿灯显示模块library ieee; -- 库说明use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity crosslight2 is-- 实体说明generic(green:integer:=20; -- 定义绿灯显示时间yellow:integer:=2; -- 定义黄灯显示时间red:integer:=22-- 定义红灯显示时间);port(clk: in std_logic;rst1: in std_logic;greenlgt: out std_logic;yellowlgt: out std_logic;redlgt: out std_logic);end crosslight2;architecture a of crosslight2 is-- 结构体说明type states is (st0,st1,st2);signal state :states;signal cnt : integer;signal cnt_end: std_logic;beginprocess(rst1,clk) -- 并行进程语句实现红绿灯信号输入beginif(rst1='1')thenstate<=st0; cnt<=0;-- 复位elsif(rising_edge(clk))thenif(cnt_end='1')thencnt<=cnt+1;else cnt<=0;end if;case state iswhen st0=>if(cnt=red)thenstate<=st1;else state<=st0;end if;when st1=>if(cnt=yellow)thenstate<=st2;else state<=st1;end if;when st2=>if (cnt= green)thenstate<=st0;else state<=st2;end if;end case;end if;end process;process (state) -- 并行进程语句实现红绿灯信号输出begincase state iswhen st0=>redlgt<='1';yellowlgt<='0';greenlgt<='0';cnt_end<='1';if(cnt=red)thencnt_end<='0';end if;when st1=>redlgt<='0';yellowlgt<='1';greenlgt<='0';cnt_end<='1';if(cnt=yellow)thencnt_end<='0';end if;when st2=>redlgt<='0';yellowlgt<='0';greenlgt<='1';cnt_end<='1';if(cnt= green)thencnt_end<='0';end if;end case;end process;end a;--一方向两秒计数及显示library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity CNT02s is-- 实体说明port(clk,EN02B:in std_logic;DOUT02M:out std_logic_vector(6 downto 0));--定义七位输出end entity CNT02s;architecture art of CNT02s issignal CNT2B:std_logic_vector(1 downto 0);beginprocess(clk,EN02B)isbeginif(clk'event and clk='1')then-- 上升沿计数if EN02B='1' then CNT2B<=CNT2B+1;-- 计数器加一ELSECNT2B<="01";end if;end if;end process;process(CNT2B) isbeginCASE CNT2B isWHEN"00"=>DOUT02M<="0111110";-- 字型码输出WHEN"01"=>DOUT02M<="1111110";-- 字型码输出WHEN OTHERS=>DOUT02M<="1111110";-- 字型码输出END CASE;END PROCESS;END ARCHITECTURE ART;--二十二秒计数兼显示模块,正序计时倒序输出use ieee.std_logic_1164.all;-- 库说明use ieee.std_logic_unsigned.all;entity CNT22s is-- 实体说明port(clk,EN22A:in std_logic;DOUT22M,DOUT22B:out std_logic_vector(6 downto 0));--定义高位和地位字型码的输出end entity CNT22s;architecture art of CNT22s is-- 结构体说明signal CNT6B:std_logic_vector(4 downto 0);-- 5位计数beginlibrary ieee;process(clk,EN22A)is-- 正序计数并行进程语句beginif(clk'event and clk='1')thenif EN22A='1' then CNT6B<=CNT6B+1;-- 上升沿计数EN22A为低电平时复位ELSECNT6B<="10110";end if;end if;End process;Process(CNT6B) is-- 倒序字型码输出beginCASE CNT6B isWHEN"10110"=>DOUT22M<="1111110";DOUT22B<="1111110";--字型码倒序输出下同WHEN"10101"=>DOUT22M<="1111110";DOUT22B<="0110000"; WHEN"10100"=>DOUT22M<="1111110";DOUT22B<="1101101"; WHEN"10011"=>DOUT22M<="1111110";DOUT22B<="1111001";WHEN"10010"=>DOUT22M<="1111110";DOUT22B<="0110011"; WHEN"10001"=>DOUT22M<="1111110";DOUT22B<="1011011"; WHEN"10000"=>DOUT22M<="1111110";DOUT22B<="1011111"; WHEN"01111"=>DOUT22M<="1111110";DOUT22B<="1110010"; WHEN"01110"=>DOUT22M<="1111110";DOUT22B<="1111111"; WHEN"01101"=>DOUT22M<="1111110";DOUT22B<="1111011"; WHEN"01100"=>DOUT22M<="0110000";DOUT22B<="1111110"; WHEN"01011"=>DOUT22M<="0110000";DOUT22B<="0110000"; WHEN"01010"=>DOUT22M<="0110000";DOUT22B<="1101101"; WHEN"01001"=>DOUT22M<="0110000";DOUT22B<="1111001"; WHEN"01000"=>DOUT22M<="0110000";DOUT22B<="0110011"; WHEN"00111"=>DOUT22M<="0110000";DOUT22B<="1011011"; WHEN"00110"=>DOUT22M<="0110000";DOUT22B<="1011111"; WHEN"00101"=>DOUT22M<="0110000";DOUT22B<="1110010"; WHEN"00100"=>DOUT22M<="0110000";DOUT22B<="1111111"; WHEN"00011"=>DOUT22M<="0110000";DOUT22B<="1111011"; WHEN"00010"=>DOUT22M<="1101101";DOUT22B<="1111110"; WHEN"00001"=>DOUT22M<="1101101";DOUT22B<="0110000"; WHEN"00000"=>DOUT22M<="1101101";DOUT22B<="1101101"; WHEN OTHERS=>DOUT22M<="1111110";DOUT22B<="1111110";END CASE;END PROCESS;END ARCHITECTURE ART;--二十秒计数兼显示模块,其余注释同上library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity CNT20s isport(clk,EN20A,EN20B:in std_logic;DOUT20M,DOUT20B:out std_logic_vector(6 downto 0)); end entity CNT20s;architecture art of CNT20s issignal CNT6B:std_logic_vector(4 downto 0);beginprocess(clk,EN20A,EN20B)isbeginif(clk'event and clk='1')thenif EN20A='1' then CNT6B<=CNT6B+1;ELSEcNT6B<="10100";end if;end if;end process;process(CNT6B) isbegincASE CNT6B iswHEN"10100"=>DOUT20M<="1111110";DOUT20B<="1111110"; wHEN"10011"=>DOUT20M<="1111110";DOUT20B<="0110000";wHEN"10010"=>DOUT20M<="1111110";DOUT20B<="1101101"; wHEN"10001"=>DOUT20M<="1111110";DOUT20B<="1111001"; wHEN"10000"=>DOUT20M<="1111110";DOUT20B<="0110011"; wHEN"01111"=>DOUT20M<="1111110";DOUT20B<="1011011"; wHEN"01110"=>DOUT20M<="1111110";DOUT20B<="1011111"; wHEN"01101"=>DOUT20M<="1111110";DOUT20B<="1110010"; wHEN"01100"=>DOUT20M<="1111110";DOUT20B<="1111111"; wHEN"01011"=>DOUT20M<="1111110";DOUT20B<="1111011"; wHEN"01010"=>DOUT20M<="0110000";DOUT20B<="1111110"; wHEN"01001"=>DOUT20M<="0110000";DOUT20B<="0110000"; wHEN"01000"=>DOUT20M<="0110000";DOUT20B<="1101101"; wHEN"00111"=>DOUT20M<="0110000";DOUT20B<="1111001"; wHEN"00110"=>DOUT20M<="0110000";DOUT20B<="0110011"; wHEN"00101"=>DOUT20M<="0110000";DOUT20B<="1011011"; wHEN"00100"=>DOUT20M<="0110000";DOUT20B<="1011111"; wHEN"00011"=>DOUT20M<="0110000";DOUT20B<="1110010"; wHEN"00010"=>DOUT20M<="0110000";DOUT20B<="1111111"; wHEN"00001"=>DOUT20M<="0110000";DOUT20B<="1111011"; wHEN"00000"=>DOUT20M<="1101101";DOUT20B<="1111110"; WHEN OTHERS=>DOUT20M<="1111110";DOUT20B<="1111110"; END CASE;eND PROCESS;eND ARCHITECTURE ART;--两秒计数兼显示,其余注释同上library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity CNTe02s isport(clk,ENe02B:in std_logic;DOUTe02M:out std_logic_vector(6 downto 0)); end entity CNTe02s;architecture art of CNTe02s issignal CNTe2B:std_logic_vector(1 downto 0);beginprocess(clk,ENe02B)isbeginif(clk'event and clk='1')thenif ENe02B='1' then CNTe2B<=CNTe2B+1;ELSECNTe2B<="01";end if;end if;end process;process(CNTe2B) isbeginCASE CNTe2B isWHEN"01"=>DOUTe02M<="1111110"; WHEN"00"=>DOUTe02M<="0110000";WHEN OTHERS=>DOUTe02M<="1111110";END CASE;END PROCESS;END ARCHITECTURE ART;--二十秒计数兼显示其余注释同上library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity CNTe20s isport(clk,ENe20A,ENe20B:in std_logic;DOUTe20M,DOUTe20B:out std_logic_vector(6 downto 0)); end entity CNTe20s;architecture art of CNTe20s issignal CNTe6B:std_logic_vector(4 downto 0);beginprocess(clk,ENe20A,ENe20B)isbeginif(clk'event and clk='1')thenif ENe20A='1' then CNTe6B<=CNTe6B+1;ELSEcNTe6B<="10100";end if;end if;end process;process(CNTe6B) isbegincASE CNTe6B iswHEN"10100"=>DOUTe20M<="1111110";DOUTe20B<="1111110"; wHEN"10011"=>DOUTe20M<="1111110";DOUTe20B<="0110000"; wHEN"10010"=>DOUTe20M<="1111110";DOUTe20B<="1101101"; wHEN"10001"=>DOUTe20M<="1111110";DOUTe20B<="1111001"; wHEN"10000"=>DOUTe20M<="1111110";DOUTe20B<="0110011"; wHEN"01111"=>DOUTe20M<="1111110";DOUTe20B<="1011011"; wHEN"01110"=>DOUTe20M<="1111110";DOUTe20B<="1011111"; wHEN"01101"=>DOUTe20M<="1111110";DOUTe20B<="1110010"; wHEN"01100"=>DOUTe20M<="1111110";DOUTe20B<="1111111"; wHEN"01011"=>DOUTe20M<="1111110";DOUTe20B<="1111011"; wHEN"01010"=>DOUTe20M<="0110000";DOUTe20B<="1111110"; wHEN"01001"=>DOUTe20M<="0110000";DOUTe20B<="0110000"; wHEN"01000"=>DOUTe20M<="0110000";DOUTe20B<="1101101"; wHEN"00111"=>DOUTe20M<="0110000";DOUTe20B<="1111001"; wHEN"00110"=>DOUTe20M<="0110000";DOUTe20B<="0110011"; wHEN"00101"=>DOUTe20M<="0110000";DOUTe20B<="1011011"; wHEN"00100"=>DOUTe20M<="0110000";DOUTe20B<="1011111"; wHEN"00011"=>DOUTe20M<="0110000";DOUTe20B<="1110010"; wHEN"00010"=>DOUTe20M<="0110000";DOUTe20B<="1111111"; wHEN"00001"=>DOUTe20M<="0110000";DOUTe20B<="1111011"; wHEN"00000"=>DOUTe20M<="1101101";DOUTe20B<="1111110"; WHEN OTHERS=>DOUTe20M<="1111110";DOUTe20B<="1111110";END CASE;eND PROCESS;eND ARCHITECTURE ART;--二十二秒计数兼显示,其余注释同上library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity CNTe22s isport(clk,ENe22A:in std_logic;DOUTe22M,DOUTe22B:out std_logic_vector(6 downto 0)); end entity CNTe22s;architecture art of CNTe22s issignal CNTe6B:std_logic_vector(4 downto 0);beginprocess(clk,ENe22A)isbeginif(clk'event and clk='1')thenif ENe22A='1' then CNTe6B<=CNTe6B+1;ELSECNTe6B<="10110";end if;end if;End process;Process(CNTe6B) isbeginCASE CNTe6B isWHEN"10110"=>DOUTe22M<="1111110";DOUTe22B<="1111110"; WHEN"10101"=>DOUTe22M<="1111110";DOUTe22B<="0110000";WHEN"10100"=>DOUTe22M<="1111110";DOUTe22B<="1101101"; WHEN"10011"=>DOUTe22M<="1111110";DOUTe22B<="1111001"; WHEN"10010"=>DOUTe22M<="1111110";DOUTe22B<="0110011"; WHEN"10001"=>DOUTe22M<="1111110";DOUTe22B<="1011011"; WHEN"10000"=>DOUTe22M<="1111110";DOUTe22B<="1011111"; WHEN"01111"=>DOUTe22M<="1111110";DOUTe22B<="1110010"; WHEN"01110"=>DOUTe22M<="1111110";DOUTe22B<="1111111"; WHEN"01101"=>DOUTe22M<="1111110";DOUTe22B<="1111011"; WHEN"01100"=>DOUTe22M<="0110000";DOUTe22B<="1111110"; WHEN"01011"=>DOUTe22M<="0110000";DOUTe22B<="0110000"; WHEN"01010"=>DOUTe22M<="0110000";DOUTe22B<="1101101"; WHEN"01001"=>DOUTe22M<="0110000";DOUTe22B<="1111001"; WHEN"01000"=>DOUTe22M<="0110000";DOUTe22B<="0110011"; WHEN"00111"=>DOUTe22M<="0110000";DOUTe22B<="1011011"; WHEN"00110"=>DOUTe22M<="0110000";DOUTe22B<="1011111"; WHEN"00101"=>DOUTe22M<="0110000";DOUTe22B<="1110010"; WHEN"00100"=>DOUTe22M<="0110000";DOUTe22B<="1111111"; WHEN"00011"=>DOUTe22M<="0110000";DOUTe22B<="1111011"; WHEN"00010"=>DOUTe22M<="1101101";DOUTe22B<="1111110"; WHEN"00001"=>DOUTe22M<="1101101";DOUTe22B<="0110000"; WHEN"00000"=>DOUTe22M<="1101101";DOUTe22B<="1101101"; WHEN OTHERS=>DOUTe22M<="1111110";DOUTe22B<="1111110";END CASE;END PROCESS;END ARCHITECTURE ART;。