ZZZRF413 0 2 июля, 2015 Опубликовано 2 июля, 2015 · Жалоба Всем доброго дня! Подскажите пожалуйста по следующему вопросу: Есть тактовая частота например 5,137958413076 МГц поступающая на ПЛИС для конкретики пускай будет ПЛИС фирмы Xilinx серии Spartan6. Сможет ли DCM либо PLL поделить её точно на 7 т.е. до 0,73399405901085714285714285714286 МГц. Дрожание фазы в данном случае не важно, главное чтобы частота была точной. Кто-нибудь сталкивался с похожим вопросом? Каково Ваше мнение? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 5 2 июля, 2015 Опубликовано 2 июля, 2015 · Жалоба ..а в чём проблема делить на 7 ? PLL будет пропускать только 7-й импульс для сравнения. Ваша частота с кучей цифр после запятой - лишь ваша фантазия, все цифры условны. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bugdesigner 0 3 июля, 2015 Опубликовано 3 июля, 2015 · Жалоба Обычным счётчиком можно. PLL лучше приберечь для умножения частоты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bad0512 2 3 июля, 2015 Опубликовано 3 июля, 2015 · Жалоба Обычным счётчиком можно. PLL лучше приберечь для умножения частоты. Если надо duty cycle 50/50 то в данном случае счётчик не прокатит. Для PLL/DCM частота маловата - может и не завестись от 5МГц - надо смотреть даташиты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZZZRF413 0 3 июля, 2015 Опубликовано 3 июля, 2015 · Жалоба Т.е. к DCM и PLL лучше не прибегать в данном случае и делать все на логике. Ваша частота с кучей цифр после запятой - лишь ваша фантазия, все цифры условны. Вот требуется, чтобы ПЛИС формировала управляющие сигналы на этой точной частоте со всеми циферками после запятой... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AJIEKCEu 0 3 июля, 2015 Опубликовано 3 июля, 2015 · Жалоба 1. В режиме DCM - входная частота (у Spartan6) от 5 МГц. Так что заведется. А вот как PLL - фиг. 2. Можно использовать счетчик + DDR триггер на выходе. Тогда Duty Cycle выходного клока будет в абсолютном значении такой же как и у входного. Соответственно в процентах - в семь раз меньше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 3 июля, 2015 Опубликовано 3 июля, 2015 · Жалоба 2. Можно использовать счетчик + DDR триггер на выходе. Тогда Duty Cycle выходного клока будет в абсолютном значении такой же как и у входного. Соответственно в процентах - в семь раз меньше. можно чуть подробнее? что на какие входы ДДР идет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dima_spb 0 3 июля, 2015 Опубликовано 3 июля, 2015 · Жалоба Всем доброго дня! Подскажите пожалуйста по следующему вопросу: Есть тактовая частота например 5,137958413076 МГц поступающая на ПЛИС для конкретики пускай будет ПЛИС фирмы Xilinx серии Spartan6. Сможет ли DCM либо PLL поделить её точно на 7 т.е. до 0,73399405901085714285714285714286 МГц. Дрожание фазы в данном случае не важно, главное чтобы частота была точной. Кто-нибудь сталкивался с похожим вопросом? Каково Ваше мнение? Я делал на основе обычного двоичного счетчика.......а вот после счетчика обязательно ставил глобальный буфер, тем самым цепь становилась глобальной, т.е. тактовой. Далее в проекте эту деленную частоту использовал только в тактовых цепях. Все было ок. ПЛИС SPARTAN6. Опробовано в разных проетах. P.S. Можно и на DCM.... указываем в настройках к-т деления и тоже пользуемся деленной глобальной частотой. Тут вообще проблем никаких нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AJIEKCEu 0 3 июля, 2015 Опубликовано 3 июля, 2015 · Жалоба можно чуть подробнее? что на какие входы ДДР идет? Например вот: library IEEE; use IEEE.STD_LOGIC_1164.ALL; library UNISIM; use UNISIM.VComponents.all; entity clk_div7 is Port ( clkin : in STD_LOGIC; clkout : out STD_LOGIC); end clk_div7; architecture Behavioral of clk_div7 is signal shift_reg : std_logic_vector(13 downto 0) := "00000001111111"; signal nclkin : std_logic := '1'; begin nclkin <= not clkin; process(clkin) begin if rising_edge(clkin) then shift_reg <= shift_reg(11 downto 0) & shift_reg(13 downto 12); end if; end process; ODDR2_inst : ODDR2 generic map( DDR_ALIGNMENT => "C0", -- Sets output alignment to "NONE", "C0", "C1" INIT => '0', -- Sets initial state of the Q output to '0' or '1' SRTYPE => "ASYNC") -- Specifies "SYNC" or "ASYNC" set/reset port map ( Q => clkout, -- 1-bit output data C0 => clkin, -- 1-bit clock input C1 => nclkin, -- 1-bit clock input CE => '1', -- 1-bit clock enable input D0 => shift_reg(13), -- 1-bit data input (associated with C0) D1 => shift_reg(12), -- 1-bit data input (associated with C1) R => '0', -- 1-bit reset input S => '0' -- 1-bit set input ); end Behavioral; Можно наверное сделать нагляднее, это в качестве proof-of-concept. Результат: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 3 июля, 2015 Опубликовано 3 июля, 2015 · Жалоба сдвиговый регистр не совсем счетчик, но концепт понятен, спасибо ;) я делал на счетчике, входы ДДР фиксировал в 0 и 1, а счетчиком формировал клоки, но ваш вариант по ресурсам поизящнее выглядит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bugdesigner 0 3 июля, 2015 Опубликовано 3 июля, 2015 · Жалоба Поделить на 7 со скважностью 50:50 никак не выйдет. Можно будет только 3:4, либо сперва умножить частоту на четное значение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AJIEKCEu 0 3 июля, 2015 Опубликовано 3 июля, 2015 · Жалоба а ничего что вы на 8 поделили? Давайте теперь пруф деления на 7 с 50% скважностью:) Чё-й то на 8? Я вот считаю с картинки клоки - у меня 7 получается. На 7 периодов исходного клока - один период полученного. Вот вам картинка с временами, если лень считать: 40 ns - период исходного клока, 40+100.1 ns - Clock_High для полученного (0,1 нс - из-за DDR Триггера и это задержка, а не изменение периода). 140 ns - Clock_low для полученного. Итого - DutyCycle 50|50. Отношение периодов - 280/40 = 7. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 3 июля, 2015 Опубликовано 3 июля, 2015 · Жалоба Чё-й то на 8? Я вот считаю с картинки клоки - у меня 7 получается. На 7 периодов исходного клока - один период полученного. не это я с перепугу чушь написал:), просто долго исправлял сообщение:) Поделить на 7 со скважностью 50:50 никак не выйдет. Можно будет только 3:4, либо сперва умножить частоту на четное значение. ну оно как бы уже получилось:) ДДР дает возможность использовать оба фронта, 3:4 это при использовании только одного фронта клока... ну строго говоря конечно там будет не совсем 50%, потому что мультиплексор ДДР внесет некоторую задержку на перекидывание сигнала, но это уже совсем крохи... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EvgenyNik 0 3 июля, 2015 Опубликовано 3 июля, 2015 · Жалоба module div7 ( input clkin, output reg clkout ); reg reg1; reg [2:0] reg2; wire clk_w; assign clk_w = reg1 ^ clkin; always @ (posedge clk_w) begin reg1 <= clkin; if (reg2 == 6) begin reg2 <= 0; clkout <= ~clkout; end else reg2 <= reg2 + 1; end endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
FatRobot 3 3 июля, 2015 Опубликовано 3 июля, 2015 · Жалоба На отличненько!! http://electronix.ru/forum/index.php?s=&am...t&p=1340599 Там вся ветка наполнена пушкинской тоской. Почитайте. module div7 ( input clkin, output reg clkout ); reg reg1; reg [2:0] reg2; wire clk_w; assign clk_w = reg1 ^ clkin; always @ (posedge clk_w) begin reg1 <= clkin; if (reg2 == 6) begin reg2 <= 0; clkout <= ~clkout; end else reg2 <= reg2 + 1; end endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться