jenya7 0 15 февраля, 2022 Опубликовано 15 февраля, 2022 · Жалоба Я хочу взять значение счётчика по событию. L_FIX_TRIG : in Std_logic; R_FIX_TRIG : in Std_logic; CHARGE_MS : in std_logic_vector(7 downto 0); signal r_fix_trig1 : std_logic := '0'; signal r_fix_trig2 : std_logic := '0'; signal r_fix_trig3 : std_logic := '0'; signal r_fix_trig4 : std_logic := '0'; signal l_fix_trig1 : std_logic := '0'; signal l_fix_trig2 : std_logic := '0'; signal l_fix_trig3 : std_logic := '0'; signal l_fix_trig4 : std_logic := '0'; signal fix_trig_flag : std_logic_vector(1 downto 0) := "00"; l_fix_trig4 <= not l_fix_trig3 and l_fix_trig2; r_fix_trig4 <= not r_fix_trig3 and r_fix_trig2; fix_trig_flag <= r_fix_trig4 & l_fix_trig4; process(REG_CLK) begin if (rising_edge(REG_CLK)) then l_fix_trig1 <= L_FIX_TRIG; l_fix_trig2 <= l_fix_trig1; l_fix_trig3 <= l_fix_trig2; r_fix_trig1 <= R_FIX_TRIG; r_fix_trig2 <= r_fix_trig1; r_fix_trig3 <= r_fix_trig2; if (fix_trig_flag = "11") then charge_status <= X"02" & CHARGE_MS; end if; end if; end process; я правильно понимаю что fix_trig_flag = "11" только если L_FIX_TRIG = '1' и R_FIX_TRIG = '1' в одном такте? если между ними несколько тактов fix_trig_flag = "11" не произойдёт? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nice_vladi 3 15 февраля, 2022 Опубликовано 15 февраля, 2022 · Жалоба 1 hour ago, jenya7 said: я правильно понимаю что fix_trig_flag = "11" только если L_FIX_TRIG = '1' и R_FIX_TRIG = '1' в одном такте? если между ними несколько тактов fix_trig_flag = "11" не произойдёт? Симуляторы по вам плачут xDDD Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 15 февраля, 2022 Опубликовано 15 февраля, 2022 · Жалоба 2 minutes ago, nice_vladi said: Симуляторы по вам плачут xDDD я смотрел на симуляторе, вернее в сигнал тап. что то не пойму как защелкнуть сигнал именно по двум событиям. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 15 февраля, 2022 Опубликовано 15 февраля, 2022 · Жалоба 1 minute ago, jenya7 said: я смотрел на симуляторе, вернее в сигнал тап. что то не пойму как защелкнуть сигнал именно по двум событиям. Учите булеву алгебру - мать вашу (с). Таблицы истинности булевых функций вам в помощь. ЗЫ. И прочитайте любой приличный учебник по цифровой схемотехнике. Их вагон и маленькая тележка на русском. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
eugen_pcad_ru 0 16 февраля, 2022 Опубликовано 16 февраля, 2022 · Жалоба 16 hours ago, nice_vladi said: Симуляторы по вам плачут xDDD + Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Longiel 2 16 февраля, 2022 Опубликовано 16 февраля, 2022 · Жалоба Какие симуляторы? Моделирование тут делает карандашиком на листочке бумаги) Цитата я правильно понимаю что fix_trig_flag = "11" только если L_FIX_TRIG = '1' и R_FIX_TRIG = '1' в одном такте? если между ними несколько тактов fix_trig_flag = "11" не произойдёт? Только если передние фронты входных сигналов будут "в одном такте". Так как trig4 есть суть выделение фронта и этот сигнал в 1 устанавливается только на один такт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 17 февраля, 2022 Опубликовано 17 февраля, 2022 (изменено) · Жалоба 22 hours ago, Longiel said: Только если передние фронты входных сигналов будут "в одном такте". Так как trig4 есть суть выделение фронта и этот сигнал в 1 устанавливается только на один такт. спасибо. а как защелкнуть значение счётчика при условии L_FIX_TRIG = '1' и R_FIX_TRIG = '1'? это условие может продолжатся какое то время а мне нужно первый момент. Изменено 17 февраля, 2022 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 18 февраля, 2022 Опубликовано 18 февраля, 2022 · Жалоба On 2/17/2022 at 8:16 AM, jenya7 said: спасибо. а как защелкнуть значение счётчика при условии L_FIX_TRIG = '1' и R_FIX_TRIG = '1'? это условие может продолжатся какое то время а мне нужно первый момент. тогда можно выделить передний фронт импульса (imp ), когда L_FIX_TRIG = '1' и R_FIX_TRIG = '1' (поставить схему типа детектора фронтов импульса, но там будет задержка в 2 такта) или надо сделать схемотехнику которая будет формировать именно импульс в один такт imp <= L_FIX_TRIG or R_FIX_TRIG; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 20 февраля, 2022 Опубликовано 20 февраля, 2022 · Жалоба On 2/18/2022 at 1:42 PM, Maverick_ said: тогда можно выделить передний фронт импульса (imp ), когда L_FIX_TRIG = '1' и R_FIX_TRIG = '1' (поставить схему типа детектора фронтов импульса, но там будет задержка в 2 такта) или надо сделать схемотехнику которая будет формировать именно импульс в один такт imp <= L_FIX_TRIG or R_FIX_TRIG; пришлось городить такой огород l_fix_trig4 <= not l_fix_trig3 and l_fix_trig2; r_fix_trig4 <= not r_fix_trig3 and r_fix_trig2; fix_trig_flag <= r_fix_latch & l_fix_latch; process(REG_CLK) begin if (rising_edge(REG_CLK)) then l_fix_trig1 <= L_FIX_TRIG; l_fix_trig2 <= l_fix_trig1; l_fix_trig3 <= l_fix_trig2; r_fix_trig1 <= R_FIX_TRIG; r_fix_trig2 <= r_fix_trig1; r_fix_trig3 <= r_fix_trig2; if (l_fix_trig4 = '1') then l_fix_latch <= '1'; end if; if (r_fix_trig4 = '1') then r_fix_latch <= '1'; end if; if (l_fix_latch = '1' and r_fix_latch = '1') then l_fix_latch <= '0'; r_fix_latch <= '0'; charge_status <= X"03" & R_CHARGE_MS; end if; end if; end process; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 20 февраля, 2022 Опубликовано 20 февраля, 2022 · Жалоба 5 часов назад, jenya7 сказал: пришлось городить такой огород l_fix_trig4 <= not l_fix_trig3 and l_fix_trig2; r_fix_trig4 <= not r_fix_trig3 and r_fix_trig2; fix_trig_flag <= r_fix_latch & l_fix_latch; process(REG_CLK) begin if (rising_edge(REG_CLK)) then l_fix_trig1 <= L_FIX_TRIG; l_fix_trig2 <= l_fix_trig1; l_fix_trig3 <= l_fix_trig2; r_fix_trig1 <= R_FIX_TRIG; r_fix_trig2 <= r_fix_trig1; r_fix_trig3 <= r_fix_trig2; if (l_fix_trig4 = '1') then l_fix_latch <= '1'; end if; if (r_fix_trig4 = '1') then r_fix_latch <= '1'; end if; if (l_fix_latch = '1' and r_fix_latch = '1') then l_fix_latch <= '0'; r_fix_latch <= '0'; charge_status <= X"03" & R_CHARGE_MS; end if; end if; end process; Каноничный подход - детекторы фронта, сдвиговые регистры, цепочки синхронизаторов оформлять в виде отдельных компонентов. flag <= L_FIX_TRIG and R_FIX_TRIG edge_dtct_L : entity work.edge_dtct_L port map ( clk_i => REG_CLK , data_i => flag , edge_o => flag_edge ) charge_status <= X"03" & R_CHARGE_MS when (rising_edge(REG_CLK) and flag_edge = '1') Детектируете фронт события когда ваши флаги выставлены. И по этому фронту сохраняете данные. Задача на 3 минуты работы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 20 февраля, 2022 Опубликовано 20 февраля, 2022 · Жалоба 1 hour ago, Flip-fl0p said: Каноничный подход - детекторы фронта, сдвиговые регистры, цепочки синхронизаторов оформлять в виде отдельных компонентов. flag <= L_FIX_TRIG and R_FIX_TRIG edge_dtct_L : entity work.edge_dtct_L port map ( clk_i => REG_CLK , data_i => flag , edge_o => flag_edge ) charge_status <= X"03" & R_CHARGE_MS when (rising_edge(REG_CLK) and flag_edge = '1') Детектируете фронт события когда ваши флаги выставлены. И по этому фронту сохраняете данные. Задача на 3 минуты работы. а когда flag_edge = '1' ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 20 февраля, 2022 Опубликовано 20 февраля, 2022 · Жалоба 12 минут назад, jenya7 сказал: а когда flag_edge = '1' ? Он формируется детектором фронта. У меня это отдельный самописный модуль с кучей параметров. Вот мой старый пример: https://electronix.ru/forum/index.php?app=forums&module=forums&controller=topic&id=80167&page=14#comments Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 20 февраля, 2022 Опубликовано 20 февраля, 2022 · Жалоба 23 minutes ago, Flip-fl0p said: Он формируется детектором фронта. У меня это отдельный самописный модуль с кучей параметров. Вот мой старый пример: https://electronix.ru/forum/index.php?app=forums&module=forums&controller=topic&id=80167&page=14#comments спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 21 февраля, 2022 Опубликовано 21 февраля, 2022 · Жалоба On 2/20/2022 at 9:23 AM, jenya7 said: пришлось городить такой огород У вас получился злопамятный 'огород'. Ваши l/r_fix_latch взводятся по фронту и остаются в таком состоянии до срабатывания (даже если исходный сигнал вернулся в 0). Т.е. схема сработает даже если сначала на L_FIX_TRIG будет импульс длинной 1, а потом (где то в отдалённом будущем) на R_FIX_TRIG тоже придёт что нибудь единичное :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться