《EDA实验教程-红绿灯-医学资料》由会员分享,可在线阅读,更多相关《EDA实验教程-红绿灯-医学资料(39页珍藏版)》请在金锄头文库上搜索。
1、2020 1 12 1 计算机EDA设计 实验教程 实验五交通红绿灯控制器 北航计算机学院艾明晶 2020 1 12 2 内容概要 实验目的实验要求实验原理实验方案实验内容实验报告 2020 1 12 3 了解交通红绿灯控制器的工作原理 掌握建立状态机的逻辑模型的方法 掌握状态机的实现和多个状态机的组合使用方法 实验目的 2020 1 12 4 假定十字路口马路的A方向和B方向各有一组红 黄 绿三个灯组成的交通灯 要求设计一个交通红绿灯控制器 实现对这两组交通灯的管理 正常时 交替放行十字交叉路的两个方向 放行时间相等 交通堵塞时 由交通警察人工控制某方向的放行时间 以便按照交通负荷疏导阻塞车
2、辆 具体功能要求如下 实验要求 2020 1 12 5 在正常运行状态下 两组交通灯按以下规律自动进行转换 在不同时刻分别放行不同方向上的车辆 绿 红 50s 黄绿 红 5s 黄 红 20s 红黄 红 20s 红 黄 10s 红 绿 50s 红 黄绿 5s 红 黄 20s 红 红黄 20s 黄 红 10s 绿 红 50s 2020 1 12 6 人工放行 若某一方向发生交通阻塞 则交通警察按下该方向的放行按钮来人工控制放行该方向 则红绿灯自动将相应方向的道路放行 此后不会自动放行另一个方向的道路 直到疏通后 按 恢复到正常状态 按钮 重新进入正常运行状态 如果某方向处于人工放行的状态 应有指示
3、灯指示这一情况 2020 1 12 7 人工控制放行遵循如下限制规则 有黄灯亮时 不允许立刻改变放行方向 必须按正常运行到所需放行的方向时 才保持放行该方向 每个方向的放行时间不得小于某一最小值 假定为30秒钟 以免车辆频繁起停 只有在 绿 红 20s和 红 绿 20s状态下 可以人工控制改变放行方向 即直接跳转到下一状态 2020 1 12 8 基于状态机的设计有限状态机有限状态机 FSM FiniteStatemachine 是时序电路设计中经常采用的一种方式 尤其适合于设计数字系统的控制模块 在VerilogHDL中采用case if else语句可以很好地描述基于状态机的设计 状态机包
4、括组合逻辑部分和寄存器部分 组合逻辑部分又包括次态逻辑和输出逻辑 分别用于状态译码和产生输出信号 寄存器部分用于存储状态 实验原理 2020 1 12 9 状态机的次态是现态及输入信号的函数 输出信号根据状态机的现态或输入信号而定 状态机可分为两类 摩尔 Moore 型状态机和米里 Mealy 型状态机 Moore型状态机 其输出只为状态机当前状态的函数 而与输入无关 Mealy型状态机 其输出不仅与状态机当前状态有关 而且与输入有关 2020 1 12 10 2020 1 12 11 状态机的3种表示方法状态图 状态表和流程图 Mealy型状态图的表示 Moore型状态图的表示 2020 1
5、 12 12 起始状态的选择起始状态指电路复位后所处的状态 选择一个合理的起始状态将使整个系统简捷高效 对于有限状态机 必须有时钟信号和复位信号 状态编码采用log2N个触发器来表示这N个状态采用N个触发器来表示这N个状态 称为一位热码状态机编码 One HotStateMachineEncoding 2020 1 12 13 采用VerilogHDL语言实现基于状态机的设计 就是在时钟信号的触发下 完成两项任务 1 用case或if else语句描述出状态的转移 2 描述状态机的输出信号 2020 1 12 14 输入信号和输出信号输入信号clk 时钟信号 fclk 50MHz f1 人工放
6、行A方向的控制信号 由 放行A 按钮产生 高有效 f2 人工放行B方向的控制信号 由 放行B 按钮产生 高有效 reset 复位信号 由 恢复到正常状态 按钮产生 高有效 2020 1 12 15 输出信号f1s f2s 人工控制时A方向 B方向的放行状态 驱动LED 高电平时点亮 s1 2 0 s2 2 0 交通灯信号输出 分别用于控制A方向和B方向的红 黄 绿灯的亮或灭 驱动LED 高电平时点亮 2020 1 12 16 设计思路根据其功能要求 如正常运行状态下的交通灯自动转换规律 人工放行功能及限制规则 确定其输出信号 以便控制两组交通灯的亮或灭 并在交通岗内向交通警察显示人工放行的状态
7、 该控制器的逻辑模型可分为三个部分 工作状态控制器 操作规则实现电路以及红绿灯信号生成器 2020 1 12 17 1 工作状态控制器功能 根据输入信号 f1 f2和reset 确定系统当前的工作状态是为 正常运行 状态或 A一直放行 或 B一直放行 状态 工作状态控制器是一个简单的具有三状态 normal fr1 fr2 的有限状态机 其输入分别为人工放行A方向的控制信号f1 人工放行B方向的控制信号f2及复位信号reset 均为高有效 其输出为人工控制时A方向 B方向的放行状态 预习时请画出其状态转移图 想一想 工作状态控制器为Mealy型状态机还是Moore型状态机 为什么 2020 1
8、 12 18 2 操作规则实现电路功能 根据交通红绿灯控制器的功能要求 确定不同工作状态下计时器的计数值 可用8位计数器来实现定时计数 正常运行时 计数器按照规定的定时要求加1计数 若要人工放行某方向 只要使计时器运行到该放行状态的最后一刻时 计时器保持此时的计数值 使红绿灯信号生成器暂停状态的转移即可 2020 1 12 19 设计技巧 将放行某方向的整个时间 50s 分为两段 前30s为正常运行状态下的最小放行时间 计时器正常计数 后20s为允许人工放行时间 可根据工作状态控制器的状态机 f1s和f2s 进行判断 是否欲人工放行另一方向 或是继续放行原方向 或是正常运行 然后根据判断结果来
9、确定计时器的计数值 限制规则示意图 2020 1 12 20 3 红绿灯信号生成器功能 根据定时计数器的计数值来确定红绿灯信号的输出 这是一个简单的状态机 共有10个不同状态 有6个输出 为s1 2 0 和s2 2 0 分别用于控制A B两个方向的红 黄 绿灯的亮或灭 可以对照图5 1 正常运行状态下两组交通灯自动转换规律 根据计时器的计数值来确定红绿灯信号生成器的输出 注意计时器的一个工作循环为一个正常的红绿灯工作周期 即210秒 预习时请画出其状态转移图 2020 1 12 21 设计方案的选择图文混合设计方法 先将电路划分为几个子模块 每个子模块由VerilogHDL语言描述实现 然后生
10、成逻辑符号 顶层文件采用图形文件来实现 纯文本描述方法 每个子模块和顶层电路的连接关系都采用VerilogHDL语言描述实现 对子模块的调用采用模块元件例化的方法 2020 1 12 22 实验方案 方案一1 设计思路根据控制器的逻辑模型 将整个电路分为3个子模块 即工作状态控制器state ctrl v 操作规则实现电路rule v和红绿灯信号生成器sig gen v 它们均采用VerilogHDL语言实现 然后形成顶层图形设计文件trgl top bdf 2020 1 12 23 工作状态控制器state ctrl v 2020 1 12 24 操作规则实现电路rule v 2020 1
11、12 25 红绿灯信号生成器sig gen v 2020 1 12 26 顶层图形设计文件trgl top bdf 2020 1 12 27 2 对trgl top bdf进行时序仿真 3 创建下载用顶层文件将trgl top bdf另起名保存 如trgl top p bdf 并在其时钟输入引脚后增加时钟分频模块clkdiv 50MHz to 1Hz 将输入时钟fclk 50MHz分频为f 1Hz 即T 1s 编译 引脚锁定 2020 1 12 28 编程下载文件trgl top p bdf 2020 1 12 29 方案二1 设计思路将控制器的三部分电路有机地结合到一起 用一个文件采用Ver
12、ilogHDL语言实现 文件名为trgl2 v 其中用到了两个reg型中间变量 1 state 工作状态控制状态机 具有3个状态 normal fr1 fr2 2 8位寄存器cnt 7 0 用于红绿灯信号生成器的定时计数 采用3个always模块来实现这三部分电路 实际上就是将方案一中的3个子模块的VerilogHDL描述放到一个文本文件中 2020 1 12 30 2 在Quartus 中进行时序仿真3 设计下载用顶层文件 编程下载采用VerilogHDL语言设计顶层文件引脚锁定 编程下载 2020 1 12 31 分别画出工作状态控制器和红绿灯信号生成器的状态转移图 操作规则实现电路的程序
13、流程图采用方案一或方案二 有余力的同学也可以两种方案都采用 按实验要求给出的功能要求设计交通红绿灯控制器 实验内容 2020 1 12 32 仿真使输入信号均无效 仿真至少一个循环周期的正常运行状态 观察状态机state 1 0 以及输出信号f1s f2s s1 2 0 和s2 2 0 的变化 将仿真结果保存为trgl top normal vwf 正常运行时的仿真参考波形一 2020 1 12 33 正常运行时的仿真参考波形二 210秒为一周期 2020 1 12 34 在不同的时段给定不同的输入信号 在每种情况下观察状态机state 1 0 以及输出信号f1s f2s s1 2 0 和s2
14、 2 0 的变化 2020 1 12 35 设计下载用顶层文件仿真完全正确后 在原设计基础上增加时钟分频模块 将输入时钟fclk 50MHz分频为f 1Hz 即T 1s 形成下载用顶层文件 可以为图形设计文件或 v文本设计文件 对下载用顶层文件进行全编译 2020 1 12 36 引脚锁定本实验采用模式3 所有按键为琴键式按键 即当按下键时 输出为高电平 当松开键时 输出为低电平 可通过按下键的时间的长短来控制正脉冲的宽度 clk 系统时钟信号 50MHz 接FPGA引脚Pin28 注意应将下图中的J6插到Clock0的位置 并将实验箱右下角 时钟频率选择 区域Clock0的时钟选择跳线接到5
15、0MHz的位置 2020 1 12 37 编程下载利用GW48 SOPC 开发系统实现设计的编程下载 编程器件为EP1C12Q240C8 使用开发系统上的晶振提供的全局时钟信号 fclk 50MHz Pin28 用琴键式按钮开关键1 键2和键3 均为高有效 实现人工控制放行A方向和B方向 复位功能 用8个发光二极管 高有效 D1 D8 分别显示输出信号s1 2 0 s2 2 0 f1s和f2s 2020 1 12 38 在线校验下载后 仔细观察 红绿灯应按设定的时间规律自动切换 D1 D8八个LED分别对应的是 A方向的红黄绿 B方向的红黄绿 A方向的放行状态 B方向的放行状态 然后按下键1
16、表示欲人工放行A方向 则相应LED有显示 同时两个方向的红绿灯按正常运行规律自动切换 当运行到放行A方向时 则保持放行该方向 再按下键2 表示欲人工放行B方向 则相应LED有显示 同时两个方向的红绿灯按正常运行规律自动切换 当运行到放行B方向时 则保持放行该方向 再按下键3 表示清除人工方向的控制 则交通灯开始自动转换红黄绿灯的状态 2020 1 12 39 给出红绿灯信号生成器和工作状态控制器的状态转移图 以及操作规则实现电路的程序流程图 给出控制器逻辑模型的仿真波形的截图 并根据仿真结果详细分析交通红绿灯控制器的工作过程 思考 当正值A方向红灯亮 B方向红灯与黄灯均亮时 若按下A方向放行按钮 是否允许立刻变为A方向绿灯亮 B方向红灯亮 如果控制器这样设计 实际可能会发生什么情况 正确的设计应是怎样 想一想 当正值A方向绿灯亮 B方向红灯亮时 若又按下了A方向放行按钮 为什么是当计时器计到49时 才暂停计数 使计数值保持为49 而不是使计时器计到30时 就暂停计数 使计数值保持为30 如果这样设计 会有什么缺陷 在设计中遇到了哪些问题 是如何解决的 想一想 本实验还可以扩展哪些功能