Counter.vhd


1
--Eskandari, 30.03.2021
2
-- 5Bit Phase Correct PWM
3
--
4
5
library ieee;
6
use ieee.std_logic_1164.all;
7
use ieee.numeric_std.all;
8
entity counter is 
9
  generic (  n_Bit              : natural:= 10);
10
           
11
  port( clk_in, n_reset          : in std_logic
12
    Upwm0            : in std_logic_vector(n_Bit-1 downto 0);     
13
    pwm0_out         : out std_logic;
14
    pwm1_out   : out std_logic;
15
);          
16
        
17
end entity counter;
18
19
architecture counter_a of counter is
20
 signal  pwm0     :unsigned(n_Bit-6 downto 0):= (others=>'0');
21
 signal  pwm1     :unsigned(n_Bit-1 downto 4):= (others=>'0');
22
 signal  pwm_control  :std_logic:='0';
23
 signal  pwm    :std_logic:='0';
24
25
begin
26
  count: process(clk_in,n_reset)--sensitivity list
27
  begin
28
     if(n_reset = '0') then
29
          pwm0 <= unsigned(Upwm0);
30
    pwm_control <= '0';
31
32
    else
33
        if(rising_edge(clk_in)) then
34
                if(pwm0 < to_unsigned(31,n_Bit))  then
35
      pwm0 <= (pwm0 + 1);
36
      pwm_control <= '1';
37
    else if(pwm0 > to_unsigned(0,n_Bit))then
38
      pwm0 <= (pwm0 - 1);
39
      pwm_control <='0';
40
       end if;--pwm0 fall
41
    end if; -- pwm0 rise
42
          end if;   -- rising_edge              
43
      end if;       -- reset      
44
    end process count;
45
  
46
  pwm_logic:process(clk_in)
47
  begin
48
    if(rising_edge(clk_in)) then
49
      if(pwm0 => Upwm0) then
50
      pwm <= '1';
51
      else 
52
      pwm <= '0';
53
    end if;
54
    end if;
55
   end process pwm_logic;  
56
output:
57
Upwm0_out <=  std_logic(pwm);
58
59
60
end architecture counter_a;