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

 
 
 
Reply to this topicStart new topic
> Задание временных ограничений для АЦП MAX1186, Нюанс мультиплексированной шины
DENth
сообщение Sep 16 2013, 19:59
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 33
Регистрация: 10-10-12
Из: Санкт-Петербург
Пользователь №: 73 890



Приветствую всех!

Есть интересная задача - задать временные ограничения для проекта, работающего с АЦП MAX1186. Особенность АЦП в том, что шина данных у него мультиплексированная. Сам АЦП двухканальный, но шина одна.
Диаграмма его работы следующая:



Пользуясь статьями по Synopsys Design Constraint, сделал следующее:

Код
##ADC
#clock source to destination clock pin delay
set clkA_delay_max [expr 22.0*0.010]
set clkA_delay_min [expr 22.0*0.005]
#source to destination data pins delay
set bdA_delay_max [expr 22.0*0.010]
set bdA_delay_min [expr 22.0*0.005]
#ADC parameters
set Tco_max 8
set Tco_min 3

set usedTsu [expr $clkA_delay_max + $Tco_max + $bdA_delay_max]
set usedTh [expr $clkA_delay_min + $Tco_min + $bdA_delay_min]

set_input_delay -clock adcclk -max $usedTsu [get_ports {adc[*]}]
set_input_delay -clock adcclk -min $usedTh [get_ports {adc[*]}]


Данные с порта adc[*] поступают на регистры и в последующем обрабатываюся:
Код
adcclk=vcc;
adcclk.clk=80mhz;

adc_a[9..0]=adc[9..0];
adc_a[9..0].clk=adcclk;
adc_b[9..0]=adc[9..0];
adc_b[9..0].clk=!adcclk;


Ограничения, заданные таким образом выполняются, но работает проект не так, как нужно. В регистре adc_a данные канала "B" и наоборот.
Я так понимаю, что заданные ограничения распространяются только на восходящий фронт частоты adcclk. А как задать нисходящий?

Уже подумал, что нужно регистры тактировать частотой 80 Мгц с соответствующим сигналом разрешения записи то в один, то в другой. Но физически частота тактирования АЦП 40 МГц - сигнал adcclk. И окончательно запутался.

Подскажите как быть!

И, кстати, из pdf-ки на АЦП не ясно как правильно задать Tco_min, так как в таблице присутствует только max.
Go to the top of the page
 
+Quote Post
DENth
сообщение Sep 18 2013, 07:23
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 33
Регистрация: 10-10-12
Из: Санкт-Петербург
Пользователь №: 73 890



Хм... Ни одного ответа.
Очень надеялся, что мне смогут помочь.

Может быть я спросил какую-то глупость?
Ответьте мне хотя бы односложно - "Глупость. На такое никто не ответит" или "Учи мат. часть" чтобы я понял, что перемудрил и всё очевидно.
Go to the top of the page
 
+Quote Post
alexadmin
сообщение Sep 18 2013, 07:29
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 572
Регистрация: 17-11-05
Из: СПб, Россия
Пользователь №: 10 965



Интерфейс с АЦП уже много раз обсуждался, достаточно поискать. Если кратко, то для красоты констрэйнов нужно воспользоваться еще -clock_fall -add_delay.
А для того, чтобы работало - поменять данные по входу
Go to the top of the page
 
+Quote Post
DENth
сообщение Sep 18 2013, 07:42
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 33
Регистрация: 10-10-12
Из: Санкт-Петербург
Пользователь №: 73 890



Спасибо за ответ.
Искал, но не нашел. Попробую поискать еще.

А что Вы имеете в виду под "поменять данные по входу"? Так?:

Код
adc_a[9..0]=adc[9..0];
adc_a[9..0].clk=!adcclk;
adc_b[9..0]=adc[9..0];
adc_b[9..0].clk=adcclk;


Рабоать-то оно действительно работает. Просто загадка, что идет в разрез с pdf-кой на АЦП. И понятно, что вызвано задержкой на линиях данных. Но в таком случае как получить уверенность, что проект будет работать во всем диапазоне температур и изменениях в других частях проекта? Если временной анализатор не выдает ошибок - это ведь не значит, что все верно задано.

Вот в правильном задании и был вопрос.
Go to the top of the page
 
+Quote Post
DENth
сообщение Sep 18 2013, 09:48
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 33
Регистрация: 10-10-12
Из: Санкт-Петербург
Пользователь №: 73 890



Всё. Разобрался. Спасибо alexadmin за наводку.
Для всех, кому интересно, нужно было действительно сделать следующее:

Код
##ADC
#clock source to destination clock pin delay
set clkA_delay_max [expr 22.0*0.010]
set clkA_delay_min [expr 22.0*0.005]
#source to destination data pins delay
set bdA_delay_max [expr 22.0*0.010]
set bdA_delay_min [expr 22.0*0.005]
#ADC parameters
set Tco_max 8
set Tco_min 3

set usedTsu [expr $clkA_delay_max + $Tco_max + $bdA_delay_max]
set usedTh [expr $clkA_delay_min + $Tco_min + $bdA_delay_min]

set_input_delay -clock adcclk -max $usedTsu [get_ports {adc[*]}]
set_input_delay -clock adcclk -min $usedTh [get_ports {adc[*]}]

set_input_delay -clock adcclk -clock_fall -add_delay -max $usedTsu [get_ports {adc[*]}]
set_input_delay -clock adcclk -clock_fall -add_delay -min $usedTh [get_ports {adc[*]}]


И в коде:

Код
adc_a[9..0]=adc[9..0];
adc_a[9..0].clk=!adcclk;
adc_b[9..0]=adc[9..0];
adc_b[9..0].clk=adcclk;


Необходимость этого явно видна, если посмостреть отчет по пути от adc к adc_a во временном анализаторе.
Go to the top of the page
 
+Quote Post
Timmy
сообщение Sep 18 2013, 15:12
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Цитата(DENth @ Sep 18 2013, 13:48) *
set usedTsu [expr $clkA_delay_max + $Tco_max + $bdA_delay_max]
set usedTh [expr $clkA_delay_min + $Tco_min + $bdA_delay_min]

Мне почему-то кажется, что здесь надо было:
Код
set usedTsu [expr -$clkA_delay_min + $Tco_max + $bdA_delay_max]
set usedTh [expr -$clkA_delay_max + $Tco_min + $bdA_delay_min]

Go to the top of the page
 
+Quote Post
DENth
сообщение Sep 18 2013, 17:08
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 33
Регистрация: 10-10-12
Из: Санкт-Петербург
Пользователь №: 73 890



Цитата(Timmy @ Sep 18 2013, 19:12) *
Мне почему-то кажется, что здесь надо было:
Код
set usedTsu [expr -$clkA_delay_min + $Tco_max + $bdA_delay_max]
set usedTh [expr -$clkA_delay_max + $Tco_min + $bdA_delay_min]


Вы имеете ввиду что данную задержку нужно задавать отрицательной? Или синтаксис команды? Не могли бы Вы пояснить свою точку зрения?
Go to the top of the page
 
+Quote Post
Timmy
сообщение Sep 19 2013, 06:00
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Цитата(DENth @ Sep 18 2013, 21:08) *
Вы имеете ввиду что данную задержку нужно задавать отрицательной? Или синтаксис команды? Не могли бы Вы пояснить свою точку зрения?

Задержка данных относительно клока не обязательно будет отрицательной, но задержку клока нужно вычитать, причём для максимальной задержки данных вычитать минимальную задержку клока. Синтаксис в порядке. И ещё, кстати, рекомендуется использовать виртуальный клок, хотя это не критично.
Go to the top of the page
 
+Quote Post

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

 


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


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