jenya7 0 12 мая, 2020 Опубликовано 12 мая, 2020 (изменено) · Жалоба 1 hour ago, des00 said: ндя, процесс то второй должен быть комбинационным. @dvladim же вам написал включайте голову, читайте и понимайте литературу, в противном случае, разводить ПЛИС вы будете долго и печально так у меня так же как у @dvladim. ааа... без клока? здрасте! мне клок нужен. у меня же не просто переход из стейта в стейт, там наверное логика всякая отрабатывается. Изменено 12 мая, 2020 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Strob 0 12 мая, 2020 Опубликовано 12 мая, 2020 · Жалоба Код из первого поста вроде должен работать, если case поместить в else условия сброса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 12 мая, 2020 Опубликовано 12 мая, 2020 · Жалоба 1 hour ago, jenya7 said: так у меня так же как у @dvladim. ааа... без клока? здрасте! мне клок нужен. у меня же не просто переход из стейта в стейт, там наверное логика всякая отрабатывается. эммм, вам наверное рано еще писать, книгу курс молодого бойца лучше изучить сейчас, там на пальцах объясняется что такое плис, регистры, комбинационная логика, как они описываются вместе. Сомневался что вам это надо, но вот этой репликой, вы показали что совершенно плаваете в разработке на плис, в независимости от языка. Книга легко изучается за неделю) 12 minutes ago, Strob said: Код из первого поста вроде должен работать, если case поместить в else условия сброса. +1, а можно просто enable, работающий как синхронный сброс поставить ниже case, задав правильный приоритет) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 12 мая, 2020 Опубликовано 12 мая, 2020 · Жалоба 1 час назад, jenya7 сказал: так у меня так же как у @dvladim. ааа... без клока? здрасте! мне клок нужен. у меня же не просто переход из стейта в стейт, там наверное логика всякая отрабатывается. https://habr.com/ru/post/254885/ Вам нужно понимание, что такое цифровой автомат. Вот пример совсем примитивный. Но показывающий суть: library ieee; use ieee.std_logic_1164.all; entity svet is port ( button : in std_logic; clk : in std_logic; output_data : out std_logic_vector (1 downto 0) ); end entity; architecture rtl of svet is type state_type is --состояния светофора ( green, yellow, red ); signal next_state, press_state : state_type := red; attribute syn_encoding : string; attribute syn_encoding of state_type : type is "safe"; -- Сделать автомат безопасным begin --================================================ -- Первый процесс - регистры, хранящие состояние автомата --================================================ FSM_REGS : process(clk) begin if (rising_edge(clk)) then press_state <= next_state; -- с каждым фронтом clk меняем состояние на next_state end if; end process; --============================================================================ -- Второй процесс - комбинационная логика, вычислающая новое состояние автомата --============================================================================ process(all) begin case press_state is when red => next_state <= red; -- Крутимся в состоянии красного цвета if (button = '1') then -- Когда нажимаем кнопку next_state <= green; -- Переходим в состояние зеленого цветаы end if; --======================================================================================= when green => next_state <= green; -- Крутимся в состоянии зеленого цвета if (button = '1') then -- Когда нажимаем кнопку next_state <= yellow; -- Переходим в состояние желтого цвета end if; --======================================================================================= when yellow => next_state <= yellow; -- Крутимся в состоянии желтого цвета if (button = '1') then -- Когда нажимаем кнопку next_state <= red; -- Переходим в состояние красного цвета end if; --======================================================================================= when others => next_state <= red; end case; end process; --========================================================================== -- Третий процесс - комбинационная логика, формирующая выходные сигналы --========================================================================== process(all) begin case press_state is when red => output_data <= "00"; when green => output_data <= "01"; when yellow => output_data <= "10"; when others => output_data <= "00"; end case; end process; end architecture; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 12 мая, 2020 Опубликовано 12 мая, 2020 · Жалоба 1 hour ago, Strob said: Код из первого поста вроде должен работать, если case поместить в else условия сброса. ну это же совсем другое дело. просто и со вкусом. 1 hour ago, Flip-fl0p said: https://habr.com/ru/post/254885/ Вам нужно понимание, что такое цифровой автомат. Вот пример совсем примитивный. Но показывающий суть: у вас button выполняет роль клока. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 12 мая, 2020 Опубликовано 12 мая, 2020 · Жалоба 3 минуты назад, jenya7 сказал: ну это же совсем другое дело. просто и со вкусом. у вас button выполняет роль клока. Роль клока выполняет clk. button отвечает за переход между состояниями. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 12 мая, 2020 Опубликовано 12 мая, 2020 (изменено) · Жалоба 1 hour ago, Flip-fl0p said: Роль клока выполняет clk. button отвечает за переход между состояниями. я имею ввиду что это "клокирующее" условие. вот мне клок нужен вместо button. хотя...я так посмотрел...можно переписать в принципе. вопрос надо ли. Изменено 12 мая, 2020 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 12 мая, 2020 Опубликовано 12 мая, 2020 · Жалоба 2 минуты назад, jenya7 сказал: я имею ввиду что это "клокирующее" условие. вот мне клок нужен вместо button. Такого термина нет. Вообще-то по клоку каждый раз происходит только одно: присвоение регистру press_state значения next_state. Ваша задача понять суть цифрового автомата. Поймете суть - написать что-то рабочее не составит труда. Сейчас у меня сложилось впечатление, что Вы совсем не понимаете как та или иная строчка реализуется в ПЛИС. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 12 мая, 2020 Опубликовано 12 мая, 2020 (изменено) · Жалоба 1 hour ago, Flip-fl0p said: Такого термина нет. Вообще-то по клоку каждый раз происходит только одно: присвоение регистру press_state значения next_state. Ваша задача понять суть цифрового автомата. Поймете суть - написать что-то рабочее не составит труда. Сейчас у меня сложилось впечатление, что Вы совсем не понимаете как та или иная строчка реализуется в ПЛИС. почему не понимаю. открыл RTL и все видно :) кстати я читал что комбинаторную логику следует избегать. чревато. Изменено 12 мая, 2020 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 12 мая, 2020 Опубликовано 12 мая, 2020 · Жалоба 1 hour ago, jenya7 said: почему не понимаю. открыл RTL и все видно :) кстати я читал что комбинаторную логику следует избегать. чревато. Ещё открыл этот автомат в notepad++ в одной области логика переходов в другой описание регистровой логики Вообще красота :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 12 мая, 2020 Опубликовано 12 мая, 2020 · Жалоба 2 часа назад, jenya7 сказал: почему не понимаю. открыл RTL и все видно :) кстати я читал что комбинаторную логику следует избегать. чревато. Комбминационную логику не стоит избегать. Стоит избегать сложные логические выражения, которые на кристалле вырождаются в длинные слои логики, которые сильно урезают тактовую частоту. Однако не всегда есть задача вытягивать максимальные частоты для FPGA. Поэтому ничего плохого в комбинационной логике нет. Проект разведен. Времянка сошлась. Запасы по времянке есть. Значит все хорошо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 3 12 мая, 2020 Опубликовано 12 мая, 2020 (изменено) · Жалоба 2 hours ago, jenya7 said: кстати я читал что комбинаторную логику следует избегать. чревато. Но это единственный способ реализации логических функций. Без неё не получится дешифровать адрес, не получится сделать математическую функцию. Просто надо понимать, что и для чего вы делаете. Изменено 12 мая, 2020 пользователем one_eight_seven Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 13 мая, 2020 Опубликовано 13 мая, 2020 · Жалоба так у меня ничего не работает process (CLK) begin if (rising_edge(CLK)) then if (ENA = '1') then State <= NextState; else State <= ST_IDLE; end if; end if; end process; process (all) begin --if (rising_edge(CLK)) then case State is when ST_IDLE => NextState <= ST_1; when ST_1 => NextState <= ST_2; when ST_2 => idx := idx + 1; NextState <= ST_1; end case; --end if; end process; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zig 31 13 мая, 2020 Опубликовано 13 мая, 2020 · Жалоба И не должно. Добавьте перед case строку NextState <= State; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 13 мая, 2020 Опубликовано 13 мая, 2020 · Жалоба 4 часа назад, jenya7 сказал: так у меня ничего не работает process (CLK) begin if (rising_edge(CLK)) then if (ENA = '1') then State <= NextState; else State <= ST_IDLE; end if; end if; end process; process (all) begin --if (rising_edge(CLK)) then case State is when ST_IDLE => NextState <= ST_1; when ST_1 => NextState <= ST_2; when ST_2 => idx := idx + 1; NextState <= ST_1; end case; --end if; end process; А modelsim что говорит ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться