I am trying to build pwm in wave form .meaning for exmaple I want the pwm go for 5 rising edge on and then 5 rising edges off . But for some reason when I write :
variable counter_test : integer range 0 to 10 ;
meaning that variable counter_test should run from 0 to 10 ,so in the waveform it runs from 0 to 15 (my guess is that it runs to 15 becouse 10 in binary form is 1010 ,so it has 4 bits and 2^4-1=15 ) .My question is simple why it runs till 15 and not 10 as I wrote ?
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Clock_Divider is
port (
clk_in_27Mhz : in std_logic ;
clr : in std_logic;
clk_out_960Hz: out std_logic
);
end Clock_Divider;
architecture logic_clock_divider of Clock_Divider is
begin
process(clk_in_27Mhz,clr)
variable counter_test : integer range 0 to 9:=0;
begin
if (clk_in_27Mhz'event and clk_in_27Mhz='1') then
counter_test:=counter_test+1;
if ( 0< counter_test and counter_test<4 ) then
clk_out_960Hz<='1';
elsif ( 4<counter_test and counter_test<9) then
clk_out_960Hz<='0';
end if;
end if;
end process;
end logic_clock_divider ;
why the variable counter_test does not reset at 9 and keeps till 15 ? what is wrong with my code ? and how to fix this problem ?