文档详情

状态机例子.ppt

发布:2018-01-16约1.09万字共49页下载文档
文本预览下载声明
交通灯控制器三的描述 // 状态转移控制 // 公路通行状态 删除 // 人行道有人申请 // 状态转移至公路黄灯 // 计时器清0 // 人行道通行状态 //人行道通行时间等于TF // 状态转移至双向红灯 // 计时器清0 case (state) `HIGH_PASS: // if (counter == `TH) begin if (req) begin state = `HIGH_YELLOW; counter = 0; end `FOOT_PASS: if (counter == `TF) begin state = `ALL_STOP; counter = 0; end d …… ? 把计数器切换改为由人行道申请按钮切换 交通灯控制器三的测试平台 reg req; // 增加按钮信号 …… case (count) 100, // 行人较少 700, 1500, // 以下行人数量增多间隔变小 1540, 1580, 1620, 1660:req = 1; 2000:$finish; default: req = 0; endcase 交通灯控制器三的结果 ?实现自动切换,安全转换 ?实现可以随时中断 ?行人很少时效率提高 ?仍然存在效率问题 ?连续有行人通过时,公路通行效率低极 低 ?需要考虑最低通行时间长度 交通灯控制器四状态转移图 公路通行 req counter =TH counter==TA 双向红灯 公路黄灯 人行道通行 counter==TF counter==TY 交通灯控制器四的描述 `HIGH `FOOT case (state) `HIGH_PASS: // if (req) begin if (req counter = `TH) begin state = HIGH_YELLOW; counter = 0; end FOOT_PASS: // 状态转移控制 // 公路通行状态 修改为 // 公路通行时间超过TH // 且有行人申请 // 状态转移至公路黄灯 // 计时器清0 // 人行道通行状态 if (counter == `TF) begin //人行道通行时间等于TF state = `ALL_STOP; // 状态转移至双向红灯 counter = 0; // 计时器清0 end …… ? 把仅由人行道申请按钮切换改为与计时器一起判断转换 交通灯控制器四的测试平台 case (count) 100, // 行人较少 700, 1500, // 以下行人数量增多间隔变小 1540, 1580, 1620, 1660, // :req = 1; 2000, 2100, // 测试按下按钮没有反应的情况 2500:req = 1; 3000:$finish; default: req = 0; endcase 交通灯控制器四的结果 ?实现自动切换,安全转换 ?实现随时中断 ?无论行人多少,公路通行效率提高 ?问题 ?有时行人按动按钮,控制器没反应 ?需要记忆按动操作 交通灯控制器五的描述 reg req_r; // 增加一个按钮寄存器 always @(posedge clk) begin // 复位, // 初始状态为公路通行 // 计时器清 0 // 按钮寄存器清0 // 计时器递增 // 按下按钮时将按钮寄存器置1 // 状态转移控制 if (reset) begin state = `HIGH_PASS; counter = 0; req_r = 0; end else begin counter = counter + 1; if (req) req_r = 1; case(state) …… endcase end end 交通灯控制器五的描述(续) case (state) // 状态转移控制 `HIGH_PASS:
显示全部
相似文档