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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Алтера: описание внешнего такта, TimeQuest, Как корректно описать такт в SDC?
solidreg
сообщение Jan 23 2010, 13:10
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 74
Регистрация: 24-10-05
Пользователь №: 10 056



Нужна помощ с описанием внешнего такта в SDC языке для TimeQuest (Altera)
У меня PLL генерирует 200MHz и 50MHz такты. Этот 200MHz идёт сразу на внешний чип, каторый делит этот такт на два, и через кокое то время (скажем, 3nS) посупает опять на FPGA. И потом этот сигнал пользуется как такт в внутренних цепях.
Нарисовал картинку чтоб было бы ясно.


Написал так:
Код
create_generated_clock -source <..PLL> -name MHz50
create_clock -period 10.000 -name MHz100 [get_ports {Clk2}]

Но как правильно описать эту задержку (фазу)?
Go to the top of the page
 
+Quote Post
des333
сообщение Jan 23 2010, 13:22
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 129
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079



Я не специалист по TQ, но, на мой взгляд, Вам следует описать MHz100 как generated_clock от MHz200 с указанием сдвига фазы.

Но, лучше подождите ответов гуру. smile.gif


--------------------
Go to the top of the page
 
+Quote Post
solidreg
сообщение Jan 23 2010, 13:47
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 74
Регистрация: 24-10-05
Пользователь №: 10 056



Цитата(des333 @ Jan 23 2010, 16:22) *
Я не специалист по TQ, но, на мой взгляд, Вам следует описать MHz100 как generated_clock от MHz200 с указанием сдвига фазы.

Да, пробовал. Но тогда Quartus ругается(warning), что не может найти как этот клок был сгенерирован. В резултате, это описание игнориуруется
Go to the top of the page
 
+Quote Post
des00
сообщение Jan 23 2010, 15:34
Сообщение #4


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(des333 @ Jan 23 2010, 07:22) *
Я не специалист по TQ, но, на мой взгляд, Вам следует описать MHz100 как generated_clock от MHz200 с указанием сдвига фазы.

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

Цитата(solidreg @ Jan 23 2010, 07:10) *
Но как правильно описать эту задержку (фазу)?

Описывается стандартно через create_clock.
У вас есть передача данных их домена 100МГц в домен 50МГц? Если нет, то задержка не важна.
Если есть то это сложнее, я вижу единственную возможность это задать сдвиг по фазе между клоками с помошью ключа waveform. Но тут есть тонкий момент, у вашего делителя скоре всего нормируются максимальные и минимальные параметры задержки, и как вы будете учитывать их при анализе мне не совсем понятно. Может быть гуру объяснят.

Еще мне не понятно, зачем делить клок на внешнем устройстве, если есть PLL. Или почему бы не сгенерировать 50МГц со 100МГц получаемых с внешнего делителя.


--------------------
Go to the top of the page
 
+Quote Post
solidreg
сообщение Jan 23 2010, 15:47
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 74
Регистрация: 24-10-05
Пользователь №: 10 056



Цитата(des00 @ Jan 23 2010, 19:34) *
Еще мне не понятно, зачем делить клок на внешнем устройстве, если есть PLL. Или почему бы не сгенерировать 50МГц со 100МГц получаемых с внешнего делителя.

Это упрощенное обяснение проекта. Внешная микросчема не всегда этот сигнал выдаёт. Но когда работает - 100MHz там есть.

Да, передача данных там есть от обеих доменов. Потому мне и надо описать их корректно.

Задержка там фиксированна, окола 3-5nS.

Спасибо за идею о сдвиг. Может быть поможет.
Go to the top of the page
 
+Quote Post
des00
сообщение Jan 23 2010, 15:53
Сообщение #6


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата
Задержка там фиксированна, окола 3-5nS.

Она то фиксирована, но вам надо рассмотреть крайние варианты, что бы быть уверенным в работоспособности. А то на одной плате может работать, а на другой нет. Как тут быть не совсем понятно.

Цитата
Да, передача данных там есть от обеих доменов. Потому мне и надо описать их корректно.

я бы рассмотрел внимательно передачу данных и рассмотрел вариант использования фифо %)


--------------------
Go to the top of the page
 
+Quote Post
des333
сообщение Jan 23 2010, 16:56
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 129
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079



Цитата(des00 @ Jan 23 2010, 18:34) *
create_generated_clock не может использоваться без указания физического источника этого клока, т.е. в данном случае вариант отпадает.

Так ведь у автора MHz200 выходит с FPGA, почему он не подходит как физический источник?


--------------------
Go to the top of the page
 
+Quote Post
des00
сообщение Jan 23 2010, 17:40
Сообщение #8


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(des333 @ Jan 23 2010, 10:56) *
Так ведь у автора MHz200 выходит с FPGA, почему он не подходит как физический источник?

200 выходит, делится на внешнем устройстве и 100 заходит в плис. Вот эти 100 с помощью генерайтед клоков описать нельзя %)


--------------------
Go to the top of the page
 
+Quote Post
des333
сообщение Jan 23 2010, 18:49
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 129
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079



Цитата(des00 @ Jan 23 2010, 20:40) *
200 выходит, делится на внешнем устройстве и 100 заходит в плис. Вот эти 100 с помощью генерайтед клоков описать нельзя %)

Хм...


А так разве нельзя?

Код
module count(

input  clk50_i,
output clk50_o,
input  clk100_i,
output clk100_o
);


assign clk50_o = clk50_i;
assign clk100_o = clk100_i;


endmodule


Код
create_clock -period 20.000 -name clk50i [get_ports {clk50_i}]
create_generated_clock -name clk50o -source [get_ports {clk50_i}] -divide_by 1 -multiply_by 1 [get_ports {clk50_o}]

create_generated_clock -name clk100i -source [get_ports {clk50_o}] -divide_by 2 -multiply_by 1  [get_ports {clk100_i}]
create_generated_clock -name clk100o -source [get_ports {clk100_i}] -divide_by 1 -multiply_by 1 [get_ports {clk100_o}]


Квартус ругается:

Цитата
Warning: No paths exist between clock target "clk100_i" of clock "clk100i" and its clock source. Assuming zero source clock latency.


Смотрим справку:

Цитата
ACTION:Check the value of the -source option to specify a valid clock source in the combinational fan-in of the generated clock target. If the generated clock is assigned to an input port to model a feedback clock, then the -source should be an output port with a clock assigned to it. If no paths are expected between the clock source and clock target (e.g., to model a feedback clock), use the set_clock_latency SDC command to specify any source latency.


Добавляем в .sdc строку:


Код
set_clock_latency -source 3 [get_clocks {clk100i}]


И все в порядке.

Сообщение отредактировал des333 - Jan 23 2010, 18:49


--------------------
Go to the top of the page
 
+Quote Post
SM
сообщение Jan 23 2010, 19:11
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(des00 @ Jan 23 2010, 20:40) *
200 выходит, делится на внешнем устройстве и 100 заходит в плис. Вот эти 100 с помощью генерайтед клоков описать нельзя %)

Это Вас кто-то наобманул smile.gif

верилог:
Код
module time_test (input master_clk,
                  output out_clk,
                  input ret_clk,
                  input d,
                  output reg o
                  );

assign out_clk = !master_clk;

always @(posedge ret_clk)
o <= d;
endmodule


SDC:
Код
create_clock -name mclk -period "100 MHz" master_clk
create_generated_clock -name gclk -source master_clk -invert out_clk
create_generated_clock -name rclk -source out_clk -divide_by 2 -offset 4 ret_clk
set_clock_uncertainty -to [get_clocks rclk] 1


первый - описывает входной клок.
Второй - описывает генерейтед клок на выходном пине с учетом всех задержек.
Третий - описывает генерейтед клок, пришедший снаружи, сделанный из второго, деленный напополам и смещенный на 4 наны.
ну и uncertainty на +-1 нану, так как там ведь 3..5, а не 4.

А варнинг... Ну и что, что варнинг... Забить на него следует.
Warning: No paths exist between clock target "ret_clk" of clock "rclk" and its clock source. Assuming zero source clock latency.
И правильно говорит варнинг. Внутри путей нет, и считает latency за ноль, о чем на всякий пожарный и сообщает, мало ли, человек ошибся, случайно не ту ноду указал... Но мы-то знаем, что ту ноду, и что не ноль там, а 3..5, и это описали через -offset и через uncertainty. Можно и без оффсета, через дополнительный set_clock_latency. Ну и еще set_load не помешал бы, чтобы задать емкость нагрузки на выходной пин клока. Но я что-то не уверен в наличии такой команды в таймквесте
Go to the top of the page
 
+Quote Post
solidreg
сообщение Jan 23 2010, 19:38
Сообщение #11


Участник
*

Группа: Свой
Сообщений: 74
Регистрация: 24-10-05
Пользователь №: 10 056



Цитата(SM @ Jan 23 2010, 23:11) *
SDC:
Код
create_clock -name mclk -period "100 MHz" master_clk
create_generated_clock -name gclk -source master_clk -invert out_clk
create_generated_clock -name rclk -source out_clk -divide_by 2 -offset 4 ret_clk
set_clock_uncertainty -to [get_clocks rclk] 1


первый - описывает входной клок.
Второй - описывает генерейтед клок на выходном пине с учетом всех задержек.
Третий - описывает генерейтед клок, пришедший снаружи, сделанный из второго, деленный напополам и смещенный на 4 наны.
ну и uncertainty на +-1 нану, так как там ведь 3..5, а не 4.

А варнинг... Ну и что, что варнинг... Забить на него следует.
Warning: No paths exist between clock target "ret_clk" of clock "rclk" and its clock source. Assuming zero source clock latency.
И правильно говорит варнинг. Внутри путей нет, и считает latency за ноль, о чем на всякий пожарный и сообщает, мало ли, человек ошибся, случайно не ту ноду указал... Но мы-то знаем, что ту ноду, и что не ноль там, а 3..5, и это описали через -offset и через uncertainty. Можно и без оффсета, через дополнительный set_clock_latency. Ну и еще set_load не помешал бы, чтобы задать емкость нагрузки на выходной пин клока. Но я что-то не уверен в наличии такой команды в таймквесте


Wow!
Вот это решение! Очень спасибо.
А то так и было - на одной плате работает, а на другой нет.
Go to the top of the page
 
+Quote Post
des00
сообщение Jan 24 2010, 05:29
Сообщение #12


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(des333 @ Jan 23 2010, 12:49) *
А так разве нельзя?

Цитата(SM @ Jan 23 2010, 13:11) *
Это Вас кто-то наобманул smile.gif

теперь вижу что можно, как всегда невнимательно читал даташит %)

UPD 2 SM и des333, надеюсь вы не возражаете если этот пример я сохраню для всех %)

Кстати по тому примеру что там выложен. Если сделать посмотреть анализ времянок и пути клока в 200МГц

Цитата
report_path -from [get_ports {iclk200MHz}] -to [get_ports {oclk200MHz}] -npaths 1
Info: Path #1: Delay is 4.770


то возникает вопрос, откуда кварутс насчитал 6нс между клоками, тогда как должно быть 7.7...9.7 нс ?
Прикрепленное изображение

UPD2 Поковырялся. 6 нс это период 100МГц 10нс минус смещение 4 нс. uncertanty учитывается при расчете Data Required и для клоков не рассматривается. А где учтена задержка по сигналу 200МГц... Странно.

UPD3.
Сделал так
Код
lcell lcell1 (iclk200MHz, oclk200MHz);

задержка выросла
Цитата
Info: Path #1: Delay is 6.240

но анализ того самого пути изменился на 0.03нс и то за счет того что Clock Delay по clk50MHz выросла, ИМХО это подтверждение того, что задержка clk200MHz не учитывается %)


--------------------
Go to the top of the page
 
+Quote Post
des333
сообщение Jan 24 2010, 07:22
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 129
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079



Если добавить строчку:
Код
set_clock_latency -source 0 [get_clocks {clk100MHz}]


то задержка lcell начнет учитываться.


--------------------
Go to the top of the page
 
+Quote Post
des00
сообщение Jan 24 2010, 07:35
Сообщение #14


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(des333 @ Jan 24 2010, 01:22) *
Если добавить строчку:
Код
set_clock_latency -source 0 [get_clocks {clk100MHz}]


то задержка lcell начнет учитываться.

Точно, занятно. Значит таймквест, утвержая
Цитата
Warning: No paths exist between clock target "iclk100MHz" of clock "clk100MHz" and its clock source. Assuming zero source clock latency.
нагло врет в текстовой форме %)


--------------------
Go to the top of the page
 
+Quote Post
des333
сообщение Jan 24 2010, 07:41
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 129
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079



Цитата(des00 @ Jan 24 2010, 10:35) *
Точно, занятно. Значит таймквест, утвержая
нагло врет в текстовой форме %)

smile.gif

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


--------------------
Go to the top of the page
 
+Quote Post

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

 


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


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