1、S3=11 S0S3S1S23程序说明1.各输入输出变量说明:clk:计数时钟qclk:扫描显示时钟rst:复位信号,当rst为1时,控制器和计数器回到初始状态en:使能信号,当en为1时控制器开始工作,en为0时hold:特殊情况控制信号,hold为1时,主、支干道方向无条件显示为红灯 seg:用于数码管的译码输出dig:用于选择显示的数码管(片选) num1:用于主干道方向灯的时间显示num2:用于支干道方向灯的时间显示light1:控制主干道方向四盏灯的亮灭,其中,light10light12分别控制主干道方向的绿灯、黄灯和红灯light2:控制支干道方向四盏灯的亮灭,其中,light2
2、0light22分别控制支干道方向的绿灯、黄灯和红灯2.输入输出及中间变量设置:module traffic(en,clk,qclk,rst,hold,num1,num2,light1,light2,seg,dig;input en,clk,qclk,rst,hold;output 5:0dig;output7:0 num1,num2;output6:0seg;output2:0light1,light2;reg tim1,tim2;reg3:0disp_dat;reg6:reg7:0num1,num2;0red1,red2,green1,green2,yellow1,yellow2;reg5
3、:reg 1:0count;reg1:0state1,state2;reg2:3.初始状态设置:always (en)if(!en)begingreen1=8b01000101;red1b00100101;yellow1b00000101;green2red2yellow2end4.主干道方向点亮顺序:always(posedge clk) /主干道begin if(rst)light1=3b001;num1=green1;else if(hold) begin light1b100; num1 endelse if(en)tim1)tim1=1;case(state1)2b00:begin
4、num1 state10) if(num13:0=0) num13:0=4b1001; num17:4=num17:4-1; else num13:=num13:0-1; if(num1=1)tim1=0;else num1=2 tim15.支干道方向点亮顺序:always(posedge clk) /支干道light2num2=red2; light2 num2tim2)tim2begin num2 state2 if(num23: num23: num27:=num27: else num23:=num23: if(num2=1)tim2 tim26.数码管译码及显示:always (po
5、sedge qclk) /定义上升沿触发进程 count = count +1b1;always ( count) case(count) /选择扫描显示数据 2d0 : disp_dat = num13:0; /第一个数码管d1 := num17:4; /第二个数码管d2 := num23: /第三个数码管d3 := num27: /第四个数码管 default := 0; endcase always (count) begin case(count) /选择数码管显示位 dig= 6b011111;/选择第一个数码管显示b101111;/选择第二个数码管显示 dig b110111;/选
6、择第三个数码管显示b111011;/选择第四个数码管显示b111111;always (disp_dat) case (disp_dat) /七段译码 4b0000 : seg= 7b0111111; /显示0b0001 : seg b0000110;1b0010 :b1011011;2b0011 :b1001111;3b0100 :b1100110;4b0101 :b1101101;5b0110 :b1111101;6b0111 :b0000111;7b1000 :b1111111;8b1001 :b1101111;9 default:/不显示 endcase endmodule3仿真波形图4实物图