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

 
 
> Корректный сброс при изменении задающей частоты
Fourier
сообщение Mar 7 2016, 21:22
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 13-02-13
Из: Рыбинск
Пользователь №: 75 606



Здравствуйте!

Имеется плата с АЦП, ЦАПом и Spartan-6 на борту. Тактирование АЦП и ЦАП осуществляется синтезатором через дестрибьютер тактовых сигналов, частота дискретизации 125 МГц.
Дифф. тактовый сигнал от АЦП заводится в глобальную шину синхронизации и используется для синхронизации модулей ЦОС. Сигнал сброса на эти модули естесственно выдается с задержкой после включения.

Проводили испытания на климат и на морозе плата стала сбоить. Я сделал тестовую прошивку с возможность сброса части логики и оказалось, что сбоит логика тактируемая этим сигналом при прогреве платы во время работы.

Начал экспериментировать - замыкать входы синхронизации и действительно при кратковременном пропадании тактового сигнала логика перестает работать навечно.

Предполагаю, что при прогреве платы происходит кратковременное изменение фазы или частоты схемы тактирования. Однако, повторный сброс части логики ПЛИС решает все проблемы.

Подал клок АЦП на DCM и стал мониторить его сигналы LOCKED, STATUS, CLK_VALID, CLK_STOPPED. Сделал конечный автомат, отслеживающий их и формирующий сброс.
И снова стал замыкать дифф. пару. В 90 процентах случаев конечный автомат вырабатывает корректный сигнал сброса и работа логики восстанавливается.
Однако, иногда при кратковременном пропадании клока все сигналы DCM говорят о том, что все хорошо, а логика моя не работает, поскольку я ее не сбросил. (((( Ну об этом и UG382 говорит, как я понял, типа не рассчитывайте особа на сигналы состояний DCM. Вырабатывать сброс периодически не хочется.

Вопрос в следующем: как можно железно отследить кратковременные сбои тактирующего сигнал и сформировать сигнал сброса для логики тактируемой им?
Конечно, можно и с задающей схемой еще поковыряться, но мне не нравится такой расклад: клок пропал - все перестало работать на вечно, даже после его восстановления(((((

Заранее спасибо


Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Lmx2315
сообщение Mar 8 2016, 12:56
Сообщение #2


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



..странно что при кратковременном пропадании клоков у вас схема виснет, я так понял там просто жёсткое DSP какое-то, оно может виснуть только если клоков нет совсем.


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
Fourier
сообщение Mar 8 2016, 13:06
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 13-02-13
Из: Рыбинск
Пользователь №: 75 606



Цитата(Lmx2315 @ Mar 8 2016, 15:56) *
..странно что при кратковременном пропадании клоков у вас схема виснет, я так понял там просто жёсткое DSP какое-то, оно может виснуть только если клоков нет совсем.


Угу, мне тоже странно.

Виснет кусок схемы, который вычисляет корреляцию с кодом Баркера.

Код
module bin_correlator #
(
   parameter SPS        = 40,
   parameter CODE       = 11'b11100010010,
   parameter CODE_WIDTH = 11,
   parameter TRESHOLD   = SPS*CODE_WIDTH - 2*CODE_WIDTH
)
(
    input in_clk,
    input in_data,
    input in_reset,
    input in_enable,
    output reg out_threshold,
    output reg out_peak,
    output reg [CODE_WIDTH - 1 : 0] out_data
);

// Ширина регистра с задержанными данными
localparam D_WIDTH   = SPS*(CODE_WIDTH + 1);
localparam SUM_WIDTH = 8;
localparam MUL_WIDTH = 10;

// Буфер для сохранения задержанных двоичных данных
reg [D_WIDTH - 1 : 0] delayed_buf;

// Буфер с суммами на отсчет
reg signed [SUM_WIDTH - 1 : 0] sum_buf [CODE_WIDTH-1 : 0];

// Буфер с корреляционными произведениями
reg signed [SUM_WIDTH - 1 : 0] corr_mul_buf [CODE_WIDTH-1 : 0];

// Буфер, хранящий значения вычисленных ВКФ
reg signed [MUL_WIDTH - 1 : 0] sum_mul;

// Буфер с добавками к сумме
reg signed [2 : 0] add_buf [CODE_WIDTH-1 : 0];

// Буфер с кодом свертки
reg [CODE_WIDTH-1 : 0] code = CODE;

reg _is_old_threshold;
reg signed [MUL_WIDTH - 1 : 0] _old_corr_func;  //
reg signed [MUL_WIDTH - 1 : 0] _corr_func;      //
wire _is_threshold = (_corr_func >= TRESHOLD);

integer i;

initial
begin
   reset_task();
end

    
always @(posedge in_clk)
begin
   if(in_reset)
   begin
      reset_task();
   end
   else
   begin
      process_task();
   end
end

// Процесс обработки данных
task process_task;
   begin
      // Сдвиг данных в регистр
     delayed_buf <= {delayed_buf[D_WIDTH - 2 : 0], in_data};
      
     sum_mul = 0;
    
     // Вычисление сумм на символ
     for(i = 0; i < CODE_WIDTH; i = i + 1)
     begin
        
         // Вычисление добавки к символу
         add_buf[i] <= $signed({delayed_buf[i*SPS], 1'b1}) - $signed({delayed_buf[(i + 1)*SPS], 1'b1});
        
         // Вычисление суммы на символ
         sum_buf[i] <= sum_buf[i] + add_buf[i];
        
         // Вычисление значений символа
         out_data[i] <= $signed(sum_buf[i]) < $signed(0);
        
         // Вычисление корреляционных произведений
         corr_mul_buf[i] <= code[i] ? -sum_buf[i] : sum_buf[i];
        
         // Выисление суммы корреляционных произведений
         sum_mul    = sum_mul + corr_mul_buf[i];
     end
      
      //
      _corr_func     <= sum_mul;
      
      //
      out_threshold <= (sum_mul >= TRESHOLD);
      
      // Save old Function State
      _old_corr_func     <= _corr_func;
      
      // Save old threshold state
      _is_old_threshold <= _is_threshold;
      
      // Correlation Peak
     out_peak   <= (_is_old_threshold) & (_corr_func < _old_corr_func);

end
endtask

// Процесс сброса
task reset_task;
   begin
      code <= CODE;
      for(i = 0; i < SPS*CODE_WIDTH + 1; i = i + 1)
      begin
         delayed_buf[i] <= 1'b0;
      end;
      for(i = 0; i < CODE_WIDTH; i = i + 1)
      begin
         sum_buf[i] <= SPS - 1;
         add_buf[i] <= 0;
         out_data   <= 0;
      end
   end
endtask



endmodule


Сообщение отредактировал Fourier - Mar 8 2016, 13:14
Go to the top of the page
 
+Quote Post



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

 


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


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