LAS9891 0 17 апреля, 2017 Опубликовано 17 апреля, 2017 (изменено) · Жалоба Имеется такой код: 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] Как правильно описать подобный сигнал? Изменено 17 апреля, 2017 пользователем LAS9891 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dimidrol 0 17 апреля, 2017 Опубликовано 17 апреля, 2017 · Жалоба IMHO, create_generated_clock -source [get_ports CLOCK] -name DOUT1 [get_pins DOUT1/Q] -divide_by 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
embddr 0 17 апреля, 2017 Опубликовано 17 апреля, 2017 · Жалоба Не ошибусь, если скажу, что не нужно использовать логический сигнал в качестве клока. Используйте его как сигнал разрешения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Viwon 0 17 апреля, 2017 Опубликовано 17 апреля, 2017 · Жалоба Компилятор ругается что не может найти регистр DOUT1, нужно указать полный путь к нему замените [get_registers DOUT1], на [get_registers {*|DOUT1}], если регистр с таким именем у вас в проекте один, иначе вместо * указать весь путь Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LAS9891 0 18 апреля, 2017 Опубликовано 18 апреля, 2017 (изменено) · Жалоба Компилятор ругается что не может найти регистр 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. Изменено 18 апреля, 2017 пользователем LAS9891 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 18 апреля, 2017 Опубликовано 18 апреля, 2017 · Жалоба 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. то есть выход вашего регистра это - сорс клока. А имя это просто чтобы его называть. Так что ИМХО у вас неправильный источник вся задержка сети начнет считаться от этой точки, чтобы учесть задержку от нормального клока, вроде есть ключик типа мастер клок или что-то типа того. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LAS9891 0 18 апреля, 2017 Опубликовано 18 апреля, 2017 · Жалоба то есть выход вашего регистра это - сорс клока. А имя это просто чтобы его называть. Так что ИМХО у вас неправильный источник вся задержка сети начнет считаться от этой точки, чтобы учесть задержку от нормального клока, вроде есть ключик типа мастер клок или что-то типа того. ОК. Как тогда писать? Так?: create_generated_clock -source [get_registers {*|DOUT1}] -name DOUT1 [get_registers {*|DOUT1}] Снова куча варнингов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lembrix 0 18 апреля, 2017 Опубликовано 18 апреля, 2017 (изменено) · Жалоба Почему бы, как уже написали, не использовать DOUT как сигнал разрешения, а не как тактовый. А по сути, если цель просто убрать варнинги, то так должно быть правильно: create_generated_clock -source [get_ports CLOCK] -name DOUT1 [get_registers DOUT1] -divide_by 1 Для варианта если CLOCK это входной порт. А как у вас? Изменено 18 апреля, 2017 пользователем lembrix Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LAS9891 0 18 апреля, 2017 Опубликовано 18 апреля, 2017 · Жалоба Не очень понятно как в дальнейшем будет использоваться сигнал 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? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 18 апреля, 2017 Опубликовано 18 апреля, 2017 · Жалоба Я буду использовать вместо него сигнал 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}] Снова куча варнингов. каких? надо как сорс использовать выход регистра, а не регистр. А имя просто дать, как я понимаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lembrix 0 18 апреля, 2017 Опубликовано 18 апреля, 2017 · Жалоба Сигнал CMOS_DOUT1 в дальнейшем не будет использоваться. Я буду использовать вместо него сигнал DOUT1 синхронный с CLOCK. Допустим период CMOS_DOUT1 равен 1 мкс. Про взаимоотношения: CMOS_DOUT1 - внешний сигнал (импульсы), CLOCK - сигнал генерируемый PLL внутри ПЛИС, сигнал CMOS_DOUT1 асинхронен (скорее всего) CLOCK. Как это все описать? Да ,я уже понял что фигню написал. Он у вас cинхронный с CLOCK, так что это все не надо. Проблема в том, что у вас CLOCK выход PLL, а не порт, поэтому source должен быть [get_pins "соотв. выход PLL"] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Viwon 0 18 апреля, 2017 Опубликовано 18 апреля, 2017 · Жалоба А правильно ли я указал в строчке -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]}, точное название смотрите в консоле во время компиляции. Подробнее об описании клоков посмотрите здесь. А в общем вам правильно говорят, не плодите клоки, если можно обойтись без них. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться