




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录目录 引言引言 第一章第一章 绪论绪论 .1 1.1 交通灯现状与发展.1 1.2 fpga/cpld 技术介绍.1 1.3 交通灯的简介 .3 1.4 本文的研究出发点和基本内容 .3 1.5 本章小结 .4 第二章第二章 总体方案设计总体方案设计 .5 2.1 设计任务与要求 .5 2.2 交通灯的组成方框图 .5 2.3 基本工作原理.5 2.4 本章小结.5 第三章第三章 单元电路设计方法单元电路设计方法 .7 3.1 时钟脉冲发生电路(即分频电路) .7 3.2 计数秒数电路 .7 3.3 倒计时显示电路 .7 3.4 红绿灯信号控制电路 .8 3.5 红绿交通灯控制器顶层电路设
2、计 .8 3.6 本章小结.9 第四章 基于 fpga/cpld 的十字路口交通灯的设计 .10 4.1 vhdl 程序设计 .10 4.1.1 clk_gen 时钟发生电路(即分频电路) .10 4.1.2 traffic_mux 计数秒数选择电路 .12 4.1.3 count_down 倒计时控制电路 .14 4.1.4 traffic_fsm 红绿灯信号电路 .17 4.2 芯片设置、编译、管脚设置 .22 4.3 仿真 .25 4.3 下载实验 .29 4.4 本章小结.30 第五章 系统测试 .31 5.1 硬件测试 .31 5.2 软件测试 .31 5.3 本章小结.32 第六章
3、 结论与展望 .33 参考文献 .34 致谢 .35 引言引言 随着社会经济的发展,城市交通问题越来越引起人们的关注。人、车、路三者关 系的协调,已成为交通管理部门需要解决的重要问题之一。城市交通控制系统是用于 城市交通数据检测、交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城 市交通监控指挥系统中最重要的组成部分。 随着城市机动车量的不断增加,许多大城市出现了交通超负荷运行的情况,因此, 自 80 年代后期,这些城市纷纷修建城市高速道路,在高速道路建设完成的初期,它们 也曾有效地改善了交通状况。然而,随着交通量的快速增长和缺乏对高速道路的系统 研究和控制,高速道路没有充分发挥出预期的
4、作用。而城市高速道路在构造上的特点, 也决定了城市高速道路的交通状况必然受高速道路与普通道路耦合处交通状况的制约。 所以,如何采用合适的控制方法,最大限制利用好耗费巨资修建的城市高速道路,缓 解主干道与匝道、城区同周边地区的交通拥堵状况,越来越成为交通运输管理和城市 规划部门亟待解决的主要问题。为此,设计了交通灯控制系统13。 社会不断进步,技术也在不断的发展。在当今的信息技术时代,交通灯控制系统 的实现可以有多种途径,可以用标准逻辑器件、可编程程序控制器 plc。单片机等方案 来实现。但是这些控制方法的功能修改及调试都需要硬件电路的支持,在一定程度上 增加了功能修改及系统调试的困难14。因此
5、,在设计中应用 eda 技术,应用目前广泛 应用的 vhdl 硬件电路描述语言,实现交通灯系统控制器的设计,利用 maxplus集成 开发环境进行综合、仿真,并下载到 cpld 可编程逻辑器件中,完成系统的控制作用。 第一章第一章 绪论绪论 1.1 交通灯现状与发展 近年来,随着我国经济的发展,城市的交通拥挤问题日趋严重,因此提高城市路网的 通行能力、实现道路交通的科学化管理迫在眉睫。传统的十字路口交通控制灯,通常的 做法是:事先经过车辆流量的调查,运用统计的方法将两个方向红绿灯的延时预先设置 好。然而,实际上车辆流量的变化往往是不确定的,有的路口在不同的时段甚至可能产 生很大的差异。即使是经
6、过长期运行、较适用的方案,仍然会发生这样的现象:绿灯方 向几乎没有什么车辆,而红灯方向却排着长队等候通过。这种流量变化的偶然性是无法 建立准确模型的,统计的方法已不能适应迅猛发展的交通现状,更为现实的需要是能有 一种能够根据流量变化情况自适应控制的交通灯12。目前,有多种对十字路口交通灯 的改良设计,有一种用 plc 对道路十字路口交通灯作自适应模糊控制的方法,较好地解 决了车辆流量不均衡、不稳定的问题。因此,十字路口交通灯控制的设计还存在非常广 阔的前景。 目前设计交通灯的方案有很多,有应用 cpld 设计实现交通信号灯控制器方法;有 应用 plc 实现对交通灯控制系统的设计;有应用单片机实
7、现对交通信号灯设计的方法。 目前,国内的交通灯一般设在十字路门,在醒目位置用红、绿、黄三种颜色的指示灯。 加上一个倒计时的显示计时器来控制行车。对于一般情况下的安全行车,车辆分流尚 能发挥作用,但根据实际行车过程中出现的情况,还存在以下缺点:1.只能够进行自 动控制,无法根据实际情况进行比较人性化的操作。2两车道的车辆轮流放行时间相 同,在十字路口,经常一个车道为主干道,车辆较多,放行时间应该长些;另一车道 为副干道,车辆较少,放行时间应该短些。3两条干道的红绿时间不能随时间的改变 而修改。 1.2 fpga/cpld 技术介绍技术介绍 当今社会是数字化社会,是数字集成电路广泛应用的社会。数字
8、集成电路本身在 不断地进行更新换代,它由早期的电子管、晶体管、小中规模集成电路发展到超大规 模集成电路以及许多具有特定功能的专用集成电路4。但是,随着微电子技术的发展, 设计与制造集成电路的任务已不完全由半导体厂商来独立承担,系统设计最好是在实 验室里就能设计出合适的 asic 芯片,并且立即投入实际应用之中,因而出现了现场可 编程逻辑器件(fpga) 。 fpga(现场可编程门阵列)与 cpld(复杂可编程逻辑器件)都是可编程逻辑器件, 它们是在 pal、gal 等逻辑器件的基础之上发展起来的。同以往的 pal、gal 等相比较, fpga/cpld 的规模比较大,它可以替代几十甚至几千块通
9、用 ic 芯片。这样的 fpga/cpld 实际上就是一个子系统部件。这种芯片受到世界范围内电子工程设计人员的 广泛关注和普遍欢迎。经过了几十年的发展,许多公司都开发出了多种可编程逻辑器 件。比较典型的就是 xilinx 公司的 fpga 器件系列和 alteral 公司的 cpld 器件系列, 它们开发较早,占有较大的 pld 市场4。 尽管 fpga、cpld 和其他类型 pld 的结构各有其特点和长处,但概括起来,它们是 由三大部分组成的:一个二维的逻辑块阵列,构成了 pld 器件的逻辑组成核心;输 入/输出块;连接逻辑块的互连资源,连线资源由各种长度的连线线段组成,其中也 有一些可编程
10、的连接开关,它们用于逻辑块之间、逻辑块与输入/输出块之间的连接。 对用户而言,cpld 与 fpga 的内部结构稍有不用,但用法一样,所以多数情况下不 加以区分。fpga/cpld 芯片都是特殊的 asic 芯片,它们除了具有 asic 的特点之外还具 有以下几个优点: 1、随着 vlsi(very large scale ic,超大规模集成电路)工艺的不断提高,单一 芯片内部可以容纳上百万个晶体管,fpga/cpld 芯片的规模也越来越大,其单凭逻辑门 数已达到上百万门,它所能实现的功能也越来越强,同时也可以实现系统集成。 2、fpga/cpld 芯片在出场之前都做过百分百的测试,不需要设计
11、人员承担头片风 险和费用,设计人员只需在自己的实验室里就可以通过相关的软硬件环境来完成芯片 的最终功能设计。所以,fpga/cpld 的资金投入小,节省了许多潜在的花费。 3、用户可以反复地编程、擦除、使用或者在外围电路不懂的情况下用不同软件就 可实现不同的功能。所以,用 fpga/cpld 试制作样片能以最快的速度占领市场。 fpga/cpld 软件包中有各种输入工具和仿真工具,及版图设计工具和编程器等全线产品, 电路设计人员在很短的时间内就可完成电路的输入、编译、优化、仿真,直至最后芯 片的制作。当电路有少量改动时更能现实出 fpga/cpld 的优势。电路设计人员使用 fpga/cpld
12、 进行电路设计时不需要具备专门的 ic(集成电路)深层次的知识, fpga/cpld 软件易学易用,可以使设计人员更能集中精力进行电路设计,快速将产品推 向市场。 在电子设计技术领域,可编程逻辑器件的广泛应用为数字系统的设计带来极大的 灵活性。高集成度、高速和高可靠性是 fpga/cpld 明显的特点。由于 fpga/cpld 的集 成规模非常大,可利用先进的 eda 工具进行电子系统设计和产品开发,在超高速应用 领域和实时测控方面有非常广阔的应用前景。可编程逻辑器件(pld,programmable logic device)是 20 世纪 70 年代发展起来的一种新型器件,他的应用和发展不
13、仅简 化了电路设计、降低了成本、提高了系统的可靠性,而且给数字系统的设计方式带来 的了革命性的变化。pld 雏形是 20 世纪 70 年代中期出现的可编程逻辑阵列 (pla,programmable logic array) ,后来出现了可编程阵列逻辑 pal,它由可编程的 与阵列组成,设计比较灵活,器件速度快,因而称为第一个得到普遍应用的 pld 器件4。 1.3 交通灯的简介交通灯的简介 城市道路交叉口是城市道路网络的基本焦点,也是网络交通流的瓶颈。目前,大 部分无控制交叉口都存在高峰小时车流混乱、车速缓慢、延误情况严重、事故多发、 通行能力和服务水平低下等问题。特别是随着城市车流量的快速
14、增长,称呼四无控制 道路交叉口的交通能力越来越大。因此,做好基于 eda 技术平台的交叉口信号控制涉 及是缓解交通阻塞、提高城市道路交叉口车辆通行效率的有效方法。交通信号控制的 目的是为城市道路交叉口(或交通网络)提供安全可靠和有效的交通流,通常最为单 唱的原则是车辆在交叉口的通过量最大或乘凉在交叉口的延误最小。 在十字路口,每条道路各有一组红、黄、绿灯和倒计时显示器,用以指挥车辆和行 人有序地通行。其中,红灯(r)亮,表示该道路禁止通行;黄灯(y)亮,表示停车; 绿灯(g)亮,表示可以通行。倒计时显示器是用来显示允许通行或禁止通行的时间。 交通灯控制器就是用来自动控制十字路口的交通灯和计时器
15、,指挥车辆和行人安全通 行。这是在正常情况下交通灯所具备的功能,但在我们的日常生活中,交通等还必须 更加人性化,也就是在特殊情况下还能够根据实际情况进行调整,或者是转换成人工 指挥。 1.4 本文的研究出发点和基本内容本文的研究出发点和基本内容 交通灯是保障城市交通有序、安全、快速运行的一种有效解决方案,能够根据现 代城市的特点设计适合的交通灯能够在很大程度上舒缓城市交通的压力,更好地促进 城市经济的发展。另一方面,数字集成电路的飞速发展以及在机械制造、冶金、化工、 能源等各种行业运用也使我们看到了集成电路带来的便利。本文正是将两者结合起来 进行学习,通过对交通灯的应用更好地学习数字集成电路的
16、相关知识。 传统数字电子技术的设计问题, 一般是用若干计数器、逻辑门、触发器等构成电 路,元器件众多,结果使电路中的接线多、故障率增加、可靠性降低。正是由于传统 的数字电路包含了这些缺陷,我们在不断的进行探索,开发新的技术。 eda (elect rical design a u tom at ion) 技术的发展, 在线可编程逻辑器件( in system p rogram - p rogramm ab le logic device 简称isp- pld )的出现, 使 实验室中制作专用集成电路成为可能。fpga/cpld芯片的种类很多,内部结构也不同, 但共同的特点是集成度高、使用方便。
17、用专用软件对芯片“下载”所形成的电路,就是 一片专用集成电路,由于不存在人工接线的问题,所以故障率低、可靠性好。 通过本课程的研究,我们将更好地了解到各大城市当今时代在交通灯方面的基本 设计方向以及存在的不足之处,同时,也让我们看到了数字集成电路在当今社会的一 个发展和了解到fpga/cpld芯片基本的应用方法以及需要掌握的知识,为以后的运 用打下坚实的基础。 1.5 本章小结本章小结 在本章中,通过对交通灯的现状与发展的了解,可以看到现有交通灯的功能、所 涉及到的一些技术以及存在的一些不足、交通灯的简介以及 fpga/cpld 技术的介绍等 内容,我们可以对本课题确定好设计方向以及所使用到的
18、技术工具。 第二章第二章 总体方案设计总体方案设计 2.1 设计任务与要求设计任务与要求 1、在十字路口的两个方向上各设一组红、黄、绿灯,显示顺序为其中一方向(东西方 向)是绿灯、黄灯、红灯;另一方向是红灯、绿灯、黄灯14。 2、设置一组数码管,以倒计时的方式显示允许通行或禁止通行的时间,其中绿灯、黄 灯、红灯的持续时间分别是 20s、5s、25s14。 3、当各条路上任意一条出现特殊情况时,如当消防车、救护车或其他需要优先放行的 车辆通过时,可以按下 a_m 按钮进去人工指挥状态,倒计时停止。当特殊运行状态结 束时后,控制器恢复原来状态,继续正常运行14。 2.2 交通灯的组成方框图交通灯的
19、组成方框图 按照自顶向下的层次化设计方法,整个系统可分为 4 个模块,分频电路、计数秒 数电路、倒计时控制电路、信号控制电路,其系统组成方框图如图 2-1 所示。 2.3基本工作原理基本工作原理 根据要求可以画出交通灯规律的状态转换表,见表 2-2.由表可知,共有 4 个状态, 可以利用状态机来实现各种状态之间的转换。 表表 2-2 交通灯控制器的状态转换表交通灯控制器的状态转换表 状态主干道支干道时间 st1绿灯亮红灯亮20s st2黄灯亮红灯亮5s st3红灯亮绿灯亮20s st4红灯亮黄灯亮5s 2.4 本章小结本章小结 eda 技术的基本设计方法有电路级设计方法和系统级设计方法。电路级
20、设计方法 已经不能适应新的形势,本系统采用的是系统级层次设计方法,对整个系统进行方案 设计和功能划分,系统的关键电路用一片 fpga 芯片实现,首先用 vhdl 语言编写各 个功能模块程序,最后通过综合器和适配器生成最终的目标器件,然后用顶层原理图 将各功能模块连接起来。 计数秒数电路 traffic_mux 1khz 倒计时控制电路 count_down 计 数 值 红、黄、绿发 光二极管 分频电路 clk_gen 信号控制电路 traffic_fsm 250hz 状态信 号、控 制信号 1hz 转 态 触 发 信 号 手 动 切 换 按 钮 1hz 七段数码管 图 2-1 系统组成方框图
21、第三章第三章 单元电路设计方法单元电路设计方法 3.1 时钟脉冲发生电路(即分频电路)时钟脉冲发生电路(即分频电路) 在红绿灯交通信号系统中,大多数的情况是通过自动控制的方式指挥交通的.因此,为 了避免意外事件的发生,电路必须给一个稳定的时钟(clock)才能让系统正常运作.但为了 配合高峰时段,防止交通拥挤,有时也必须使用手动控制,即让交警能够顺利地指挥交通。 clk_gen 电路最主要的功能是产生一些额外的输出信号,并将其使用做后续几个电路的使 能(enable)控制与同步信号处理1。模块如图 3-1 所示: 图 3-1 时钟脉冲发生电路模块图 3.2 计数秒数电路计数秒数电路 当过马路的
22、时候,绿灯的一方有时会附加一个显示器告诉行人,目前还剩下几秒信号 灯就变成红灯.因此,traffic_mux 电路最主要的功能就是负责输出显示器需要的值(即倒 数的秒数值),作为倒数显示器电路(count_down circuit)的计数秒数1。模块如图 3-2 所 示: 图 3-2 计数秒数电路模块图 3.3 倒计时显示电路倒计时显示电路 当过马路的时候,绿灯的一方有时会附加一个显示器告诉行人,目前还剩下几秒信号 灯就变成红灯.因此, count_down 电路最主要的功能是负责接收 traffic_mux 电路输出的 值(即倒数的秒值),然后将其转换成 bcd 码,利用七段显示器显示出来,
23、让行人能清楚地 知道再过多久就会变成红灯1。模块如图 3-3 所示 图 3-3 倒计时显示电路模块图 3.4 红绿灯信号控制电路红绿灯信号控制电路 在红绿灯交通信号系统中,大多数的情况是通过自动控制的方式指挥交通的.但为了 配合高峰时段,防止交通拥挤,有时还必须使用手动控制,即让交警自行指挥交通.因此, traffic_fsm 电路除了负责监控路口红绿灯之外,最主要的功能就是能够利用开关来切换 手动与自动的模式,让交警能够通过外部输入的方式来控制红绿灯交通信号系统的运作 1。模块如图 3-4 所示: 图 3-4 红绿灯信号控制电路模块图 3.5 红绿交通灯控制器顶层电路设计红绿交通灯控制器顶层
24、电路设计 将红绿灯交通信号系统中的 4 个子电路(clk_gen 时钟发生电路(即分频电路)、 traffic_mux 计数秒数选择电路、count_down 倒计时控制电路、traffic_fsm 红绿灯信号 电路)放进自己定义的程序包(package)中。将所有的子电路全部连接起来,进行时序分 析1。顶层电路原理图如图 3-5 所示: 图 3-5 红绿交通灯控制器电路原理图 3.6 本章小结本章小结 本课题设计的红路灯交通信号系统为模拟实际的十字路口交通信号灯。引进电路 模块合成的概念:将红绿灯交通信号系统划分成若干个小电路里,然后将各个模块电 路在顶层模块相连接。好处是可以增加程序的调试
25、速度,同时也能够将工作细分(这 种概念在以后编写较大型的 fpga 电路设计程序时,是非常重要且有用的) ,以提高编 程速度1。 第四章第四章 基于基于 fpga/cpld 的十字路口交通灯的设计的十字路口交通灯的设计 4.1 vhdl 程序设计程序设计 4.1.1 clk_genclk_gen 时钟发生电路时钟发生电路( (即分频电路即分频电路) ) 1、系统输入信号: clk:由外接信号发生路提供 1khz 的时钟信号; reset:系统内部自复位信号1; 2、系统输出信号: ena_scan:将外部的 clk 信号进行分频(此电路设计除 4)处理; ena_1hz: 产生每秒 一个脉冲(
26、pslse)的信号; flash_1hz;产生每秒一个脉冲的时钟信号,cpld 设计环境中,对所有 vhdl 程序 都加入下列几行有关库和程库包的调用1。 3、电路程序代码如下: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; -input and output pins declaraction a-library declaration library ieee; use ieee.std_logic_1164.all; use
27、 ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; -input and output pins declaraction entity clk_gen is port(reset: in std_logic; clk:in std_logic; ena_scan:out std_logic; ena_1hz:out std_logic; flash_1hz: out std_logic); end; architecture behavior of clk_gen is constant scan_bit: positive
28、 := 2; constant scan_val: positive := 4; constant two_hz_bit: positive := 7; constant two_hz_val: positive := 125; signal clk_scan_ff:std_logic_vector(scan_bit-1 downto 0); signal clk_2hz_ff:std_logic_vector(two_hz_bit-1 downto 0); signal ena_s,ena_one,ena_two:std_logic; begin -to generate 250hz ena
29、_s via dividing 1khz clock by 4 scan:process(reset,clk) begin if reset=1 then clk_scan_ff=00; ena_s=scan_val-1 then clk_scan_ff=00; ena_s = 1; else clk_scan_ff=clk_scan_ff+1; ena_s = 0; end if; end if; end process; ena_scan = ena_s; -to generate 1hz ena_1hz and flash_1hz via dividing 1khz clock by t
30、wo_hz:process(reset,clk,ena_s) begin if reset=1 then ena_one=0; ena_two=0; clk_2hz_ff=two_hz_val-1 then clk_2hz_ff=0000000; ena_two = 1; ena_one = not ena_one; else clk_2hz_ff=clk_2hz_ff+1; ena_two = 0; ena_one = ena_one; end if; end if; end if; end process; ena_1hz = ena_one and ena_two and ena_s;
31、flash_1hz = ena_one; end behavior; 4.1.2 traffic_muxtraffic_mux 计数秒数选择电路计数秒数选择电路 1、系统输入信号: clk:由外接信号发生路提供 1khz 的时钟信号; reset:系统内部自复位信号; ena_scan:接收由外部的 clk 信号进行分频提供的 250hz 的时钟脉冲信号; recount:接收由 traffi_fsm 电路产生的重新计数的使能控制信号; sign_state:接收由 traffic_fsm 电路产生的状态信号(共 2b,4 中状态) 2、系统输出信号: load:负责产生计数器所需的计数数值(
32、共 8b,可输入数值范围 0255) 3、电路程序代码如下: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity traffic_mux is port(reset: in std_logic; clk:in std_logic; ena_scan:in std_logic; recount:in std_logic; sign_state: in std_logic_vector(1 downto 0); load: o
33、ut std_logic_vector(7 downto 0); end; -define the signal_structure and flow of the device architecture behavior of traffic_mux is constant yellow0_time: integer := 5; constant green0_time: integer := 20; constant yellow1_time: integer := 5; constant green1_time : integer := 20; begin load_time:proce
34、ss(reset,clk) begin if reset=1 then load load load load load = conv_std_logic_vector(yellow1_time,8); end case; end if; end if; end process; end behavior; 4.1.3 count_downcount_down 倒计时控制电路倒计时控制电路 1、系统输入信号:、系统输入信号: clk:由外接信号发生路提供 1khz 的时钟信号; reset:系统内部自复位信号; ena_1hz:接收由 clk_gen 电路所提供的 1hz 的时钟脉冲信号; r
35、ecount:重新计数的使能控制信号; load:负责产生计数器所需的计数数值(共 8b,可输入数值范围 0255) 2、系统输出信号:、系统输出信号: seg7:负责将计数数值转换成 bcd 码,并利用七段显示器显示 next_state:当计数器计时完毕时,负责产生一个脉冲信号,作为转态触发信号。 3、电路程序代码如下:、电路程序代码如下: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity count_down is
36、 port(reset: in std_logic; clk:in std_logic; ena_1hz:in std_logic; recount:in std_logic; load: in std_logic_vector(7 downto 0); seg7:out std_logic_vector(15 downto 0); next_state: out std_logic); end; architecture behavior of count_down is signal cnt_ff:std_logic_vector(7 downto 0); begin count:proc
37、ess(clk,reset) begin if (reset=1) then cnt_ff=00000000; seg7=0000000000000000; elsif (clkevent and clk=1) then if ena_1hz=1 then if (recount=1) then cnt_ff=load-1; else cnt_ffseg7(15 downto 0)seg7(15 downto 0)seg7(15 downto 0)seg7(15 downto 0)seg7(15 downto 0)seg7(15 downto 0)seg7(15 downto 0)seg7(1
38、5 downto 0)seg7(15 downto 0)seg7(15 downto 0)seg7(15 downto 0)seg7(15 downto 0)seg7(15 downto 0)seg7(15 downto 0)seg7(15 downto 0)seg7(15 downto 0)seg7(15 downto 0)seg7(15 downto 0)seg7(15 downto 0)seg7(15 downto 0)seg7(15 downto 0)seg7(15 downto 0)seg7(15 downto 0)seg7(15 downto 0)seg7(15 downto 0)
39、seg7(15 downto 0)seg7(15 downto 0)seg7(15 downto 0)seg7(15 downto 0)seg7(15 downto 0)seg7(15 downto 0)=0011111100111111; end case; end if; end process; next_state = 1 when cnt_ff=1 else 0; end behavior; 4.1.4 traffic_fsmtraffic_fsm 红绿灯信号电路红绿灯信号电路 1、系统输入信号:、系统输入信号: clk:由外接信号发生路提供 1khz 的时钟信号; reset:系统
40、内部自复位信号; ena_scan:接收由外部的 clk 信号进行分频提供的 250hz 的时钟脉冲信号; ena_1hz:接收由 clk_gen 电路所提供的 1hz 的时钟脉冲信号; flash_1hz:接收由外部的 clk 信号进行分频提供的 250hz 的时钟脉冲信号; a_m:手动、自动切换按钮(1:自动,0:手动) ; st_butt:红绿等状态切换键(按一次就切换一个状态) (使用在手动模式下) ; 2、系统输出信号:、系统输出信号: recount:产生重新计数的输出使能控制信号; sign_state:产生的输出状态信号(共 2b,4 中状态) ; red:负责红灯的显示(共
41、 2b,4 中状态) ; green:负责绿灯的显示(共 2b,4 中状态) ; yellow:负责黄灯的显示(共 2b,4 中状态) ; 3、电路程序代码如下:、电路程序代码如下: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity traffic_fsm is port(reset:in std_logic; clk:in std_logic; ena_scan:in std_logic; ena_1hz:in std
42、_logic; flash_1hz:in std_logic; a_m:in std_logic; st_butt:in std_logic; next_state: in std_logic; recount: out std_logic; sign_state: out std_logic_vector(1 downto 0); red: out std_logic_vector(1 downto 0); green: out std_logic_vector(1 downto 0); yellow: out std_logic_vector(1 downto 0); end; archi
43、tecture behavior of traffic_fsm is type sreg0_type is (r0g1, r0y1, g0r1, y0r1, y0y1, y0g1, g0y1, r0r1); signal state: sreg0_type; signal st_transfer: std_logic; signal light: std_logic_vector(5 downto 0); - r(10)y(10)g(10) begin rebounce:process (reset,clk,ena_scan,st_butt) variable rebn_ff: std_log
44、ic_vector(5 downto 0); begin if (st_butt=1 or reset=1) then rebn_ff := 111111; st_transfer = 3) then rebn_ff := rebn_ff-1; st_transfer=0; elsif (rebn_ff=2) then rebn_ff := rebn_ff-1; st_transfer =1; else rebn_ff := rebn_ff; st_transfer =0; end if; end if; end if; end process; fsm: process (clk,ena_1
45、hz,reset) begin if (reset=1) then state=r0g1; - red=2b01; green=2b10; yellow=2b00; sign_state=01; recount - now state: red0 on green1 on if (a_m=1 and ena_1hz=1) then if (next_state = 1) then recount=1; state=r0y1; sign_state = 01; else recount=0; state=r0g1; -red=2b01; green=2b10; yellow=2b00; end
46、if; elsif (a_m=0 and ena_scan=1) then if (st_transfer=0) then - 0: unchange 1:transfer light state recount=1; state=r0g1; else recount=1; state=r0y1; sign_state - now state: red0 on yellow1 flash if (a_m=1 and ena_1hz=1) then if (next_state = 1) then recount=1; state=g0r1; sign_state = 10; else reco
47、unt=0; state=r0y1; - red=2b01; green=2b00; yellow=2b10; end if; elsif (a_m=0 and ena_scan=1) then if (st_transfer=0) then - 0: unchange 1:transfer light state recount=1; state=r0y1; else recount=1; state=g0r1; sign_state - now state: green0 on red1 on if (a_m=1 and ena_1hz=1) then if (next_state = 1
48、) then recount=1; state=y0r1; sign_state = 11; else recount=0; state=g0r1; - red=2b10; green=2b01; yellow=2b00; end if; elsif (a_m=0 and ena_scan=1) then if (st_transfer=0) then - 0: unchange 1:transfer light state recount=1; state=g0r1; else recount=1; state=y0r1; sign_state - now state: green0 on
49、red1 on if (a_m=1 and ena_1hz=1) then if (next_state = 1) then recount=1; state=r0g1; sign_state = 00; else recount=0; state=y0r1; - red=2b10; green=2b00; yellow=2b01; end if; elsif (a_m=0 and ena_scan=1) then if (st_transfer=0) then - 0: unchange 1:transfer light state recount=1; state=y0r1; else r
50、ecount=1; state=r0g1; sign_state state=r0g1; recount=0; sign_state = 00; end case; end if; end if; end process; - light: r(10)y(10)g(10) light = 010010 when (state=r0g1) else 011000 when (state=r0y1) else 100001 when (state=g0r1) else 100100 when (state=y0r1) else 110000; red = light(5 downto 4); ye
51、llow = light(3 downto 2) and (flash_1hz green = light(1 downto 0); end behavior; 4.2 芯片设置、编译、管脚设置芯片设置、编译、管脚设置 目前世界上有几十家生产 cpld/fpga 的公司,最大的三家是 altera、xilinx 和 lattice-vantis。这次我们的设计采用的是 altera 公司的产品(max7000s 系列的 epm7128slc84-15)以及他们的配套 eda 软件 max+plus。 1、指定设计的器件:、指定设计的器件: 在主菜单 assign 子菜单中选择 device,出
52、现如图 4-1 所示的对话框。首先选择 device family,然后再确定我们的目标器件,在出现的对话框中选择 max7000s 系列 的 epm7128slc84-15 作为目标器件。 图 4-1 指定目标器件 2、编译:、编译: 在主菜单的 max+plus中选择 complier,出现编译器窗口。此时可以在菜单 processing 中选择 function snf extractor 或 time snf extractor,前者用于功能仿真, 后者用于时序仿真,因此出现选择 function snf extractor,如图 4-2 所示。 图 4-2 编译 单击 start 按
53、钮开始编译,如果出错会有错误提示;否则会有信息窗口提示编译成功, 如图 4-3 所示。 图 4-3 编译信息提示 3、管脚设置:、管脚设置: 在主菜单 assign 子菜单中选择 pin/location/chip,在出现的如图 4-4 对话框中的 node name 栏中用键盘输入端口名,如 reset、seg70 等,如果输入的端口名正确,在右 侧的 pin type 栏将显示该信号的属性;在左侧的 pin 栏中,用键盘输入该信号对应的 引脚编号,如 17、30 等,然后按下面的 add 按钮,用同样的方法将其他引脚也锁定到 对应的引脚上,最后按下 ok 按钮即可完成在弹出的对话框中对所有
54、引脚的设置。 图 4-4 引脚锁定 分配完引脚后,必须再次编译。这次的编译必须是用于时序仿真的 time snf extractor,而不能是用于功能仿真的 function snf extractor。编译时的窗口如图 4-5 所 示: 图 4-5 重新编译 此时的编译窗口比之前多了以下几项:logic synthesizer(逻辑综合器) ; partitioner(分割器) ;fitter(适配器) ;assembler(装配器) 。另外仿真器网表 文件生成器也由之前的 function snf extractor 变成 time snf extractor。 综合器对 vhdl 代码进
55、行综合优化处理,生成门级描述的网表文件,这是将 vhdl 语言描述转化为硬件电路的关键步骤。 分割器的作用是:如果器件在编译时尚未选择目标器件,那么分割器会自动选择 合适的器件;如果项目对硬件资源要求过多而使目标器件不满足要求,那么分割器将 会把逻辑综合的结果分成几部分,便于用户采取芯片级联的方法实现设计。 适配器将综合后的网表文件针对某一具体的目标器件进行路基映射操作,包括底 层器件配置、逻辑分割、逻辑优化、布局布线等。 装配器功能块的作用是将适配器输出的文件,根据不同的目标器件、不同的配置 rom 产生多种格式的编程/配置文件,用于 pld 器件或 rom 用的是后缀为 pof 的编 程文
56、件(编程目标文件) 。 4.3 仿真仿真 1、打开波形编辑器中的、打开波形编辑器中的“输入节点输入节点”对话框对话框 在主菜单中的 max+plus子菜单中选择 waveform editor ,打开波形编辑器。然后在 node 菜单中选择 enter nodes from snf,如图 4-6 所示。 图 4-6 输入节点 2、选择要观察的节点、选择要观察的节点 图 4-7 选择观察节点 在如图 4-7 所示的对话框中,单击右上角的 list 按钮,在左边的 available node &groups 中就会出现与左下角的 type 对应的节点。选择所需观测的节点,然后单节 “=”,这些节
57、点就会出现在右边的的 selected nodes &groups 中,单击 ok,选择 的节点波形就会出现在波形编辑器中,如图 4-8 所示: 图:4-8 波形编辑 3、对、对 clockclock 进行赋值进行赋值 单击节点后,整个节点信号会反白显示;再单击左边的工具栏中的 clock 赋值工具, 修改时钟初始值和实际时钟周期倍数等值。这里将时钟设为 160ns 的周期性信号。 4、进行仿真、进行仿真 先将波形存盘,然后调用 max+plus菜单下的 simulator,单击 start 开始仿真, 下面分别给出四个子电路的仿真电路图。 时钟发生电路时钟发生电路 图 4-9 图 4-9 是
58、时钟发生电路的仿真图:假如 reset=0 且 clk 为上升沿触发时,当 clk_scan_ff 的值大于等于 3,则令 ena_s=1, clk_scan_ff=0;假如 reset=0 且 clk 为 上升沿触发时,当 clk_scan_ff 的值小于 3 则令 ena_s=0,clk_scan_ff= clk_scan_ff+1,也就是实现了时钟的 4 分频1。 计数秒数选择电路计数秒数选择电路 图 4-10 是计数电路的仿真图,从图中我们可以看到:假如 reset=0,clk 为上升 沿触发,且 ena_s 与 recount 为 1 时,当 sign_state=00,则将 gre
59、en0_time 的数值赋 给 load,此时 load=(20)10;假如 reset=0,clk 为上升沿触发,且 ena_s 与 recount 为 1 时,当 sign_state=01,则将 yellow0_time 的数值赋给 load,此时 load=(5)10;假如 reset=0,clk 为上升沿触发,且 ena_s 与 recount 为 1 时,当 sign_state=10,则将 yellow0_time 的数值赋给 load,此时 load=(20)10;假如 reset=0,clk 为上升沿触发,且 ena_s 与 recount 为 1 时,当 sign_stat
60、e=11,则将 yellow0_time 的数值赋给 load,此时 load=(5)10; 图 4-10 倒计时控制电路倒计时控制电路 如图 4-11 所示,假如 reset=0,clk 为上升沿触发,cnt_scan 为 1,recount 为 0 时,cnt_ff 减 1;假如 reset=0,clk 为上升沿触发 cnt_ff 会被转换成整数型。例如: cnt_ff=(0d)16,转换成整数之后 cnt_ff=(13)10,此时 case 对应状态 13,而 seg7(15down0)被设置为“0000011001001111” 1。 图 4-11 4.3 下载实验下载实验 cpld
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 出租责任合同范本
- 买卖合同和定制合同范本
- 佣金类合同范本
- 电气控制PLC习题(含答案)
- 厂房检查合同范本
- 上海旅游心得体会
- 三年级第一学期语文教学计划
- 三八妇女节工会活动策划方案
- 亚克力板材合同范本
- 厂房带看合同范本
- 好习惯成就好人生
- 大学物理马文蔚版PPT
- 内蒙古自治区高层建筑工程结构抗震基本参数表(2022年版)
- FZ/T 07010-2021绿色设计产品评价技术规范针织服装
- 2023年北京市中学生数学竞赛高一年级复赛试题及解答
- 乙酰基乙烯酮(双烯酮;二乙烯酮;双乙烯酮)的理化性质及危险特性表
- 酒店机房巡视签到表
- API-650-1钢制焊接石油储罐
- 鼠疫演练脚本
- 变压器试验精品课件
- 危险化学品从业单位安全生产标准化宣贯
评论
0/150
提交评论