Станислав Н 0 27 декабря, 2021 Опубликовано 27 декабря, 2021 · Жалоба Доброго все времени суток. Есть потребность в небольшом логическом модуле управления, в который будет приходить 4 входа от концевых датчиков и 5 выходов, два будут управлять направлением шаговых драйверов, еще два это разрешающие на входы Enable драйверов и еще один это генерирующий импульсы на входы STEP. то есть модуль будет состоять из генератора частоты 1000 hz и логики переключения двумя каналами по двум осям (одновременно может двигаться только одна ось). Последовательность перемещения будет цикличной и в процессе работы меняться не будет. Если грубо то выглядеть это будет так - вначале идет перемещение по оси X до активации концевика, переключение на ось Z, через 3 секунды переключение на ось X только в обратную сторону, опять концевик, опять 3 секунды и обратно по оси X, внешне будет похоже на змейку. Вопрос в следующем, можете посоветовать к каким операторам лучше обратиться для создания данной схемы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 27 декабря, 2021 Опубликовано 27 декабря, 2021 · Жалоба Вы не правильно сформулировали вопрос, главный вопрос какую цифровую схему вы видите для реализации описания в FPGA вашей потребности Что насчет цифоровой схемы? С моделированием цифровых схем "дружите"? В современных платах FPGA тактовая частота подается от 50МГц и выше. Дальше Ваше описание цифровой схемы которое делит тактовую частоту до 100Гц (если Вы видите в этом необходимость), формирует импульсы для шаговых двигателей и обрабатывает концевики... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Станислав Н 0 27 декабря, 2021 Опубликовано 27 декабря, 2021 (изменено) · Жалоба да, с цифровыми схемами есть небольшой опыт, но зачем? Ведь проще описать последовательность операторами. Есть опыт в GRAFCET у FESTO и в TIA PORTAL, но в данной конструкции интегрировать Модули от сименс или от Фесто нет финансовой возможности. Чем плох язык VHDL для написания данной логики? Изменено 27 декабря, 2021 пользователем Станислав Н Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 27 декабря, 2021 Опубликовано 27 декабря, 2021 · Жалоба Vhdl также как и verilog это как карандаш в руках хужника. Если художник не умеет рисовать, то карандаш не поможет. Предлагаю начать рисовать цифровую схему на листочке. Потом опишете ее на vhdl и промолелируете, т.е. проверите ее правильность работы. Когда симуляция покажет что схема работает тогда начнёте проверки на плате. Иначе никак... PS GRAFCET у FESTO и в TIA PORTAL это высокоуровневые языки от производителей. Сравнивать их с Vhdl/verilog не коректно мягко говоря. Наверное модули которые программируются с помощью этих языков сложные цифровые устройстава. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Станислав Н 0 27 декабря, 2021 Опубликовано 27 декабря, 2021 · Жалоба Прошу прощения, но разработать цифровую схемы, а позже ее еще раз переписать в VHDL.. вам не кажется, что это как штаны через голову надевать? Или я вас не совсем понимаю. Есть структурная схема, как правило от нее всегда отталкиваются, но, чтобы от цифровой / логической, первый раз слышу. Часто одной строчкой я могу заменить десяток логических модулей, так зачем такие сложности?? да и как это поможет тому художнику, если он не умеет рисовать в VHDL? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 27 декабря, 2021 Опубликовано 27 декабря, 2021 · Жалоба Ок, начнем с простого, как Вы плаируете например с 50МГц сделать 100Гц? Может лучше работать на на тактовой частоте, есть же сигналы enable? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Станислав Н 0 27 декабря, 2021 Опубликовано 27 декабря, 2021 · Жалоба ну, на сколько я знаю можно поставить делитель частоты, скажем, он будет считать до 24.999, потом обнуляется и т.д. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 27 декабря, 2021 Опубликовано 27 декабря, 2021 · Жалоба правильно, дальше на базе примитивной логики тригеров(регистров) и комбинационной логики (and or xor и другие логические операторы) надо описать на VHDL этот делитель частоты. Еще как помощь может быть для Вас это Template там Вы можете найти примеры описаний счетчиков, блоков памяти, FSM и другие... Далее написать тестбенч и проверить работу... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Станислав Н 0 27 декабря, 2021 Опубликовано 27 декабря, 2021 · Жалоба я правильно понимаю, что вы категорично относитесь к VHDL? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 27 декабря, 2021 Опубликовано 27 декабря, 2021 · Жалоба я не категорично отношусь ))) просто по другому нельзя делать разработку на FPGA ))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 27 декабря, 2021 Опубликовано 27 декабря, 2021 · Жалоба Вот пример описание ШИМа (Широтно-импульсная модуляция (ШИМ, или Pulse-Width Modulation, PWM) Первый процесс описывает счетчик который считает 1 период ШИМ сигнала, второй процесс компаратор, третий процесс позволяет менять период сигнала шима и длительность нуля library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use IEEE.NUMERIC_STD.ALL; entity shim is generic ( N : natural := 3 ); Port ( clk : in STD_LOGIC; rst : in STD_LOGIC; en : in STD_LOGIC; --load : in STD_LOGIC; Period : in STD_LOGIC_VECTOR (N-1 downto 0); Duty_cycle : in STD_LOGIC_VECTOR (N-1 downto 0); ready_period : out STD_LOGIC; out_shim : out STD_LOGIC ); end shim; architecture Behavioral of shim is signal count_shim : STD_LOGIC_VECTOR (N-1 downto 0); signal reg_Period : STD_LOGIC_VECTOR (N-1 downto 0); signal reg_Duty_cycle : STD_LOGIC_VECTOR (N-1 downto 0); begin process (all) begin if rst = '1' then count_shim <= (others=>'0'); elsif(rising_edge(clk)) then if en = '1' then if count_shim = reg_Period then ready_period <= '1'; count_shim <= (others=>'0'); else count_shim <= count_shim + std_logic_vector( to_unsigned(1, count_shim'length )); ready_period <= '0'; end if; end if; end if; end process; process (all) begin if rst = '1' then out_shim <= '0'; elsif(rising_edge(clk)) then if count_shim < reg_Duty_cycle then out_shim <= '1' ; else out_shim <= '0'; end if; end if; end process; process (all) begin if rst = '1' then reg_Period <= (others=>'0'); reg_Duty_cycle <= (others=>'0'); elsif(rising_edge(clk)) then if ready_period = '1' then reg_Period <= Period; reg_Duty_cycle <= Duty_cycle; end if; end if; end process; end Behavioral; ниже пример схемы детектирования концевика (коментариев не даю) - как пример --detect_sensor library ieee; use ieee.std_logic_1164.all; --use ieee.std_logic_unsigned.all; use IEEE.NUMERIC_STD.ALL; entity detect_sensor is generic ( N : natural := 32 ); Port ( clk : in STD_LOGIC; rst : in STD_LOGIC; sensor : in STD_LOGIC; en_detect : in STD_LOGIC; sensor_rising : out STD_LOGIC; sensor_falling : out STD_LOGIC ); end detect_sensor; architecture Behavioral of detect_sensor is signal opto_sensor_shift_r : unsigned (N-1 downto 0); signal reg_sensor_falling, reg_sensor_rising : STD_LOGIC; begin sensor_rising <= reg_sensor_rising; sensor_falling <= reg_sensor_falling; process(all) begin if(rst = '1') then opto_sensor_shift_r <= (others=>'0'); elsif(rising_edge(clk)) then opto_sensor_shift_r <= opto_sensor_shift_r(N-2 downto 0) & sensor; end if; end process; process(all) begin if(rst = '1') then reg_sensor_rising <= '0'; reg_sensor_falling <= '0'; elsif(rising_edge(clk)) then if en_detect = '1' then if opto_sensor_shift_r((N-1) downto (N/2)) = to_unsigned(((2**(N/2))-1), N/2) and opto_sensor_shift_r((N/2-1) downto 0) = to_unsigned(0, N/2) then reg_sensor_rising <= '1'; else reg_sensor_rising <= '0'; end if; if opto_sensor_shift_r((N-1) downto (N/2)) = to_unsigned(0, N/2) and opto_sensor_shift_r((N/2-1) downto 0) = to_unsigned(((2**(N/2))-1), N/2) then reg_sensor_falling <= '1'; else reg_sensor_falling <= '0'; end if; end if; end if; end process; end Behavioral; Из-за этого я и пишу что нужно описывать цифровую схему ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Станислав Н 0 27 декабря, 2021 Опубликовано 27 декабря, 2021 · Жалоба 3 часа назад, Maverick_ сказал: PS GRAFCET у FESTO и в TIA PORTAL это высокоуровневые языки от производителей. Сравнивать их с Vhdl/verilog не коректно мягко говоря. Наверное модули которые программируются с помощью этих языков сложные цифровые устройстава. да я и не сравниваю. У меня есть задача, которую нужно решить, хочу попробовать сам, если не получится то попрошу помощи за вознаграждение. 2 часа назад, Maverick_ сказал: Вот пример описание ШИМа (Широтно-импульсная модуляция (ШИМ, или Pulse-Width Modulation, PWM) Спасибо, гляну, правда, на первый взгляд что то сложно кажется. 2 часа назад, Maverick_ сказал: Из-за этого я и пишу что нужно описывать цифровую схему Прошу еще раз прощения, но цифровая схема это уже конечный продукт. Мне очень сильно кажется, что такой путь не совсем правильный, ИМХО. Меня же учили упрощать логические схемы используя таблицы и графики. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Longiel 2 27 декабря, 2021 Опубликовано 27 декабря, 2021 · Жалоба Станислав Н, под словами "описывать цифровую схему", наверное, имеется ввиду, что надо взять бумажку и карандаш и нарисовать структурную схему прошивки. Можно не заморачиваться непосредственно кодом модулей на этом этапе - нужно продумать архитектуру и взаимодействие модулей друг с другом. Когда уже будет понятно какие модули должны быть, какие у них порты, протоколы по входам и выходам, короче практически есть ТЗ на них - пишите код, соединяете модули на топе и моделируете. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Станислав Н 0 27 декабря, 2021 Опубликовано 27 декабря, 2021 · Жалоба так я же спрашивал, что возможно подразумевается структурная схема. Если это так, то все ок, но из готовой цифровой вытягивать.. мне даже представить сложно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Longiel 2 27 декабря, 2021 Опубликовано 27 декабря, 2021 · Жалоба Ну, в некоторых случаях приходится и логику на бумажке "моделировать" с разрисовкой тактовой времянки) Но это ж такие уже случаи... обычно когда места мало и надо логику "паковать" совсем впритык, "продергивая" времянку со входа на выход. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться