Научная статья на тему 'ИЗУЧЕНИЕ ОСНОВ ЦИФРОВОЙ ОБРАБОТКИ СИГНАЛОВ С ПОМОЩЬЮ УЧЕБНОГО ЛАБОРАТОРНОГО СТЕНДА LESO2.1'

ИЗУЧЕНИЕ ОСНОВ ЦИФРОВОЙ ОБРАБОТКИ СИГНАЛОВ С ПОМОЩЬЮ УЧЕБНОГО ЛАБОРАТОРНОГО СТЕНДА LESO2.1 Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
23
6
i Надоели баннеры? Вы всегда можете отключить рекламу.

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Строгонов Андрей, Быстрицкий Алексей

В статье [1] рассмотрено проектирование умножителя целых положительных чисел, представленных в прямом коде размерностью 44, методом правого сдвига и сложения (MAC-блок), а в работе [2] проектирование умножителя целых чисел со знаком, представленных в дополнительном коде. В обоих случаях использовались приемы умножения, изложенные в [3], управляющие автоматы являлись оригинальными и были разработаны с помощью языка VHDL. На базе этого умножителя спроектирован КИХ-фильтр на четыре отвода [4].

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «ИЗУЧЕНИЕ ОСНОВ ЦИФРОВОЙ ОБРАБОТКИ СИГНАЛОВ С ПОМОЩЬЮ УЧЕБНОГО ЛАБОРАТОРНОГО СТЕНДА LESO2.1»

изучение основ цифровой обработки сигналов

с помощью учебного лабораторного стенда LESO2.1

Андрей Строгонов, д. т. н.

andreistrogonov@mail.ru

Алексей быстрицкий,

к. т. н.

bystritsky@bk.ru

в статье [1] рассмотрено проектирование умножителя целых положительных чисел, представленных в прямом коде размерностью 4x4, методом правого сдвига и сложения (MAC-блок), а в работе [2] проектирование умножителя целых чисел со знаком, представленных в дополнительном коде. в обоих случаях использовались приемы умножения, изложенные в [3], управляющие автоматы являлись оригинальными и были разработаны с помощью языка VHDL. на базе этого умножителя спроектирован кМХ-фильтр на четыре отвода [4].

Рассмотрим проектирование цифрового автомата более простым способом — методом умножения в столбик. Управляющий автомат умножителя разработаем посредством редактора состояний САПР Quartus II (State Machine Viewer). Далее реализуем умножитель размерностью 4x4 в базисе ПЛИС типа ППВМ серии Cyclone EP1C3T144C8N фирмы Altera с помощью учебного лабораторного стенда LESO2.1 (Лаборатории электронных средств обучения, ЛЭСО

Of

multip1ier_demo

elk rea

AI3..0] B[3..0]

Inst

рис. 1. Верхний уровень иерархии умножителя размерностью 4x4

ГОУ ВПО «СибГУТИ») отечественной разработки [5]. Учебный лабораторный стенд предназначен для обучения основам проектирования цифровой техники на основе ПЛИС.

Поскольку Quartus II Web Edition version 13.0.1 сборка 232 не поддерживает ПЛИС серии Cyclone, необходимо перейти на более раннюю версию Quartus II Web Edition version 9.1.

За основу схемы умножителя P=B (множимое)хА (множитель) возьмем пример из [6]. На рис. 1 и 2 показаны верхний и нижний уровни иерархии проекта умножителя размерностью 4х4. Сигнал А (множитель) следует рассматривать как число, а сигнал B как константу (множимое). Умножитель настроен на умножение двух чисел 10х10. Умножитель состоит из двух однотипных регистров ShiftN, сдвигающих влево или вправо в зависимости от сигнала DIR, задающего направление сдвига (пример 1), детектора нуля AllZero, управляющего автомата avt на пять состояний (пример 2), 8-разрядного сумматора на мегафункции lpm_ add_sub, шинного мультиплексора на мегафункции lpm_mux и 8-разрядного регистра на мегафункции lpm_dff, выполняющего роль аккумулятора. Один из регистров ShiftN (DIR=0), на вход которого подается число A, работает как преобразователь параллельного кода в последова-

Í

L.

elk Sh rftN

CLK Q[7..0] CLR LD SH DIR D[3..0]

*res

ХИ

Inst2

lpm_add_subO

dataa{7;0]

| re8ult[7:0]

datab[7:0] i'D

inste

- Start Add -

- LSB Shift -

- Stop

Ipm dtTO

рис. 2. Нижний уровень иерархии умножителя размерностью 4x4

ПЛИС

компоненты i 87

Рис. 3. Тест цифрового автомата

LIBRARY ieee; USE ieee.std_logk_1164.all; entity ShiftN is port(CLK, CLR, LD, SH, DIR: in STD_LOGIC; D: in std_logic_vector(3 downto 0); Q: out std_logic_vector(7 downto 0)); end ShiftN;

architecture a of ShiftN is begin

process (CLR, CLK)

variable St: std_logic_vector(7 downto 0); subtype InB is natural range 3 downto 0; begin

if CLR = '1' then St := (others => '0'); Q <= St; elsif CLK'EVENT and CLK='1' then if LD = '1' then St:=(others=>'0'); St(InB) := D; Q <= St;

elsif SH = '1' then case DIR is

when '0' => St := '0' & St(St'LEFT downto 1); St := St(St'LEFT-1 downto 0) & '0'; end case;

Q <= St;

end if; end if; end process; end a;

Пример 1. Сдвиговый регистр на языке VHDL

LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY avt IS PORT ( res : IN STD_LOGIC; clk : IN STD_LOGIC; Start : IN STD_LOGIC; LSB : IN STD_LOGIC; Stop : IN STD_LOGIC; Done : OUT STD_LOGIC; Init : OUT STD_LOGIC; Add : OUT STD_LOGIC; Shift : OUT STD_LOGIC

);

END avt;

ARCHITECTURE BEHAVIOR OF avt IS TYPE type_fstate IS (Check_FS,Imt_FS,Adder_FS,shift_FS,End_mult); SIGNAL fstate : type_fstate; SIGNAL reg_fstate : type_fstate; BEGIN

Init <='1' when reg_fstate = Init_FS else '0'; Add <='1' when reg_fstate = Adder_FS else '0'; Shift <='1' when reg_fstate = shift_FS else '0'; Done <='1' when reg_fstate = End_mult else '0'; process (clk, res) begin if res = '1' then reg_fstate <= End_mult; elsif clk'event and clk = '1' then case reg_fstate is

when Init_FS => reg_fstate <= Check_FS; when Check_FS =>

if LSB = '1' then reg_fstate <= Adder_FS; elsif Stop ='0' then reg_fstate <= shift_FS; else reg_fstate <= End_mult; end if;

when Adder_FS => reg_fstate <= shift_FS;

when shift_FS => reg_fstate <= Check_FS;

when End_mult => if Start = '1' then reg_fstate <= Init_FS; end if;

end case;

end if;

end process;

END BEHAVIOR;

Пример 2. Код языка VHDL управляющего автомата

Рис. 4. Тестирование умножителя на примере умножения 10x10 (результат 100)

тельный, параллельный выход SRA[7.. .0] нужен лишь для детектирования нуля.

На рис. 3 продемонстрирован принцип работы управляющего автомата. Автомат принимает пять состояний с именами Check_FS, Init_FS, Adder_FS, shift_FS, End_mult. В каждом из состояний активен один из сигналов Init, Add, Shift и Done. Автомат разработан по классической схеме, с использованием одного оператора Process (однопроцессный шаблон) для описания памяти состояний и логики переходов.

Автомат инициализируется высоким уровнем сигнала Start, синхронизируемого синхросигналом clk, переводящим выход Init в активное состояние. При высоком уровне

сигнала Init происходит загрузка обоих сдвиговых регистров параллельным кодом. Если на вход LSB все время будет поступать логическая 1 (младший разряд SRA[0] 8-разрядного сигнала SRA[7..0]) с выхода сдвигового регистра ShiftN при DIR=0, то управляющий автомат будет вырабатывать не перекрывающиеся сигналы «сдвинуть» (Shift) и «сложить» (Add). Это возможно, например, при загрузке числа 15D (1111BIN). На рис. 4 показан пример умножения чисел 10x10. Результат 100. По окончании процесса умножения вырабатывается сигнал готовности Done.

Разработаем цифровой автомат с применением встроенного редактора состояний конечного автомата (рис. 5) и извлечем

Рис. 5. Граф-автомат: а) разработанный с помощью редактора состояний; б) синтезированный граф-автомат (меню Netlist Viewers/State Machine Viewer)

компоненты и технологии • № 5 '2014 www.kit-e.ru

Рис. 6. Тестирование умножителя на примере умножения 5x5 (результат 25)

Таблица. Общие сведения по числу задействованных ресурсов ПЛИС Cyclone EP1C3T144C8N

Общее число логических элементов (Logic Cells, LC) 47

Количество триггеров логических элементов (LC Registers) 41

Количество таблиц перекодировок (LUT-only LC) 6

Рабочая частота в наихудшем случае Fmax, МГц 275

Рис. 7. Схема умножителя с подключенными внешними выводами

- Generated by Quartus II Version 9.0 Build 132 02/25/2009 SJ Full Version Add <= '0';

- Created on Wed Mar 05 14:25:18 2014 Shift <= '0';

CASE fstate IS

LIBRARY ieee; WHEN Check_FS =>

USE ieee.std_logic_1164.all; IF ((NOT((LSB = '1')) AND (Stop = '1'))) THEN

reg_fstate <= End_mult;

ENTITY avt_flow IS ELSIF ((LSB = '1')) THEN

PORT ( reg_fstate <= Adder_FS;

reset : IN STD_LOGIC := '0'; ELSIF ((NOT((Stop = '1')) AND NOT((LSB = '1')))) THEN

clock : IN STD_LOGIC; reg_fstate <= shift_FS;

Start : IN STD_LOGIC := '0'; -- Inserting 'else' block to prevent latch inference

LSB : IN STD_LOGIC := '0'; ELSE

Stop : IN STD_LOGIC := '0'; reg_fstate <= Check_FS;

Done : OUT STD_LOGIC; END IF;

Init : OUT STD_LOGIC; WHEN Init_FS =>

Add : OUT STD_LOGIC; reg_fstate <= Check_FS;

Shift : OUT STD LOGIC Init <= '1';

); WHEN Adder_FS =>

END avt_flow; reg_fstate <= shift_FS;

Add <= '1';

ARCHITECTURE BEHAVIOR OF avt_flow IS WHEN shift_FS =>

TYPE type_fstate IS (Check_FS,Init_FSAdder_FS,shift_FS,End_mult); reg_fstate <= Check_FS;

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

SIGNAL fstate : type_fstate; Shift <= '1';

SIGNAL reg_fstate : type_fstate; WHEN End_mult =>

BEGIN IF ((Start = '1')) THEN

PROCESS (clock,reg_fstate) reg_fstate <= Init_FS;

BEGIN ELSIF (NOT((Start = '1'))) THEN

IF (clock='1' AND clock'event) THEN reg_fstate <= End_mult;

fstate <= reg_fstate; -- Inserting 'else' block to prevent latch inference

END IF; ELSE

END PROCESS; reg_fstate <= End_mult;

END IF;

PROCESS (fstate,reset,Start,LSB,Stop) Done <= '1';

BEGIN WHEN OTHERS =>

IF (reset='1') THEN Done <= 'X';

reg_fstate <= End_mult; Init <= 'X';

Done <= '0'; Add <= 'X';

Init <= '0'; Shift <= 'X';

Add <= '0'; report "Reach undefined state";

Shift <= '0'; END CASE;

ELSE END IF;

Done <= '0'; END PROCESS;

Init <= '0'; END BEHAVIOR;

Пример. 3. VHDL-код, извлеченный в автоматическом режиме из граф-автомата,

созданного с помощью редактора состояний в САПР Quaгtus II

код языка VHDL в автоматическом режиме. Используется двухпроцессный шаблон. Первый оператор Process описывает блок регистров (память состояний) для хранения состояний автомата. Второй оператор Process предназначен для описания логики переходов и логики формирования выхода (пример 3). Тестирование умножителя на примере умножения 5x5 показано на рис. 6. Общие сведения по числу задействованных ресурсов в проекте представлены в таблице.

Стенд подключается к персональному компьютеру через USB-порт. Для записи файла конфигурации в память ПЛИС через USB-порт персонального компьютера требуется преобразовать *.so/файл в формат с расширением *.rbf Загрузка конфигурационного файла в ПЛИС производится с помощью отдельной программы-загрузчика (l2/lash.exe) [5].

Входные и выходные контакты к внешним выводам ПЛИС подключены с помощью меню Assignments/Pins (рис. 7). Из-за того что стенд имеет 8 переключателей S1-S8, пришлось отказаться от загрузки чисел с внешних портов (4-разрядные сигналы A и B) и от сигнала Done, поскольку доступно всего лишь 8 светодиодов. Умножаемые числа предварительно сохраняются в константах (мегафукция LPM_constant). Далее необходимо следовать рис. 6 и 7. Светодиоды LED1-LED8 отображают результат умножения (8-разрядный сигнал Product[7..0]). В проекте принято, что LED8 (pin 121) — это младший значащий разряд.

Для подачи тактовых импульсов с помощью кнопки Bottom рекомендуется использовать блок Antitinkling. Данный блок предназначен для подавления дребезга контактов [5]. Из-за этого явления непосредственное подключение кнопки с механическим замыканием контактов к цифровой схеме не всегда допустимо. Суть дребезга заключается в многократном неконтролируемом замыкании и размыкании контактов в момент коммутации, в результате чего на цифровую схему подается множество импульсов вместо одного.

Частота тактового генератора в учебных стендах LESO2 равна 6 МГц, в стендах LESO2.1 и LESO2.3 — 50 МГц. Делитель частоты должен обеспечить интервал между импульсами больше, чем длительность дребезга, и меньше, чем длительность нажатия

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

Рис. 8. а) Подавитель дребезга с использованием суммирующего счетчика-делителя частоты; б) временные диаграммы его работы

ческим процессам с нормами 90 нм и ниже, рекомендуется использовать фильтры подавления дребезга контактов совместно со схемами фазовой автоподстройки частоты (ФАПЧ) [7]. В ПЛИС серии Artix-7 фирмы Xilinx это блоки управления синхронизацией Clock Management Tile (CMT), включающие комбинированные модули управления синхронизацией Mixed-Mode Clock Managers (MMCM). Например, в [7] показан проект

на ПЛИС XC7A100N со схемой подавления дребезга контактов. Сигнал с кварцевого генератора с частотой 100 МГц подключен к синтезатору тактовой частоты (через специальный входной буфер типа IBUFG), который обеспечивает формирование дочернего тактового сигнала с частотой 166 МГц. Далее сигнал с частотой 166 МГц поступает на делитель частоты с коэффициентом 131072, на выходе которого формируется сигнал

Рис. 10. Окно утилиты программирования ПЛИС

с частотой 1,27 кГц, являющийся сигналом разрешения тактирования фильтров (работают на частоте 166 МГц, как и весь проект в целом). Данный сигнал (CEO_1K27) устанавливается в единицу в течение одного такта частоты 166 МГц, после чего 131 071 такт находится в нуле. Таким образом, единичные однотактовые импульсы высокого уровня разрешают переключение внутренних счетчиков фильтров с частотой 1,27 кГц [7].

В нашем случае 19-разрядный счетчик обеспечивает коэффициент счета 524 287 и выходной сигнал cout с пониженной частотой 95,37 Гц (100 Гц — период 10 мс). Время дребезга кнопки составляет примерно 2 мс.

На рис. 9 показано тестирование умножителя на примере умножения 5x5. Тестирование осуществляется следующим образом. Согласно рис. 6 щелкаем переключателем S2 (pin 50), выполняющим роль асинхронного сигнала res. Переводим в верхнее положение переключатель S3 (pin 51) — сигнал start, далее нажимаем на кнопку Button (pin 37) один раз, происходит загрузка чисел в умножитель. Переводим переключатель S3 в нижнее положение. Щелкаем три (рис. 9а) и пять раз (рис. 9б) кнопкой Button для имитации подачи синхросигнала. Итоговый результат умножения — десятичное число 25, а процесс умножения осуществляется за 9 тактов синхрочастоты.

Запрограммировать ПЛИС возможно с помощью Altéra USB Blaster без предварительного преобразования *.5о/-файла в формат *. rbf (рис. 10). Программирование осуществляется непосредственно в САПР Quartus II (меню Tools/Programmer). В этом случае питание лабораторного стенда LESO2.1 реализуется через USB-кабель, а программирование выполняется через JTAG-интерфейс.

Выводы

Учебный лабораторный стенд LESO2.1 отечественной разработки содержит хоро-

ший функциональный набор для занятий по цифровой схемотехнике и может быть использован для изучения основ проектирования комбинационных и последовательностных устройств. ■

Литература

1. Строгонов А., Быстрицкий А. Проектирование умножителя методом правого сдвига и сложения с управляющим автоматом в базисе ПЛИС // Компоненты и технологии. 2013. № 12.

2. Строгонов А., Винокуров А., Джиоти А. Проектирование умножителя целых чисел со знаком методом правого сдвига и сложения в базисе ПЛИС // Компоненты и технологии. 2014. № 1.

3. Computer Arithmetic: Algorithms and Hardware Designs (Oxford U. Press, 2nd ed., 2010, ISBN 978-0-19-532848-6).

4. Строгонов А., Быстрицкий А., Джиоти А. Проектирование КИХ-фильтра на умножителе методом правого сдвига и сложения в базисе ПЛИС // Компоненты и технологии. 2014. № 1.

5. Учебный лабораторный стенд LESO2.1. Паспорт и Инструкция по эксплуатации. Новосибирск. 2009. www.labfor.ru

6. http://www.csit-sun.pub.ro/resources/asic/CH10.pdf

7. Борисенко Н. Модель узла управления динамическим 7-сегментным индикатором с подавлением дребезга контактов кнопок в объеме ПЛИС Xilinx Artix-7 для отладочной платы Digilent Nexys 4 // Компоненты и технологии. 2014. № 2.

i Надоели баннеры? Вы всегда можете отключить рекламу.