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

 
 
 
Reply to this topicStart new topic
> Констрейн, create_generated_clock
LAS9891
сообщение Apr 17 2017, 11:29
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 201
Регистрация: 18-06-15
Пользователь №: 87 194



Имеется такой код:

Код
reg DOUT1_flipflop = 1'b0;
reg DOUT1 = 1'b0;

always@(posedge RESET or posedge CLOCK)
begin
if(RESET)
    begin
    DOUT1_flipflop <= 1'b0;
    DOUT1 <= 1'b0;
    end
else
    begin
    DOUT1_flipflop <= CMOS_DOUT1;
    DOUT1 <= DOUT1_flipflop;
    end
end


Где CLOCK - внешний тактовый сигнал, CMOS_DOUT1 - внешний сигнал. Далее я использую значение регистра DOUT1 как тактовый сигнал:

Код
always@(posedge RESET or posedge DOUT1)
begin
if(RESET)
;

else
;
end


При компиляции Quartus сообщает варнинг:
Warning (332060): Node: ... DOUT1 was determined to be a clock but was found without an associated clock assignment.

Якобы я использую DOUT1 как тактовый сигнал, а в констрейнах его не прописал. Я пишу такую строчку в файл .SDC:

create_generated_clock -source [get_ports CLOCK] -name DOUT1 [get_registers DOUT1]

в ответ получаю еще варнинги:
Warning (332174): Ignored filter at CMOS1300.sdc(19): DOUT1 could not be matched with a register
Warning (332049): Ignored create_generated_clock at CMOS1300.sdc(19): Argument <targets> is an empty collection
Info (332050): create_generated_clock -source [get_ports CLOCK] -name DOUT1 [get_registers DOUT1]

Как правильно описать подобный сигнал?

Сообщение отредактировал LAS9891 - Apr 17 2017, 11:31
Go to the top of the page
 
+Quote Post
dm.pogrebnoy
сообщение Apr 17 2017, 11:54
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 709
Регистрация: 11-04-07
Пользователь №: 26 933



IMHO,
Цитата
create_generated_clock -source [get_ports CLOCK] -name DOUT1 [get_pins DOUT1/Q] -divide_by 1


--------------------
Go to the top of the page
 
+Quote Post
embddr
сообщение Apr 17 2017, 14:22
Сообщение #3


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

Группа: Свой
Сообщений: 111
Регистрация: 16-09-08
Из: Москва
Пользователь №: 40 233



Не ошибусь, если скажу, что не нужно использовать логический сигнал в качестве клока. Используйте его как сигнал разрешения.
Go to the top of the page
 
+Quote Post
Viwon
сообщение Apr 17 2017, 14:33
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 18-03-14
Пользователь №: 80 976



Компилятор ругается что не может найти регистр DOUT1, нужно указать полный путь к нему
замените [get_registers DOUT1], на [get_registers {*|DOUT1}], если регистр с таким именем у вас в проекте один, иначе вместо * указать весь путь
Go to the top of the page
 
+Quote Post
LAS9891
сообщение Apr 18 2017, 05:42
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 201
Регистрация: 18-06-15
Пользователь №: 87 194



Цитата(Viwon @ Apr 17 2017, 18:33) *
Компилятор ругается что не может найти регистр DOUT1, нужно указать полный путь к нему
замените [get_registers DOUT1], на [get_registers {*|DOUT1}], если регистр с таким именем у вас в проекте один, иначе вместо * указать весь путь

А правильно ли я указал в строчке -source [get_ports CLOCK], что источником сигнала является тактовый сигнал CLOCK? В действительности я считываю состояние внешнего сигнала CMOS_DOUT1, а по фронту CLOCK записываю это значение в DOUT1.

Замена не помогла:
Warning (332049): Ignored create_generated_clock at ___.sdc(19): Argument -source is an empty collection
Info (332050): create_generated_clock -source [get_ports CLOCK] -name DOUT1 [get_registers {*|DOUT1}]
Warning (332060): Node: READ_CMOS:READ_DATA|DOUT1 was determined to be a clock but was found without an associated clock assignment.


Сообщение отредактировал LAS9891 - Apr 18 2017, 05:49
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 18 2017, 06:14
Сообщение #6


Гуру
******

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



create_generated_clock

The source of the generated clock, specified by -source, is a
port, pin, register, or net in the design. All waveform
modifications are relative to this point. If more than one clock
feeds the source node, the -master_clock option must be used to
specify which clock to modify.

то есть выход вашего регистра это - сорс клока. А имя это просто чтобы его называть. Так что ИМХО у вас неправильный источник

вся задержка сети начнет считаться от этой точки, чтобы учесть задержку от нормального клока, вроде есть ключик типа мастер клок или что-то типа того.
Go to the top of the page
 
+Quote Post
LAS9891
сообщение Apr 18 2017, 06:24
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 201
Регистрация: 18-06-15
Пользователь №: 87 194



Цитата(Golikov A. @ Apr 18 2017, 10:14) *
то есть выход вашего регистра это - сорс клока. А имя это просто чтобы его называть. Так что ИМХО у вас неправильный источник

вся задержка сети начнет считаться от этой точки, чтобы учесть задержку от нормального клока, вроде есть ключик типа мастер клок или что-то типа того.


ОК. Как тогда писать? Так?:
create_generated_clock -source [get_registers {*|DOUT1}] -name DOUT1 [get_registers {*|DOUT1}]
Снова куча варнингов.
Go to the top of the page
 
+Quote Post
lembrix
сообщение Apr 18 2017, 07:41
Сообщение #8





Группа: Участник
Сообщений: 13
Регистрация: 13-04-17
Из: Москва
Пользователь №: 96 508



Почему бы, как уже написали, не использовать DOUT как сигнал разрешения, а не как тактовый.

А по сути, если цель просто убрать варнинги, то так должно быть правильно:
Код
create_generated_clock -source [get_ports CLOCK] -name DOUT1 [get_registers DOUT1] -divide_by 1


Для варианта если CLOCK это входной порт. А как у вас?

Сообщение отредактировал lembrix - Apr 18 2017, 08:09
Go to the top of the page
 
+Quote Post
LAS9891
сообщение Apr 18 2017, 07:57
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 201
Регистрация: 18-06-15
Пользователь №: 87 194



Цитата(lembrix @ Apr 18 2017, 11:41) *
Не очень понятно как в дальнейшем будет использоваться сигнал CMOS_DOUT1. И наверняка, как уже написали, правильно будет использовать его не как тактовый, а как сигнал разрешения.
Ну а по сути, квартус нашел не заявленный клок и спрашивает у вас его параметры. Во-первых, квартусу нужно знать его период. Какой период у внешнего сигнала CMOS_DOUT1? Во-вторых, если у вас есть CDC (по DOUT защелкивается сигнал с выхода триггера работающего по CLOCK или наоборот), то квартусу нужно знать взаимоотношения тактового сигнала CMOS_DOUT1 и основного тактового сигнала CLOCK.

Сигнал CMOS_DOUT1 в дальнейшем не будет использоваться. Я буду использовать вместо него сигнал DOUT1 синхронный с CLOCK. Допустим период CMOS_DOUT1 равен 1 мкс. Про взаимоотношения: CMOS_DOUT1 - внешний сигнал (импульсы), CLOCK - сигнал генерируемый PLL внутри ПЛИС, сигнал CMOS_DOUT1 асинхронен (скорее всего) CLOCK. Как это все описать?

Цитата(lembrix @ Apr 18 2017, 11:41) *
Почему бы, как уже написали, не использовать DOUT как сигнал разрешения, а не как тактовый.

Предлагаете отслеживать состояние DOUT (синхронного CLOCKу) по фронту/срезу CLOCK?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 18 2017, 08:10
Сообщение #10


Гуру
******

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



Цитата
Я буду использовать вместо него сигнал DOUT1 синхронный с CLOCK.

В какой точке дизайнаsm.gif?
Вы понимаете что у вас во всех точках вашего кристалла время фронта клока разное? При этом если клок идет по специальным выровненным деревьям, то сигнал с триггера пойдет по другим цепям и разойдется с клоком просто капитально.

надо использовать сигнал в условии, но не как клок.

НЕ НАДО
always @(posedge clk) CLOCK <= ~CLOCK;
always @(posedge CLOCK) ...

НАДО
always @(posedge clk) CLOCK <= ~CLOCK;
always @(posedge clk) if(CLOCK) ....

Цитата
create_generated_clock -source [get_registers {*|DOUT1}] -name DOUT1 [get_registers {*|DOUT1}]
Снова куча варнингов.

каких?
надо как сорс использовать выход регистра, а не регистр. А имя просто дать, как я понимаю.
Go to the top of the page
 
+Quote Post
lembrix
сообщение Apr 18 2017, 08:16
Сообщение #11





Группа: Участник
Сообщений: 13
Регистрация: 13-04-17
Из: Москва
Пользователь №: 96 508



Цитата(LAS9891 @ Apr 18 2017, 10:57) *
Сигнал CMOS_DOUT1 в дальнейшем не будет использоваться. Я буду использовать вместо него сигнал DOUT1 синхронный с CLOCK. Допустим период CMOS_DOUT1 равен 1 мкс. Про взаимоотношения: CMOS_DOUT1 - внешний сигнал (импульсы), CLOCK - сигнал генерируемый PLL внутри ПЛИС, сигнал CMOS_DOUT1 асинхронен (скорее всего) CLOCK. Как это все описать?

Да ,я уже понял что фигню написал. Он у вас cинхронный с CLOCK, так что это все не надо.

Проблема в том, что у вас CLOCK выход PLL, а не порт, поэтому source должен быть [get_pins "соотв. выход PLL"]
Go to the top of the page
 
+Quote Post
Viwon
сообщение Apr 18 2017, 11:04
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 18-03-14
Пользователь №: 80 976



Цитата(LAS9891 @ Apr 18 2017, 08:42) *
А правильно ли я указал в строчке -source [get_ports CLOCK], что источником сигнала является тактовый сигнал CLOCK? В действительности я считываю состояние внешнего сигнала CMOS_DOUT1, а по фронту CLOCK записываю это значение в DOUT1.

Замена не помогла:
Warning (332049): Ignored create_generated_clock at ___.sdc(19): Argument -source is an empty collection
Info (332050): create_generated_clock -source [get_ports CLOCK] -name DOUT1 [get_registers {*|DOUT1}]
Warning (332060): Node: READ_CMOS:READ_DATA|DOUT1 was determined to be a clock but was found without an associated clock assignment.


Теперь он ругается, что не может найти ножку названую CLOCK.
Вы пишите, что
Цитата
CLOCK - сигнал генерируемый PLL внутри ПЛИС

В таком случае нужно указать выход PLL, что-то типа -source {pll|altpll_component|auto_generated|pll1|inclk[0]}, точное название смотрите в консоле во время компиляции.
Подробнее об описании клоков посмотрите здесь.

А в общем вам правильно говорят, не плодите клоки, если можно обойтись без них.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 17th August 2017 - 09:43
Рейтинг@Mail.ru


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