日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于Verilog的十字路口交通灯控制电路设计

發布時間:2023/12/29 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于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 endmodule

2. 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的十字路口交通灯控制电路设计的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。