我需要增加pwm_count变量吗?

时间:2019-05-07 14:35:43

标签: vhdl fpga hdl

我现在正在学习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 :(得分:0)

我们确实知道max_pwm_count的值:它被初始化为0,并且从不重新分配。因此,IF永远不可能为真等等。

就增加PWM_Count而言,您的理解似乎比作者的理解要好,这使您处于可以进行必要重写的合理位置。

我建议先编写一个测试平台,以便您观察其行为,并在仿真中使其正确无误。