当前位置:首页 > 南昌大学eda实验报告 - 图文
reg [35:0]i; reg flag1; reg flag2;
reg [7:0] cnt; initial begin
flag2='b0; flag1='b0;
COUNTER[7:0]='D60;
LED[5:0]<=6'b001100; //主干道是绿灯乡村道是红灯 end
always @(posedge clk) begin cnt=cnt+1;
if (cnt==1000) begin CPB=1'b1; cnt=0; end else CPB=1'b0; end
always @(posedge clk) begin
if (sel<1) sel=sel+1; else sel=0; end //sel为数码管选择 always @(posedge clk) begin
if(COUNTER[3:0]==4'D0 && COUNTER[7:4]==4'D0) //在数码管是60时判断
是否有信号s的出现
begin
if(S) //S为1即乡村想中断的情况下 begin
if(LED[5:0]==6'b001100) begin
LED[5:0]<=6'b010100; //表示主干道是黄灯而乡村是红
灯
COUNTER[7:4]<=4'D0; //显示的是4秒钟 COUNTER[3:0]<=4'D4; end
else if(LED[5:0]==6'b010100) //表示4秒钟过后的乡村开始通
路了
begin
LED[5:0]<=6'b100001; //表示主干道是红灯而乡村是绿
灯
COUNTER[7:4]<=4'D2; //显示的是20秒钟 COUNTER[3:0]<=4'D0; flag1=1'b1; end
else if(LED[5:0]=='b100001) //表示20秒过后主干道通行了
begin
LED[5:0]<='b100010; //表示主干道是红灯而
乡村是黄灯
COUNTER[7:4]<=4'D0; //显示的是4秒钟 COUNTER[3:0]<=4'D4; flag1='b0; end
else if(LED[5:0]=='b100010) begin
LED[5:0]<='b001100; //主干道是绿灯乡村道是
红灯
COUNTER[7:4]<=4'D6; //显示的是60秒钟 COUNTER[3:0]<=4'D0; end end else //S为0即乡村不想中断的情况下 begin
if(LED[5:0]=='b010100) //表示4秒钟过后的乡村开始通路了 begin
LED[5:0]<='b100001; //表示主干道是红灯而乡村是
绿灯
COUNTER[7:4]<=4'D2; //显示的是20秒钟 COUNTER[3:0]<=4'D0;
flag1=1'b1; //表示可以开始进行20秒的检查是否乡村 end
else if(LED[5:0]=='b100001) //表示20秒过后主干道可以通行
了
begin
LED[5:0]<='b100010; //表示主干道是红灯而乡村
是黄灯
COUNTER[7:4]<=4'D0; //显示的是4秒钟 COUNTER[3:0]<=4'D4; flag1='b0; end else if(LED[5:0]=='b100010) //表示4秒过后主干道通行了 begin
LED[5:0]<='b001100; //表示主干道是绿灯而乡村
是红灯
COUNTER[7:4]<=4'D6; //显示的是60秒钟 COUNTER[3:0]<=4'D0;end else
if(LED[5:0]=='b001100) begin
flag2='b1; //60秒过后才可以让乡村中断主干道 LED[5:0]<='b001100;//主干道是绿灯乡村道是红灯 COUNTER[7:4]<=4'D6; //再次显示60秒钟 COUNTER[3:0]<=4'D0; end end end else
begin
if(S && (flag2=='b1)) //表示乡村道路有信号并且可以让乡村道路通行
了,乡村想中断
begin
LED[5:0]<='b010100; //表示主干道是黄灯而乡村是红灯 COUNTER[7:4]<=4'D0; //显示的是4秒钟 COUNTER[3:0]<=4'D4; flag2='b0; end else begin
if(COUNTER[3:0]==4'D0) //正常计数 begin
COUNTER[7:4]=COUNTER[7:4]-4'D1; COUNTER[3:0]=4'D9; end else
COUNTER[3:0]=COUNTER[3:0]-4'D1; end end if(flag1=='b1) begin //乡村不想绿灯了,想中断其20秒的绿灯
if(!S) begin
flag2='b0; flag1='b0;
LED[5:0]<='b100010; //表示主干道是红灯而乡村是黄灯 COUNTER[7:4]<=4'D0; //显示的是4秒钟 COUNTER[3:0]<=4'D4; end end end
always @(sel) begin case (sel)
0: a=COUNTER[7:4]; //1数码管为十位
1: a=COUNTER[3:0]; default: a=0; endcase case (a)
0:LED1[7:0]='b00111111; 1:LED1[7:0]='b00000110; 2:LED1[7:0]='b01011011; 3:LED1[7:0]='b01001111; 4:LED1[7:0]='b01100110; 5:LED1[7:0]='b01101101; 6:LED1[7:0]='b01111101; 7:LED1[7:0]='b00000111; 8:LED1[7:0]='b01111111; 9:LED1[7:0]='b01101111; default: LED1[7:0]=8'b11111111; endcase end
endmodule 赋值模块 input clk;
reg CPB; //时钟 input S;
output [2:0] sel;
reg [2:0] sel; //指明乡村路口是否有汽车的通行信号 reg [3:0]a;
output [5:0] LED; //信号灯的显示 output [7:0] LED1; //显示时间的十位 output [8:0] COUNTER; //数码的显示 reg [5:0] LED;
reg [7:0] COUNTER; reg [7:0] LED1; reg [35:0]i; reg flag1; reg flag2;
reg [7:0] cnt; initial begin
flag2='b0; flag1='b0;
COUNTER[7:0]='D60;
LED[5:0]<=6'b001100;
Clk为系统时钟1KHz,可以作为扫描频率,将其分频之后的CPB作为秒的计数频率,S为乡道是否想中断主道的信号,sel为循环扫描信号,LED为信号灯的显示,LED1为显示时间的十位,COUNTER为时间数码的显示。
共分享92篇相关文档