www.pudn.com > eternityclock.rar > shake.v


`timescale 1ns / 100ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date:    21:19:50 07/21/2007 
// Design Name: 
// Module Name:    shake 
// Project Name: 
// Target Devices: 
// Tool versions: 
// Description: 
//
// Dependencies: 
//
// Revision: 
// Revision 0.01 - File Created
// Additional Comments: 
//
//////////////////////////////////////////////////////////////////////////////////
module noshake(clk, b1, b2, b3, b4, noshakeb1, noshakeb2, noshakeb3, noshakeb4);
    input clk;
    input b1;
    input b2;
    input b3;
    input b4;
    output noshakeb1;
    output noshakeb2;
    output noshakeb3;
    output noshakeb4;
	 
	 parameter shaketime = 21'd1000000;
	 //parameter shaketime = 18'h0000f;
	 reg counten;
	 reg[20:0] shakecount;
	 reg sample;
	 reg noshakeb2,noshakeb3,noshakeb4;
	  
	 assign noshakeb1 = b1;	 
	 always @( posedge clk or negedge b1) begin
		if(b1 == 0)begin shakecount<=0; sample <=0; end
		else begin
			if(shakecount == shaketime)begin shakecount<=0; sample<=1; end
			else begin shakecount<=shakecount+1; sample<=0;end
		end
	 end
	 always @(posedge sample or negedge b1) begin
		 if(b1 == 0) begin 
		 	{noshakeb2,noshakeb3,noshakeb4}<=3'b111; 
		 end 
		 else begin			  
			 if(b4 == 0){noshakeb2,noshakeb3,noshakeb4}<=3'b110; 
			 else if(b3 == 0){noshakeb2,noshakeb3,noshakeb4}<=3'b101; 
			 else if(b2 == 0){noshakeb2,noshakeb3,noshakeb4}<=3'b011; 
			 else  {noshakeb2,noshakeb3,noshakeb4}<=3'b111; 
		 end 
		 
	 end
endmodule