Введение

В прошлой статье я попытался с генерировать тактирующий сигнал в ПЛИС на разных примитивах. Из всех рассмотренных вариантов генерации сигнала, самым адекватным получился  клок с генерированный на  блоках LUT.  

Цель. В этот раз я хочу сгенерировать клок не на одном примитиве, а на цепочке примитивов. Допустим возьмем один инвертирующий LUT и некоторое количество LUT-повторителей для создания задержки сигнала. Так же хочется посмотреть как будет меняться частота сигнала в зависимости от температуры кристалла.

Исходные данные

В свое время приобрел с Китая плату EBAZ4205, с ПЛИС ZYNQ7010.

Как оказалось, некоторая часть компонентов была выпаяна(или не впаяна): диод по питанию, тактирующий кварц для ПЛИСовой части, пины подключения программатора и UART, слот под SD-карту.  Изначально я планировал использовать встроенный XADC для определения температуры кристалла, но по закону подлости он так же оказался не подключенным. На рисунке я отметил пины которые требуются для работы встроенного XADC. Пины по питанию J9 и J10 замкнуты сами на себя через конденсатор, а пины VREF вовсе не подключены.

Таким образом температуру померить внутренним XADC не получится. А это значит что набор для эксперимента дополняется мультиметром с термопарой, струбциной и парой проводов).

Эксперимент

Первая часть. С прошлого раза я понял, что замкнуть на себя цепочку лутов просто так не получится, придется писать различные ограничения, поэтому было решено пустить эту цепочку через внешние пины ПЛИС. Для того чтобы оценить влияние внешнего проводника(да и просто ради эксперимента), была набросана такая схема:

Сигнал CLK выдает 100 МГц и тактирует свой счетчик. Пины in_pin, out_pin снаружи замкнуты сами на себя  проводником, а внутри соединены через инверсию. Длину этого проводника буду менять. И так, вот результаты этого этапа:

 73.118 МГц

14 см

55.914 МГц

49 см

41.840 МГц (прямой  провод)

92 см

51.417 МГц (катушка  с сердечником)

38.710 МГц (катушка  без сердечника)

37.830 МГц

170 см

Первое что меня удивило в данном этапе, что сердечник увеличил частоту схемы, хотя я ожидал что ситуация будет обратной, все таки индуктивность увеличилась. Вот как это выглядело:

 Синий провод и есть проводник длиной 14 сантиметров, его я заменял на другие провода различной длины.
Синий провод и есть проводник длиной 14 сантиметров, его я заменял на другие провода различной длины.

Вторая часть. Во второй части я хочу посмотреть как меняется частота в зависимости от количество лутов, т.е. в этом эксперименте инверсию заменим на цепочку лутов в которой один из лутов инвертирующий. Структурная схема немного изменилась но не сильно, я добавил в проект клок визард чтобы управлять опорной частотой, для более точного измерения.

А вот и результаты, при внешнем проводе 14 см( +1 лут - это тот самый инвертирующий лут):

4+1 лут. Базовая частота 100 МГц

68.230 МГц

100+1 лут. Базовая частота 100 МГц

13.881 МГц

1000 + 1 лут. Базовая частота 100 МГц

1.466 МГц

1000 + 1 лут. Базовая частота 10 МГц

Подключил провод 170 см. результат не сильно изменился

1.496 МГц

1.476 МГц(с проводом 170 см)

5000 + 1  лут. Базовая частота 10 МГц

0.274 МГц

11000 + 1лут Базовая частота 5 МГц.

Не получилось собрать. Ругался на длинную цепочку лутов.

8000 + 1 лут. Базовая частота 5 МГц.

Собралось, но чипскоп ни как не загружал данные из ПЛИС.

8000 + 1 лут.Базовая частота 10 МГц.

0.166 МГц

*Базовая частота эта та частота относительно которой я считал частоту, она же была частотой для ChipScope

Третья часть. И так, из проведенных предыдущих экспериментов, можно определиться с оптимальными параметра для третьего эксперимента, чтобы оценить зависимость частоты от температуры. Я возьму 8000 лутов и внешний провод 14 см. Доработав проект, получаю вот такую схему:

Блок gen_trig генерирует сигнал каждую секунду, так же сигнал trig потребуется в чипскопе для сбора статистики. Блок cnt_lut считает такты с генерированные цепочкой лутов, по сигналу rst(непонятно почему он считает его инверсным) сбрасывается счетчик. А вот как заполнен кристалл данным проектом. Желтым отмечены все 8000 лутов, маджентой отмечены блоки чипскопа. Так же отметил где находятся пины на внешний проводник.

А вот как выглядит собраный макет эксперимента:

На ПЛИС положил термопару, капнул термопасты, накрыл пленкой и прижал струбциной через несколько слоев картона. Картон нужен чтобы струбцина не стала радиатором. Кристалл максимум греется до 47 градусов при 17 минутах работы. Поэтому чипскоп настраиваю на захват 1024 окна по два отсчета, на каждый сигнал триггера, который предусмотрен в проекте. И так, результат эксперимента:

На графике видим изменение частоты каждую секунду. Частота меняется от 165217 Гц до 165589 Гц, при изменении температуры 25-46 градусов. В целом хотелось бы нагреть кристалл до 85 градусов.

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

Заключение

В статье продемонстрировал результат трех экспериментов, по которым можно сделать следующие выводы:

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

  2. Зависимость частоты от количества лутов  так же не линейна. Причем слишком уж сильно не линейна.

Тут пара графиков зависимостей частоты от количества лутов(ось Y - значение частоты).

Сырые данные последнего графика если кому надо:

5

68,23

6

52,33

21

32,285

41

24,326

56

19,663

71

15,657

86

16,056

96

13,277

101

13,881

121

10,499

141

10,104

161

6,443

181

7,268

201

6,331

301

4,484

401

3,315

501

2,791

601

2,49

701

2,042

801

1,753

901

1,629

1001

1,496

1401

1,029

1801

0,797

2201

0,655

2601

0,537

3. Зависимость частоты от температуры оценить трудно, так как не получается однозначно сопоставить значение частоты и температуре. Для этого нужен XADC.