реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Работа ПЛИС на точной частоте
ZZZRF413
сообщение Jul 2 2015, 19:47
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 26-07-09
Из: Нижний Новгород
Пользователь №: 51 578



Всем доброго дня!

Подскажите пожалуйста по следующему вопросу: Есть тактовая частота например 5,137958413076 МГц поступающая на ПЛИС для конкретики пускай будет ПЛИС фирмы Xilinx серии Spartan6. Сможет ли DCM либо PLL поделить её точно на 7 т.е. до 0,73399405901085714285714285714286 МГц. Дрожание фазы в данном случае не важно, главное чтобы частота была точной. Кто-нибудь сталкивался с похожим вопросом? Каково Ваше мнение?
Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Jul 2 2015, 20:06
Сообщение #2


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



..а в чём проблема делить на 7 ? PLL будет пропускать только 7-й импульс для сравнения.
Ваша частота с кучей цифр после запятой - лишь ваша фантазия, все цифры условны.


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
bugdesigner
сообщение Jul 3 2015, 03:16
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 123
Регистрация: 12-06-15
Из: Земля
Пользователь №: 87 133



Обычным счётчиком можно. PLL лучше приберечь для умножения частоты.
Go to the top of the page
 
+Quote Post
Bad0512
сообщение Jul 3 2015, 04:17
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650



Цитата(bugdesigner @ Jul 3 2015, 09:16) *
Обычным счётчиком можно. PLL лучше приберечь для умножения частоты.

Если надо duty cycle 50/50 то в данном случае счётчик не прокатит. Для PLL/DCM частота маловата - может и не завестись от 5МГц - надо смотреть даташиты.
Go to the top of the page
 
+Quote Post
ZZZRF413
сообщение Jul 3 2015, 04:19
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 26-07-09
Из: Нижний Новгород
Пользователь №: 51 578



Т.е. к DCM и PLL лучше не прибегать в данном случае и делать все на логике.

Цитата(Lmx2315 @ Jul 3 2015, 00:06) *
Ваша частота с кучей цифр после запятой - лишь ваша фантазия, все цифры условны.


Вот требуется, чтобы ПЛИС формировала управляющие сигналы на этой точной частоте со всеми циферками после запятой...
Go to the top of the page
 
+Quote Post
AJIEKCEu
сообщение Jul 3 2015, 04:27
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 314
Регистрация: 7-12-05
Пользователь №: 11 917



1. В режиме DCM - входная частота (у Spartan6) от 5 МГц. Так что заведется. А вот как PLL - фиг.
2. Можно использовать счетчик + DDR триггер на выходе. Тогда Duty Cycle выходного клока будет в абсолютном значении такой же как и у входного. Соответственно в процентах - в семь раз меньше.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jul 3 2015, 05:26
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
2. Можно использовать счетчик + DDR триггер на выходе. Тогда Duty Cycle выходного клока будет в абсолютном значении такой же как и у входного. Соответственно в процентах - в семь раз меньше.

можно чуть подробнее? что на какие входы ДДР идет?
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Jul 3 2015, 05:36
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(ZZZRF413 @ Jul 2 2015, 22:47) *
Всем доброго дня!

Подскажите пожалуйста по следующему вопросу: Есть тактовая частота например 5,137958413076 МГц поступающая на ПЛИС для конкретики пускай будет ПЛИС фирмы Xilinx серии Spartan6. Сможет ли DCM либо PLL поделить её точно на 7 т.е. до 0,73399405901085714285714285714286 МГц. Дрожание фазы в данном случае не важно, главное чтобы частота была точной. Кто-нибудь сталкивался с похожим вопросом? Каково Ваше мнение?


Я делал на основе обычного двоичного счетчика.......а вот после счетчика обязательно ставил глобальный буфер, тем самым цепь становилась глобальной, т.е. тактовой. Далее в проекте эту деленную частоту использовал только в тактовых цепях. Все было ок. ПЛИС SPARTAN6. Опробовано в разных проетах.
P.S. Можно и на DCM.... указываем в настройках к-т деления и тоже пользуемся деленной глобальной частотой. Тут вообще проблем никаких нет.


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
AJIEKCEu
сообщение Jul 3 2015, 05:58
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 314
Регистрация: 7-12-05
Пользователь №: 11 917



Цитата(Golikov A. @ Jul 3 2015, 08:26) *
можно чуть подробнее? что на какие входы ДДР идет?


Например вот:
CODE

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.
Результат:
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jul 3 2015, 08:24
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



сдвиговый регистр не совсем счетчик, но концепт понятен, спасибо wink.gif

я делал на счетчике, входы ДДР фиксировал в 0 и 1, а счетчиком формировал клоки, но ваш вариант по ресурсам поизящнее выглядит.
Go to the top of the page
 
+Quote Post
bugdesigner
сообщение Jul 3 2015, 08:30
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 123
Регистрация: 12-06-15
Из: Земля
Пользователь №: 87 133



Поделить на 7 со скважностью 50:50 никак не выйдет. Можно будет только 3:4, либо сперва умножить частоту на четное значение.
Go to the top of the page
 
+Quote Post
AJIEKCEu
сообщение Jul 3 2015, 08:41
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 314
Регистрация: 7-12-05
Пользователь №: 11 917



Цитата(Golikov A. @ Jul 3 2015, 11:24) *
а ничего что вы на 8 поделили? Давайте теперь пруф деления на 7 с 50% скважностьюsm.gif

Чё-й то на 8? Я вот считаю с картинки клоки - у меня 7 получается. На 7 периодов исходного клока - один период полученного.

Вот вам картинка с временами, если лень считать:

40 ns - период исходного клока,
40+100.1 ns - Clock_High для полученного (0,1 нс - из-за DDR Триггера и это задержка, а не изменение периода).
140 ns - Clock_low для полученного.

Итого - DutyCycle 50|50.
Отношение периодов - 280/40 = 7.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jul 3 2015, 08:51
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
Чё-й то на 8? Я вот считаю с картинки клоки - у меня 7 получается. На 7 периодов исходного клока - один период полученного.

не это я с перепугу чушь написалsm.gif, просто долго исправлял сообщениеsm.gif

Цитата
Поделить на 7 со скважностью 50:50 никак не выйдет. Можно будет только 3:4, либо сперва умножить частоту на четное значение.

ну оно как бы уже получилосьsm.gif ДДР дает возможность использовать оба фронта, 3:4 это при использовании только одного фронта клока...

ну строго говоря конечно там будет не совсем 50%, потому что мультиплексор ДДР внесет некоторую задержку на перекидывание сигнала, но это уже совсем крохи...
Go to the top of the page
 
+Quote Post
EvgenyNik
сообщение Jul 3 2015, 09:51
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402



Код
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


--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Jul 3 2015, 10:16
Сообщение #15


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



На отличненько!!

http://electronix.ru/forum/index.php?s=&am...t&p=1340599

Там вся ветка наполнена пушкинской тоской. Почитайте.

Цитата(EvgenyNik @ Jul 3 2015, 10:51) *
Код
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
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 04:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01469 секунд с 7
ELECTRONIX ©2004-2016