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

|
Т.е. к DCM и PLL лучше не прибегать в данном случае и делать все на логике. Цитата(Lmx2315 @ Jul 3 2015, 00:06)  Ваша частота с кучей цифр после запятой - лишь ваша фантазия, все цифры условны. Вот требуется, чтобы ПЛИС формировала управляющие сигналы на этой точной частоте со всеми циферками после запятой...
|
|
|
|
|
Jul 3 2015, 05:36
|

Местный
  
Группа: Свой
Сообщений: 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 раз встал.
|
|
|
|
|
Jul 3 2015, 05:58
|
Местный
  
Группа: Свой
Сообщений: 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. Результат:
|
|
|
|
|
Jul 3 2015, 08:41
|
Местный
  
Группа: Свой
Сообщений: 314
Регистрация: 7-12-05
Пользователь №: 11 917

|
Цитата(Golikov A. @ Jul 3 2015, 11:24)  а ничего что вы на 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.
|
|
|
|
|
Jul 3 2015, 08:51
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата Чё-й то на 8? Я вот считаю с картинки клоки - у меня 7 получается. На 7 периодов исходного клока - один период полученного. не это я с перепугу чушь написал  , просто долго исправлял сообщение  Цитата Поделить на 7 со скважностью 50:50 никак не выйдет. Можно будет только 3:4, либо сперва умножить частоту на четное значение. ну оно как бы уже получилось  ДДР дает возможность использовать оба фронта, 3:4 это при использовании только одного фронта клока... ну строго говоря конечно там будет не совсем 50%, потому что мультиплексор ДДР внесет некоторую задержку на перекидывание сигнала, но это уже совсем крохи...
|
|
|
|
|
Jul 3 2015, 10:16
|
ʕʘ̅͜ʘ̅ʔ
    
Группа: Свой
Сообщений: 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
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|