📄 cu.v
字号:
// *****************************************************************
// **Revision : 1.0
// **File name : CU.v
// **Module name : CU
// **Discription : 本文定义了交通灯控制器的控制器,控制器有4个状态
// ** Simulator : Modlesim XE 2 V5.6a/Verilog Pro6.5
// ** Synthesizer : Design Analyzer
// ** Author : wu
// ******************************************************************
module CU (clk,restet,s,R60,R40,C40,C60,R5,C5,R50,C50,R30,C30,RA,YA,GA,RB,YB,GB,L6,L5,L4,L3,L2,L1
E60,E40,E5,E50,E30);
parameter FIRST = 'b00,SECOND = 'b01,THIRD = 'b10,FORTH='b11; //状态
//控制器输出
output RA; reg RA; //A方向的红灯
output YA; reg YA; //A方向的黄灯
output GA; reg GA; //A方向的绿灯
output RB; reg RB; //B方向的红灯
output YB; reg YB; //B方向的黄灯
output GB; reg GB; //B方向的绿灯
output L6; reg L6; //倒数计时器的第6位
output L5; reg L5; //倒数计时器的第5位
output L4; reg L4; //倒数计时器的第4位
output L3; reg L3; //倒数计时器的第3位
output L2; reg L2; //倒数计时器的第2位
output L1; reg L1; //倒数计时器的第1位
output E60; reg E60; //到count60的使能信号
output E40; reg E40; //到count40的使能信号
output E50; reg E50; //到count50的使能信号
output E30; reg E30; //到count30的使能信号
output E5; reg E5; //到count5的使能信号
//控制器输入
input clk; //时钟,上升沿触发
input reset; //复位信号,低电平有效
input s; //电平信号,s=1表示B方向上车流量大;s=0表示A方向上车流量大
input R60; //来自count60的反馈使能信号
input R40; //来自count40的反馈使能信号
input R5; //来自count5的反馈使能信号
input R50; //来自count50的反馈使能信号
input R30; //来自count30的反馈使能信号
input [5:0] C60; //来自count60的反馈计数信号
input [5:0] C40; //来自count40的反馈计数信号
input [5:0] C5; //来自count5的反馈计数信号
input [5:0] C50; //来自count50的反馈计数信号
input [5:0] C30; //来自count30的反馈计数信号
reg [5:0] count; //控制器中的接收计数器来的计数值
reg [1:0] state; //机器状态
always @(posedge clk or negedge reset) //状态转换部分
begin
if(!reset) //系统复位,重新开始时钟周期
state <=FIRST;
else
begin
case(state)
FIRST:state <= SECOND; //FIST-->SECOND
SECOND:state <=THIRD; //SECOD-->THIRD
THIRD:state<=FORTH; //THIRD-->FORTH
FORTH:state<=FIRST; //FORTH-->FIRST
endcase
end
end
//控制信号形成部分
always @(state or s)
begin
//将所有控制信号都置0;
E60='b0;
E40='b0;
E50='b0;
E30='b0;
E5='b0;
//然后根据状态机的状态state和s的值产生相应的控制信号和
//完成一定的操作
case(state)
//此时,B道通行,A道禁止
FIRST:
begin
if(s==1) //此时,B方向的车流量较大,则用count60计数器
begin
E60='b1; //count60使能信号
count=C60; //接收count60的计数值
RA='b1;
YA='b0;
GA='b0; //A方向的红灯亮
RB='b0;
YB='b0;
GB='b1; //B方向的绿灯亮
L6=count[5];
L5=count[4];
L4=count[3];
L3=count[2];
L2=count[1];
L1=count[0]; //倒计时灯
end
else
begin
E40='b1; //count40使能信号
count=C40; //接收count40的计数值
RA='b1;
YA='b0;
GA='b0; //A方向的红灯亮
RB='b0;
YB='b0;
GB='b1; //B方向的绿灯亮
L6=count[5];
L5=count[4];
L4=count[3];
L3=count[2];
L2=count[1];
L1=count[0]; //倒计时灯
end
end
//此时,B道停车,A道禁止
SECOND:
begin
E5='b1; //count5使能信号
count=C5; //接收count5的计数值
RA='b1;
YA='b0;
GA='b0; //A方向的红灯亮
RB='b0;
YB='b1;
GB='b0; //B方向的黄灯亮
L6=count[5];
L5=count[4];
L4=count[3];
L3=count[2];
L2=count[1];
L1=count[0]; //倒计时灯
end
//此时,B道禁止,A道通行
THIRD:
begin
if(s==1) //此时,A方向的车流量较大,则用count50计数器
begin
E50='b1; //count50使能信号
count=C50; //接收count50的计数值
RA='b0;
YA='b0;
GA='b1; //A方向的绿灯亮
RB='b1;
YB='b0;
GB='b0; //B方向的红灯亮
L6=count[5];
L5=count[4];
L4=count[3];
L3=count[2];
L2=count[1];
L1=count[0]; //倒计时灯
end
else
begin
E30='b1; //count30使能信号
count=C30; //接收count30的计数值
RA='b0;
YA='b0;
GA='b1; //A方向的绿灯亮
RB='b1;
YB='b0;
GB='b0; //B方向的红灯亮
L6=count[5];
L5=count[4];
L4=count[3];
L3=count[2];
L2=count[1];
L1=count[0]; //倒计时灯
end
end
//此时,B道禁止,A道停车
FORTH:
begin
E5='b1; //count5使能信号
count=C5; //接收count5的计数值
RA='b0;
YA='b1;
GA='b0; //A方向的黄灯亮
RB='b1;
YB='b0;
GB='b0; //B方向的红灯亮
L6=count[5];
L5=count[4];
L4=count[3];
L3=count[2];
L2=count[1];
L1=count[0]; //倒计时灯
end
end
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -