OpenCores
URL https://opencores.org/ocsvn/freq_div/freq_div/trunk

Subversion Repositories freq_div

[/] [freq_div/] [trunk/] [rtl/] [odd.v] - Rev 3

Go to most recent revision | Compare with Previous | Blame | View Log

 
`include "defines.v"
 
module odd(clk, out, P, reset, enable);
 
	input clk;	// slow clock
	output out;
	input [`SIZE-1:0] P;
	input reset;
	input enable;
 
	reg [`SIZE-1:0] counter;
	reg [`SIZE-1:0] counter2;
	reg out_counter;
	reg out_counter2;
	reg rst_pulse;
	reg [`SIZE-1:0] old_P;
	wire not_zero;
 
	assign out = out_counter2 ^ out_counter;
 
	always @(posedge clk)
	begin
		if(reset | rst_pulse)
		begin
			counter <= P;
			out_counter <= 1;
		end
		else if (enable)
		begin
			if(counter == 1)
			begin
				counter <= P;
				out_counter <= ~out_counter;
			end
			else
			begin
				counter <= counter-1;
			end
		end
	end
 
	reg [`SIZE-1:0] initial_begin;
	wire [`SIZE:0] interm_3;
	assign interm_3 = {1'b0,P} + 3;
 
	always @(negedge clk)
	begin
		if(reset | rst_pulse)
		begin
			counter2 <= P;
			initial_begin <= interm_3[`SIZE:1];
			out_counter2 <= 1;
		end
		else if(initial_begin <= 1 && enable)
		begin
			if(counter2 == 1)
			begin
				counter2 <= P;
				out_counter2 <= ~out_counter2;
			end
			else
			begin
				counter2 <= counter2-1;
			end
		end
		else if(enable)
		begin
			initial_begin <= initial_begin - 1;
		end
	end
 
	always @(posedge clk or posedge reset)
	begin
		if(reset)
		begin
			rst_pulse <= 0;
		end
		else if(enable)
		begin
			if(P != old_P)
			begin
				rst_pulse <= 1;
			end
			else
			begin
				rst_pulse <= 0;
			end
			old_P <= P;
		end
	end
 
endmodule //odd
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.