Как отправить только одну «1» на выходе, даже если запись остается на «1» - PullRequest
1 голос
/ 05 мая 2019

Я делаю некоторый VHDL, но я новичок, и у меня есть пользователь, который продолжает посылать 1 в записи.Все, что я хочу, это чтобы мой вывод был похож на «10000000», а не на «111111», за исключением того, что если «101010», то выходной сигнал равен «101010».Я попробовал что-то вроде машины Мили.

library ieee;
use ieee.std_logic_1164.ALL;
use ieee.std_logic_unsigned.all;

entity Button1_sync is
   port (   i_button1        : in    std_logic;
            i_clk        : in    std_logic;
            i_clk_game        : in    std_logic;
            i_rst      : in    std_logic;
            o_button1_sync  : out   std_logic);
end Button1_sync;

architecture BEHAVIORAL of Button1_sync is
    type stateType is (noPressure, Pressed);
   signal state, nextState : stateType;

begin
   process(i_clk_game,i_rst)
      begin
          if (i_rst = '0') then
              state <= noPressure;
              o_button1_sync <= '0';
          elsif rising_edge(i_clk_game) then
              state <= nextState;
          end if;
   end process;

   process(state,i_button1)
      begin
          if i_button1 = '1' then
              nextState <= Pressed;
          else
              nextState <= noPressure;
          end if; 
    end process;

    o_button1_sync <= '1' when (state = noPressure and i_button1 ='1') else '0';
end Behavioral;

, но вывод остался на "U"

1 Ответ

1 голос
/ 05 мая 2019

Самое простое, что нужно сделать - это сдвинуть входной сигнал на один такт, как (в процессе):

i_button1_d <= i_button1;

А затем используйте 2 сигнала для определения переднего фронта входа с комбинаторным выражением:

i_button1_d = '0' and i_button1 = '1'

например, если в процессе. Выражение означает, что сигнал был «0» на предыдущих часах и «1» на текущих, поэтому просто пошел вверх.
Также очень часто тестируют с «1» и «0», чтобы получить уникальный импульс в «1» в (после) падающего фронта.
Затем вы можете объединить это выражение с другими (например, «ИЛИ» со входом или тем же импульсом, смещенным, например, еще на один цикл), если необходимо поддерживать сигнал вверх или вниз!

...