Корзина

0 Товары - 0.00 RUB
В корзину

Курсы Валют

Курсы Валют  Дата ЦБ
Нал.USD
22.09 66.25
Нал.EUR
22.09 78.08
Нал.CNY
22.09 96.86

Оплата

visa

Реклама

Статьи

Блог

Логический анализатор SignalTap на примере счетчика Грея.

Когда вы отлаживаете МК, то у вас на виду текущее значение регистров и место где сейчас находится выполнение программы, можно в режиме реального времени изменять регистры и выполнять программу по шагам. В ПЛИС никаких регистров нет, а тем более программы, как же там происходит отладка? В данной статье мы покажем, как пользоваться встроенным логическим анализатором Quartus SignalTap. в качестве подопытной схемы выступит счетчик в коде Грея. На самом деле SignalTap предоставляет огромные возможности по отладке проектов. По сути дела он позволяет заглянуть внутрь микросхемы и посмотреть на временные диаграммы интересующих нас сигналов.

Код Грея — двоичный код, в котором две «соседние» (в упорядоченном, т.е. лексикографическом, наборе) кодовые комбинации различаются только цифрой в одном двоичном разряде. Наиболее часто на практике применяется рефлексивный двоичный код Грея, хотя в общем случае существует бесконечное множество кодов Грея со значениями цифр в разрядах, взятых из различных алфавитов. В большинстве случаев, под термином «код Грея» понимают именно рефлексивный бинарный код Грея.

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

Реализация кода Грея на Verilog:

Verilog Code:
  1. module gray_cnt(
  2. input wire clk,
  3. input wire nreset,
  4. output wire [SIZE-1:0]q
  5. );
  6. parameter SIZE = 4;
  7.  
  8. integer i;
  9. reg [SIZE-1:0]gray_cnt;
  10. reg [SIZE-1:0]bin;
  11. reg [SIZE-1:0]next_gray_cnt;
  12.  
  13. always @*
  14. begin
  15. //convert gray-to-bin
  16. for (i=0; i<SIZE; i=i+1)
  17. bin[i] = ^(gray_cnt>>i);
  18. //increment binary
  19. bin=bin+1;
  20. //convert bin-to-gray
  21. next_gray_cnt = (bin>>1)^bin;
  22. end
  23.  
  24. always @(posedge clk or negedge nreset)
  25. if(~nreset)
  26. gray_cnt <= 0;
  27. else
  28. gray_cnt <= next_gray_cnt;
  29.  
  30. assign q=gray_cnt;
  31.  
  32. endmodule

Вид получившегося модуля верхнего уровня:

pic1

Далее запускаем анализатор через меню Altera Quartus II Tools -> SignalTap Logic Analyzer. Открывается совершенно новое окно с множеством настроек и опций.

pic2

В этом окне можно выделить три основных области:

  • Instance Manager- отвечает за параметры конкретной реализации SignalTap. Например можно узнать сколько анализатор занимает ресурсов FPGA.
  • JTAG Chain Configuration- тут настраиваются параметры подключения к реальному устройству.
  • Signal Configuration- предназначен для добавления сигналов, и настройки параметров захвата.

pic3

Рассмотрим Signal Configuration подробнее.

pic4

Можно отметить следующие настройки:

  • Clock- Выбор сигнала тактовой частоты для анализатора.
  • Sample depth- Количество выборок интересующих нас сигналов.
  • Trigger- Тип триггера для начала захвата анализируемых сигналов, количество триггеров и позиция триггера внутри захваченных сигналов.
  • Trigger In- если галочка отмечена, то анализатор начинает захват сигналов по срабатыванию триггера.
  • Выбор сигнала, который будет служить триггером.

Далее, нажав на поле Double-click to add nodes, необходимо добавить интересующие нас сигналы. Делается это с помощью вот такого диалогового окна Node Finder:

pic5

Искать сигналы можно по имени используя маску, например, gray_cnt*. В этом случае в списке будут , gray_cnt[x], next_gray_cnt[x] и прочие gray_cnt*.

Обратите внимание на Filter. Можно ограничить выбор только входными/выходными контактами, или только регистры после фиттера, или искать среди всех сигналов проекта Design Entry (all names). Может так оказаться, что вы не найдете интересующего вас сигнала в списке. Значит в процессе компиляции он оказался оптимизированным и выброшенным из проекта. В этом случае в проект можно поставить "виртуальный пин" и смотреть сигнал не нем.

В нашем проекте нас в первую очередь интересует выход нашего счетчика Грея. Поэтому добавляе сигналы gray_cnt[0]-gray_cnt[3]. В качестве такирующего сигнала логично взять сигнал clk, являющийся тактовым для счетчика. Количество выборок, ну пусть будет 128. По сути дела в микросхеме FPGA будет кроме нашего основного проекта работать еще проект анализатора. Он будет вкомпилирован и размещен в логических элементах той же ПЛИС, где-то рядом с основным проектом. Анализируемые сигналы будут складываться во внутренние блоки памяти и иногда выгружаться через JTAG программатор. Нужно понимать, что чем больше анализируемых сигналов мы выберем для захвата, тем больше нужно свободной памяти в ПЛИС. Иногда хочется посмотреть много сигналов сразу, но проект перестает помещаться в ПЛИС из-за SignalTap- ведь он так же занимает место в микросхеме. Тогда приходится либо уменьшать количество просматриваемых сигналов, либо сокращать количество захватываемых выборок.

После того, как все назначения сделаны нужно сохранить файл SignalTap пользуясь его меню. Автоматически вам будет предложено подключить SignalTap к проекту.

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

pic6

Через меню Assignments => Settings среды Quartus II мы попадаем в диалог настроек, где видим, что сейчас используется файл stp1.stp.

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

pic7

Запускаю анализатор SignalTap через меню Processing => Run Analysis или на клавиатуре F5.

pic8

Легко можно убедится что кодовые комбинации различаются только цифрой в одном двоичном разряде:


clk		q[0]		q[1]		q[2]		q[3]
0		0		0		0		0
1		1		0		0		0
2		1		1		0		0
3		0		1		0		0
4		0		1		1		0
5		1		1		1		0
6		1		0		1		0
7		0		0		1		0
8		0		0		1		1
9		1		0		1		1
10		1		1		1		1
11		0		1		1		1
12		0		1		0		1
13		1		1		0		1
14		1		0		0		1
15		0		0		0		1

Проект SignalTap для платы VE-EP4CE10E: signaltap_grey.zip

Перевод

Вход

Или классический вход:

Время

Ссылки

Карта сайта Визуальная электроника Полезные ссылки сайта Визуальная электроника


Пользуясь настоящим веб-сайтом, вы даете свое согласие на использование файлов cookies.
Подробнее. Ok