Нужно ли увеличивать переменную pwm_count? - PullRequest
0 голосов
/ 07 мая 2019

Я сейчас изучаю язык VHDL, и у меня есть некоторые проблемы с пониманием части кода в моем курсе.Я не понимаю в процессе freq_counter это утверждение -> if(pwm_count < max_pwm_count), потому что мы не знаем значение max_pwm_count, а также Я не вижу никакого увеличения переменной pwm_count .

Спасибо, ребята!

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use  IEEE.numeric_std.all;

entity PWM is
    generic ( 
        freq            : integer := 50; --50Hz
        INPUT_CLK       : integer := 50000000; --50MHz
        BITH_DEPTH      : integer := 8
          );

    Port (    
       ENABLE       : in std_logic;
       CLK          : in std_logic;
       PWM_OUT      : out std_logic;
       DUTY_CYCLE   : in std_logic_vector(BITH_DEPTH-1 downto 0)
          );

end PWM;

architecture behavioral of PWM is

constant max_freq_count    :     integer:= INPUT_CLK/freq;
constant pwm_step          :     integer := max_freq_count/2**BITH_DEPTH;

signal PWM_value        :  std_logic := '0';
signal freq_count       :  integer range from 0 to max_freq_count := 0;
signal pwm_count        :  integer range from 0 to 2**BITH_DEPTH := 0;
signal max_pwm_count    :  integer range from 0 to 2**BITH_DEPTH := 0;
signal pwm_step_count   :  integer range from 0 to max_freq_count := 0;

begin

max_pwm_count <= TO_INTEGER(unsigned(DUTY_CYCLE));
PWM_OUT <= PWM_value;

freq_counter: process(CLK)
begin
if rising_edge(CLK) then 
    if(ENABLE='0') then
       if(freq_count < max_freq_count) then
            freq_count <= freq_count + 1;  
                if(pwm_count < max_pwm_count) then 
                    PWM_value<='1';
                    if(pwm_step_count<pwm_step) then
                        pwm_step_count<=pwm_step_count+1;
                    else
                        pwm_step_count<=0;
                        pwm_count<=0;
                    end if;
                else
                    pwm_value<='0';
                end if;
       else
            freq_count <= 0;
            pwm_count <= 0;
       end if;
    else 
        PWM_value <= '0';
    end if;
end if;
end process freq_counter;

end PWM;

1 Ответ

0 голосов
/ 12 мая 2019

Нам действительно известно значение max_pwm_count: оно инициализируется 0 и никогда не назначается повторно. Следовательно, ЕСЛИ никогда не может быть правдой и ... так далее.

Что касается увеличения PWM_Count, ваше понимание кажется лучше, чем у автора, что ставит вас в разумную позицию для необходимой переписывания.

Я рекомендую сначала написать тестовую среду, чтобы вы могли наблюдать за ее поведением и получить правильные результаты в симуляции.

...