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

 
 
> Задание временных ограничений для АЦП 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
 
Start new topic
Ответов
DENth
сообщение Sep 18 2013, 09:48
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 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
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 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
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 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



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

 


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


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