最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

eda交通灯设计和实现

来源:动视网 责编:小OO 时间:2025-09-24 05:46:10
文档

eda交通灯设计和实现

EDA交通灯课程设计班级:电气技术1031交通灯控制器1.实验目的学习交通灯控制器的设计,学习简单状态机的设计和硬件测试。2.实验内容本实验的内容是设计一个建议的交通灯控制,要求能实现三种灯的控制并通过数码管显示倒计时的时间。整个设计在MagicSOPC试验箱上实现。3.实验原理本实验设计的交通灯控制器要求实现对A、B两个方向的红、绿、黄三种灯的控制,并能实现时间显示的倒计时。因此每个方向的灯可以用一个状态机实现,状态的跳转顺序为灯-绿灯-黄灯-红灯(另一个的状态应为绿-黄-红绿),同时设计一
推荐度:
导读EDA交通灯课程设计班级:电气技术1031交通灯控制器1.实验目的学习交通灯控制器的设计,学习简单状态机的设计和硬件测试。2.实验内容本实验的内容是设计一个建议的交通灯控制,要求能实现三种灯的控制并通过数码管显示倒计时的时间。整个设计在MagicSOPC试验箱上实现。3.实验原理本实验设计的交通灯控制器要求实现对A、B两个方向的红、绿、黄三种灯的控制,并能实现时间显示的倒计时。因此每个方向的灯可以用一个状态机实现,状态的跳转顺序为灯-绿灯-黄灯-红灯(另一个的状态应为绿-黄-红绿),同时设计一
         EDA交通灯课程设计

 

                    班级:电气技术1031

交通灯控制器 

1.实验目的 

学习交通灯控制器的设计,学习简单状态机的设计和硬件测试。 

2.实验内容 

本实验的内容是设计一个建议的交通灯控制,要求能实现三种灯的控制并通过数码管显示倒计时的时间。整个设计在MagicSOPC试验箱上实现。 

3.实验原理 

本实验设计的交通灯控制器要求实现对A、B两个方向的红、绿、黄三种灯的控制,并能实现时间显示的倒计时。因此每个方向的灯可以用一个状态机实现,状态的跳转顺序为灯-绿灯-黄灯-红灯(另一个的状态应为绿-黄-红绿),同时设计一个计时器,来记录每种灯的倒计时时间。最后将交通灯的状态信息输出,至数码管显示模块和交通灯显示模块。注意一个方向的红灯时间应和另一个方向的绿黄灯时间总和相等。 

4.实验步骤 

1)启动QuartusII建立一个空白工程,然后命名为traffic-top.qpf。 

2)新建Verilog HDL源程序文件traffic.v、traffic-test、traffic-top.v,输入程序代码并保存(完整的Verilog HDL程序参考程序清单3.17),对各个HDL文件进行综合编译,若在编译过程中发现错误,则找出并更改错误,直至编译成功为止。 

3)选择目标器件并对相应的引脚进行锁定,在这里所选择的器件为Altera公司CycloneII系列的EP2C35F672C8芯片,引脚锁定方法如表3.16所列。将未使用的引脚设置为三态输入(一定要设置,否则可能会损坏芯片)。设置方法见3.1节。Lampa,lampb 

表3.16 引脚锁定方法 

4)设置traffic-top.v为顶层文件,对该工程文件进行全程编译处理,若在编译处理过程中发现错误,则找出更正错误,直至编译成功为止。 

5)把程序下载到FPGA器件中。按一下复位键SYS-RST,然后观察交通灯及数码管的显示状态。 

5.实验参考程序 

程序清单3.17 交通灯程序 

1) 交通灯控制器,文件traffic.v 

本模块实现交通灯控制器的逻辑功能。 

//********************************************************* 

//** 交通灯控制器 

//********************************************************* 

module traffic(clock,rst_n,clken,lampa,lampb,acount,bcount); 

input clock; //系统时钟50MHz 

input rst_n; //同步复位信号,低电平有效 

input clken; //时钟使能信号:1Hz。 

output [2:0] lampa; //控制A方向三盏灯的亮灭;其中lampa[2:0]分 

//别控制A方向的绿灯、黄灯、红灯(低电平灯亮) 

output [2:0] lampb; //控制B方向三盏灯的亮灭;其中lampb[2:0]分 

//别控制B方向的绿灯、黄灯、红灯(低电平灯亮) 

output [7:0] acount; //用于A方向灯的时间显示,8位BCD码输出 

output [7:0] bcount; //用于B方向灯的时间显示,8位BCD码输出 

reg[2:0] lampa,lampb; 

reg[7:0] numa,numb; //时间计数器 

reg tempa,tempb; //防重进入标志 

reg[2:0] StateA,StateB; //A、B方向灯控制状态机的状态 

//设置各种灯的计数器的预置数 

parameter ared =8'h30, //30秒 

ayellow =8'h5, //5秒 

agreen =8'h15, //15秒 

bred =8'h20, //20秒 

byellow =8'h5, //5秒 

bgreen =8'h25; //25秒 

assign acount=numa; 

assign bcount=numb; 

//控制A方向的三种灯 

always @(posedge clock or negedge rst_n) 

begin 

if(!rst_n) 

begin 

StateA <= 3'h0;

lampa <= 3'b011;

tempa <= 1'b0;

end 

else if(clken) 

begin 

if(!tempa) 

begin 

tempa <= 1'b1; //防重进入标志 

case(StateA) //控制亮灯的顺序 

0: begin numa <= agreen; lampa <= 3'b011; StateA <= 1; end

1: begin numa <= ayellow; lampa <= 3'b101; StateA <= 2; end

2: begin numa <= ared; lampa <= 3'b110; StateA <= 0; end

default: lampa <= 3'b110;

endcase 

end 

else 

begin //倒计时 

if(numa>1)

if(numa[3:0]==0) 

begin 

numa[3:0]<=4'h9;

numa[7:4]<=numa[7:4]-4'h1;

end 

else 

numa[3:0]<=numa[3:0]-4'h1;

if (numa==2) 

tempa<=1'b0;

end 

end 

end 

//控制A方向的三种灯 

always @(posedge clock or negedge rst_n) 

begin 

if(!rst_n) 

begin 

lampb<=3'b110;

StateB<=3'h0;

tempb<=1'b0;

end 

else if (clken) 

begin 

if(!tempb) 

begin 

tempb<=1'b1; //防重进入标志 

case (StateB) //控制亮灯的顺序 

0: begin numb<=bred; lampb<=3'b110; StateB<=1; end

1: begin numb<=bgreen; lampb<=3'b011; StateB<=2; end

2: begin numb<=byellow; lampb<=3'b101; StateB<=0; end

default: lampb<=3'b110;

endcase 

end 

else 

begin //倒计时 

if(numb>1)

if(numb[3:0]==0) 

begin 

numb[3:0]<=4'h9;

numb[7:4]<=numb[7:4]-4'h1;

end 

else 

numb[3:0]<=numb[3:0]-4'h1;

if(numb==2) 

tempb <= 1'b0;

end 

end 

end 

endmodule 

2)显示控制程序,文件名为traffic.v 

本模块实现交通灯倒计时的显示并产生1HZ的时钟使能信号。 

//********************************************************* 

//** 交通灯控制器显示模块 

//**功能:显示交通灯时间,并产生1Hz时钟使能信号, 

//********************************************************* 

module traffic_test(clock,clken,rst_n,acount,bcount,seg,dig); 

input clock; //系统时钟(50MHz) 

input rst_n; 

output clken; 

input [7:0] acount; 

input [7:0] bcount; 

output [7:0] seg; //数码管段码输出 

output [7:0] dig; //数码管位码输出 

//I/O寄存器 

reg[7:0]seg; 

reg[7:0]dig; 

//内部寄存器 

reg[25:0]clk_cnt; 

reg[16:0]count; //时钟分频计数器 

reg[1:0] cnt; //数码管扫描计数器 

reg[3:0]disp_dat; //数码管扫描显存 

wire div_clk; //分频时钟 

//产生1Hz时钟使能信号 

always @(posedge clock) 

begin 

if(clken) 

clk_cnt <= 26'h0;

else 

clk_cnt <= clk_cnt + 26'h1;

end 

assign clken = (clk_cnt >= 26'd49999999);

//时钟分频进程,用于数码管扫描显示 

always @(posedge clock) 

begin 

count <= count + 1'b1;

end 

assign div_clk = &count; 

//数码管扫描显示部分 

always @(posedge clock) 

begin 

if(div_clk) 

cnt <= cnt + 1'b1;

end 

always @(posedge clock) 

begin 

if(div_clk) 

begin 

case(cnt) //选择扫描显示数据 

2'd0:disp_dat <= acount[7:4]; //第一个数码管 

2'd1:disp_dat <= acount[3:0]; //第二个数码管 

2'd2:disp_dat <= bcount[7:4]; //第五个数码管 

2'd3:disp_dat <= bcount[3:0]; //第六个数码管 

endcase 

case(cnt) //选择数码管显示位 

2'd0:dig <= 8'b01111111; //选择第一个数码管显示 

2'd1:dig <= 8'b10111111; //选择第二个数码管显示 

2'd2:dig <= 8'b11110111; //选择第五个数码管显示 

2'd3:dig <= 8'b11111011; //选择第六个数码管显示 

endcase 

end 

end 

always @(disp_dat) 

begin 

case(disp_dat) //七段译码 

4'h0:seg = 8'hc0; //显示0 

4'h1:seg = 8'hf9; //显示1 

4'h2:seg = 8'ha4; //显示2 

4'h3:seg = 8'hb0; //显示3 

4'h4:seg = 8'h99; //显示4 

4'h5:seg = 8'h92; //显示5 

4'h6:seg = 8'h82; //显示6 

4'h7:seg = 8'hf8; //显示7 

4'h8:seg = 8'h80; //显示8 

4'h9:seg = 8'h90; //显示9 

4'ha:seg = 8'h88; //显示a 

4'hb:seg = 8'h83; //显示b 

4'hc:seg = 8'hc6; //显示c 

4'hd:seg = 8'ha1; //显示d 

4'he:seg = 8'h86; //显示e 

4'hf:seg = 8'h8e; //显示f 

endcase 

end 

endmodule 

2) 顶层模块,文件名为traffic-top.v 

本模块将traffic.v及traffic-test.v进行封装。 

//********************************************************* 

//** 交通灯控制器顶层程序 

//********************************************************* 

module traffic_top(clock,rst_n,seg,dig,lampa,lampb); 

input clock; //系统时钟(48MHz) 

input rst_n; //复位信号,低电平有效 

output [2:0] lampa; //A方向红绿灯 

output [2:0] lampb; //B文向红绿灯 

output [7:0] seg; //数码管段码输出 

output [7:0] dig; //数码管位码输出 

//内部线网 

wire clken; 

wire [7:0] acount; 

wire [7:0] bcount; 

//交通灯控制模块 

traffic traffic( 

.clock(clock), 

.rst_n(rst_n), 

.clken(clken), 

.lampa(lampa), 

.lampb(lampb), 

.acount(acount), 

.bcount(bcount) 

); 

//显示模块 

traffic_test traffic_test( 

.clock(clock), 

.clken(clken), 

.rst_n(rst_n), 

.acount(acount), 

.bcount(bcount), 

.seg(seg), 

.dig(dig) 

); 

Endmodule

二 仿真波形

三  照片等文件

四 方框图

五 参考资料 

文档

eda交通灯设计和实现

EDA交通灯课程设计班级:电气技术1031交通灯控制器1.实验目的学习交通灯控制器的设计,学习简单状态机的设计和硬件测试。2.实验内容本实验的内容是设计一个建议的交通灯控制,要求能实现三种灯的控制并通过数码管显示倒计时的时间。整个设计在MagicSOPC试验箱上实现。3.实验原理本实验设计的交通灯控制器要求实现对A、B两个方向的红、绿、黄三种灯的控制,并能实现时间显示的倒计时。因此每个方向的灯可以用一个状态机实现,状态的跳转顺序为灯-绿灯-黄灯-红灯(另一个的状态应为绿-黄-红绿),同时设计一
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top