文档详情

毕业设计_基于vhdl的交通灯控制器的设计与实现.doc

发布:2016-06-07约1.11万字共24页下载文档
文本预览下载声明
华中科技大学 基于xilinx FPGA的VHDL交通灯控制器的设计 --基于Spartan3E开发板 专业: 电子信息工程 任务设计要求   由系统设计原理图,我以清楚将系统模块:分频模块,时间设置模块,状态转换模块,时间计算模块,,模块。 分频模块 时间模块 main_gh,main_gl,main_lh,main_ll,branch_gh,branch_gl,branch_lh,branch_ll(下划线后面的字母分别取green,left,high,low首字母).需要置数时首先选择对主干道还是支干道时间置数设置一,当高时设置支干道时间,为低时设置主干道时间。,通过s_set_button,l_set_button时间具体方法参见代码。为了方便,引入一个add_or_decent,低电平时button可以增计数,高电平时按下可以减计数。 状态转换模块 state、s_or_l为00、01、10、11来代表。每当一个状态的计数器为00时,state、s_or_l发生改变,以实现状态间的转换,进而控制交通灯的变化。 4)时间计算模块 了左转红灯时间不仅仅是另一干道的直行时间,而是直行时间和左转时间之和5)LCD显示模块 模块 branch_green,branch_red的不同值,来控制主干道,支干道红绿左转灯的亮灭。 其中 1表示亮,0表示灭。如表3-1 所示。 由上表可得到: main_green = NOT(state) AND NOT(s_or_l) AND (NOT((flash AND clk))); main_left = NOT(state) AND s_or_l AND (NOT((flash AND clk))); main_red = state; branch_green = state AND NOT(s_or_l) AND (NOT((flash AND clk))); branch_left = state AND s_or_l AND (NOT((flash AND clk))); branch_red = NOT(state); 2.输入输出设计 设计,具体输入输出如下: : 开关:main_or_branch EN: 使能信号 run_or_set: 设置运行模式还是时间设置模式 add_or_decent: 置数模式:增加或者减少 按键:s_set_button l_set_button: 左转时间设置按钮 时钟:clk 输出: LED灯:main_green,main_red,main_left branch_left,branch_green,branch_red 状态转换图 S1状态:主干道左转、支干道红灯 S2状态:支干道绿灯、主干道红灯 S3状态:支干道左转、主干道红灯 三.各模块代码以及仿真波形 分频模块代码 因为1HZ波形太长,不易仿真,故仿真波形采用100HZ的 输入clk :50MHZ 输出clk1:100HZ 时间设置模块部分代码 以上是直行时间设置代码。左转设置类似,在此不再复制 仿真 设置 输入 :clk main_or_branch 设置为0 add_or_decent 设置为0 s_set_button 设置为周期为1周期的信号 l_set_button 设置为低电平 波形如下 时间计算模块代码 波形仿真 输入输出与预期相符合。 状态转换模块 波形仿真 分别给主干道,支干道个颜色灯持续时间赋值,再给定,当前亮灯的剩余时间,然后又进行仿真,结果符合预期 LED模块代码 波形仿真 分别给予输入不同周期的高低点评,相互叠加的结果符合预期。 LCD模块代码 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity LCD is port( clk : in STD_LOGIC; rst_n : in STD_LOGIC; counter_play1h, counter_play1l : in STD_LOGIC_VECTOR(3 downto 0); counter_play2h, counter_play2l : in STD_LOGIC_VECTOR(3 downto 0); --de
显示全部
相似文档