`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date:    13:19:50 11/21/2006 
// Design Name: 
// Module Name:    ledblock 
// Project Name: 
// Target Devices: 
// Tool versions: 
// Description: 
//
// Dependencies: 
//
// Revision: 
// Revision 0.01 - File Created
// Additional Comments: 
//
//////////////////////////////////////////////////////////////////////////////////

module ledblock (zf3, zf2, zf1, zf0, sevseg, anods, ce, clk, rst );

input clk;
input rst;
input ce;

input[3:0] zf3, zf2, zf1, zf0;

output[7:0] sevseg;
reg[7:0] sevseg;

output[3:0] anods;
reg[3:0] anods;



reg slowclk;
reg[17:0] divreg;

reg[3:0] aktziff;	
reg[1:0] state, new_state;


always @(aktziff)
begin
case (aktziff)
	4'b0000: begin
					sevseg = 8'b00000011;
				end
	4'b0001: begin
					sevseg = 8'b10011111;
				end
	4'b0010: begin
					sevseg = 8'b00100101;
				end
	4'b0011: begin
					sevseg = 8'b00001101;
				end
	4'b0100: begin
					sevseg = 8'b10011001;
				end
	4'b0101: begin
					sevseg = 8'b01001001;
				end
	4'b0110: begin
					sevseg = 8'b01000001;
				end
	4'b0111: begin
					sevseg = 8'b00011111;
				end
	4'b1000: begin
					sevseg = 8'b00000001;
				end
	4'b1001: begin
					sevseg = 8'b00001001;
				end
	4'b1010: begin
					sevseg = 8'b00010001;
				end
	4'b1011: begin
					sevseg = 8'b11000001;
				end
	4'b1100: begin
					sevseg = 8'b01100011;
				end
	4'b1101: begin
					sevseg = 8'b10000101;
				end
	4'b1110: begin
					sevseg = 8'b01100001;
				end
	4'b1111: begin
					sevseg = 8'b01110001;
				end
endcase
end

always @(posedge clk or posedge rst)
	begin
		if (rst)
			begin
				divreg <= 18'h8ffff;
				slowclk <= 0;
			end
		else
			begin
				if (divreg == 0)
					begin
						slowclk <= ~slowclk;
						divreg <= 18'b011111111111111111;
					end
				else
					begin
						divreg <= divreg - 1;
					end
			end
	end
	
always @(state)
	begin
		case (state)
			2'b00: begin
						new_state = 2'b01;
					 end
			2'b01: begin
						new_state = 2'b10;
					 end
			2'b10: begin
						new_state = 2'b11;
					 end
			2'b11: begin
						new_state = 2'b00;
					 end
			default:	begin
						 new_state = 2'b00;
						end
		endcase
	end



always @(state)
	begin
		case (state)
			2'b00: begin
						anods = 4'b1110;
					 end
			2'b01: begin
						anods = 4'b1101;
					 end
			2'b10: begin
						anods = 4'b1011;
					 end
			2'b11: begin
						anods = 4'b0111;
					 end
			default:	begin
						 anods = 4'b1111;
						end
		endcase
	end

always @(zf0 or zf1 or zf2 or zf3 or state)
	begin
		case (state)
			2'b00: begin
						aktziff = zf0;
					 end
			2'b01: begin
						aktziff = zf1;
					 end
			2'b10: begin
						aktziff = zf2;
					 end
			2'b11: begin
						aktziff = zf3;
					 end
			default:	begin
						 aktziff = 4'b1111;
						end
		endcase
	end
		


always @(posedge slowclk or posedge rst)
	begin
		if (rst)
			begin
				state = 2'b00;
			end
		else
			begin
				state = new_state;
			end
	end

endmodule
