Перейти к содержанию
    

IODELAY на GoWin

Добрый день,

 

вычитал, что в GoWin

Quote

Each I/O of the GW1N series of FPGA products has an IODELAY cell. The longest delay it can provide is about 128 steps x 30ps = 3840ps.

но нигде не нашел примера использования. Мне хочется на 20 пинах выставить задержку выходного сигнала (около 300МГц) свою на каждый пин и изменять на лету (примерно каждые 20 микросекунд) эти задержки. Предполагаю, что я слишком губу раскатал и это невозможно, но вдруг?

 

Если таки возможно, пожалуйста, скажите какими средствами можно это реализовать на GoWin, а конкретно на GW1N-9?

 

Спасибо

 

ИИВ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

кто-нибудь с китайского может перевести: 

Quote

VALUE is the delay value of negedge dynamic adjustment, and it moves one delay step per pulse.

есть STDAP - enable для динамической подстройки,

есть SETN для направления подстойки в плюс или минус.

есть DF который показывает что доподстраивались до края.

и есть VALUE, по его фронту (отрицательному???) фаза на один шаг подстраивается?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

32 минуты назад, _pv сказал:

кто-нибудь с китайского может перевести: 

Посмотрите на исходник модели. По-моему глядя на него всё сразу понятно:

Скрытый текст

//Input IO logic
module IODELAY (DO, DF, DI, SDTAP, VALUE, SETN);

parameter C_STATIC_DLY = 0; //integer,0~127

input DI;
input  SDTAP;
input  SETN;
input  VALUE;
output DF;
output DO;

reg [6:0] delay_data;
//wire [127:0] delay_in;
reg pre_value;
wire delay_out;

always @(SDTAP or VALUE) begin
    if (!SDTAP) begin
        delay_data <= C_STATIC_DLY;
    end else begin
        if(pre_value == 1'b1 && VALUE == 1'b0) begin
  	        if (SDTAP) begin
   	            if (SETN && (delay_data != 7'd0))
      		        delay_data <= delay_data - 1;
   	            else if ((!SETN) && (delay_data != 7'd127))
      		        delay_data <= delay_data + 1;
  	        end
        end
    end
end

always @(VALUE) begin
    pre_value <= VALUE;
end

assign DF = (SETN && (delay_data == 7'd0)) || ((!SETN) && (delay_data == 7'd127));

assign #(0.025*delay_data) delay_out = DI;

assign DO = (delay_data == 0) ? DI : delay_out;

/*assign #0.025 delay_in[0] =  DI;
generate 
   genvar i;
    for(i=1;i<128;i=i+1) begin: gen_delay
      assign #0.025 delay_in[i] = delay_in[i-1];
    end
endgenerate

assign DO = (delay_data == 0) ? DI : delay_in[delay_data-1];*/

endmodule // IODELAY (input delay in IOB)

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 minutes ago, makc said:

Посмотрите на исходник модели. По-моему глядя на него всё сразу понятно:

Ой, здорово, спасибо!

 

А сразу вопросы вдогонку, скажите, пожалуйста,

 

1. где вы эту модель у китайцев нашли, возможно там такие же модели и на остальные примитивы, например, PLL, можно найти?

2. а можно ли как-то эту модель модифицировать и всунуть на каждый пин? Конкретно я хочу, чтобы 7-ми битная величина задержки была бы заслана в IODELAY целиком, а не тикая 127 раз вперед и назад.

 

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

44 minutes ago, makc said:

По-моему глядя на него всё сразу понятно

да, спасибо.

+1 к вопросу откуда исходник модели.

 

хотя и конструкции вида

always @(SDTAP or VALUE) begin
    if (!SDTAP) begin
...
    end else begin
        if (SDTAP) begin
...
        end
    end
end

немного настораживают

 

11 minutes ago, iiv said:

2. а можно ли как-то эту модель модифицировать и всунуть на каждый пин? Конкретно я хочу, чтобы 7-ми битная величина задержки была бы заслана в IODELAY целиком, а не тикая 127 раз вперед и назад.

это модель для симуляции,

assign #(0.025*delay_data) delay_out = DI

и её модифицировать можно сколько угодно, но там физически из iodelay блока наружу торчит только "STEP/DIR" для управления и поможет это не особо.

можно сбрасывать каждый раз не в 0, а в С_STATIC_DLY=64, и тогда тикать придётся в среднем в два раза меньше, ну либо самому отдельно запоминать сколько там натикало.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, _pv said:

самому отдельно запоминать сколько там натикало.

Спасибо! Да, пока я именно так и планировал, но как-то криво это.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 часов назад, iiv сказал:

1. где вы эту модель у китайцев нашли, возможно там такие же модели и на остальные примитивы, например, PLL, можно найти?

Это модели для симуляции из штатного комплекта поставки среды, лежат в Gowin_v1.9.8.06/IDE/simlib/gw1n/prim_sim.v и других файлах рядом с ним.

11 часов назад, iiv сказал:

2. а можно ли как-то эту модель модифицировать и всунуть на каждый пин? Конкретно я хочу, чтобы 7-ми битная величина задержки была бы заслана в IODELAY целиком, а не тикая 127 раз вперед и назад.

Можно, но только в следующей ревизии кристалла и за отдельные деньги. ;-) А пока только в порядке личных экспериментов.

PS: Странно, кстати, что они не зашифровали эти модели, как делают многие другие вендоры... Но так для нас даже лучше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо большое, makc !!!

3 hours ago, makc said:

PS: Странно, кстати, что они не зашифровали эти модели, как делают многие другие вендоры... Но так для нас даже лучше.

да, верно, я на альтере такое не видел (может конечно не находил) - по крайней мере сразу видно, что можно, а что - нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробую оживить тему. А есть простой способ получить на GW1 задержку больше, чем 128*30 пс, например, 6 нс, без PLL или DLL? Например, блок  DLLDLY - дает 256 элементов в линии задержки. А сколько таких блоков на кристалле, столько же, как и DLL? Или они синтезируются по мере надобности из стандартных ячеек? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...