【发布时间】:2019-11-15 00:20:55
【问题描述】:
我在这个过程中有一个问题,如果我包含一个重置语句,我会得到一个推断的锁存器。但是,如果我不包含 reset 语句,我不会得到关于 duty_cycle_triangle 的推断锁存器。
SIGNAL duty_cycle_triangle : INTEGER := 0;
SIGNAL count_up : STD_LOGIC;
SIGNAL tick_zero : STD_LOGIC;
triangle_count: PROCESS(clk, reset signal, tick_zero)
BEGIN
IF (reset = '1') THEN
duty_cycle_triangle <= 0;
ELSIF (RISING_EDGE(clk)) THEN
IF (tick_zero = '1') THEN
IF (count_up = '1') THEN
duty_cycle_triangle <= duty_cycle_triangle + 2;
ELSE
duty_cycle_triangle <= duty_cycle_triangle - 2;
END IF;
END IF;
END IF;
END PROCESS;
我正在尝试设计一个 FSM,它将使用 PWM 和如下所示的 FSM 输出三角波:
FSM_comb: PROCESS(currentState, duty_cycle_triangle)
BEGIN
CASE currentState IS
WHEN triangle_up =>
PWM_enable <= '1';
count_up <= '1';
IF (duty_cycle_triangle > 99) THEN
nextState <= triangle_down;
ELSE
nextState <= triangle_up;
END IF;
WHEN triangle_down =>
PWM_enable <= '1';
count_up <= '0';
IF (duty_cycle_triangle < 1) THEN
nextState <= triangle_up;
ELSE
nextState <= triangle_down;
END IF;
END CASE;
END PROCESS;
FSM_seq: PROCESS(clk, reset)
BEGIN
IF (reset = '1') THEN
currentState <= triangle_up;
ELSIF (RISING_EDGE(clk)) THEN
currentState <= nextState;
END IF;
END PROCESS FSM_seq;
基本上,在每个“滴答”之后,我希望三角波的占空比增加 2。占空比达到 100 后,我希望占空比减少 2,直到占空比达到 0。一旦占空比周期达到 0,我希望占空比再次从 0 开始增加,直到达到 100 并重新开始。
是否有人发现我的代码有任何问题,或者谁能指出我纠正任何问题的正确方向?
【问题讨论】: