Jump to content
    

Констрейн

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

 

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]

 

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

Edited by LAS9891

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

 

Edited by LAS9891

Share this post


Link to post
Share on other sites

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.

 

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

 

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

 

Share this post


Link to post
Share on other sites

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

 

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

 

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

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

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

 

Share this post


Link to post
Share on other sites

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

 

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

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

 

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

Edited by lembrix

Share this post


Link to post
Share on other sites

Не очень понятно как в дальнейшем будет использоваться сигнал 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?

Share this post


Link to post
Share on other sites

Я буду использовать вместо него сигнал 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}]

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

каких?

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

 

Share this post


Link to post
Share on other sites

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

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

 

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

 

Share this post


Link to post
Share on other sites

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

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

 

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

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...