Почему я не получаю вывод для следующего деления на 3-часовой код VHDL? - PullRequest
0 голосов
/ 13 мая 2011

В следующем коде нет ошибки синтеза, но я все равно не получаю вывод при моделировании.cout все время придерживается логики 1.Пожалуйста, кто-нибудь может помочь мне выяснить, что не так?

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity divide_by_3 is
port (
  cout   :out std_logic; -- Output clock
  clk    :in  std_logic; -- Input clock
  reset  :in  std_logic  -- Input reset
 );
end divide_by_3;

architecture Behavioral of divide_by_3 is
  signal pos_cnt :std_logic_vector (1 downto 0);
  signal neg_cnt :std_logic_vector (1 downto 0);
begin

  process (clk, reset) 
    begin
      if (reset = '1') then
        pos_cnt <= (others=>'0');
      elsif (rising_edge(clk)) then
        if (pos_cnt = "10") then
          pos_cnt <= pos_cnt + '1';
        end if;
      end if;
    end process;

    process (clk, reset) begin
      if (reset = '1') then
        neg_cnt <= (others=>'0');
      elsif (falling_edge(clk)) then
        if (neg_cnt = "10") then
          neg_cnt <= neg_cnt + '1';
        end if;
      end if;
    end process;

    cout <= '1' when ((pos_cnt /= "10") and (neg_cnt /= "10")) else
    '0';
end Behavioral;

1 Ответ

5 голосов
/ 13 мая 2011

Ваш счетчик никогда не будет считать, потому что вы:

    if (neg_cnt = "10") then
      neg_cnt <= neg_cnt + '1';
    end if;

и

    if (pos_cnt = "10") then
      pos_cnt <= pos_cnt + '1';
    end if;

, но оба значения, pos_cnt и neg_cnt, сбрасываются на "00".Я думаю, вы могли бы сделать что-то подобное, как:

    if (pos_cnt = "10") then
      pos_cnt <= (others => '0');
    else
      pos_cnt <= pos_cnt + '1';
    end if;
...