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

 
 
> Double Rate CMOS fast input, компенсация задержек.
rolin
сообщение Mar 1 2016, 14:28
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 36
Регистрация: 31-01-09
Пользователь №: 44 224



Приветствую. Впервые столкнулся с необходимостью приема данных от АЦП на частоте 122.8 (период 8.138 нс) да еще и Double Rate, то есть требования к задержкам возросли вдвое. Естественно - не работает как надо, данные идут с ошибками.
Реализация защелки и разделения данных простейшая:
Код
always @(negedge adc_clock)
   begin
           reg_adc1_data[0]  <= adc1_data[0];
            reg_adc1_data[2]  <= adc1_data[1];
            reg_adc1_data[4]  <= adc1_data[2];
            reg_adc1_data[6]  <= adc1_data[3];
            reg_adc1_data[8]  <= adc1_data[4];
            reg_adc1_data[10] <= adc1_data[5];
            reg_adc1_data[12] <= adc1_data[6];
            reg_adc1_data[14] <= adc1_data[7];
            //
            reg_adc2_data[0]  <= adc2_data[0];
            reg_adc2_data[2]  <= adc2_data[1];
            reg_adc2_data[4]  <= adc2_data[2];
            reg_adc2_data[6]  <= adc2_data[3];
            reg_adc2_data[8]  <= adc2_data[4];
            reg_adc2_data[10] <= adc2_data[5];
            reg_adc2_data[12] <= adc2_data[6];
            reg_adc2_data[14] <= adc2_data[7];
            adc1_of <= adc_OF;
   end
    always @(posedge adc_clock)
    begin
           reg_adc1_data[1]  <= adc1_data[0];
            reg_adc1_data[3]  <= adc1_data[1];
            reg_adc1_data[5]  <= adc1_data[2];
            reg_adc1_data[7]  <= adc1_data[3];
            reg_adc1_data[9]  <= adc1_data[4];
            reg_adc1_data[11] <= adc1_data[5];
            reg_adc1_data[13] <= adc1_data[6];
            reg_adc1_data[15] <= adc1_data[7];
            //
            reg_adc2_data[1]  <= adc2_data[0];
            reg_adc2_data[3]  <= adc2_data[1];
            reg_adc2_data[5]  <= adc2_data[2];
            reg_adc2_data[7]  <= adc2_data[3];
            reg_adc2_data[9]  <= adc2_data[4];
            reg_adc2_data[11] <= adc2_data[5];
            reg_adc2_data[13] <= adc2_data[6];
            reg_adc2_data[15] <= adc2_data[7];
            adc2_of <= adc_OF;
    end


Кое-как отфазировал клок из АЦП, работает но с ошибками. TimeQuest показывает сильную разницу между заржками к двум буферам. Проблема в том, что вход один, а регистров два. Один квартус сделал как Fast Input а второй где придется.


Один из входных пинов не может использовать FastInput и регистры используются одинаковые, в результате разница в задержках мизерная.
Я думаю, что если как-то запретить квартусу использовать FastInput, то можно получить неравномерность в пределах 1 нс, чего будет достаточно.
Я в TimeQuest только первые шаги делаю и не совсем понятно,
как задержать входной клок на 5 нс, чтобы все эти данные вовремя под фронты попадали
а еще вероятно нужно будет менять задержки для каждой линии из-за неоптимальной разводки на плате. Не знаю, как это и возможно ли вообще.
Прошу помощи.
И еще, нет ли какой готовой реализации подобного интерфейса в IP, может это решит все проблемы ?
Go to the top of the page
 
+Quote Post



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

 


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


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