---------------------------------------------
-- increase output every fourth clock cycle
-- 

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

library sychro1;

entity saw_generator_wrapper is
	generic (
		G_INCREASE_EVERY_NTH : positive := 4
	);
  port (
  
		i_clk : in std_logic;
		i_rst : in std_logic;
		
		o_valid : out std_logic;
		o_data  : out std_logic_vector
		
	);		
end saw_generator_wrapper;

architecture behavioral of saw_generator_wrapper is
	
	signal s_modulo_counter_carry : std_logic;
	
begin

	-- first counter that counts modulo G_INCREASE_EVERY_NTH to generate a valid signal for the second counter
	-- and the output:
	modulo_up_counter : entity sychro1.up_counter
	generic map ( G_MIN_NUMBER => 0, G_MAX_NUMBER => G_INCREASE_EVERY_NTH - 1 )
	port map ( i_clk => i_clk, i_rst => i_rst, i_valid => '1', o_data => open, o_carry => s_modulo_counter_carry );
	
	-- the second counter:
	main_up_counter : entity sychro1.up_counter_stdlv
	generic map ( G_BITS => o_data'length, G_MIN_NUMBER => ( o_data'range => '0' ), G_MAX_NUMBER => ( o_data'range => '1' ) )
	port map( i_clk => i_clk, i_rst => i_rst, i_valid => s_modulo_counter_carry, o_data => o_data, o_carry => open );
	
	-- signal connection:
	o_valid <= s_modulo_counter_carry;
		
end architecture;

