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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Управляемый делитель тактовой частоты(клоков)
Maverick
сообщение Jan 15 2016, 05:11
Сообщение #16


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(shamrel @ Jan 15 2016, 06:48) *
По поводу DDR триггера. Я не знаю как это реализовать. С ПЛИС работаю недавно.

Реализовывать не надо, нужно использовать из схемотехнической библиотекив взять готовый DDR триггер


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
AJIEKCEu
сообщение Jan 16 2016, 02:37
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 314
Регистрация: 7-12-05
Пользователь №: 11 917



Мне кажется, без минимальной схемы - тут никуда. Я имею ввиду функциональной.
Если у вас частота на АЦП неизменна(50 МГц) - какой клок вам нужен на CIC? По идее данные заходят на CIC с частотой работы (дискретизации) АЦП. А вот выходят из CIC - на меньшей частоте. Но обычно это реализуется не другой частотой, а значимостью сигнала. То есть на входе - каждый такт значимый, а на выходе есть некий отдельный признак значимых данных. Который возникает раз в 1/2/4/8 и т.д. тактов.
Go to the top of the page
 
+Quote Post
shamrel
сообщение Jan 16 2016, 04:07
Сообщение #18


Частый гость
**

Группа: Свой
Сообщений: 132
Регистрация: 10-10-07
Из: Новосибирск
Пользователь №: 31 229



Цитата(AJIEKCEu @ Jan 16 2016, 05:37) *
Мне кажется, без минимальной схемы - тут никуда. Я имею ввиду функциональной.
Если у вас частота на АЦП неизменна(50 МГц) - какой клок вам нужен на CIC? По идее данные заходят на CIC с частотой работы (дискретизации) АЦП. А вот выходят из CIC - на меньшей частоте. Но обычно это реализуется не другой частотой, а значимостью сигнала. То есть на входе - каждый такт значимый, а на выходе есть некий отдельный признак значимых данных. Который возникает раз в 1/2/4/8 и т.д. тактов.

Все верно. Все в соответствии с вашей идеей. sm.gif Только термин "значимость" слышу первый раз.
CIC состоит из двух частей, первая часть работает на частоте DAC (50 МГц) . Вторая часть должна работать на пониженной частоте. Разработчик, который вел проект до меня, сделал это через тактирование. Клоки для второй части CIC брались от делителя (на счетчике) от клоков DAC. Проект был реализован в редакторе Schematic и без всяких sdc. Проект успешно (!) прошел тестирования и пошел в серию. Пока не понадобилось внести изменение в функционал и перевести на другую элементную базу. Небольшие изменения вносимые в произвольную часть схемы нарушали работоспособность. Когда добавил .sdc и прогнал в TimeQuest получил сплошные слаки. Исходная прошивка перестала быть работоспособной. Было принято решение переписать на Verilog.
Что еще добавить? Пожалуй, то что я с ПЛИС до этого серьезно не работал.
Возвращаясь к теме. Dmitriyspb предложил идею, которую сейчас прорабатываю. Первая и вторая часть тактируется одной, системной частотой, а понижение частоты происходит посредствам "пропускания" тактов. Типа:

always @(posedge clk)
....
if(sample)...

где clk -- клоки высокочастотные (200МГц), а sample -- разрешение.


--------------------
Go to the top of the page
 
+Quote Post
des00
сообщение Jan 16 2016, 06:55
Сообщение #19


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

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



Цитата(shamrel @ Jan 16 2016, 11:07) *
CIC состоит из двух частей, первая часть работает на частоте DAC (50 МГц) . Вторая часть должна работать на пониженной частоте. Разработчик, который вел проект до меня, сделал это через тактирование. Клоки для

Код
  always_ff @(posedge iclk) begin
    cnt <= cnt + 1'b1;
    //
    cic_comb__ival <= get_decim_factor(ibw, cnt);
    cic_comb__idat <= cic_acc__odat;
  end

  //------------------------------------------------------------------------------------------------------
  //
  //------------------------------------------------------------------------------------------------------

  generate
    genvar i;
    for (i = 0; i < 2; i++) begin : cic_array_inst
      cic_acc_array
      #(
        .pDAT_W ( cDAT_W      ) ,
        .pNUM   ( cRX_CIC_NUM )
      )
      cic_acc
      (
        .iclk    ( iclk    ) ,
        .ireset  ( ireset  ) ,
        .iclkena ( iclkena ) ,
        //
        .ival    ( 1'b1              ) ,
        .idat    ( cic_acc__idat [i] ) ,
        .oval    (                   ) ,
        .odat    ( cic_acc__odat [i] )
      );

      cic_comb_array
      #(
        .pDAT_W ( cDAT_W      ) ,
        .pNUM   ( cRX_CIC_NUM )
      )
      cic_comb
      (
        .iclk    ( iclk    ) ,
        .ireset  ( ireset  ) ,
        .iclkena ( iclkena ) ,
        //
        .ival    ( cic_comb__ival     ) ,
        .idat    ( cic_comb__idat [i] ) ,
        .oval    ( cic_comb__oval [i] ) ,
        .odat    ( cic_comb__odat [i] )
      );
    end
  endgenerate
..................
  //
  // decimate 1/2/4/8/16/32
  function logic get_decim_factor(input bit [3 : 0] bw, input bit[4 : 0] cnt);
    get_decim_factor = 1'b1;
    case (bw)
      0       : get_decim_factor = 1'b1;
      1       : get_decim_factor = &cnt[0 : 0];
      2       : get_decim_factor = &cnt[1 : 0];
      3       : get_decim_factor = &cnt[2 : 0];
      4       : get_decim_factor = &cnt[3 : 0];
      5       : get_decim_factor = &cnt[4 : 0];
      default : get_decim_factor = 1'b1;
    endcase
  endfunction



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

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

 


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


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