ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

习题8 #第8章 Verilog有限状态机设计-4 #Verilog #Quartus #modelsim

2020-10-14 13:33:26  阅读:396  来源: 互联网

标签:clk 交通灯 状态机 lights Verilog rst 习题 reg ex8


4. 用状态机设计交通灯控制器,设计要求:A路和B路,每路都有红、黄、绿三种灯,持续时间为:红灯45s,黄灯5s,绿灯40秒。

    A路和B路灯的状态转换是:

    (1) A红,B绿(持续时间40s);

    (2) A红,B黄(持续时间5s);

    (1) A绿,B红(持续时间40s);

    (1) A绿,B黄(持续时间5s);

 

4.1 设计思路:

      由题知共4个状态,每个状态及其输出持续的时间分别为40s或5秒。故设计一个模为90的计数器,分4段,对应每个状态持续的

      时间,然后顺序循环。

 

4.2 两路交通灯控制电路源码如下:

     

 1 //triffic lights
 2 //ex8_4
 3 //2020-10-14
 4 //by YongFengXie
 5 module ex8_4(clk,rst_n,lights);
 6 input clk;
 7 input rst_n;
 8 output reg [5:0] lights; //A and B light
 9 
10 reg [6:0] cnt;  // counter 90
11 reg [3:0] state;
12 
13 parameter s0=4'b0001,s1=4'b0010,s2=4'b0100,
14           s3=4'b1000;
15 
16 always @(posedge clk or negedge rst_n)
17 begin
18   if(!rst_n)
19     cnt<=7'd0;
20   else if(cnt<7'd90)
21     cnt<=cnt+1'b1;
22   else
23     cnt<=7'd0;
24 end
25 
26 always @(posedge clk or negedge rst_n)
27 begin
28   if(!rst_n)
29     begin
30       state<=s0;
31       lights<=6'b100_001;
32     end
33   else if(cnt<7'd40)
34     begin
35       state<=s0;
36       lights<=6'b100_001;  //RYG(A)_RYG(B)
37     end
38   else if(cnt>7'd39 &&cnt<7'd45)
39     begin
40       state<=s1;
41       lights<=6'b100_010;  //RYG(A)_RYG(B)
42     end
43   else if(cnt>7'd44 && cnt<7'd85)
44     begin
45       state<=s2;
46       lights<=6'b001_100;  //RYG(A)_RYG(B)
47     end
48   else 
49     begin
50       state<=s3;
51       lights<=6'b001_010;  //RYG(A)_RYG(B)
52     end
53 end
54 
55 endmodule

 

 

4.3 交通灯控制器的测试代码:

  

 1 //ex8_4 testbench
 2 //2020-10-14
 3 //by YongFengXie
 4 `timescale 1ns/1ns
 5 module ex8_4tb;
 6 reg clk;
 7 reg rst_n;
 8 wire [5:0] lights;
 9 
10 ex8_4 ub(clk,rst_n,lights);
11 
12 initial begin
13           clk=1'b0;
14           rst_n=1'b0;
15           #20 rst_n=1'b1;
16           #1000 $stop;
17         end
18 
19 always #5 clk=~clk;
20 
21 endmodule 

 

4.4 交通灯控制器的仿真结果如图ex8_4_1所示:

 

   图ex8_4_1 交通灯控制器仿真结果

4.5  总结:交通灯控制器这个电路的状态转换挺简单,题目里已经详细列出。难在每种状态持续时间不一样,这是跟前面的序列检测不同的地               方。按照上述设计,在Quartus里未生成状态转换图,仿真和DE2-115上皆可验证正确。期待更好的解法。 

标签:clk,交通灯,状态机,lights,Verilog,rst,习题,reg,ex8
来源: https://www.cnblogs.com/halflife/p/13814068.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有