daemonDX 0 October 23, 2006 Posted October 23, 2006 · Report post Сорри, совсем VHDL забыл. :) Теперь поподробнее про длительность set. Его длительность равна периоду Clk (т.е. в последовательности ...01010101... длине 01)? Или половине периода (т.е. в последовательности 01010101 длине 0, или длине 1)? Относительно clk - set синхронный сигнал, или полностью асинхронный (т.е. можно ли его анализировать по переходу сигнала clk из 0 в 1, или из 1 в 0) ? Quote Share this post Link to post Share on other sites More sharing options...
sazh 9 October 23, 2006 Posted October 23, 2006 · Report post To daemonDX Вы правильно "перевели" (с ошибками ) на VHDL предложенную схему. А теперь, получается ( задавая такие вопросы) Вы не понимали, что делали. Или есть желание запутать товарища окончательно. Quote Share this post Link to post Share on other sites More sharing options...
darkniisiis 0 October 23, 2006 Posted October 23, 2006 (edited) · Report post Наверное я просто когда говорил о длительности сет неправильно выразился, но вроде бы приводил пример выше.В этой схеме сет и цлк идут от одного тактового генератора, просто сет до этого проходит через делитель частоты и поэтому имеет более низкую частоту и соответственно больший период при той же длительности сигнала, например 00110011001100110011 CLK 00110000001100000011 SET Edited October 23, 2006 by darkniisiis Quote Share this post Link to post Share on other sites More sharing options...
sazh 9 October 23, 2006 Posted October 23, 2006 · Report post Должно быть 00110011001100110011 CLK 00111100001111000011 SET Quote Share this post Link to post Share on other sites More sharing options...
darkniisiis 0 October 23, 2006 Posted October 23, 2006 · Report post То что он работает при 00110011001100110011 CLK 00111100001111000011 SET я не спорю, с этим всё ок, но длительность SET я не имею права изменять, так же как и CLK, ибо они взаимозависимы, как я уже описал выше. Нужно описать именно под последовательность типа 00110011001100110011 CLK 00110000001100000011 SET т.е частоты имеют зависимость SET=CLK/x, где х от 1 до 65536 Quote Share this post Link to post Share on other sites More sharing options...
daemonDX 0 October 23, 2006 Posted October 23, 2006 · Report post Ну вот и определились с set. :) А Вы, sazh, говорите, что запутываю. Кстати, ваш код переписывал вслепую, не особо следя за его логикой :) Мне уже было достаточно воспоминания о давнем знакомстве с VHDL :) . To darkniisiis: А теперь вернемся к нашим баранам, т.е. к set. Вы уверены, что делитель частоты работает именно так, с изменением скважности сигнала (т.е. в вашем примере из входного сигнала со скважностью 50/ 50 (50% времени высокий уровень, 50% времени низкий уровень) получаем сигнал со скважностью 75/25)? Должен бы работать так, как говорит sazh, хотя я пока работал только со встроенными в FPGA Xilinx DCM, может и другое в мире есть :) . 00110011001100110011 CLK 00110000001100000011 SET И про то, что set получается с внешнего устройства, а не с триггера внутри устройства, следовало упомянуть. Судя по последним новостям, set - периодический сигнал, асинхронный для clk. Так таймер должен задерживать всю последовательность set ? Тогда это не таймер, а управляемая линия задержки. Нарисуйте, плиз, выходной сигнал с устройства для вашего примера с парой-тройкой значений x (SET=CLK/x), ну и парой малых значений prog, для разъяснения ситуации (а то что-то чем дальше, тем темнее :) ). Прямо в используемом в предыдущем формате (по три строки, clk/set/pinout) Quote Share this post Link to post Share on other sites More sharing options...
Victor 0 October 23, 2006 Posted October 23, 2006 · Report post умножьте в плисе частоту на 2 или на 4 и задерживайте :) хотя очень странно с _делителя_ частоты получать _такой_ SET... Quote Share this post Link to post Share on other sites More sharing options...
klop 0 October 23, 2006 Posted October 23, 2006 · Report post Наверное я просто когда говорил о длительности сет неправильно выразился, но вроде бы приводил пример выше.В этой схеме сет и цлк идут от одного тактового генератора, просто сет до этого проходит через делитель частоты и поэтому имеет более низкую частоту и соответственно больший период при той же длительности сигнала, например 00110011001100110011 CLK 00110000001100000011 SET Может проще сначала нарисоовать сигналы на входе и на выходе(ну хоть на бумаге) , но осмысленно. А потом начинать огород городить. Quote Share this post Link to post Share on other sites More sharing options...
sazh 9 October 23, 2006 Posted October 23, 2006 · Report post 00110011001100110011 CLK 00110000001100000011 SET Получается, что длительность set равна половине периода Clk. Нетрудно привязать set к клоку. Вот только на выходе схемы, которая фрмирует сигналы по переднему фронту clk, можно получить сигналы, кратные целому периоду клок. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity TIMER_AGAIN is Port ( set_n : in STD_LOGIC; prog : in STD_LOGIC_VECTOR (15 downto 0); clk : in STD_LOGIC; pinout : out STD_LOGIC); end TIMER_AGAIN; architecture Behavioral of TIMER_AGAIN is signal cnt : std_logic_vector( 15 downto 0 ); signal set_s : std_logic; signal enable : std_logic; signal delayed_set : std_logic; begin process( CLK, set_n ) begin if ( set_n = '0' ) then set_s <= '1'; elsif CLK'event and CLK = '1' then set_s <= '0'; end if; end process; process( CLK ) begin if CLK'event and CLK = '1' then if ( set_s = '1' ) then enable <= '1'; elsif ( cnt = 1 )then enable <= '0'; end if; if ( set_s = '1' ) then cnt <= prog; elsif ( enable = '1' ) then cnt <= cnt - 1; end if; if ( cnt = 1 )then delayed_set <= '1'; else delayed_set <= '0'; end if; end if; end process; pinout <= delayed_set; end Behavioral; Quote Share this post Link to post Share on other sites More sharing options...
Victor 0 October 24, 2006 Posted October 24, 2006 · Report post Уважаемые, а можно ли вообще анализировать _такой_ SET по _такому_ CLK??? как минимум на 2 надо помножить ;) да, вот решение для xilinx virtex2, только писать не буду :) берем CLK, умножаем на 2 или больше(Пусть в N раз). Берем (N*65536/(емкость BRAM)) штук брамин в однобитном режиме. Играемся адресами, и получаем нужную задержку :). Если нужно задержать на 1, то просто регистрим, ну или можно SRL16 вставить. Зависит от того на какой макс. частоте работать можно. З.Ы. Развели тут флейм :)))) Quote Share this post Link to post Share on other sites More sharing options...
sazh 9 October 24, 2006 Posted October 24, 2006 · Report post Развели тут флейм ///// Вы сейчас предложили спилить сосну и сделать из нее спичку. Quote Share this post Link to post Share on other sites More sharing options...
Victor 0 October 24, 2006 Posted October 24, 2006 · Report post Вы сейчас предложили спилить сосну и сделать из нее спичку. не понял смысл афоризма :( UPD: а, да, дошло :))) возможно :) но в любом случае, что на счетчике, что на памяти, нужен хотя бы двойной CLK. Ну и еще я не очень понимаю как на счетчиках (даже на CLK*2) задержать, скажем, SET в случае SET = CLK/65536... Quote Share this post Link to post Share on other sites More sharing options...
sazh 9 October 24, 2006 Posted October 24, 2006 · Report post Я не знаю задачи, которую здесь пытаются решить. Но знаю. что она укладывается в элементарный счетчик и пара тройка триггеров. И Вы не знаете поставленной задачи, но утверждаете, что без мощного синтезатора и 5 Виртекса ну никак не обойтись. Quote Share this post Link to post Share on other sites More sharing options...
Victor 0 October 24, 2006 Posted October 24, 2006 · Report post :))))) просто по моему скромному разумению, нужно тогда хотя бы вычислить период SET в тактах дизайна. А память, хотя, конечно, это нельзя назвать экономным использованием ресурсов, позволяет не высчитывать период, который, если я правильно понимаю, не известен априори. :) Ну вот и меня втянули :) В смысле втянулся :) Quote Share this post Link to post Share on other sites More sharing options...
id_gene 0 October 24, 2006 Posted October 24, 2006 · Report post А я вот теперь запутался :) Если SET приходит периодически, как его задерживать на величину, большую периода прихода SET? в буфер складывать? Т.е. условно SET приходит раз в 10 тактов, а prog = 16 Quote Share this post Link to post Share on other sites More sharing options...