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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Тактовый сигнал 1 кГц
aleshanoff
сообщение Aug 23 2015, 21:39
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 68
Регистрация: 2-05-15
Из: Смоленск
Пользователь №: 86 484



Для реализации антитвита необходим тактовый сигнал 1 кГц. Как его получить? Через IP (core) Single DCM_SP не получается - максимальный коэффициент всего лишь 16. ПЛИС spartan3E. Глабальный CLK 25 МГц.
Код антитвита:
Код
library IEEE;
use IEEE.STD_LOGIC_1164 .ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity antitwit_fix is
Port ( INSIG : in STD_LOGIC;
N1kHz : in STD_LOGIC;
OUTSIG : out STD_LOGIC);
end antitwit_fix;

architecture Behavioral of antitwit_fix is

signal INT1, INT2,: STD_LOGIC; -- декларируем внутренние сигналы
signal BUS1: STD_LOGIC_VECTOR (7 downto 0):= ”00000000”;


begin

process (N1kHz)
begin
if N1kHz 'event and N1kHz = ‘1’ then
if INT1 = '1’ then
BUS1 <= BUS1 + 1;
end if;
end if;
end process;

INT1 <= ‘1’ when  or INSIG = ‘1’ else ‘0’;
OUTSIG <= INT2;
INT2 <= ‘0’ when BUS1 = ”00000000” else ‘1’;
end Behavioral;


Сообщение отредактировал des00 - Aug 24 2015, 03:24
Причина редактирования: используйте теги code для оформления кода (с) модератор
Go to the top of the page
 
+Quote Post
Bad0512
сообщение Aug 24 2015, 02:58
Сообщение #2


Знающий
****

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



Цитата(aleshanoff @ Aug 24 2015, 03:39) *
Для реализации антитвита необходим тактовый сигнал 1 кГц. Как его получить? Через IP (core) Single DCM_SP не получается - максимальный коэффициент всего лишь 16. ПЛИС spartan3E. Глабальный CLK 25 МГц.
Код антитвита:

Рекомендую осилить такой элемент как двоичный счётчик. При должной сноровке он позволит вам поделить свои 25МГц на 25000 и в итоге получить необходимый строб разрешения с требуемой частотой. Только не вздумайте этот строб использовать для прямого тактирования синхронных элементов - только как clock enable. Иначе - сразу будет gated clock, а это моветон, куча граблей и презрение всего цивилизованого сообщества.
Причина редактирования: избыточное цитирование (с) модератор
Go to the top of the page
 
+Quote Post
bugdesigner
сообщение Aug 24 2015, 03:47
Сообщение #3


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

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



Цитата(Bad0512 @ Aug 24 2015, 05:58) *
Только не вздумайте этот строб использовать для прямого тактирования синхронных элементов - только как clock enable. Иначе - сразу будет gated clock, а это моветон, куча граблей и презрение всего цивилизованого сообщества.

Если применить синхронный делитель частоты, то никаких граблей. Но про переходы в разные домены клока забывать нельзя (если они есть, конечно).
Go to the top of the page
 
+Quote Post
Bad0512
сообщение Aug 24 2015, 05:29
Сообщение #4


Знающий
****

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



Цитата(bugdesigner @ Aug 24 2015, 09:47) *
Если применить синхронный делитель частоты

А что это за зверь такой? И чем он к примеру от "асинхронного" отличается?
Go to the top of the page
 
+Quote Post
blackfin
сообщение Aug 24 2015, 05:53
Сообщение #5


Гуру
******

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



Цитата(Bad0512 @ Aug 24 2015, 09:29) *
А что это за зверь такой? И чем он к примеру от "асинхронного" отличается?

Asynchronous (ripple) counter vs Synchronous counter.
Go to the top of the page
 
+Quote Post
Bad0512
сообщение Aug 24 2015, 05:59
Сообщение #6


Знающий
****

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



Спасибо, Кэп!
Про разные типы счетчиков тут речь не шла.
Go to the top of the page
 
+Quote Post
blackfin
сообщение Aug 24 2015, 06:07
Сообщение #7


Гуру
******

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



Цитата(Bad0512 @ Aug 24 2015, 08:59) *
Спасибо, Кэп!
Про разные типы счетчиков тут речь не шла.

И тем не менее:
[attachment=94839:UG903.jpg]
См. Xilinx, UG903, стр.77
Go to the top of the page
 
+Quote Post
Bad0512
сообщение Aug 24 2015, 06:17
Сообщение #8


Знающий
****

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



Цитата(blackfin @ Aug 24 2015, 12:07) *
И тем не менее:
[attachment=94839:UG903.jpg]
См. Xilinx, UG903, стр.77

Хочу Вас расстроить, Кэп, но асинхронные счётчики давно вышли из моды, сейчас чтобы собрать такое чудо нужно
специально вручную лепить примитивы низкого уровня, при этом постоянно продираясь через тучи варнингов в стиле
"чувак, так делать не рекомендуется, ты идёшь по граблям!".
Обычные конструкции типа :
Код
always@(posedge clk)
  counter <= counter + 1'b1;

Всегда генерят счётчик с синхронным переносом.
Обсуждаемый вопрос вообще к этому не относится - вопрос в том, что потом делать с результатом подобного деления частоты.
Go to the top of the page
 
+Quote Post
blackfin
сообщение Aug 24 2015, 06:20
Сообщение #9


Гуру
******

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



Цитата(Bad0512 @ Aug 24 2015, 09:17) *
Хочу Вас расстроить, Кэп, но асинхронные счётчики давно вышли из моды..

Не надо меня лечить..

Вы спросили: "А что это за зверь такой? И чем он к примеру от "асинхронного" отличается?"

Я дал ссылку на Wiki. К Wiki претензии есть?

biggrin.gif

Go to the top of the page
 
+Quote Post
Bad0512
сообщение Aug 24 2015, 07:15
Сообщение #10


Знающий
****

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



Цитата(blackfin @ Aug 24 2015, 12:20) *
Вы спросили: "А что это за зверь такой? И чем он к примеру от "асинхронного" отличается?"

Я дал ссылку на Wiki. К Wiki претензии есть?

biggrin.gif

Разницу между терминами "счётчик" и "делитель частоты" улавливаете?
Go to the top of the page
 
+Quote Post
blackfin
сообщение Aug 24 2015, 08:16
Сообщение #11


Гуру
******

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



Цитата(Bad0512 @ Aug 24 2015, 10:15) *
Разницу между терминами "счётчик" и "делитель частоты" улавливаете?

Ну, "делителя частоты" в котором нет "счётчика" я пока еще не встречал..

Вот, собрал тестовый проектик:
Код
module async
(
  clk25MHz,

  nrst1KHz,
  nrst25MHz,

  cntr1KHz
);
input        clk25MHz;

input        nrst1KHz;
input        nrst25MHz;

output [7:0] cntr1KHz;

reg          clk1KHz;
reg   [13:0] cntr25MHz;

wire         comp = ((12500-1) == cntr25MHz);

always @(posedge clk25MHz or negedge nrst25MHz)
begin
  if (nrst25MHz == 0)
  begin
    clk1KHz <= 0;
    cntr25MHz <= 0;
  end
  else
  begin
    if (comp)
    begin
      clk1KHz <= !clk1KHz;
      cntr25MHz <= 0;
    end
    else
    begin
      cntr25MHz <= cntr25MHz + 1;
    end
  end
end

reg [7:0] cntr1KHz;

always @(posedge clk1KHz or negedge nrst1KHz)
begin
  if (nrst1KHz == 0)
  begin
    cntr1KHz <= 0;
  end
  else
  begin
    cntr1KHz <= cntr1KHz + 1;
  end
end

endmodule

Код
# Clock constraints
create_clock -name clk25MHz -period 40.000 [get_ports {clk25MHz}] -waveform {0.000 20.000}

# tsu/th constraints
set_input_delay -clock clk25MHz -min 1.0 [get_ports nrst25MHz]
set_input_delay -clock clk25MHz -max 2.0 [get_ports nrst25MHz]

create_generated_clock -name clk1KHz -source [get_ports clk25MHz] -divide_by 25000 [get_pins clk1KHz_reg/Q]

set_clock_groups -asynchronous -group clk25MHz -group clk1KHz

set_input_delay -clock clk1KHz -min 1.0 [get_ports nrst1KHz]
set_input_delay -clock clk1KHz -max 2.0 [get_ports nrst1KHz]

# Constrain the output I/O path
set_output_delay -clock clk1KHz -min 0.000 [all_outputs]
set_output_delay -clock clk1KHz -max 1.000 [all_outputs]

Всё собирается без ошибок и варнингов..

Что я делаю не так???

biggrin.gif
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 24 2015, 08:24
Сообщение #12


Гуру
******

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



Цитата
Что я делаю не так???

делите частоту на 50 вместо 25?
Go to the top of the page
 
+Quote Post
blackfin
сообщение Aug 24 2015, 08:29
Сообщение #13


Гуру
******

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



Цитата(Golikov A. @ Aug 24 2015, 11:24) *
делите частоту на 50 вместо 25?

А.. ну да, ну да..

biggrin.gif wacko.gif

PS. Исправил.. на всякий случай..
Go to the top of the page
 
+Quote Post
aleshanoff
сообщение Aug 24 2015, 08:34
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 68
Регистрация: 2-05-15
Из: Смоленск
Пользователь №: 86 484



Товарищи, спасибо за бурное обсуждение!
Но все же как мне сделать антидребезг?
на его вход подать сигнал со счетчика?
Go to the top of the page
 
+Quote Post
blackfin
сообщение Aug 24 2015, 08:40
Сообщение #15


Гуру
******

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



Цитата(aleshanoff @ Aug 24 2015, 11:34) *
Но все же как мне сделать антидребезг?
на его вход подать сигнал со счетчика?

Дык, если на новом (низкочастотном) клоке логики сидит не много, то, как уже сказали, лучше (и проще) использовать выход счетчика в качестве clk_ena,
а если на этом новом клоке сидит половина FPGA, то лучше сделать честный клок и сэкономить тучу киловатт*часов электроэнергии..

ИМХО, конечно..
Go to the top of the page
 
+Quote Post

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

 


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


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