Перейти к содержанию

    

lyzifer

Участник
  • Публикаций

    24
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о lyzifer

  • Звание
    Участник

Посетители профиля

326 просмотров профиля
  1. Цитата(Flip-fl0p @ Nov 28 2017, 19:52) ооо,вот тут помогло: Кодprocess (clk_20) begin             if rising_edge(clk_20) then                 case state_q is                     when TRANSFER =>                         CLKuWire <= (CLKuWire_q(CLK_DIV - 1));                         when others => null;                 end case;             end if;         end process; в тестбенче CLKuWire теперь выдаёт результаты. а вот список чувствительности в принципе ничего не дал Кодprocess(state_q, start_interface, CLKuWire_q, ctr_q, data_q, DATAuWire_q, get_data_q, data_2write) begin Цитата(Flip-fl0p @ Nov 28 2017, 19:52) только как мне теперь добиться,чтобы на DATAuWire выдавались данные со всех регистров, а не только с 2х ?
  2. ну по началу было так: Кодprocess (clk_20) begin         if rising_edge(clk_20) then             case state_q is                 when TRANSFER =>                     spi_clk <= (spi_clk_q(CLK_DIV - 1));             end case;         end if;     end process; но Вивада ругается на такое представление...
  3. Есть у меня описание работы синтезатора,состоящего из 3-x модулей. RTL-анализ проходит успешно,а вот тестбенч не выдаёт ничего путного. А я в свою очередь не могу понять,в чём проблема, то ли просто тестбенч косячно написал,то ли в описании устройства ошибся. Вот его описание на VHDL: 1)ОСНОВНОЙ МОДУЛЬ Кодlibrary IEEE; use IEEE.STD_LOGIC_1164.ALL; entity TOP is     Port ( clk  : in STD_LOGIC;            reset: in STD_LOGIC;            DATAuWire : out STD_LOGIC;            CLKuWire : out STD_LOGIC;            LEuWire : out STD_LOGIC                ); end TOP; architecture Behavioral of TOP is component spi_interface Generic(CLK_DIV: integer := 2);     Port ( clk_20: in STD_LOGIC;                           -- System clk = 20 MHz            reset_n : in STD_LOGIC;                          -- Reset signal            start_interface : in STD_LOGIC;                  -- Send data via SPI interface            data_2write : in STD_LOGIC_VECTOR(31 downto 0);  -- CDCE62005 register content                                get_data : inout STD_LOGIC;                        -- Transmit complete, get a new data to interface            DATAuWire : out STD_LOGIC;                         -- Serial Clock            CLKuWire : out STD_LOGIC;                        -- SPI master output signal            --spi_miso : in STD_LOGIC;                         -- SPI input signal            LEuWire : out STD_LOGIC);                         -- Latch enable end component; component programming_sequence Port ( clk_20 : in STD_LOGIC;                               -- System clk = 20 MHz            reset_n : in STD_LOGIC;                              -- Reset signal            get_data : in STD_LOGIC;                             -- Change register content            start_interface : out STD_LOGIC;                     -- Send data via SPI interface            data_2write : out STD_LOGIC_VECTOR (31 downto 0);    -- CDCE62005 register content            sync : out STD_LOGIC;                                -- CDCE62005 SYNC#            power_down : out STD_LOGIC);                         -- CDCE62005 Power Down# end component; signal si : std_logic; signal dw : STD_LOGIC_VECTOR(31 downto 0); signal gd : std_logic; begin dd1:component programming_sequence port map (clk_20=>clk,reset_n=>reset,get_data=>gd,start_interface=>si,data_2write=>dw); dd2:component spi_interface        port map (clk_20=>clk,reset_n=>reset,start_interface=>si,data_2write=>dw,get_data=>gd,CLKuWire=>CLKuWire,LEuWire=>LEuWire,DATAuWire=>DATAuWire); end Behavioral; 2)programming_sequence (МОДУЛЬ УПРАВЛЕНИЯ И ПАМЯТИ) Кодlibrary IEEE; use IEEE.STD_LOGIC_1164.ALL; entity programming_sequence is     Port ( clk_20 : in STD_LOGIC;                               -- System clk = 20 MHz            reset_n : in STD_LOGIC;                              -- Reset signal            get_data : in STD_LOGIC;                             -- Change register content            start_interface : out STD_LOGIC;                     -- Send data via SPI interface            data_2write : out STD_LOGIC_VECTOR (31 downto 0);    -- CDCE62005 register content            sync : out STD_LOGIC;                                -- CDCE62005 SYNC#            power_down : out STD_LOGIC);                         -- CDCE62005 Power Down# end programming_sequence; architecture Behavioral of programming_sequence is     type statetype is (START, R0, R1, R2, R3, R4, R5, R6, R7, R8, FINISH);     signal state, nextstate: statetype;     signal change_state_d, change_state_q: std_logic;   -- Change state trigger begin     power_down <= '1';          --State register     process (clk_20, reset_n) begin         if reset_n = '1' then             state <= START;             change_state_q <= '0';         elsif rising_edge(clk_20) then             state <= nextstate;             change_state_q <= change_state_d;                     end if;     end process;          start_interface <= '0' when state = START else ((change_state_d xor change_state_q) and '1');          -- Next state logic     process (state, get_data) begin         case state is             when START =>                   -- Idle state                 nextstate <= R0;             when R0 =>                      -- Write Register 0                 if get_data = '1' then                     nextstate <= R1;                 else                     nextstate <= R0;                 end if;             when R1 =>                      -- Write Register 1                 if get_data = '1' then                     nextstate <= R2;                 else                     nextstate <= R1;                 end if;             when R2 =>                      -- Write Register 2                 if get_data = '1' then                     nextstate <= R3;                 else                     nextstate <= R2;                 end if;             when R3 =>                      -- Write Register 3                 if get_data = '1' then                     nextstate <= R4;                 else                     nextstate <= R3;                 end if;             when R4 =>                      -- Write Register 4                 if get_data = '1' then                     nextstate <= R5;                 else                     nextstate <= R4;                 end if;             when R5 =>                      -- Write Register 5                 if get_data = '1' then                     nextstate <= R6;                 else                     nextstate <= R5;                 end if;             when R6 =>                      -- Write Register 6                 if get_data = '1' then                     nextstate <= R7;                 else                     nextstate <= R6;                 end if;             when R7 =>                      -- Write Register 7                 if get_data = '1' then                     nextstate <= R8;                 else                     nextstate <= R7;                 end if;             when R8 =>                      -- Write Register 8                 if get_data = '1' then                     nextstate <= FINISH;                 else                     nextstate <= R8;                 end if;             when FINISH =>                  -- End config                 nextstate <= FINISH;             when others =>                 nextstate <= START;         end case;     end process;          -- Registered output logic     process (clk_20, state) begin         sync <= '0';         change_state_d <= '0';         case state is             when START =>                 data_2write <= "11111100000000000000000000000010";                 change_state_d <= '0';             when R0 =>                 data_2write <= "00000000000000000000000000000000";                 change_state_d <= '1';             when R1 =>                 data_2write <= "00000000000000000000000000000000";                 change_state_d <= '0';             when R2 =>                 data_2write <= "00000000000000000000000000000000";                 change_state_d <= '1';             when R3 =>                 data_2write <= "00000000000000000000000000000000";                 change_state_d <= '0';             when R4 =>                 data_2write <= "00000000000000000000000000000000";                 change_state_d <= '1';             when R5 =>                 data_2write <= "00000000000000000000000000000000";                 change_state_d <= '0';             when R6 =>                 data_2write <= "00000000000000000000000000000000";                 change_state_d <= '1';             when R7 =>                 data_2write <= "00000000000000000000000000000000";                 change_state_d <= '0';             when R8 =>                 data_2write <= "00000000000000000000000000000000";                 change_state_d <= '1';             when FINISH =>                 data_2write <= "00000000000000000000000000000000";                 --change_state_d <= '1';                 sync <= '1';             when others =>                 data_2write <= "00000000000000000000000000000000";                 change_state_d <= '0';         end case;     end process; end Behavioral; 3)spi_interface (ПЕРЕДАЮЩИЙ МОДУЛЬ) Кодlibrary IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity spi_interface is     Generic(CLK_DIV: integer := 2);     Port ( clk_20: in STD_LOGIC;                           -- System clk = 20 MHz            reset_n : in STD_LOGIC;                          -- Reset signal            start_interface : in STD_LOGIC;                  -- Send data via SPI interface            data_2write : in STD_LOGIC_VECTOR(31 downto 0);  -- CDCE62005 register content                                get_data : out STD_LOGIC;                        -- Transmit complete, get a new data to interface            DATAuWire : out STD_LOGIC;                         -- Serial Clock            CLKuWire : out STD_LOGIC;                        -- SPI master output signal            --spi_miso : in STD_LOGIC;                         -- SPI input signal            LEuWire : out STD_LOGIC);                         -- Latch enable end spi_interface;   architecture Behavioral of spi_interface is     type statetype is (IDLE, WAIT_HALF, TRANSFER);     signal state_d, state_q: statetype;          signal data_d, data_q:          STD_LOGIC_VECTOR(31 downto 0);              -- Input data register     signal CLKuWire_d, CLKuWire_q:    STD_LOGIC_VECTOR(CLK_DIV - 1 downto 0);     signal DATAuWire_d, DATAuWire_q:  STD_LOGIC;                                  -- Shift Out SPI data     signal ctr_d, ctr_q:            STD_LOGIC_VECTOR(4 downto 0);              -- Bit Counter     signal get_data_d, get_data_q:  STD_LOGIC;                                  -- Transmit complete begin     -- Output signal assigment    DATAuWire <= DATAuWire_q;     LEuWire   <= '1' when state_q = IDLE else '0';     get_data <= get_data_q;          -- State register, and memory system     process(clk_20, reset_n) begin         if reset_n = '1' then state_q       <= IDLE;                                 data_q        <= "11111100000000000000000000000010";                               CLKuWire_q     <= "00";                               DATAuWire_q    <= '0';                               ctr_q         <= "00000";                               get_data_q    <= '0';         elsif rising_edge(clk_20) then state_q      <= state_d;                                        data_q       <= data_d;                                        CLKuWire_q    <= CLKuWire_d;                                        DATAuWire_q   <= DATAuWire_d;                                        ctr_q        <= ctr_d;                                        get_data_q   <= get_data_d;         end if;     end process;          --Next state logic     process(state_q, start_interface, CLKuWire_q, ctr_q) begin         state_d     <= state_q;         data_d      <= data_q;         CLKuWire_d   <= CLKuWire_q;         DATAuWire_d  <= DATAuWire_q;         ctr_d       <= ctr_q;         get_data_d  <= get_data_q;         case state_q is             when IDLE =>                 CLKuWire_d   <= "00";            -- Reset Clock counter                 ctr_d       <= "00000";         -- Reset Bit counter                 if start_interface = '1' then   -- If Start signal is active                     data_d  <= data_2write;     -- Load data to register                     state_d <= WAIT_HALF;       -- Change state on next                 else                     state_d <= IDLE;            -- Else stay in current state                 end if;             when WAIT_HALF =>                 CLKuWire_d <= CLKuWire_q + 1;     -- Increment clock counter                 if (CLKuWire_q = "01") then      -- If clock counter if half_full (about to fall)                     CLKuWire_d <= "00";          -- Reset to 0                     state_d <= TRANSFER;        -- Change state                 else                     state_d <= WAIT_HALF;       -- Else stay in current state                               end if;             when TRANSFER =>                 CLKuWire_d <= CLKuWire_q + 1;                 -- Increment clock counter                 if (CLKuWire_q = "00") then                  -- If Clock counter is o                     DATAuWire_d <= data_q(31);               -- Shift out MSB data                 elsif (CLKuWire_q = "01") then               -- Else if it's half full(about to fall)                     data_d <= (data_q(30 downto 0) & '0');  -- Shift in zero                 elsif (CLKuWire_q = "11") then               -- Else if it's full(about to rise)                     ctr_d <= ctr_q + 1;                     -- Increment bit counter                     if (ctr_q = "11111") then               -- If we are on the last bit                         state_d <= IDLE;                         get_data_d <= '1';                     else                         state_d <= TRANSFER;                -- Else stay in current state                     end if;                 end if;             when others =>                 state_d <= IDLE;         end case;           end process;          process (clk_20) begin         if rising_edge(clk_20) then             case state_q is                 when others => CLKuWire <= '0';             end case;         end if;     end process; end Behavioral; RTL ВОТ ТАКИЕ СИГНАЛЫ Я ДОЛЖЕН ПОЛУЧИТЬ А ВОТ И МОЙ ТЕСТБЕНЧ Кодlibrary IEEE; use IEEE.Std_logic_1164.all; use IEEE.Numeric_Std.all; entity TOP_tb is end; architecture bench of TOP_tb is   component TOP       Port ( clk  : in STD_LOGIC;              reset: in STD_LOGIC;              DATAuWire : out STD_LOGIC;              CLKuWire : out STD_LOGIC;              LEuWire : out STD_LOGIC       );   end component;   signal clk: STD_LOGIC;   signal reset: STD_LOGIC;   signal DATAuWire: STD_LOGIC;   signal CLKuWire: STD_LOGIC;   signal LEuWire: STD_LOGIC;      constant PERIOD : TIME := 100 ns;   constant DUTY_CYCLE : real := 0.5;   constant OFFSET : time := 1 ns; begin uut: TOP port map ( clk      => clk,                       reset    => reset,                       DATAuWire => DATAuWire,                       CLKuWire  => CLKuWire,                       LEuWire   => LEuWire );                  clk_gen: PROCESS                       BEGIN                       WAIT for OFFSET;                       CLOCK_LOOP : LOOP                       CLK <= '0';                       WAIT FOR (PERIOD - (PERIOD * DUTY_CYCLE));                       CLK <= '1';                       WAIT FOR (PERIOD * DUTY_CYCLE);                       END LOOP CLOCK_LOOP;                       END PROCESS;                           reset<='0';                   --                      rst_gen: PROCESS --                      BEGIN --                      WAIT for OFFSET; --                      reset <='1'; --                      wait for period * DUTY_CYCLE *2; --                      reset <='0'; --                      wait; --                      END PROCESS;   end;
  4. Цитата(ViKo @ Aug 25 2017, 18:43) Вот автомат для этого программирования и нужно сделать топикстартеру. На VHDL. Из ПЛИС? ну да,из ПЛИС.
  5. Кто-нибудь работал с таким. Буду благодарен, если у кого есть VHDL описание такого устройства, ибо сам пока не разобрался, как его описывать.
  6. Цитата(Flip-fl0p @ Jul 25 2017, 18:05) Напишите отдельный модуль антидребезга просимулируйте его. И тогда, когда он будет работать подключайте его в проект как компонент. Компонент антидребезга добавил.Промоделировал.Но один небольшой косяк: смещение сигнала на светодиодах на 1 период (т.е. когда отпускаю кнопку, одна лампочка успевает промигнуть (( ОСНОВНАЯ СБОРКА Кодlibrary ieee;   use ieee.std_logic_1164.all;   use ieee.numeric_std.all; entity led_blink is   port (     clk : in  std_logic; -- синхросигнал     btn : in  std_logic; --кнопка     led : out std_logic_vector(3 downto 0) --выход на светодиоды   ); end led_blink; architecture rtl of led_blink is component debounce Port ( CLOCK    : IN  STD_LOGIC;          BATON    : IN  STD_LOGIC;          VIHOD    : OUT STD_LOGIC); end component;   signal ONN_OFF : std_logic                    := '1';   signal state   : std_logic_vector(3 downto 0) := "0001";   signal divider : unsigned(23 downto 0)        := (others => '0'); --делитель частоты   signal btn_stable: std_logic;                 begin   main_p : process(clk)   begin     if (rising_edge(clk)) then       if (divider < 5000000) then  ---если меньше 5 млн. тактов, то счётчик наращивает 1         divider <= divider + 1;       else         divider <= (others => '0');--если больше,то счётчик сбрасывается в 0         if (btn_stable = '1') then --если нажата кнопка           ONN_OFF <= not(ONN_OFF);--светодиоды загораются           if (ONN_OFF = '1') then             state <= state(2 downto 0) & state(3);             led   <= state;           else --если НЕ нажата             led   <= (others => '0');--сигнал на выход светодиодов не идёт           end if;         else           ONN_OFF <= '1';           led     <= (others => '0');         end if;       end if;     end if;   end process;    dd1: component debounce port map (CLOCK=>clk, BATON=>btn, VIHOD=>btn_stable); --подключение антидребезга    end rtl; АНТИДРЕБЕЗГ КодLIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; ENTITY debounce IS   GENERIC(     counter_size  :  INTEGER := 23); --РАЗРЯДНОСТЬ СЧЁТЧИКА   PORT(     CLOCK    : IN  STD_LOGIC;       BATON    : IN  STD_LOGIC;       VIHOD    : OUT STD_LOGIC); END debounce; ARCHITECTURE logic OF debounce IS   SIGNAL flipflops   : STD_LOGIC_VECTOR(1 DOWNTO 0);   SIGNAL counter_set : STD_LOGIC;   --сброс синхронизации                   SIGNAL counter_out : STD_LOGIC_VECTOR(counter_size DOWNTO 0) := (OTHERS => '0'); --счётчик BEGIN   counter_set <= flipflops(0) xor flipflops(1);  --запуск или сброс счётчика      PROCESS(CLOCK)   BEGIN     IF(CLOCK'EVENT and CLOCK = '1') THEN       flipflops(0) <= BATON;       flipflops(1) <= flipflops(0);       If(counter_set = '1') THEN                           counter_out <= (OTHERS => '0');       ELSIF(counter_out(counter_size) = '0') THEN         counter_out <= counter_out + 1;       ELSE                                                 VIHOD <= flipflops(1);       END IF;         END IF;   END PROCESS; END logic; ВРЕМЯНКА
  7. Цитата(Flip-fl0p @ Jul 25 2017, 18:05) спс за совет
  8. Возникла проблема.Есть устройство,на выходе которого 4 светодиода (led).Они поочерёдно загораются и тухнут с частотой 1Гц . К устройству подключена кнопка (btn). Когда она нажата, сигнал должен идти на светодиоды (как показано на диаграмме). Так вот, при нажатии возникает дребезг, диоды горят хаотично, при чём даже могут гореть, когда кнопка отпущена. Код вроде простой.но никак не могу правильно этот антидребезг добавить. Заранее благодарен. ВЕРХНИЙ ФАЙЛ Кодlibrary ieee;   use ieee.std_logic_1164.all;   use ieee.numeric_std.all; entity led_blink is   port (     clk : in  std_logic; -- синхросигнал     btn : in  std_logic; --кнопка     led : out std_logic_vector(3 downto 0) --выход на светодиоды   ); end led_blink; architecture rtl of led_blink is   signal ONN_OFF : std_logic                    := '1';   signal state   : std_logic_vector(3 downto 0) := "0001";   signal divider : unsigned(23 downto 0)        := (others => '0'); --делитель частоты begin   main_p : process(clk)   begin     if (rising_edge(clk)) then       if (divider < 5000000) then  ---если меньше 5 млн. тактов, то счётчик наращивает 1         divider <= divider + 1;       else         divider <= (others => '0');--если больше,то счётчик сбрасывается в 0         if (btn = '1') then --если нажата кнопка           ONN_OFF <= not(ONN_OFF);--светодиоды загораются           if (ONN_OFF = '1') then             state <= state(2 downto 0) & state(3);             led   <= state;           else --если НЕ нажата             led   <= (others => '0');--сигнал на выход светодиодов не идёт           end if;         else           ONN_OFF <= '1';           led     <= (others => '0');         end if;       end if;     end if;   end process; end rtl; АНТИДРЕБЕЗГ (КОРЯВЫЙ) Кодlibrary IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity Debouncer is     Port ( clk : in  std_logic;            btn : in  std_logic;            led : out std_logic_vector(3 downto 0)); end Debouncer; architecture Behavioral of Debouncer is   signal led : std_logic_vector (3 downto 0);   signal btn_cl : std_logic; begin   process (clk)   begin     if rising_edge(clk) then       if clk /= btn_cl then         btn_cl <= clk;         led <= (others => '0');       elsif led = "1111" then         btn <= btn_cl;       else         led <= led + 1;       end if;     end if;   end process; end Behavioral; Временная диаграмма работы устройства. При загрузке в устройсво, кнопка конечно же без антидребега так идеально не работает (((
  9. Цитата(Tausinov @ Jul 19 2017, 11:39) Так осталось просто тоже самое переписать на VHDL. Тут каких-то принципиально отличных конструкций нет, переносится без проблем. ага, для меня Верилог это вообще набор иероглифов
  10. Цитата(AVR @ Jul 18 2017, 22:56) Я не выдержал, моё решение (сам модуль примерно 25 не пустых строк): Спасибо,конечно))но принципиально важно реализовать этот проект на VHDL. (так от меня требуют)
  11. Цитата(Tausinov @ Jul 18 2017, 18:53) Один из диодов в начале горит, т.к. регистр инициализирован 1. Это все можно поправить. т.е если я буду инициализировать регистр в 0, то ,по идее, система должна заработать как надо?
  12. Цитата(iosifk @ Jul 18 2017, 16:59) Два раза уже объяснил как делать проще. Предлагал свою помощь... А Вам видно лень переделывать... Или может цель в том, чтобы троллить? Кто бы другой уже давно бы включил скайп... Я ПОНИМАЮ,ВЫГЛЯДИТ ОЧЕНЬ ТУПО. прост,я хочу этот проект,так сказать, модифицировать.Я VHDL изучаю всего месяц от силы. но троллинга тут нет НИКАКОГО.просто я действительно до такой степень тупой (надеюсь это временно)
  13. Цитата(Tausinov @ Jul 17 2017, 17:59) Блин,я наверное,уже задолбал, (( но походу "замораживать фазу" не лучшая идея,т.к моделирование показывает вообще не тот результат. ПРИ ТАКИХ ПАРАМЕТРАХ: Кодsw <= '0' after 0 ms, '1' after 3000  ms, '0' after 6000 ms, '1'after 10000 ms; а вот так должна выглядеть времянка. т.е. до 3 сек. кнопка не нажата и светодиоды не мигают. на 3 секунде я нажал кнопку и светодиодымигают до 6 сек. потом я опять нажал кнопку и светодиоды потухли. И Т.Д.
  14. Цитата(Tausinov @ Jul 17 2017, 15:42) Все, что нужно - завести дополнительный сигнал, например, signal ce : std_logic := '0'; и по каждому нажатию на кнопку делать ce <= not(ce); Можно, например, phase в нуле "заморозить". Видимо,я пока слишком туп(( Кодlibrary ieee;   use ieee.std_logic_1164.all;   use ieee.numeric_std.all; entity test_led is   generic (     p_TD      : time    := 1 ns;     p_CNT_LIM : integer := 5000000-1                         );   port (     clk : in  std_logic;     --btn : in  std_logic; --кнопка     led : out std_logic_vector(7 downto 0)   ); end test_led; architecture rtl of test_led is   signal div_cnt_u : unsigned(22 downto 0)        := (others => '0');   signal phase     : std_logic                    := '1';   signal btn_ce    : std_logic                    := '0'; --сигнал при нажатии кнопки   signal led_reg   : std_logic_vector(7 downto 0) := (0 => '1', others => '0'); begin counter_control_p: process(clk)   begin     if (rising_edge(clk)) then       if (div_cnt_u < p_CNT_LIM) then         div_cnt_u <= div_cnt_u + 1 after p_TD;       else         div_cnt_u <= (others => '0');       end if;     else       NULL;     end if;   end process; phase_control_p: process(clk)   begin     if (rising_edge(clk)) then       if (div_cnt_u = p_CNT_LIM) then         phase <= not(phase) after p_TD;       else         NULL;       end if;     else       NULL;     end if;   end process; --phase_control_p led_reg_control_p: process(clk)   begin     if (rising_edge(clk)) then       if (div_cnt_u = p_CNT_LIM) then         if (phase = '1') then           led_reg <= led_reg(6 downto 0) & led_reg(7) after p_TD;           NULL;         end if;       else         NULL;       end if;     else       NULL;     end if;   end process; --led_reg_control_p    btn_control: process(clk) -- нажатия кнопки   begin    if (btn_ce = '1') then        btn_ce <= not(btn_ce)        phase <= (others => '0');        else        phase <= '1';    end if;   end process;    out_form_logic_p: process(phase)   begin     if (phase = '0') then       led <= (others => '0');     else       led <= led_reg;     end if;   end process; --out_form_logic_p end rtl;
  15. Цитата(Tausinov @ Jul 17 2017, 15:42) Что-то странное вы пытаетесь сделать, если честно. Я имею в виду в коде, а не идею с кнопкой. Все, что нужно - завести дополнительный сигнал, например, signal ce : std_logic := '0'; и по каждому нажатию на кнопку делать ce <= not(ce); А дальше уже много вариантов. Можно, например, phase в нуле "заморозить". А, ну и для железа по-хорошему нужно делать антидребезг и защиту от метастабильности в виде двух-трех регистров. хм...по-моему,это очень хорошая идея))сейчас попробую))позже отпишусь))