Перейти к содержанию
    

Констрейн

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Компилятор ругается что не может найти регистр DOUT1, нужно указать полный путь к нему

замените [get_registers DOUT1], на [get_registers {*|DOUT1}], если регистр с таким именем у вас в проекте один, иначе вместо * указать весь путь

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Компилятор ругается что не может найти регистр 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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.

 

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

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

ОК. Как тогда писать? Так?:

create_generated_clock -source [get_registers {*|DOUT1}] -name DOUT1 [get_registers {*|DOUT1}]

Снова куча варнингов.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

А по сути, если цель просто убрать варнинги, то так должно быть правильно:

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

 

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

Изменено пользователем lembrix

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Ну а по сути, квартус нашел не заявленный клок и спрашивает у вас его параметры. Во-первых, квартусу нужно знать его период. Какой период у внешнего сигнала CMOS_DOUT1? Во-вторых, если у вас есть CDC (по DOUT защелкивается сигнал с выхода триггера работающего по CLOCK или наоборот), то квартусу нужно знать взаимоотношения тактового сигнала CMOS_DOUT1 и основного тактового сигнала CLOCK.

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

 

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

Предлагаете отслеживать состояние DOUT (синхронного CLOCKу) по фронту/срезу CLOCK?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

В какой точке дизайна:)?

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

 

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

 

НЕ НАДО

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}]

Снова куча варнингов.

каких?

надо как сорс использовать выход регистра, а не регистр. А имя просто дать, как я понимаю.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

Проблема в том, что у вас CLOCK выход PLL, а не порт, поэтому source должен быть [get_pins "соотв. выход PLL"]

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А правильно ли я указал в строчке -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]}, точное название смотрите в консоле во время компиляции.

Подробнее об описании клоков посмотрите здесь.

 

А в общем вам правильно говорят, не плодите клоки, если можно обойтись без них.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...