基于vhdl的交通灯设计毕业论文内容摘要:

[PORT(端口表 ); ] END ENTITY 实体名; 结构体 结构体也叫构造体,结构体描述了基本设计单元 (实体 )的结构、行为、元件及内部连接关系,也就是说它定义了设计实体的功能,规定了设计实体的数据流程,制定了实体内部元件的连接关系。 结构体对其基本设计单元的输入和输出关系可用以下三种方式进行描述 ,即行为描述 (基本设计单元的数学模型描述 )、寄存器传输描述 (数据流描述 )和结构描述 (逻辑元件连接描述 )。 结构体是对实体功能的具体描述,因此它一定要跟在实体的后面。 9 块 语 句 ( B L O C K )元 件 例 化 语 句子 程 序 调 用 语 句信 号 赋 值 语 句进 程 语 句 ( P R O C E S S )说 明 语 句结 构 体 ( A R C H I T E C T U R E )功 能 描 述 语 句 图 21: 结构体构造图 块、子程序和进程 块语句 (BLOCK):在较大规模的电子系统设计中,传统的硬件电路设计通常包括一张系统总电路原理图和若干张子原理图。 在 VHDL 程序设计中,结构体是由多个 BLOCK 块构成的,如果将结构体比做总电路原理图,那么,每个BLOCK 块则相当于 一张子原理图。 BLOCK 块语句的结构: 块标号: BLOCK 接口说明 类属说明 BEGIN 并行块语句 END BLOCK(块标号 ); 进程 (PROCESS): PROCESS 结构是最能体现 VHDL 语言特色的语句。 与BLOCK 语句一样,利用 PROCESS 语句结构可以描述一个功能独立的电路。 与BLOCK 语句不同之处是,在系统仿真时, PROCESS 结构中的语句是按顺序逐条向下执行的,而不像 BLOCK 语句那样并发执行。 一个结构体中可以有多个并行运行的 进程结构,每一个进程内部是由一系列顺序语句来构成的。 PROCESS 语句的结构 [进程标号 ] PROCESS [(敏感信号表 )] [IS] 10 [进程说明语句 ] BEGIN 顺序描述语句 END PROCESS [进程标号 ]; 子程序 (SUBPROGRAM): VHDL 程序与其他软件语言程序中应用子程序的目的是相似的,即能够更有效地完成重复性的工作。 子程序模块是利用顺序语句定义和完成算法的,但子程序不能像进程那样可以从本结构体的其他块或进程结构中读取信号值或向信号赋值,只能通过子程序调用与子程序的界 面端口进行通信 [12]。 子程序被调用时,首先要初始化,执行处理功能后,将处理结果传递给主程序。 子程序内部的值不能保持,子程序返回后才能被再次调用并初始化。 子程序有两种类型:过程 (PROCEDURE)和函数 (FUNCTION)。 1.过程 (PROCEDURE) 过程语句的书写格式为: PROCEDURE 过程名 (参数表 )IS [说明部分 ] BEGIN 过程语句部分 END PROCEDURE 过程名; 函数的语言书写格式为: FUNCTION 函数名 (参数表 ) RETURN 数据类型 IS [说明部分 ]; BEGIN 顺序语句; RETURN [返回变量名 ]; END RETURN 函数名; 库和程序包 库和程序包用来描述和保留元件、类型说明函数、子程序等,以便在其它设 11 计中可以随时引用这些信息,提高设计效率。 库 (LIBRARY):库是经编译后的数据的集合,它存放包集合定义、实体定义、结构定义和配置定义。 库语句的格式为: LIBRARY 库名; 程序包 (package):程序包也叫包集合,主要用来存放各个设计都能共享的数据类型、子程序说明、属性说明和元件说明等部分。 设计者使用时只要用 USE子句进行说明即可。 程序包由两部分组成:程序包首和程序包体。 程序包的一般书写格式如下: PACKAGE 程序包名 IS END [PACKAGE] 程序包名; 程序包首 PACKAGE BODY 程序包名 IS ┇ 程序包体 END [PACKAGE BODY] [程序包名 ]; 默认配置 配置语句描述了层与层之间的连接关系,以及实体与构造体之间的连接关系。 (一个实体 (ENTITY)可以有多个构造体 )设计者可以利用配置语句选择不同的构造体,使其与要设计的实体相对应;在仿真某一个实体时,可以利用配置选择不同的构造体进行性能对比实验,以得到性能最佳的构造体。 在用 VHDL 描述硬件电路时,常常采用结构描述方式和混合描述方式。 在这两种描述方式中,常常需要将其他设计实体作为元件进行引用,这时就需要将不同元件通过配置安装到不同的设计实体中。 VHDL提供了配置语句用于描述各种设计 实体和元件之间连接关系以及设计实体和结构体之间的连接关系 [13]。 默认配置语句的基本格式为: CONFIGURATION 配置名 OF 实体名 IS FOR 选配结构体名 END FOR END 配置名; 12 VHDL 最基本的描述方法 结构体的行为描述法 所谓结构体的行为描述 (behavioral descriptions),即对设计实体按算法的路径来描述。 行为描述在 EDA 工程中称为高层次描述或高级描述,原因有以下两点: (1)实体的行为描 述是一种抽象描述,而不是某一个器件,对电子设计而言,是高层次的概括,是整体设计功能的定义,所以称为高层次描述。 (2)从计算机领域而言,行为描述和高级编程语言类似,所以计算机业内人士通常称之为高级描述。 当用顺序执行结构体的行为描述时,设计工程师可为实体定义一组状态时序机制,不需要互连表,无须关注实体的电路组织和门级实现,这些完全由 EDA工具综合生成,设计工程师只需注意正确的实体行为、准确的函数模型和精确的输出结果。 结构体的数据流描述法 数据流描述 (dataflow description)是结构体描述方法之一,它描述了数据流程的运动路径、运动方向和运动结果。 数据流描述法采用并发信号赋值语句,而不是进程顺序语句。 一个结构体可以有多重信号赋值语句,且语句可以并发执行。 13 第 三 章 交通灯系统的设计 红绿灯交通信号系统功能描述 在交通信号灯的设计中,系统功能设计要求主干道各设有一个绿、黄、红指示灯。 主干道绿灯亮时,支干道红灯亮,反之亦然,两者交替允许通行。 主干道每次放行 25s,支干道每次放行 15s。 每次由绿灯变为红灯的过程中,亮光的黄灯作为过渡,黄灯的时间为 5s。 能实现 正常的倒计时显示功能。 能实现总体清理功能,计数器由初始状态开始计数,对应状态的指示灯亮。 外部硬件电路方面主要包括:两组红绿灯、两组 LED 显示器。 软件方面包括:( 1)电路合成模块的概念:将交通灯信号系统划分成若干个小电路,编写每一个模块的 VHDL 程序代码,并将各个小电路相连接。 这样可以增加程序的调试速度,同时也能够将工作细分,以提高编程速度(见图 31)。 ( 2)参数化的概念:针对不同时段的交通流量,可以调整红绿灯电路(增加或者减少电路的计数时间),以增加程序的灵活性。 图 31 交通信号灯系统结构图 由交通信号灯系统结构图 (见图 31)可知,该系统由 4 个子电路组成。 其中包括: ( 1) 时钟发生电路; ( 2) 计数秒数选择电路; 时 钟 发 生 电 路 计数秒数选择电路 红绿灯信号控制电路 倒计时控制电路 时钟输入端 系统复位端 东西及南北 方向信号灯 东西及南北 方向倒计时 14 ( 3) 倒计时控制电路; ( 4) 红绿灯信号控制电路。 系统的模块设计 时钟脉冲发生电路 在红绿灯交通信号系 统中,大多数的情况是通过自动控制的方式指挥交通的。 因此,为了避免意外事件的发生,电路必须给出一个稳定的时钟( clock)才能让系统正常的工作。 因此, hld1 时钟发生电路最主要的功能就是产生一些稳定的输出信号,并将其用做后面几个电路的使能控制与同步信号。 程序如下(见附录) 图 32 是时钟脉冲发生电路的元件模块图。 图 32: 时钟发生电路模块图 系统输入信号: clk:由外部信号发生器提供 1kHZ的时钟信号; reset:系统内部自复位信号。 系统输出信号: ena_scan:将外部 的时钟信号进行分频处理; ena_1hz:产生每秒一个的脉冲信号; flash_1hz:产生每秒一个脉冲的时钟信号。 图 33是时钟脉冲发生电路通过 Quartus II软件仿真得到的仿真波形图。 图 33: 时钟发生电路时序图 15 从图 33 可以看出,当加入 1kHZ 的时钟信号后, ena_1hz 产生了周期为一秒的脉冲信号, flash_1hz产生了周期为一秒的脉冲时钟信号。 在这段程序的设计过程中最大的特点就是引用了参数化的概念,即使用了常数 (constant)。 常数的定义和设置主要是为了使程序更容易阅读和修改,只要改变了常量的数值,使用到该常数的地方都会随着更新而使用新的常数值。 这就使设计的灵活性增强了。 例如程序中用到的: constant scan_bit:positive:=2。 signal clk_scan_ff:std_logic_vector(scan_bit1 downto 0)。 第 一 句 就是 将scan_bit 设为常数 ‘ 2’,这个数值是可以根据设计的需要任意设定的。 第二句是定义一个信号,它的位数就是 (scan_bit1),因为之前 scan_bit 设定的值为 2,所以信号的位数就是 2 位。 如果想增减信号的位数,只需要改动常数的赋值就可以了。 计数秒数选择电路 当通过交通路口时,如果能在一个方向增添一个倒计时显示器对车辆、行人加以提示,可能会有更好的效果。 因此 ,计数秒数选择电路最主要的功能就是负责输出显示器需要的数值(即倒数的秒数值),作为倒计时显示器电路的计数秒数。 程序如下(见附录) 图 34 是计数秒数选 择电路的元件模块图。 图 34: 计数秒数选择电路模块图 系统输入信号: clk:由外部信号发生器提供 1kHz的时钟信号; reset:系统内部自复位信号; ena_scan:接收由时钟发生电路提供的 250Hz的时钟脉冲信号; recount:接收由交通灯信号控制电路产生的重新计数的使能控制信号; sign_state:接收由交通灯信号控制电路产生的状态信号。 系统输出信号: load:负责产生计数器所需要的计数数值。 16 图 35 是计数秒数选择电路通过 Quartus II 软件仿真得到的仿真波形图。 图 35: 计数秒数选择电路时序图 由计数描述选择电路的时序图 (见图 35)可以看出这段程序中定义了在正常车流量情况下,东西及南北方向红灯、黄灯和绿灯需要维持的秒数分别是 15s、5s 和 25s。 当外部信号发生器提供了 1kHZ 的时钟信号,并且重新计数信号 (recount)为“ 1”时 ,load 信号就会按照预先设置的数值逐 1 递减 ,直至减到零为止 ,当下一个重新计数信号 (recount)再次为“ 1”时,会重复此过程。 倒计时控制电路 通过日常生活中的观察,我发现在一些交通路口已经开 始使用倒计时显示器,它们的作用就是用来提示车辆行人目前还有多长时间信号灯会发生变化,这样车辆行人就可以提前判断是否有足够的时间通过路口,进而就可以避免很多意外事故的发生。 例如:南北方向绿灯,车辆处于正常行驶中,东西方向红灯,车辆处于等待中,若南北方向行驶的车辆看到倒计时显示器上可以通行的时间很短,可能就会放慢速度等待下一次通行,这样在东西方向绿灯时,车辆就能够正常行驶,不会为等待南北方向强行的车辆而耽误更多的时间。 如此循环下去,道路就会畅通无阻了。 考虑到有些路口的交通拥堵现象较为严重,车辆会在道路上排成很长 的一队,这样排在较远距离的司机就很难看清楚倒计时显示器上变化的数字,有可能会影响到车。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。