模块控制(control)( 输入时钟_50,//板载50MHz时钟 输入q_key, 输入guang1,//南北方向流量传感器接口 输入guang2,//东西方向流量传感器接口 输入[9:1]键, 输出寄存器[15:0]数据, 输出寄存器[15:0]流量, 输出寄存器[5:0]LED );

寄存器[7:0] nabeiliu; 寄存器[7:0] dongxiliu;

寄存器f1,f2; 始终@(posedge时钟_50或负边缘q_key) 如果(!q_key) 开始 f1<=1'b1; f2<=1'b1; 结束 否则 开始 f1<=guang1;//需要检测的引脚 f2<=f1; 结束 分配SCK_fallingedge1=F2&!F1;//检测时钟的下降沿 分配SCK_risingedge1=F1&!F2;//检测时钟的上升沿

寄存器f3,f4; 寄存器aa,bb; 始终@(posedge时钟_50或负边缘q_key) 如果(!q_key) 开始 f3<=1'b1; f4<=1'b1; 结束 否则 开始 f3<=guang2;//需要检测的引脚 f4<=f3; 结束 分配SCK_fallingedge2=F4&!F3;//检测时钟的下降沿 分配SCK_risingedge2=F3&!F4;//检测时钟的上升沿

寄存器[25:0] cnt2;// 计数子 寄存器[25:0] cnt1;// 计数子 寄存器[25:0] cnt; // 计数子 寄存器 uu1; 寄存器 uu2; 寄存器[7:0] t_buf1; 寄存器[7:0] t_buf2; 寄存器[3:0] moshi; 寄存器[2:0] state; 寄存器[6:0] shijiandx,shijiannb; 寄存器 ff; 寄存器[7:0] sec; 寄存器[6:0] ttdx,ttnb; //++++++++++++++++++++++++++++++++++++++ // 获取键值 开始 //++++++++++++++++++++++++++++++++++++++ 线[9:1] key_val; // 键值

key_debounce u0( .i_clk (时钟_50), .i_rst_n (q_key), .i_key (键), .o_key_val (key_val) // 按下为0,松开为1 );

始终@ (posedge 时钟_50, negedge q_key) 如果 (!Q_KEY) 开始 nabeiliu<=0; dongxiliu<=0; cnt1 <= 0; cnt <= 0;

 // led<= 6'b011_101;//东西方向:红绿黄 南北方向:红绿黄      
  sec=0;
  moshi=0; 
  shijiandx=20; 
  shijiannb=20; 
  cnt2=0;
  sec=0;
结束

否则 开始

  case (1'b0)
	  key_val[1] : 
		开始 
		    moshi=1;//调节时间
		    if(shijiannb<99)shijiannb=shijiannb+1;
		    sec=0;
		结束 
	  key_val[2] : 
		开始 
		    moshi=1;//调节时间
		    if(shijiannb>1)shijiannb=shijiannb-1;
		    sec=0;
		结束 		  
	  key_val[3] : 
		开始 
		    moshi=1;//调节时间
		    if(shijiandx<99)shijiandx=shijiandx+1;
		    sec=0;
		结束 
	  key_val[4] : 
		开始 
		    moshi=1;//调节时间
		    if(shijiandx>1)shijiandx=shijiandx-1;
		    sec=0;
		结束 
	  key_val[5] : 
		开始 
		    moshi=2;//东西方向通行,南北禁止	
		    sec=0;		    
		结束 				
	  key_val[6] : 
		开始 
		    moshi=3;
		    sec=0;			    
		结束 	
	  key_val[7] : 
		开始 
		    moshi=4;
		    sec=0;			    
		结束 				
	  key_val[8] : 
		开始 
		    moshi=5;shijiannb=20;shijiandx=20;	
		    sec=0;		    
		结束 	
	  key_val[9] : 
		开始 
		    moshi=0;	
		    sec=0;		    
		结束 										
			
	endcase      
	
    if(SCK_fallingedge1 == 1)
	开始 
		uu1=1;		    
	结束 
    if(SCK_fallingedge2 == 1)
	开始 
		uu2=1;		    
	结束 				
	if (cnt1 == 9_999_999)
	  开始
			cnt1 <= 0;				
            if(guang1==1&&uu1==1)
			开始 
				uu1<=0;
				nabeiliu<=nabeiliu+1;			    
			结束 				
            if(guang2==1&&uu2==1)
			开始 
				uu2<=0;
				dongxiliu<=dongxiliu+1;			    
			结束 							
	  结束
	else
	cnt1 <= cnt1 + 1'b1;    

		    
	
	    if(moshi==0)
  		    开始
	                

				  if (cnt == 49_999_999)  //1s
				  开始
						cnt <= 0;	
						if(sec==(shijiannb+shijiandx+11))sec=0;
						else sec=sec+1;
			            if(sec<=shijiannb)//南北通行;东西禁止
			            开始
				              state=0;
                              ttnb=shijiannb-sec;
                              ttdx=shijiannb-sec+5;
				        
				        结束
				        else if(sec>shijiannb&&sec<=(shijiannb+5))//南北黄灯5S;东西禁止
			            开始
				              state=1;
                              ttnb=shijiannb-sec+5;
                              ttdx=shijiannb-sec+5;					             
				        结束	
				        else if(sec>(shijiannb+5)&&sec<=(shijiannb+shijiandx+1+5))//东西通行;南北禁止
			            开始
				             state=2;
                              ttnb=(shijiannb+shijiandx+1)-sec+10;
                              ttdx=(shijiannb+shijiandx+1)-sec+5;					             
				             
				        结束						        
				        else if(sec>(shijiannb+shijiandx+6))//东西黄灯5S;南北禁止
			            开始
				             state=3;
                              ttnb=(shijiannb+shijiandx+11)-sec;
                              ttdx=(shijiannb+shijiandx+11)-sec;						        
				        结束							        				        
				  结束
				  else		  
				  cnt <= cnt + 1'b1; 						  
				  
				  if(state==0)
				  开始					       
					  led<= 6'b011_101;//东西方向:红绿黄 南北方向:红绿黄 			              		              
	              结束
				  else if(state==1)
				  开始				       
					  led<= 6'b011_110;//东西方向:红绿黄 南北方向:红绿黄 			              		              
	              结束		              
				  else  if(state==2)
				  开始					       
					  led<= 6'b101_011;//东西方向:红绿黄 南北方向:红绿黄 			              		              
	              结束
				  else if(state==3)
				  开始					       
					  led<= 6'b110_011;//东西方向:红绿黄 南北方向:红绿黄 			              		              
	              结束	
				  data[3:0]   =ttnb/10;
				  data[7:4]   =ttnb%10;
				  data[11:8]  =ttdx/10;
				  data[15:12] =ttdx%10;  		              				  
				  		        
	        结束
	        else if(moshi==1)//调节时间
  		    开始
	              led<= 6'b111_111;
				  data[3:0]   =shijiannb/10;
				  data[7:4]   =shijiannb%10;
				  data[11:8]  =shijiandx/10;
				  data[15:12] =shijiandx%10;  				            
	        结束
	        else if(moshi==2)//东西方向通行,南北禁止	
  		    开始
				  data[3:0]   =10;
				  data[7:4]   =10;
				  data[11:8]  =10;
				  data[15:12] =10;  
				  led<= 6'b101_011;//东西方向:红绿黄 南北方向:红绿黄    				        
	        结束
	        else if(moshi==3)//南北方向通行,东西禁止		
  		    开始
				  data[3:0]   =10;
				  data[7:4]   =10;
				  data[11:8]  =10;
				  data[15:12] =10;  
				  led<= 6'b011_101;//东西方向:红绿黄 南北方向:红绿黄  		      
	        
	        结束		        
	        else if(moshi==4)//夜间模式
  		    开始
	             if (cnt2 == 24_999_999)  //0.5s
	             开始
			         cnt2 = 0;	
			         if(ff==0)ff=1;
			         else ff=0;
			     结束
			     else cnt2=cnt2+1; 
			     if(ff==0) led<= 6'b110_110;//东西方向:红绿黄 南北方向:红绿黄  
			     else led<= 6'b111_111;//东西方向:红绿黄 南北方向:红绿黄    
				 
				  data[3:0]   =10;
				  data[7:4]   =10;
				  data[11:8]  =10;
				  data[15:12] =10;  		      
	      
	        结束		        
	        else if(moshi==5)//按流量通行模式
  		    开始
	        
              if (cnt == 49_999_999)  //1s
				  开始
						cnt <= 0;	
						if(sec==(shijiannb+shijiandx+11))
						开始
						      sec=0;
						      
						      if((nabeiliu>=(dongxiliu+10))&&(nabeiliu<(dongxiliu+20)))
						      开始
						         shijiannb=40;shijiandx=20;
						      结束
						      else if((nabeiliu>=(dongxiliu+20)))
						      开始
						         shijiannb=60;shijiandx=20;
						      结束	
						      else 	if((dongxiliu>=(nabeiliu+10))&&(dongxiliu<(nabeiliu+20)))		
						      开始
						         shijiannb=20;shijiandx=40;
						      结束	
						      else if((dongxiliu>=(nabeiliu+20)))
						      开始
						         shijiannb=20;shijiandx=60;
						      结束	
						      else
						      开始
						         shijiannb=20;shijiandx=20;
						      结束	
						      dongxiliu<=0;	nabeiliu<=0;						      							      							      			
						end
						else sec=sec+1;
			            if(sec<=shijiannb)//南北通行;东西禁止
			            开始
				              state=0;
                              ttnb=shijiannb-sec;
                              ttdx=shijiannb-sec+5;
				        
				        结束
				        else if(sec>shijiannb&&sec<=(shijiannb+5))//南北黄灯5S;东西禁止
			            开始
				              state=1;
                              ttnb=shijiannb-sec+5;
                              ttdx=shijiannb-sec+5;					             
				        结束	
				        else if(sec>(shijiannb+5)&&sec<=(shijiannb+shijiandx+1+5))//东西通行;南北禁止
			            开始
				             state=2;
                              ttnb=(shijiannb+shijiandx+1)-sec+10;
                              ttdx=(shijiannb+shijiandx+1)-sec+5;					             
				             
				        结束						        
				        else if(sec>(shijiannb+shijiandx+6))//东西黄灯5S;南北禁止
			            开始
				             state=3;
                              ttnb=(shijiannb+shijiandx+11)-sec;
                              ttdx=(shijiannb+shijiandx+11)-sec;						        
				        结束							        				        
				  结束
				  else		  
				  cnt <= cnt + 1'b1; 						  
				  
				  if(state==0)
				  开始					       
					  led<= 6'b011_101;//东西方向:红绿黄 南北方向:红绿黄 			              		              
	              结束
				  else if(state==1)
				  开始				       
					  led<= 6'b011_110;//东西方向:红绿黄 南北方向:红绿黄 			              		              
	              结束		              
				  else  if(state==2)
				  开始					       
					  led<= 6'b101_011;//东西方向:红绿黄 南北方向:红绿黄 			              		              
	              结束
				  else if(state==3)
				  开始					       
					  led<= 6'b110_011;//东西方向:红绿黄 南北方向:红绿黄 			              		              
	              结束	
				  data[3:0]   =ttnb/10;
				  data[7:4]   =ttnb%10;
				  data[11:8]  =ttdx/10;
				  data[15:12] =ttdx%10;  		        		        
	        
	        
	        结束		        		         	
	
	     
结束

始终@ (posedge 时钟_50) 开始

if(moshi==5) 开始 liul[3:0] <= nabeiliu/10; //南北方向流量 十位 liul[7:4] <= nabeiliu%10;//南北方向流量 个位 liul[11:8] <= dongxiliu/10;//东西方向流量 十位 liul[15:12] <= dongxiliu%10; //东西方向流量 个位
结束 else 开始 liul[3:0] <= moshi; liul[7:4] <= 10; liul[11:8] <= 10; liul[15:12] <= 10;
结束

结束

endmodule

Verilog 代码翻译及功能解释

原文地址: https://www.cveoy.top/t/topic/ofbC 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录