⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cu.v

📁 一个用verilog编写的模拟交通灯控制的源代码。模拟在十字路口的双向交通灯。
💻 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 + -