Verilog交通灯设计+FPGA(DE2+ESP2C35F672C6)

该博客详细介绍了使用Verilog语言设计交通灯控制系统的全过程,包括新建工程、编写代码(TOP.V、SEGTOP.V、SEGBOT.V)、创建原理图、配置引脚和下载程序。内容涵盖状态机设计、数码管显示及BCD码转换,适用于FPGA(DE2板子上的ESP2C35F672C6芯片)实践。
摘要由CSDN通过智能技术生成

⌘⌘最详细步骤⌘⌘

希望照片里面的每一个步骤,都要认认真真的看一遍。

1.新建工程文件

在桌面新建工程文件

2.打开Quartus II软件

打开Quartus II

3.新建工程

在这里插入图片描述
点击Next
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.新建代码文件

有三个代码文件
TOP.V
SEGTOP.V
SEGBOT.V

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
TOP.V代码

`timescale 1ns/1ps
module TOP(clk,rst,night,R,G,Y,T,close);
input clk,rst,night;
output reg R,G,Y,close;
output reg[5:0] T;
reg[5:0] T1;
reg[5:0] T2;
reg[2:0] state;
reg[30:0] cnt;
reg[30:0] cnt_1;
always@(posedge clk or negedge rst) //clk的上升沿触发和rst的下降触发
if(!rst)
	begin
		R<=1'b0;
		G<=1'b0;
		Y<=1'b0;
		close<=1'b1;
		cnt<=31'd0;
		cnt_1<=31'd0;
		T<=6'd0;
		T1<=6'd0;
		T2<=6'd0;
		state<=3'd0;
	end
else if(night)
	case(state)
		3'd0:
			begin
				R<=1'b0;
				G<=1'b0;
				Y<=1'b0;
				close<=1'b1;
				cnt<=31'd25000000;//0.5S
				state<=3'd1;
			end
		3'd1:
			begin
				cnt<=cnt-1'b1;
				state<=(cnt==31'd0)?3'd2:3'd1;
			end
		3'd2:
			begin
				R<=1'b0;
				G<=1'b0;
				Y<=1'b1;
				cnt<=31'd25000000;
				state<=3'd3;
			end
		3'd3:
			begin
				cnt<=cnt-1'b1;
				state<=(cnt==31'd0)?3'd0:3'd3;
			end
		default:
			state<=state;
	endcase
else
	case(state)
		3'd0:
			begin
			close<=1'b0;
			R<=1'b1;
			G<=1'b0;
			Y<=1'b0;
			cnt<=31'd1500000000;
			cnt_1<=31'd0;
			T1<=6'd30;
			T2<=6'd0;
			state<=3'd1;
		end
		3'd1:
			begin
				cnt_1<=(cnt_1==31'd50000000)?31'd0:cnt_1+1'b1;
				T2<=(cnt_1==31'd49999999)?T2+1'b1:T2;           //每隔一秒加1
				T<=T1-T2;
				cnt<=cnt-1'b1;
				state<=(cnt==31'd0)?3'd2:3'd1;
			end
		3'd2:
			begin
				R<=1'b0;
				G<=1'b1;
				Y<=1'b0;
				cnt<=31'd1500000000;
				cnt_1<=31'd0;
				T1<=6'd30;
				T2<=6'd0;
				state<=3'd3;
			end
		3'd3:
			begin
				cnt_1<=(cnt_1==31'd50000000)?31'd0:cnt_1+1'b1;
				T2<=(cnt_1==31'd49999999)?T2+1'b1:T2;
				T<=T1-T2;
				cnt<=cnt-1'b1;
				state<=(cnt==31'd0)?3'd4:3'd3;
			end
		3'd4:
			begin
				R<=1'b0;
				G<=1'b0;
				Y<=1'b1;
				cnt<=31'd150000000;
				cnt_1<=31'd0;
				T1<=6'd0;
				T2<=6'd61;//这里修改
				state<=3'd5;
			end
		3'd5:
			begin
				cnt_1<=(cnt_1==31'd50000000)?31'd0:cnt_1+1'b1;
				T2<=(cnt_1==31'd49999999)?T2+1'b1:T2;
				T<=T1-T2;
				cnt<=cnt-1'b1;
				state<=(cnt==31'd0)?3'd0:3'd5;
			end
	default:
		state<=state;
	endcase
endmodule





SEGTOP.V

/**************************************************************
Filename: SEGTOP.v
Function: 将输入的 
Author: ChunMu He
Date: 2021-4-27 12:09:06
***************************************************
*							引脚说明	
 
/*************个位数**********************************
HEX0[0] PIN_AF10  
HEX0[1] PIN_AB12  
HEX0[2] PIN_AC12  
HEX0[3] PIN_AD11 
HEX0[4] PIN_AE11   
HEX0[5] PIN_V14  
HEX0[6] PIN_V13  
/*************十位数**********************************
HEX1[0] PIN_V20  
HEX1[1] PIN_V21  
HEX1[2] PIN_W21  
HEX1[3] PIN_Y22  
HEX1[4] PIN_AA24  
HEX1[5] PIN_AA23  
HEX1[6] PIN_AB24 
*********************************************************/
`timescale 1ns/1ps
module SEGTOP (a,dr);
input[3:0]a;
output[6:0]dr;
assign  dr =  (a==4'b0000)?7'b1000000://0
			  (a==4'b0001)?7'b1111001://1
			  (a==4'b0010)?7'b0100100://2
			  (a==4'b0011)?7'b0110000://3
			  (a==4'b0100)?7'b0011001://4		  
			  (a==4'b0101)?7'b0010010://5			  
			  (a==4'b0110)?7'b0000010://6
			  (a==4'b0111)?7'b1111000://7		  
          	  (a==4'b1000)?7'b0000000://8
			  (a==4'b1001)?7'b0010000://9		  
           	  (a==4'b1010)?7'b1111111:	dr;//全灭
endmodule	

SEGBOT.V

/**************************************************************
Filename:SEGBOT.v
Function: 将输入的7位二进制数转换成2个4位的BCD码(分离十位和个位)
Author: ChunMu He
Date: 2021-4-27 12:09:06
*********************************************************/
module SEGBOT(T,close,a0,a1);
input[5:0]T;
input close;
output[3:0]a0;
output[3:0]a1;
assign a0=(close==1'b1)?4'd10:
         	 (T<6'd10)? T:
			 (T<6'd20)? T-6'd10:
			 (T<6'd30)? T-6'd20:
			 (T<6'd40)? T-6'd30:
			 (T<6'd50)? T-6'd40:
			 (T<6'd60)? T-6'd50:
			 (T<7'd70)? T-6'd60: a0;
assign a1=(close==1'b1)?4'd10:
          	 (T<6'd10)? 4'd0:
			 (T<6'd20)? 4'd1:
			 (T<6'd30)? 4'd2:
			 (T<6'd40)? 4'd3:
			 (T<6'd50)? 4'd4:
			 (T<6'd60)? 4'd5:
			 (T<7'd70)? 4'd6:a1;
endmodule


生成元器件,三个点V文件都要生,步骤看图
在这里插入图片描述

5.新建原理图文件

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这样说明你就成功啦
在这里插入图片描述

6.添加引脚

在这里插入图片描述
已经添加好的引脚
在这里插入图片描述

7.进入下载程序的界面

在这里插入图片描述
添加最核心的驱动程序进行下载
在这里插入图片描述

8.工程文件下载

链接: 参考文件.
链接: 工程文件.

  • 11
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值