交通灯控制论文.doc_第1页
交通灯控制论文.doc_第2页
交通灯控制论文.doc_第3页
交通灯控制论文.doc_第4页
交通灯控制论文.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

交通灯控制系统的设计张海军 陆吉银 钟犹洪(湖南 衡阳 南华大学 421001)指导老师:王 彦摘要 利用VHDL在CPLD上设计交通灯控制系统,取代常规的设计方法。采用Xilinx 公司推出的EDA软件系统Xilinx Foundation Series ISE对系统进行VHDL语言编程、编译、综合和功能仿真,并将程序下载到CPLD器件中,程序主要包括秒脉冲电路、减计数器、状态控制器等模块的编写。利用清华同方的TPG_FPGA教学实验系统对设计的系统进行总体测试,经过实际电路测试运行效果良好,能很好实现设计要求。用VHDL设计交通灯控制系统是一个非常简单而且十分不错的方案。关键词 VHDL CPLD 交通灯控制系统Design of Traffic Light Control SystemAbstract Instead of general design methods, design a traffic light control system utilizing VHDL based on CPLD. Using VHDL language to programme,、translate and edit、synthetize and functional simulate for the traffic light control system by utilizing EDA software(Xilinx Foundation Series ISE)of Xilinx company, then download to the CPLD. The program mainly conclude second pulse circuit、subtracting counter、state controller and so on. To test the system, using the teaching experiment system of TPG_FPGA. We can found that the circulative effect is good and it satisfies the design requirement completely after the testing. In conclusion, the traffic light control system designed by using VHDL is easy and very good. Keywords VHDL , CPLD , Traffic light control system目 录设计任务和设计要求3前 言3第1章 系统设计 3第2章 单元电路设计5 2.1秒脉冲电路的设计5 2.2减计数器的设计5 2.3 状态控制器的设计5 2.4 三态门的设计6 2.5 功能扩展模块的设计7 第3章 软件设计8 31ISE介绍 8 32程序设计流程图9第4章 系统测试10第5章 设计总结10附 录 10 附录1 程序清单 10参考文献 18设计任务和设计要求设计一个十字路口交通灯信号控制器,基本要求如下:l 主、支干道交替通行,主干道绿灯亮50秒,支干道绿灯亮20秒。l 每次绿灯变红灯时,先闪6秒黄灯(此时另一个干道的红灯不变)。发挥部分要求如下:l 晚上十点(22:00)到次日凌晨七点(07:00)主、支干道红、绿灯全灭,均只有黄灯闪烁。前 言随着社会、经济的快速发展,人民的生活水平也在不断提高,随之而出现的是交通也日益发达和紧张起来。为了很好的控制各个城市主干道的交通,交通灯发挥了不可替代的作用,因此,设计一个交通灯控制系统是非常有用的,具有很高的实用价值。基于这一点,本设计利用VHDL来设计一个交通灯控制系统。下面介绍一下VHDL。VHDL(Very High Speed Integrated Circuit Hardware Description Language)是超高速集成电路硬件描述语言的英文缩写。是美国国防部20世纪80年代后期开发的一种快速的电路设计工具,目前已成为IEEE的标准硬件描述语言之一。VHDL具有多层次的描述系统硬件功能的能力;支持自顶向下(Top to Down)和基于库(Library-Based)的设计方法;VHDL对设计的描述具有相对独立性。因此,设计者可不必了解硬件结构,从系统设计入手,在顶层进行系统方框图的划分和结构设计,在方框图一级用VHDL对电路的行为进行描述,并进行仿真和纠错,然后在系统一级进行验证,最后再用逻辑综合优化工具生成具体的门级逻辑电路的网表,下载到具体的CPLD器件中去,从而实现可编程逻辑器件的专用集成电路(ASIC)设计。第1章 系统设计要设计一个交通灯控制系统可以用几个方案来实现。常见的有用单片机设计、用数字电路直接设计和用VHDL来设计。各种方案的都有其优缺点,下面通过全面比较来最终确定完成本设计的方案。方案1:用单片机设计一个交通灯控制系统主要是利用单片机最小系统的定时和中断功能块。当定时器定时到了之后,马上跳转到中断服务子程序,执行子程序的指令。子程序包括交通灯的各种状态,如主干道亮红灯,支干道亮绿灯等等。这样实现比较简单,但是考虑到单片机的一个最致命的缺点(即受外界干扰的影响很大),在选择方案时优先考虑采用其他受干扰影响小设计方案。方案2:用数字电路直接设计的交通灯控制系统主要由秒脉冲发生器、状态控制器、定时系统和状态译码器等构成。状态控制器主要是用于记录十字路口交通灯的工作状态,通过状态译码器分别点亮相应的信号灯。秒脉冲发生器产生整个定时系统的时基脉冲,通过减法计数器对秒脉冲减计数,达到控制每一种工作状态的持续时间。减法计数器的回零脉冲使状态控制器完成状态转换,同时状态译码器根据系统下一个工作状态决定计数器下一次减计数的初始值。在黄灯闪烁其间,状态译码器将秒脉冲引入黄灯灯控制电路,就可使黄灯闪烁。这种设计方案也能很好的实现设计要求,但是由于采用大量模拟器件来组成整个电路系统,系统性能受元器件的影响明显增大,因此,在模拟器件的质量不高时会给整个系统带来较大偏差,这也是这种方案的一个不足之处。方案3:用VHDL设计的交通灯控制系统的组成部分有:秒脉冲发生电路、减计数器、状态控制器、三态门控制电路等。用VHDL设计虽然组成部分与用数字电路实现差不多,但是,由于用硬件描述语言来描述各电路模块的功能由EDA开发工具直接生成相应的门级逻辑电路的网表,下载到具体的CPLD器件中去,从而实现可编程逻辑器件的专用集成电路设计。这样减少了模拟器件的使用,使得整个系统的更加电路简单,降低了整个系统对器件性能和质量的依赖,从而提高了系统的稳定性。用VHDL设计的交通灯控制系统首先由秒脉冲发生电路输出一个秒脉冲,用它来作为减计数器的时钟输入信号。计数器输出的计数结果输入到状态控制器,由状态控制器来控制主干道、支干道的信号灯的亮与灭以及黄灯的闪烁。黄灯的闪烁是通过将秒脉冲信号经三态门输出给黄灯来实现的。综合考虑各个方案的优缺点,在实现交通灯控制系统时采用第3个方案。其原理方框图如图1.1所示。 图1.1 原理方框图第2章 单元电路的设计21 秒脉冲电路的设计秒脉冲电路主要是由分频器构成。由于实验箱上的石英晶体振荡器产生的频率为32MHZ,因此要想得到一个秒脉冲信号必须要用到分频器。分频器有两个输入端(一个是时钟输入CLK,另一个是使能输入EN),一个输出端CLK0(即秒脉冲信号输出)。将输入频率为32MHZ的脉冲信号进行32000000分频就可以得到1HZ的秒脉冲信号。分频器的工作波形图如2.1所示。图2.1 分频器工作波形图2.2 减计数器的设计为了满足主干道绿灯亮50秒,支干道绿灯亮20秒,绿灯变红灯时先亮6秒黄灯的要求,计数器的最大值应为82,也就是说,减计数器要设计为一个82进制计数器。计数器的初值设为81,依次递减一直减到0为止,然后又变为81,一直这样循环计数。计数器的时钟输入信号由秒脉冲发生电路提供,这样,计数器每计一次数的时间为一秒,计数的周期就为82秒。输出的计数值送给状态控制器,通过状态控制器来实现各信号灯亮、灭的时间长短。82进制减计数器的工作波形图如图2.2所示。图 2.1 82进制减计数器的工作波形图2.3 状态控制器的设计状态控制器是整个系统的核心,各个信号灯的亮、灭均由它来控制。交通灯控制系统的设计要求是要求主干道绿灯亮50秒,接着黄灯闪烁6秒,这段时间里支干道一直亮红灯,也即红灯亮56秒。主干道黄灯闪完后接着支干道亮20秒绿灯,绿灯灭后闪6秒黄灯,在这段时间里主干道亮26秒红灯,支干道黄灯灭后主干道又接着亮50秒绿灯一直循环下去。交通灯工作顺序流程图如图2.3所示。状态控制器就是用来控制各个状态的转换。图2.3 交通灯工作顺序流程图2.4 三态门的设计三态门有一个数据输入端、一个使能端和一个数据输出端。当使能输入端输入的信号为1时,数据从输入端传送到输出端;当使能信号为0时,输出呈高阻态,在VHDL语言描述时将高阻态数据Z向输出端赋值。在本设计中,三态门的输入数据为秒脉冲信号,输出的数据用来控制信号灯黄灯的闪烁。三态控制门的电路如图2.4.1所示,工作波形图如图2.4.2所示。在设计中由于有两路黄灯且闪烁的时刻不同,因此设计时用到了两个三态控制门电路,分别控制主干道和支干道的黄灯。图 2.4.1 三态控制门电路图图 2.4.2 三态门工作波形图交通灯控制系统的总电路图如图2.4.3所示。图2.4.3 系统总电路图2.5 功能扩展模块的设计为了实现发挥部分的设计要求,特增加功能扩展模块。功能扩展模块主要是由一个定时系统组成。当时间达到晚上十点(即22:00)时,定时系统发出一个信号去控制信号灯,使得红绿灯熄灭,黄灯闪烁,这种状态一直持续到次日早上七点(即07:00)。该模块的总电路图如图2.5.1所示。图2.5.1 扩展模块的总电路图系统总的仿真波形图如图2.1所示。图 2.1 系统总的仿真波形图第3章 软件设计31 ISE的介绍本设计中采用可编程逻辑设计环境Xilinx Foundation Series ISE 4.2i进行设计。ISE是Xilinx 公司推出的EDA软件系统。该系统是一个集成化环境,由项目导航工具(Project Navigator)、设计输入工具(Design entry tools)、逻辑综合工具(Design Synthesis)、设计实现工具(Design Implementation tools)、设计约束图形编辑接口(Design constraints Graphic User Interfaces)等组成的一个的软件平台。Xilinx Foundation Series ISE 4.2i软件系统的基本工具箱介绍。(一)软件启动:正确安装Xilinx Foundation Series ISE 4.2i后,从Windows的Start菜单中选择Programs,选择其下的Foundation Series ISE 4.2i,再在Foundation Series ISE 4.2i菜单下选择Project Navigator,启动Foundation Series ISE 4.2i软件系统。(二)项目管理:项目管理工具Project Navigator是Xilinx Foundation Series ISE 4.2i软件系统的主管窗口,管理整个设计进程和相应工具,可以通过Project Navigator启动设计输入工具(Design entry tools)、综合工具、设计实现工具、可编程逻辑器件编程工具、设计校验工具(包括行为仿真工具和定时分析)等。(三)设计输入:设计输入工具包括HDL Editor、ECS Schematic Editor、Symbol Editor、StateCAD and StateBench等。(四)逻辑综合:Xilinx Foundation Series ISE 4.2i提供两种综合工具:Xilinx Synthesis Tools(XST)和FPGA Express。两种工具都支持同样的设计输入,生成需要的输出文件用于布局布线。两种设计工具的唯一区别是,XST只能对全是VHDL或者全是Verilog HDL描述的设计进行逻辑综合;而FPGA Express允许设计是VHDL和Verilog HDL语言的混合描述。(五)设计约束:在设计实现工具中,设计者可以加上设计约束控制设计实现。设计约束主要有两类;一类是位置约束,另一类是时间约束。位置约束控制逻辑块在可编程器件中实现的映射方式和布局位置,其中最主要的约束是压焊点的位置约束。这种约束用于锁定设计管脚,将器件的I/O分配给指定的管脚,在设计过程中不受优化调整的影响。时间约束告诉软件系统设计的关键路径,以指导布局布线工具在布局布线时考虑逻辑块的放置位置。(六)功能仿真:功能仿真用于综合前检查设计的逻辑功能是否符合设计要求。仿真过程中可以通过观察检测设计的输入信号、输出信号以及内部信号以检测设计的逻辑功能。可以用VHDL的测试向量或Verilog HDL测试向量作为电路测试的输入激励,并且比较电路的输出是否和期望的输出一致。Xilinx Foundation Series ISE 4.2i支持寄存器传输级仿真和行为仿真。(七)设计实现:逻辑综合以后,设计实现工具将综合结果映射到目标器件,进行布局布线(对面向CPLD的设计实现为试配),生成可编程逻辑器件编程用的输入文件。(八)报告文件:由设计实现工具产生的报告文件包含了逻辑时序、逻辑优化、时间约束和I/O管脚分配等信息,在Project Window中双击相关报告文件就可以将其打开。(九)时序仿真:Xilinx Foundation Series ISE 4.2i时序仿真是门级仿真,其中包含了目标可编程逻辑器件详细的延时信息。门级仿真是在逻辑综合和布局布线后带延时的仿真,这与综合前不带延时信息的行为仿真有很大差别。时序仿真的测试文件可以有HDL Bencher图形界面生成,也可以由VHDL或Verilog HDL的测试平台产生。(十)器件编程:器件编程是设计在可编程逻辑器件(CPLD或者FPGA)中最终实现的步骤。VHDL的设计流程:设计工作首先是用VHDL描述设计概念,利用VHDL仿真与调试工具分析设计概念的“行为”,检查是否满足初始要求。这一部分的情形与普通编程语言如PASCAL、C语言的编译、运行、调试是类似的。这时的仿真速度要大大快于门级仿真的速度。高层设计的验证、纠错,有利于早期发现设计方案中的错误。设计概念验证后,把VHDL设计输入VHDL综合工具,VHDL综合工具利用集成电路厂商或电子自动化厂商提供的被充分验证过的工艺库,以面积、功能和速度等为目标进行优化,将电路映射为选定工艺的网表。得到了门级电路后,我们还要进行逻辑仿真,来验证门级电路的行为和时序特性。接下来的是物理设计,得到最后可供生产的文件。物理设计完成后,一般还要进行延时分析、故障分析、热分析等等,保证最终确实能稳定工作,满足设计标准。32 程序设计流程图程序设计流程图如图3. 1所示。=5?=25?=31?主干道亮绿灯支干道亮红灯主干道红灯亮 支干道绿灯亮主干道黄灯闪 支干道红灯继续亮产生秒脉冲信号从81开始减计数器计数开 始NYNYNY主干道红灯继续亮 支干道黄灯闪=0?NY图3. 1 程序设计流程图第四章 系统测试本设计要求实现交通灯的控制,具体要求为主干道通行50秒,支干道通行20秒,每次绿灯变为红灯时先让黄灯闪烁6秒(此时另一干道上的红灯不变),功能扩展为使得晚上十点到早上七点只有黄灯闪烁。为了检测所设计的控制系统是否能很好的完成设计要求,因此在使用该系统之前要进行系统测试,以便发现不足之处加以改进。测试该系统用的仪器主要是清华同方制作的TPG_FPGA教学实验系统,该实验系统上有晶体振荡电路、Xilinx芯片、显示电路、输入输出电路等。测试时先将编写好的VHDL描述程序写入到Xilinx Foundation Series ISE 4.2i的文本编辑窗口中,并进行编译、综合、适配。然后进行引脚锁定,将VHDL描述的模块的输入输出端子与实验系统上的输入输出端一一对应起来。引脚锁定好后,用数据线将程序下载到实验系统上的Xilinx芯片中,并让其进入运行状态。实验系统中有模拟的交通信号灯,所以在测试时只要观察该信号灯是否按照设计的要求转换即可测定该系统是否可行。第五章 设计总结通过测试该交通灯控制系统,得出结论是该系统能很好的完成设计要求,在TPG_FPGA教学实验系统上测试能达到预定目标。测试的结果是计数值从81到32主干道亮绿灯支干道亮红灯,31到26主干道黄灯闪烁支干道亮红灯,25到6支干道亮绿灯主干道亮红灯,5到0支干道黄灯闪烁主干道亮红灯,然后又从81开始,一直循环下去。并且到了晚上十点只有黄灯闪烁,一直闪到早上七点。这一结果完全符合预定目标。因此该设计方案是一个很好的方案。附 录附录1:程序清单18library IEEE;-顶层程序use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity topjt isPort (clock2,sz:in std_logic;yelloweast,yellowwest:out std_logic;yellowsouth,yellownorth:out std_logic;greeneast,greenwest:out std_logic;greennorth,greensouth:out std_logic;redeast,redwest:out std_logic;rednorth,redsouth:out std_logic;h1 : in std_logic_vector(3 downto 0);h0 : in std_logic_vector(3 downto 0);m1 : in std_logic_vector(3 downto 0);m0 : in std_logic_vector(3 downto 0);s1 : in std_logic_vector(3 downto 0);s0 : in std_logic_vector(3 downto 0);hour1 : out std_logic_vector(6 downto 0);hour0 : out std_logic_vector(6 downto 0);min1 : out std_logic_vector(6 downto 0);min0 : out std_logic_vector(6 downto 0);sec1 : out std_logic_vector(6 downto 0); sec0 : out std_logic_vector(6 downto 0);end topjt;architecture Behavioral of topjt iscomponent miao is Port (clk,en:in std_logic;clk0:out std_logic);end component;component counter82 is Port (clk,en,rst:in std_logic; y:out integer);end component;component controller is Port (a:in integer;en:in std_logic;u1,u2,u3,u4,u5,u6:out std_logic;u7,u8,u10,u11:out std_logic);end component;component notgate is Port ( inn:in std_logic; outt:out std_logic);end component;component tri_states is Port (enable:in std_logic; datain:in std_logic;dataout:out std_logic);end component;component convert is Port (a:in std_logic; b,c:out std_logic);end component;component counter10Port ( set : in std_logic; clk : in std_logic; x : in std_logic_vector(3 downto 0); y : out std_logic_vector(3 downto 0); c : out std_logic);end component;component counter104Port ( set,rd : in std_logic; clk : in std_logic; x : in std_logic_vector(3 downto 0); y : out std_logic_vector(3 downto 0); c,k : out std_logic);end component;component counter2Port ( set,rd : in std_logic; clk : in std_logic; x : in std_logic_vector(3 downto 0); y : out std_logic_vector(3 downto 0); c : out std_logic);end component;component counter6 Port ( set : in std_logic; clk : in std_logic; x : in std_logic_vector(3 downto 0); y : out std_logic_vector(3 downto 0); c : out std_logic);end component;component decoderPort (seg:in std_logic_vector(3 downto 0 );q3:out std_logic_vector(6 downto 0);end component;component pulsePort ( clock,en:in std_logic; clk:out std_logic );end component;component and21 Port ( a : in std_logic; b : in std_logic; c : out std_logic);end component;component adder port(reset1:in std_logic;clina1:in std_logic_vector(3 downto 0);clinb1:in std_logic_vector(3 downto 0);mina1:in std_logic_vector(3 downto 0);minb1:in std_logic_vector(3 downto 0);sina1:in std_logic_vector(3 downto 0);sinb1:in std_logic_vector(3 downto 0);zout1:out integer);end component;component flashing port(flash:out std_logic;clock2:in std_logic;dclk2:in integer;reset2:in std_logic);end component;component orgate Port (p,q:in std_logic; w:out std_logic);end component;signal second, ring, ye,yel,t1,t2,t3,t4,cr,cr1:std_logic;signal xy, sign1:integer;signal sh1,sh0,sm1,sm0,ss1,ss0:std_logic_vector(3 downto 0);signal ca,cb,cc,cd,ce,cf,ch,ci,sand1,ff,tt,sand2,sign2:std_logic;begin u1:miao port map(clk=clock2,en=sz,clk0=second); u2:counter82 port map(clk=second,en=sz,rst=cr1,y=xy); u3:controller port map(a=xy,en=ff,u3=t1,u6=t2,u1=greeneast,u7=greenwest,u2=rednorth,u8=redsouth,u4=redwest,u10=redeast,u5=greennorth,u11=greensouth); u4:tri_states port map(datain=second,enable=t3,dataout=ye); u5:tri_states port map(datain=second,enable=t4,dataout=yel); u6:notgate port map(inn=sz,outt=cr); u7:convert port map(a=ye,b=yelloweast,c=yellowwest); u8:convert port map(a=yel,b=yellownorth,c=yellowsouth); u9:pulse port map(clock=clock2,en=sz,clk=ca); u10:counter10 port map(clk=ca,set=sz,x=s0,y=ss0,c=cb); u11:counter6 port map(clk=cb,set=sz,x=s1,y=ss1,c=cc); u12:counter10 port map(clk=cc,set=sz,x=m0,y=sm0,c=cd); u13:counter6 port map(clk=cd,set=sz,x=m1,y=sm1,c=ce); u14:counter104 port map(clk=ce,set=sz,x=h0,y=sh0,c=cf,rd=ci,k=sand1); u15:counter2 port map(clk=cf,set=sz,x=h1,y=sh1,c=sand2,rd=ci); u16:and21 port map(a=sand1,b=sand2,c=ci); u17:decoder port map(seg=ss0,q3=sec0); u18:decoder port map(seg=ss1,q3=sec1); u19:decoder port map(seg=sm0,q3=min0); u20:decoder port map(seg=sm1,q3=min1); u21:decoder port map(seg=sh0,q3=hour0); u22:decoder port map(seg=sh1,q3=hour1); u23:adder port map(reset1=sz,clina1=h0,clinb1=h1, mina1=m0,minb1=m1,sina1=s0,sinb1=s1,zout1=sign1); u24:flashing port map(reset2=sz,clock2=sign2,dclk2=sign1,flash=ringg); u25:pulse port map(clock=clock2,en=sz,clk=sign2); u26:orgate port map(p=t1,q=ringg,w=t3); u27:orgate port map(p=t2,q=ringg,w=t4); u28:notgate port map(inn=ringg,outt=tt); u29:and21 port map(a=sz,b=tt,c=ff); u30:orgate port map(p=cr,q=ringg,w=cr1);end Behavioral;library IEEE;-加法器use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity adder isPort (reset1:in std_logic;clina1:in std_logic_vector(3 downto 0);clinb1:in std_logic_vector(3 downto 0);mina1:in std_logic_vector(3 downto 0);minb1:in std_logic_vector(3 downto 0);sina1:in std_logic_vector(3 downto 0);sinb1:in std_logic_vector(3 downto 0);zout1:out integer );end adder;architecture Behavioral of adder isbeginprocess(reset1,clina1,clinb1,mina1,minb1,sina1,sinb1)variable bzout,bzout1,bzout2:integer; begin if reset1=0 then bzout1:=conv_integer(clina1)*3600+conv_integer(mina1)*60+conv_integer(sina1); bzout2:=conv_integer(clinb1)*36000+conv_integer(minb1)*600+conv_integer(sinb1)*10;bzout:=bzout1+bzout2; else bzout:=0; end if; zout1=bzout;end process;end Behavioral;library IEEE;-二输入与门use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity and21 is Port ( a : in std_logic; b : in std_logic; c : out std_logic);end and21;architecture Behavioral of and21 isbegin c=a and b;end Behavioral;library IEEE;-状态控制器use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity controller is Port (a:in integer; en:in std_logic; u1,u2,u3,u4,u5,u6:out std_logic; u7,u8,u10,u11:out std_logic);end controller;architecture Behavioral of controller issignal ab:std_logic_vector(9 downto 0);begin u11=ab(9);u10=ab(8);u8=ab(7);u7=ab(6);u6=ab(5);u5=ab(4);u4=ab(3);u3=ab(2);u2=ab(1);u1=ab(0);process(a,en) begin if en=0 then abababababab=1111011011;end case;end if;end process;end Behavioral;library IEEE; use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity convert is Port (a:in std_logic; b,c:out std_logic);end convert;architecture Behavioral of convert issignal bc:std_logic_vector(1 downto 0);beginb=bc(0);cbcbcbc=00; end case; end process;end Behavioral;library IEEE;-十进制计数器use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity counter10 is Port ( set : in std_logic; clk : in std_logic;x : in std_logic_vector(3 downto 0); y : out std_logic_vector(3 downto 0); c : out std_logic);end counter10;architecture Behavioral of counter10 isbeginprocess(set,x,clk)variable cnt:std_logic_vector(3 downto 0); beginif set= 0 then cnt:=x;y=cnt;c=0; elsif clkevent and clk=1 then if cnt=1001 then cnt:=0000;y=cnt;c=1; else cnt:=cnt+1;y=cnt;c=0; end if; end if;end process;end Behavioral;library IEEE;-计数器use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity counter104 is Port ( set,rd,clk : in std_logic; x : in std_logic_vector(3 downto 0); y : out std_logic_vector(3 downto 0); c,k : out std_logic);end counter104;architecture Behavioral of counter104 isbegin process(set,clk,x,rd)variable cnt:std_logic_vector(3 downto 0);begin if rd=1 then cnt:=0000;y=0000;c=0;k=0; elsif set=0 then cnt:=x; y=cnt;c=0;k=0; elsif clkevent and clk=1 then if cnt=1001 then cnt:=0000;y=cnt;c=1;k=0;elsif cnt=0011 then cnt:=cnt+1;y=cnt;c=0;k=1; else cnt:=cnt+1;y=cnt;c=0;k=0; end if; end

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论