BC/NW 2016 № 2 (29):11.1
РАЗРАБОТКА МОДУЛЯ РАСПОЗНАВАНИЯ СЛОВ ЯЗЫКА VHDL ДЛЯ ТРАНСЛЯТОРА С ЯЗЫКА VHDL НА ЯЗЫК SYSTEMC»
Кольцов А.А.
Целью работы является разработка и реализация алгоритма лексического анализа моделей цифровых устройств на языке VHDL.
Основой алгоритма лексического анализа является прочтение исходного текста построчно, определение в строке слов языка VHDL и определение категории в которую эти слова входят.
Алгоритм прикладной программы был реализован в среде разработки Borland Delphi 7.
Проект и структура описания объектов в VHDL.
Структура проекта
Проект в VHDL определяется как совокупность связанных проектных пакетов. Проектными пакетами (design unit) называются независимые (external) фрагменты описаний, которые можно независимо анализировать компилятором и помещать в рабочую библиотеку проекта (Work).
Проектными пакетами могут быть:
• объявление интерфейса объекта проекта (entity);
• объявление архитектуры (architecture);
• объявление конфигурации (configuration);
• объявление интерфейса пакета (package);
• объявление тела пакета (package body).
Можно выделить две категории модулей проекта: первичные и вторичные. К первичным относятся объявления пакета, объекта проекта, конфигурации, к вторичным — объявление архитектуры, тела пакета. Файл, в котором размещаются один или несколько модулей проекта, называется файлом проекта (design file).
Все проанализированные модули помещаются в библиотеку проекта (design library) и становятся библиотечными модулями (library unit). Существует два класса библиотек проекта: рабочие библиотеки и библиотеки ресурсов. Рабочая библиотека — это библиотека Work, с которой в данном сеансе работает пользователь и в которую помещается пакет, полученный в результате анализа пакета проекта. Библиотека ресурсов — это библиотека, содержащая библиотечные модули, используемые в анализируемом модуле проекта. В каждый момент времени пользователь работает с одной рабочей библиотекой и произвольным количеством библиотек ресурсов.
Описание объектов проекта
Полное описание модели объекта проекта состоит из следующих частей:
а) описание интерфейса объекта проекта (entity), включающее:
— Port (списки входных и выходных сигналов);
— Generic (настраиваемые параметры модели);
б) описание архитектуры объекта проекта (ARCHITECTURE), включающее:
— объявление переменных и дополнительных (внутренних) сигналов;
— операторную часть, представляющую собой описание объекта проекта на структурном или поведенческом уровне;
в) (только для структурной формы описания) описание конфигурации (configuration), задающей подключение библиотеки моделей элементов и выборку их в качестве компонентов структуры.
Интерфейс объектов проекта описывается при помощи ключевого слова entity.
В VHDL существуют два основных уровня описания архитектуры объектов — поведенческий и структурный
В данном курсовом проекте будет рассматриваться только содержимое файлов .vhd , являющихся моделями цифровых устройств.
Поскольку в данном курсовом проекте рассматривается только модуль распознавания слов анализатора кода, то код модели или псевдокод языка будет разбит на следующие лексические категории:
· Служебные слова языка VHDL;
· Типы данных;
· Структурные единицы кода (переменные, константы и функции);
· Комментарии
Разработка программы
Пользовательский интерфейс
Программы написана с помощью языка Pascal в среде разработки Borland Delphi 7 и представляет собой исполняемый файл Windows Forms, в котором реализованы диалог открытия файлов .vhd , лексический анализ открытого файла с выводом результата на экран, а так же возможность сохранить результат анализа в файле .txt посредством диалога сохранения файла. Каждая из перечисленных функций реализуется путем нажатия на соответсвующую кнопку.
Рис.1 . Внешний вид окна интерфейса программы.
Таблица 1 Элементы управления программы.
Имя элемента управления на экране |
Имя элемента управления в коде |
Назначение |
«Анализировать» |
Analyze |
Начало обработки файла, введенного в поле VHDLFile и вывод результата анализа в файл, введенный в поле ResultFIle |
По нажатию кнопки «Анализировать» проверяется существование файла, указаного в верхней текстовой форме. Путь к файлу загружается автоматически, но пользователь может изменить этот путь вручную.
В случае если файл не существует, то выдается сообщение об этом. В случае если файл существует, начинается процедура анализа и по завершении анализа выведено сообщение.
Анализ файла
В верхнем уровне алгоритма анализа файла происходит чтение файла по строкам и вызов процедуры анализа строки для каждой из считанных строк.
По достижению конца файла в результат анализа добавляется запись о завершении анализа файла с полным путем к файлу.
Рис. 2 Схема алгоритма анализа файла
Анализ строки
Рис. 3. Схема алгоритма обработки строки
Анализируемая строка считывается посимвольно и производит проверку символа на принадлежность его к списку символов окончания слова до тех пор, пока не произойдет одна из ситуаций:
1) Встретится символ окончания слова. В эти символы входят пунктуационные символы, которые не могут входить в слово языка VHDL. По нахождению такого символа порядковый номер символа запоминается в массиве, и по завершении просмотра строки, проводится анализ ее слов как группы символов между символами окончания слова.
2) Cтрока завершится. Последний символ строки добавляется к слову, если он не является символом окончания слова, и слово отправляется на анализ.
Анализ слов в строке
Рис 4 Схема алгоритма обработки полученных слов в строке
Производится разбиение строки на отдельные слова. При анализе строки были выделены символы, которые являются символами окончания слова(разделителями).Из строки циклически извлекаются группы символов между i-м и (i-1)-м разделителями до тех пор, пока не будет пройден весь список разделителей, а соответственно, не будут обработаны все слова в строке. Все слова анализируемой строки проходят проверку на принадлежность к одной из следующих категорий:
Таблица 2.Категории слов
Категория |
Признак |
Комментарий |
Поднят флаг «комментарий» |
Служебное слово |
Слово начинается с символа «#» или содержится в списке служебных слов |
Операция |
Слово содержится в списке операций |
Операнд/Метод |
Слово не подходит ни под одну иную категорию |
Тестирование программы
Таблица 3. План тестирования работоспособности прикладной программы.
№ |
Действие |
Ожидаемый результат |
1 |
Введен неправильный путь к файлу |
Вывод сообщения «Указан неверный путь к файлу» |
2 |
Введен пустой файл |
Вывод только сообщений о начале и окончании анализа |
3 |
Введен непустой файл, не содержащий слов |
Вывод только сообщений о начале анализа файла, начале анализа каждой из строк и окончании анализа |
4 |
Введен файл содержащий служебные слова |
Служебные слова распознаны |
5 |
Введен файл содержащий слова-типы данных |
Слова-типы данных распознаны |
6 |
Введен файл содержащий слова-операции |
Слова-операции распознаны |
7 |
Введен файл содержащий комментарии |
Комментарии распознаны |
8 |
Введен файл содержащий комбинацию всех видов слов языка VHDL |
Все слова распознаны. |
Тест №1.
В форму ввода пути к файлу введен несуществующий путь и нажата кнопка «Анализировать»
Результат:
Появилось надпись с сообщением «Указан неверный путь к файлу»
Тест №2.
В форму ввода пути к файлу введен путь к пустому файлу.
Результат:
В результат анализа занесены следующие записи:
Начало анализа кода из файла inp.txt
Конец анализа кода
Тест №3.
В форму ввода пути к файлу введен путь к файлу, содержащему следующую строку:
;;; ;;;(,)
Результат:
В результат анализа занесены следующие записи:
Начало анализа кода из файла inp.txt
Строка номер1
Конец анализа кода
Тест №4.
В форму ввода пути к файлу введен путь к файлу, содержащему следущую строку:
#include SC_METHOD #ifndef
Результат:
В результат анализа занесены следущие записи:
Начало анализа кода из файла inp.txt
Строка номер1
library зарезервированное слово
of зарезервированное слово
if зарезервированное слово
Конец анализа кода
Тест №5.
В форму ввода пути к файлу введен путь к файлу, содержащему следущую строку:
bool sc_uint sc_bv
Результат:
В результат анализа занесены следущие записи:
Начало анализа кода из файла inp.txt
Строка номер1
std_logic тип данных
bool тип данных
int тип данных
Конец анализа кода
Тест №6.
В форму ввода пути к файлу введен путь к файлу, содержащему следущую строку:
= <= < >
Результат:
В результат анализа занесены следущие записи:
Начало анализа кода из файла inp.txt
Строка номер1
= операция
<= операция
< операция
> операция
Конец анализа кода
Тест №7.
В форму ввода пути к файлу введен путь к файлу, содержащему следущую строку:
--= <= < >
Результат:
В результат анализа занесены следущие записи:
Начало анализа кода из файла inp.txt
Строка номер1
--= <= < > комментарий
Конец анализа кода
Тест №8.
В форму ввода пути к файлу введен путь к файлу, содержащему описание на языке VHDL D-триггера:
library IEEE;
use IEEE.std_logic_1164.all;
entity dff is
port (data, clk : in std_logic;
q :out std_logic);
end dff;
architecture behav of dff is
begin
-- комментарий
process (clk) begin
if (clk'event and clk = '1') then
q <= data;
end if;
end process;
end behav;
Результат:
В результат анализа занесены следущие записи:
Начало анализа кода из файла inp.vhd
Строка номер1
library зарезервированное слово
IEEE операнд или функция
Строка номер2
use зарезервированное слово
IEEE.std_logic_1164.all операнд или функция
Строка номер3
entity зарезервированное слово
dff операнд или функция
is зарезервированное слово
Строка номер4
port зарезервированное слово
data операнд или функция
clk операнд или функция
: операнд или функция
in зарезервированное слово
std_logic тип данных
Строка номер5
q операнд или функция
:out операнд или функция
std_logic тип данных
Строка номер6
end зарезервированное слово
dff операнд или функция
Строка номер7
architecture зарезервированное слово
behav операнд или функция
of зарезервированное слово
dff операнд или функция
is зарезервированное слово
Строка номер8
begin зарезервированное слово
Строка номер9
-- комментарий комментарий
Строка номер10
process зарезервированное слово
clk операнд или функция
begin зарезервированное слово
Строка номер11
if зарезервированное слово
clk'event операнд или функция
and операция
clk операнд или функция
= операция
'1' операнд или функция
then зарезервированное слово
Строка номер12
q операнд или функция
<= операция
data операнд или функция
Строка номер13
end зарезервированное слово
if зарезервированное слово
Строка номер14
end зарезервированное слово
process зарезервированное слово
Строка номер15
end зарезервированное слово
behav операнд или функция
Конец анализа кода
Вывод о результатах тестирования.
Результаты тестирования полностью соответствуют ожидаемым результатам, что показывает, что программа полностью и верно реализует разработанный алгоритм.
Заключение
В результате выполнения разработки был получен алгоритм лексического анализа кода на языке VHDL. Данный алгоритм был воплощен в виде прикладной программы для компьютеров под управлением операционной системы Microsoft Windows. Работоспособность алгоритма была проверена с использованием уже существующих моделей цифровых устройств, разработанных ранее в рамках курсовых проектов и бакалаврской работы.
Данный алгоритм является базой для дальнейшей разработки анализатора кода VHDL , который будет являться частью транслятора с языка VHDL на язык SystemC.
Литература
1. David C. Black, Jack Donovan – “SystemC: From the Ground Up”– Springer, 2010 г. – 291 с.
2. Jack W. Crenshaw – “Let's build a compiler! Part II : Expression parsing” –http://compilers.iecc.com/crenshaw/tutor2.txt – 1988 г. – 14 с.
3. Jack W. Crenshaw – “Let's build a compiler! Part IX : A top view” –http://compilers.iecc.com/crenshaw/tutor9.txt – 1989г. – 31 с.
4. David Gries – “Compiler Construction for Digital Computers.”– John Wiley and Sons, NY – 1971г. – 491 с.
5. Бибило П.Н. Основы языка VHDL: Учебное пособие. Изд. 5-е. — М.: Книжный дом «ЛИБРОКОМ», 2012. — 328 с. — ISBN 978-5-397-02584-3.
6. Свердлов С. З. Языки программирования и методы трансляции. - М.: Питер, 2007