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

📄 settime2.v

📁 Traffic light written with Verilog
💻 V
字号:
module SetTime2( t_clk, t_sw, d_second, t_diswork , t_sec, display_time, t_scan );
input t_clk;
input [3:0] t_sw;
input [7:0] d_second;

output t_diswork;
reg t_diswork;
output [7:0] t_sec;
reg [7:0] t_sec;
output [7:0] display_time;
reg [7:0] display_time;
output [3:0] t_scan;
reg [3:0] t_scan;


parameter FIRST  = 4'b1110;
parameter SECOND = 4'b1101;
parameter THIRD  = 4'b1011;
parameter FOURTH = 4'b0111;
parameter FIVETH = 4'b0001;
parameter SIXTH	 = 4'b0010;
parameter SEVENTH= 4'b0100;
parameter EIGHTH = 4'b1000;


parameter Zero  = 4'b0000;
parameter One   = 4'b0001;
parameter Two   = 4'b0010;
parameter Three = 4'b0011;
parameter Four  = 4'b0100;
parameter Five  = 4'b0101;
parameter Six   = 4'b0110;
parameter Seven = 4'b0111;
parameter Eight = 4'b1000;
parameter Nine  = 4'b1001;
parameter No	= 4'b1111;

parameter ZERO  = 8'b11111100;
parameter ONE   = 8'b01100000;
parameter TWO   = 8'b11011010;
parameter THREE = 8'b11110010;
parameter FOUR  = 8'b01100110;
parameter FIVE  = 8'b10110110;
parameter SIX   = 8'b10111110;
parameter SEVEN = 8'b11100100;
parameter EIGHT = 8'b11111110;
parameter NINE  = 8'b11110110;
parameter NO    = 8'b00000000;


reg [2:0] t_round;
reg t_enter;
wire t_ok;
reg t_next_diswork;
reg t_next_enter;
reg [3:0] t_press;
/* the 16 switch

		t_diswork	Seven	Eight	Nine
		t_enter		Four	Five	Six
		t_ok		One		Two		Three
							Zero
*/

reg [1:0]	t_set_sw, t_enter_sw, t_ok_sw, one_sw, two_sw, three_sw, four_sw,
			five_sw, six_sw, seven_sw, eight_sw, nine_sw, zero_sw;

wire set, enter, one, two, three, four, five, six, seven, eight, nine, zero;

assign set = t_set_sw[0];
assign enter = t_enter_sw[0];
assign t_ok = t_ok_sw[0];
assign one = one_sw[0];
assign two = two_sw[0];
assign three = three_sw[0];
assign four = four_sw[0];
assign five = five_sw[0];
assign six = six_sw[0];
assign seven = seven_sw[0];
assign eight = eight_sw[0];
assign nine = nine_sw[0];
assign zero = zero_sw[0];

always @(posedge t_clk )
 begin

	case( t_round )
		3'b000:	t_scan=FIRST;
		3'b001:	t_scan=SECOND;
		3'b010:	t_scan=THIRD;
		3'b011:	t_scan=FOURTH;
		3'b100:	t_scan=FIVETH;
		3'b101:	t_scan=SIXTH;
		3'b110:	t_scan=SEVENTH;
		3'b111:	t_scan=EIGHTH;

	endcase
	t_round = t_round + 1;

////////////////////////////
	t_diswork = t_next_diswork;
	t_enter = t_next_enter;

	if( t_diswork==1 )
	 begin
		if( t_enter==0 )
			t_sec[7:4] = t_press;
		else if( t_enter==1 )
			t_sec[3:0] = t_press;

/*		if( (t_ok==1) && (t_enter==0) )
		 begin
			t_next_diswork=0;
			t_next_enter=0;
			t_sec[3:0] = t_press;
			t_press=No;
	 	 end
		else if ( t_ok==1 )
		 begin
			t_next_diswork=0;
			t_next_enter=0;
			t_press=No;
		 end
		t_ok=0;
*/	 end
 end




////////////////////////////////////////////////////////////////////////////////////////////////
always @(t_scan)
 begin
	case(t_scan)
		FIRST:
		 begin
			display_time = NO;

			case ( t_set_sw )
			2'b00:	if( t_sw[0]==0 )	t_set_sw<=2'b01;
			2'b01:	t_set_sw<=2'b10;
			2'b10:	if( t_sw[0]==1 )	t_set_sw<=2'b00;
			default:	t_set_sw<=2'b00;
			endcase

			case ( seven_sw )
			2'b00:	if( t_sw[1]==0 )	seven_sw<=2'b01;
			2'b01:	seven_sw<=2'b10;
			2'b10:	if( t_sw[1]==1 )	seven_sw<=2'b00;
			default:	seven_sw<=2'b00;
			endcase

			case ( eight_sw )
			2'b00:	if( t_sw[2]==0 )	eight_sw<=2'b01;
			2'b01:	eight_sw<=2'b10;
			2'b10:	if( t_sw[2]==1 )	eight_sw<=2'b00;
			default:	eight_sw<=2'b00;
			endcase

			case ( nine_sw )
			2'b00:	if( t_sw[3]==0 )	nine_sw<=2'b01;
			2'b01:	nine_sw<=2'b10;
			2'b10:	if( t_sw[3]==1 )	nine_sw<=2'b00;
			default:	nine_sw<=2'b00;
			endcase

			if( set==1 )	t_next_diswork=1;
			if( one==1 )	
			 begin
				if( t_diswork ==1 )	t_press=Seven;
			 end
			if( two==1 )
			 begin
				if( t_diswork ==1 )	t_press=Eight;
			 end
			if( three==1 )
			 begin
				if( t_diswork ==1 )	t_press=Nine;
			 end

		 end
///////////////////////////////////////////
		SECOND:
		 begin
			display_time = NO;

			case ( t_enter_sw )
			2'b00:	if( t_sw[0]==0 )	t_enter_sw<=2'b01;
			2'b01:	t_enter_sw<=2'b10;
			2'b10:	if( t_sw[0]==1 )	t_enter_sw<=2'b00;
			default:	t_enter_sw<=2'b00;
			endcase

			case ( four_sw )
			2'b00:	if( t_sw[1]==0 )	four_sw<=2'b01;
			2'b01:	four_sw<=2'b10;
			2'b10:	if( t_sw[1]==1 )	four_sw<=2'b00;
			default:	four_sw<=2'b00;
			endcase

			case ( five_sw )
			2'b00:	if( t_sw[2]==0 )	five_sw<=2'b01;
			2'b01:	five_sw<=2'b10;
			2'b10:	if( t_sw[2]==1 )	five_sw<=2'b00;
			default:	five_sw<=2'b00;
			endcase

			case ( six_sw )
			2'b00:	if( t_sw[3]==0 )	six_sw<=2'b01;
			2'b01:	six_sw<=2'b10;
			2'b10:	if( t_sw[3]==1 )	six_sw<=2'b00;
			default:	six_sw<=2'b00;
			endcase

			if( enter==1 )
			 begin
				if( t_diswork==1 )	t_next_enter=1;
			 end
			if( four==1 )
			 begin
				if( t_diswork ==1 )	t_press=Four;
			 end
			if( five==1 )
			 begin
				if( t_diswork ==1 )	t_press=Five;
			 end
			if( six==1 )
			 begin
				if( t_diswork ==1 )	t_press=Six;
			 end

		 end
//////////////////////////////////
		THIRD:
		 begin
			display_time = NO;

			case ( t_ok_sw )
			2'b00:	if( t_sw[0]==0 )	t_ok_sw<=2'b01;
			2'b01:	t_ok_sw<=2'b10;
			2'b10:	if( t_sw[0]==1 )	t_ok_sw<=2'b00;
			default:	t_ok_sw<=2'b00;
			endcase

			case ( one_sw )
			2'b00:	if( t_sw[1]==0 )	one_sw<=2'b01;
			2'b01:	one_sw<=2'b10;
			2'b10:	if( t_sw[1]==1 )	one_sw<=2'b00;
			default:	one_sw<=2'b00;
			endcase

			case ( two_sw )
			2'b00:	if( t_sw[2]==0 )	two_sw<=2'b01;
			2'b01:	two_sw<=2'b10;
			2'b10:	if( t_sw[2]==1 )	two_sw<=2'b00;
			default:	two_sw<=2'b00;
			endcase

			case ( three_sw )
			2'b00:	if( t_sw[3]==0 )	three_sw<=2'b01;
			2'b01:	three_sw<=2'b10;
			2'b10:	if( t_sw[3]==1 )	three_sw<=2'b00;
			default:	three_sw<=2'b00;
			endcase


			if( t_ok==1 )
			 begin
				if( t_diswork==1 )	
				 begin
					t_next_diswork=0;
					t_next_enter=0;
				 end
			 end
			if( one==1 )
			 begin
				if( t_diswork ==1 )	t_press=One;
			 end
			if( two==1 )
			 begin
				if( t_diswork ==1 )	t_press=Two;
			 end
			if( three==1 )
			 begin
				if( t_diswork ==1 )	t_press=Three;
			 end
		 end
/////////////////////////////
		FOURTH:
		 begin
			display_time = NO;

			case ( zero_sw )
			2'b00:	if( t_sw[2]==0 )	zero_sw<=2'b01;
			2'b01:	zero_sw<=2'b10;
			2'b10:	if( t_sw[2]==1 )	zero_sw<=2'b00;
			default:	zero_sw<=2'b00;
			endcase


			if( zero==1 )
			 begin
				if( t_diswork ==1 )	t_press=Zero;
			 end
		 end

/////////////////////////////////////////////
		FIVETH:
		 begin
			if( t_diswork==0 )
			 begin
				case( d_second )
					8'd00, 8'd01, 8'd02, 8'd03, 8'd04, 8'd05, 8'd06, 8'd07, 8'd08, 8'd09:
							display_time = ZERO;
					8'd10, 8'd11, 8'd12, 8'd13, 8'd14, 8'd15, 8'd16, 8'd17, 8'd18, 8'd19: 
							display_time = ONE;
					8'd20, 8'd21, 8'd22, 8'd23, 8'd24, 8'd25, 8'd26, 8'd27, 8'd28, 8'd29:
							display_time = TWO;
					8'd30, 8'd31, 8'd32, 8'd33, 8'd34, 8'd35, 8'd36, 8'd37, 8'd38, 8'd39: 
							display_time = THREE;
					8'd40, 8'd41, 8'd42, 8'd43, 8'd44, 8'd45, 8'd46, 8'd47, 8'd48, 8'd49: 
							display_time = FOUR;
					8'd50, 8'd51, 8'd52, 8'd53, 8'd54, 8'd55, 8'd56, 8'd57, 8'd58, 8'd59: 
							display_time = FIVE;
					8'd60, 8'd61, 8'd62, 8'd63, 8'd64, 8'd65, 8'd66, 8'd67, 8'd68, 8'd69: 
							display_time = SIX;
					8'd70, 8'd71, 8'd72, 8'd73, 8'd74, 8'd75, 8'd76, 8'd77, 8'd78, 8'd79: 
							display_time = SEVEN;
					8'd80, 8'd81, 8'd82, 8'd83, 8'd84, 8'd85, 8'd86, 8'd87, 8'd88, 8'd89: 
							display_time = EIGHT;
					8'd90, 8'd91, 8'd92, 8'd93, 8'd94, 8'd95, 8'd96, 8'd97, 8'd98, 8'd99: 
							display_time = NINE;
					default:display_time = NO;
				endcase
			 end
			else
				display_time = NO;
		 end

////////////////////////////////////

		SIXTH:
		 begin
			if( t_diswork==0 )
			 begin
				case( d_second )
					8'd00, 8'd10, 8'd20, 8'd30, 8'd40, 8'd50, 8'd60, 8'd70, 8'd80, 8'd90: 
							display_time = ZERO;
					8'd01, 8'd11, 8'd21, 8'd31, 8'd41, 8'd51, 8'd61, 8'd71, 8'd81, 8'd91: 
							display_time = ONE;
					8'd02, 8'd12, 8'd22, 8'd32, 8'd42, 8'd52, 8'd62, 8'd72, 8'd82, 8'd92: 
							display_time = TWO;
					8'd03, 8'd13, 8'd23, 8'd33, 8'd43, 8'd53, 8'd63, 8'd73, 8'd83, 8'd93: 
							display_time = THREE;
					8'd04, 8'd14, 8'd24, 8'd34, 8'd44, 8'd54, 8'd64, 8'd74, 8'd84, 8'd94:
							display_time = FOUR;
					8'd05, 8'd15, 8'd25, 8'd35, 8'd45, 8'd55, 8'd65, 8'd75, 8'd85, 8'd95: 
							display_time = FIVE;
					8'd06, 8'd16, 8'd26, 8'd36, 8'd46, 8'd56, 8'd66, 8'd76, 8'd86, 8'd96: 
							display_time = SIX;
					8'd07, 8'd17, 8'd27, 8'd37, 8'd47, 8'd57, 8'd67, 8'd77, 8'd87, 8'd97: 
							display_time = SEVEN;
					8'd08, 8'd18, 8'd28, 8'd38, 8'd48, 8'd58, 8'd68, 8'd78, 8'd88, 8'd98: 
							display_time = EIGHT;
					8'd09, 8'd19, 8'd29, 8'd39, 8'd49, 8'd59, 8'd69, 8'd79, 8'd89, 8'd99: 
							display_time = NINE;
					default:display_time = NO;
				endcase
			 end
			else
				display_time = NO;
		 end
/////////////////////////////
		SEVENTH:
		 begin
			if( t_diswork==1 )
			 begin
				case( t_sec[7:4] )
					Zero:	display_time = ZERO;
					One:	display_time = ONE;
					Two:	display_time = TWO;
					Three:	display_time = THREE;
					Four:	display_time = FOUR;
					Five:	display_time = FIVE;
					Six:	display_time = SIX;
					Seven:	display_time = SEVEN;
					Eight:	display_time = EIGHT;
					Nine:	display_time = NINE;
					No:		display_time = NO;
					default:display_time = NO;
				endcase
			 end
			else
				display_time = NO;
		 end
/////////////////////
		EIGHTH:
		 begin

			if( t_diswork==1 )
			 begin
				case( t_sec[3:0] )
					Zero:	display_time = ZERO;
					One:	display_time = ONE;
					Two:	display_time = TWO;
					Three:	display_time = THREE;
					Four:	display_time = FOUR;
					Five:	display_time = FIVE;
					Six:	display_time = SIX;
					Seven:	display_time = SEVEN;
					Eight:	display_time = EIGHT;
					Nine:	display_time = NINE;
					No:		display_time = NO;
					default:display_time = NO;
				endcase
			 end
			else
				display_time = NO;
		 end
///////////////////////
		default:
		 begin
				display_time = NO;
		 end
	endcase
 end

endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -