基于Verilog的十字路口交通灯控制电路设计
生活随笔
收集整理的這篇文章主要介紹了
基于Verilog的十字路口交通灯控制电路设计
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
基于Verilog的十字路口交通燈控制電路設計
- 一、設計要求
- 二、設計方案
- 三、電路原理圖
- 四、代碼實現
- 1. Verilog代碼:
- 2. Testbench代碼
- 五、仿真結果
一、設計要求
設計并實現一個簡單的十字路口交通燈控制電路。以4個紅色指示燈、4個綠色指示燈和4個黃色指示燈模擬路口東西南北4個方向的紅綠黃交通燈。控制這些燈,使它們安下列規律亮滅。
1、東西方向綠燈亮,南北方向紅燈亮。東西方向通車,時間30秒;
2、東西方向黃燈閃爍,南北方向紅燈亮,時間2秒。
3、東西方向紅燈亮,南北方向綠燈亮。南北方向通車,時間30秒;
4、東西方向紅燈亮,南北方向黃燈閃爍,時間2秒。
5、返回1,繼續運行。
二、設計方案
設計一個有五個狀態的狀態機,其中一個為初始狀態。如下圖:
在狀態S1~S4中,計數器在每個時鐘上升沿加一。
三、電路原理圖
- 對上圖局部放大處理:
四、代碼實現
1. Verilog代碼:
module traffic_light(clk,rst_n,light_east,light_west,light_north,light_south); input clk,rst_n; output [2:0]light_east,light_north,light_south,light_west; reg[2:0] light_east,light_north,light_south,light_west; parameterS0=0,S1=1,S2=2,S3=3,S4=4; reg [2:0]state; reg [5:0]cnt; always @(posedge clk or negedge rst_n )begin if(!rst_n) begin{light_east,light_north,light_south,light_west}=12'b0;cnt <= 0;state <= S0;endelsebegincase (state)S0: begin {light_east,light_north,light_south,light_west}=12'b1;state <= S1;endS1: if(cnt==30) beginstate <= S2;cnt <= 0;endelse begin cnt <= cnt + 1'b1;{light_east,light_west,light_north,light_south}=12'b100_100_001_001;state <= S1;endS2: if(cnt==2) beginstate <= S3;cnt <= 0;endelse begin cnt <= cnt + 1'b1;{light_east,light_west,light_north,light_south}=12'b010_010_001_001;state <= S2;endS3: if(cnt==30) beginstate <= S4;cnt <= 0;endelse begin cnt <= cnt + 1'b1;{light_east,light_west,light_north,light_south}=12'b001_001_100_100;state <= S3;end S4: if(cnt==2) beginstate <= S1;cnt <= 0;endelse begin cnt <= cnt + 1'b1;{light_east,light_west,light_north,light_south}=12'b001_001_010_010;state <= S4;end endcaseend end endmodule2. Testbench代碼
`timescale 1 ps/ 1 ps module traffic_light_vlg_tst(); // constants // general purpose registers reg eachvec; // test vector input registers reg clk; reg rst_n; // wires wire [2:0] light_east; wire [2:0] light_north; wire [2:0] light_south; wire [2:0] light_west;// assign statements (if any) traffic_light i1 ( // port map - connection between master ports and signals/registers .clk(clk),.light_east(light_east),.light_north(light_north),.light_south(light_south),.light_west(light_west),.rst_n(rst_n) ); initial begin clk=0; rst_n=0; #20 rst_n=1; #1000 $stop; $display("Running testbench"); end always begin #1 clk=~clk; // --> end end endmodule五、仿真結果
light_east, light_south, light_west, light_north分別為東、南、西、北的信號燈,高位至低位依次為綠燈、黃燈、紅燈。
左邊下面四個對應的變量名分別為light_east, light_north, light_south, light_west。
總結
以上是生活随笔為你收集整理的基于Verilog的十字路口交通灯控制电路设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 字体设计 css_CSS3字体设计简介
- 下一篇: opencv中IMREAD_GRAYSC