数电课程设计——课设二:交通信号灯

一、实验内容

(1)十字路口有 x、y 方向两组交通信号灯,每组有红、黄、绿灯各一个;

(2)设计一个交通灯控制电路,模拟十字路口交通灯工作情况,红灯亮 35s,黄灯亮 5s,绿 灯亮 30s;

(3)设系统时钟频率为 50MHz,要求用数码管显示计时结果;

(4)掌握 Verilog HDL 的状态机编程,红、黄、绿灯点亮转换用如下的状态转换图实现。

二、实验步骤

(1)编写代码

编写的.v顶层文件:

cs 复制代码
1.	module traffic(  
2.	    input clk,  
3.	    input rst,  
4.	      
5.	    output reg LEDR_Y,  
6.	    output reg LEDY_Y,  
7.	    output reg LEDG_Y,  
8.	    output reg LEDR_X,  
9.	    output reg LEDY_X,  
10.	    output reg LEDG_X  
11.	      
12.	);  
13.	parameter N = 25000000;  
14.	parameter S1 = 0;  
15.	parameter S2 = 1;  
16.	parameter S3 = 2;  
17.	parameter S4 = 3;  
18.	reg [25:0] count;  
19.	reg CLK_1Hz;  
20.	reg [2:0] cnt5;  
21.	reg [4:0] cnt30;  
22.	reg [1:0]state;//状态  
23.	  
24.	//生成1Hz时钟  
25.	always@(posedge clk or negedge rst)begin  
26.	if(!rst)begin  
27.	    count <= 0;  
28.	    CLK_1Hz <= 0;  
29.	end  
30.	else if(count<N-1)begin  
31.	    count <= count +1;  
32.	    CLK_1Hz <= CLK_1Hz;  
33.	end  
34.	else begin  
35.	    count <= 0;  
36.	    CLK_1Hz <= ~CLK_1Hz;  
37.	end  
38.	end  
39.	  
40.	//生成5进制计数器  
41.	always@(posedge CLK_1Hz or negedge rst)begin  
42.	if(!rst)begin  
43.	    cnt5 <= 0;  
44.	end  
45.	else if(cnt5<4)begin  
46.	    cnt5 <= cnt5 + 1;  
47.	end  
48.	else  
49.	    cnt5 <= 0;  
50.	end  
51.	  
52.	//生成30进制计数器  
53.	always@(posedge CLK_1Hz or negedge rst)begin  
54.	if(!rst)begin  
55.	    cnt30 <= 0;  
56.	end  
57.	else if(cnt30 < 29)begin  
58.	    cnt30 <= cnt30 + 1;  
59.	end  
60.	else  
61.	    cnt30 <= 0;  
62.	end  
63.	  
64.	//状态迁移  
65.	always@(posedge clk or negedge rst)begin  
66.	if(!rst)begin  
67.	    state <= 0;  
68.	end  
69.	else begin  
70.	    case(state)  
71.	      
72.	    S1:  
73.	        if(cnt30==29) state <= S3;  
74.	        else state <= S1;  
75.	    S2:  
76.	        if(cnt30==29) state <= S4;  
77.	        else state <= S2;  
78.	    S3:  
79.	        if(cnt5==4)   state <= S2;  
80.	        else state <= S3;  
81.	    S4:  
82.	        if(cnt5==4)   state <= S1;  
83.	        else state <= S4;  
84.	    default: state <= S1;  
85.	    endcase  
86.	end  
87.	end  
88.	  
89.	//状态  
90.	always@(posedge clk or negedge rst)begin  
91.	if(!rst)begin  //刚开始全灭  
92.	        LEDR_Y <= 0;  
93.	        LEDY_Y <= 0;   
94.	        LEDG_Y <= 0;  
95.	        LEDR_X <= 0;  
96.	        LEDY_X <= 0;  
97.	        LEDG_X <= 0;  
98.	end  
99.	else begin  
100.	    case(state)  
101.	    S1: begin   //Y方向绿灯亮,X方向红灯亮  
102.	        LEDR_Y <= 0;  
103.	        LEDY_Y <= 0;   
104.	        LEDG_Y <= 1;  
105.	        LEDR_X <= 1;  
106.	        LEDY_X <= 0;  
107.	        LEDG_X <= 0;  
108.	    end   
109.	    S2: begin   //X方向绿灯亮,Y方向红灯亮  
110.	        LEDR_Y <= 1;  
111.	        LEDY_Y <= 0;   
112.	        LEDG_Y <= 0;  
113.	        LEDR_X <= 0;  
114.	        LEDY_X <= 0;  
115.	        LEDG_X <= 1;  
116.	    end  
117.	    S3: begin   //X方向红灯亮,Y方向黄灯亮  
118.	        LEDR_Y <= 0;  
119.	        LEDY_Y <= 1;   
120.	        LEDG_Y <= 0;  
121.	        LEDR_X <= 1;  
122.	        LEDY_X <= 0;  
123.	        LEDG_X <= 0;  
124.	    end  
125.	    S4: begin   //X方向黄灯亮,Y方向红灯亮  
126.	        LEDR_Y <= 1;  
127.	        LEDY_Y <= 0;   
128.	        LEDG_Y <= 0;  
129.	        LEDR_X <= 0;  
130.	        LEDY_X <= 1;  
131.	        LEDG_X <= 0;  
132.	    end  
133.	    default: begin   //全灭  
134.	        LEDR_Y <= 0;  
135.	        LEDY_Y <= 0;   
136.	        LEDG_Y <= 0;  
137.	        LEDR_X <= 0;  
138.	        LEDY_X <= 0;  
139.	        LEDG_X <= 0;  
140.	    end  
141.	    endcase  
142.	end  
143.	  
144.	end  
145.	  
146.	endmodule 


编写的textbench文件:
1.	`timescale 1 ns/ 1 ps  
2.	module traffic_tb();  
3.	// constants                                             
4.	// general purpose registers  
5.	  
6.	reg clk;  
7.	reg rst;  
8.	// wires                                                 
9.	wire LEDG_X;  
10.	wire LEDG_Y;  
11.	wire LEDR_X;  
12.	wire LEDR_Y;  
13.	wire LEDY_X;  
14.	wire LEDY_Y;  
15.	  
16.	// assign statements (if any)                            
17.	traffic i1 (  
18.	// port map - connection between master ports and signals/registers     
19.	    .LEDG_X(LEDG_X),  
20.	    .LEDG_Y(LEDG_Y),  
21.	    .LEDR_X(LEDR_X),  
22.	    .LEDR_Y(LEDR_Y),  
23.	    .LEDY_X(LEDY_X),  
24.	    .LEDY_Y(LEDY_Y),  
25.	    .clk(clk),  
26.	    .rst(rst)  
27.	);  
28.	initial                                                  
29.	begin                                                    
30.	     clk = 0;  
31.	      rst = 0;  
32.	      #100 rst = 1;  
33.	                       
34.	end    
35.	                                                    
36.	always   #10 clk <= ~clk;                                                
37.	                                              
38.	endmodule  

编写的textbench文件:

cs 复制代码
`timescale 1 ns/ 1 ps  
module traffic_tb();  
// constants                                             
// general purpose registers  
  
reg clk;  
reg rst;  
// wires                                                 
wire LEDG_X;  
wire LEDG_Y;  
wire LEDR_X;  
wire LEDR_Y;  
wire LEDY_X;  
wire LEDY_Y;  
  
// assign statements (if any)                            
traffic i1 (  
// port map - connection between master ports and signals/registers     
    .LEDG_X(LEDG_X),  
    .LEDG_Y(LEDG_Y),  
    .LEDR_X(LEDR_X),  
    .LEDR_Y(LEDR_Y),  
    .LEDY_X(LEDY_X),  
    .LEDY_Y(LEDY_Y),  
    .clk(clk),  
    .rst(rst)  
);  
initial                                                  
begin                                                    
     clk = 0;  
      rst = 0;  
      #100 rst = 1;  
                       
end    
                                                    
always   #10 clk <= ~clk;                                                
                                              
endmodule  

三、实验结果

S1到S3的转换:

S3到S2的转换:

S2到S4的转换:

S4到S1的转换:

本文大部分内容都属于原创,如需转载,请附上本文网站,

如果需要相关的仿真图、程序代码等资料可以直接私信我,我会及时回复。

相关推荐
苹果酱05672 小时前
前端面试vue篇:Vue2 和 Vue3 在设计和性能上有显著区别
java·spring boot·毕业设计·layui·课程设计
计算机毕设孵化场6 小时前
计算机毕设-基于springboot的高校网上缴费综合务系统视频的设计与实现(附源码+lw+ppt+开题报告)
java·spring boot·计算机外设·音视频·课程设计·高校网上缴费综合务系统视频·计算机毕设ppt
北城笑笑8 小时前
FPGA 14 ,硬件开发板分类详解,FPGA开发板与普通开发板烧录的区别
fpga开发·fpga
2202_754421548 小时前
一个计算频率的模块
驱动开发·fpga开发
小灰灰的FPGA9 小时前
低速接口项目之串口Uart开发(七)——如何在FPGA项目中实现自适应波特率串口功能
fpga开发
B站计算机毕业设计超人11 小时前
计算机毕业设计SparkStreaming+Kafka旅游推荐系统 旅游景点客流量预测 旅游可视化 旅游大数据 Hive数据仓库 机器学习 深度学习
大数据·数据仓库·hadoop·python·kafka·课程设计·数据可视化
计算机毕设源码qq-38365310411 天前
(附项目源码)Java开发语言,215 springboot 大学生爱心互助代购网站,计算机毕设程序开发+文案(LW+PPT)
java·开发语言·spring boot·mysql·课程设计
fei_sun1 天前
【Verilog】第一章作业
fpga开发·verilog
深圳市雷龙发展有限公司longsto1 天前
基于FPGA(现场可编程门阵列)的SD NAND图片显示系统是一个复杂的项目,它涉及硬件设计、FPGA编程、SD卡接口、NAND闪存控制以及图像显示等多个方面
fpga开发
计算机毕设孵化场1 天前
计算机毕设-基于springboot的多彩吉安红色旅游网站的设计与实现(附源码+lw+ppt+开题报告)
vue.js·spring boot·后端·计算机外设·课程设计·计算机毕设论文·多彩吉安红色旅游网站