========================================== Programable State Machine (PSM) ========================================== 1. Описание характеристик генерируемого КА : -------------------------------------------- +--------------------------------------+-------------------------------------+ | Кол-во входных условий | 1000 | +--------------------------------------+-------------------------------------+ | Кол-во выходов | 32 [1]_ | +--------------------------------------+-------------------------------------+ | Кол-во состояний | не ограниченно | +--------------------------------------+-------------------------------------+ | Глубина стека возвратов | 1 [2]_ | +--------------------------------------+-------------------------------------+ | Типы выходов по способу кодирования | комбинационные/регистровые Мура | +--------------------------------------+-------------------------------------+ | Типы выходов по временни | статические/импульсные | +--------------------------------------+-------------------------------------+ | Формат кодировния | onehot, native [3]_, sequental | +--------------------------------------+-------------------------------------+ .. [1] возможно увеличение за счет модернизации генератора .. [2] возможно увеличение за счет модернизации генератора .. [3] native - чистый последовательный формат описания КА с указанием всех переходов (квартус хорошо понимает только его) 2.Форматы вызова PSM : ---------------------- python psm.py [-o|-n] infile.psm psm.py [-o|-n] infile.psm 3.Описание используемой мнемоники --------------------------------- 3.Описание используемой мнемоники --------------------------------- .. note :: мнемоника ассемблера построена на основе мнемоники языка Verilog 3.0. Анализ файла :: Однопроходный сверху вниз. Все используемые макаросы, переменные, но не метки должны быть объявлены выше секции где они используються. 3.1. Макросы :: `define <имя макроса> <значениe макроса> Поддерживаются только однострочные макросы. При переопределении имени макроса будет ошибка. Синтаксическая проверка макроса осуществляеться(обусловленно используемым способом анализа лексем !!! ) 3.2. Секции описания переменных:: const <имя переменной> = <значение переменной>; <имя переменной> = <значение переменной>; endconst branch <имя перехода> = <значение перехода>; <имя перехода> = <значение перехода>; endbranch Наличие символа **';'** в конце строки назначения переменной обязательно. В переменных допускаются перекрестные ссылки. При переопределении имени переменной будет ошикбка. Одинаковые имена для констант, переходов, макросов и меток не допускються 3.3. Секции описания кода :: begin исполняемый код конечного автомата end 3.3.1. Формат комманд :: Label : , ; Label : , / ; Label : if () else , ; Label : if () else , / ; Label : if () elif () else , ; Label : if () elif () else , / ; Кол-во ветвлений не ограничено. Команда может быть разбита на несколько строк, наличие символа ';' в конце команды обязательно. 3.3.2. Форматы команд отвечающих за управление состоянием :: nop : pc <= pc + 1 wait : pc <= pc jump addr : pc <= addr call addr : pc <= addr, pc_ret <= pc + 1 ret : pc <= pc_ret; Ссылка в командах jump и call на 'begin' приводит к неявной подстановке адреса холостого состояния 3.3.3. Допустимые значения переходов :: Идентификатор в пределах 'br0'...'br999' 3.3.4. Допустимые значения констант :: Любые 32 битные числа в 16-тиричном или 10-тичном форматах 3.3.5. Формат описания обработки переходов Допускается использование в описании перехода более одного имени/значения перехода. Логические функции переходов +---+---------------+ |'!'| отрицание | +---+---------------+ |'&'| логическое AND| +---+---------------+ |'|'| логическое OR | +---+---------------+ |'^'| логическое XOR| +---+---------------+ 3.3.6. Формат описания обработки первыходов ; / Допускаеться использование в описании выхода более одного имени константы/значения выхода Арифметические функции выходов +---+------------+ |'+'| сложение | +---+------------+ |'-'| вычитаиние | +---+------------+ Динамический выход имеет смысл только в состояниях, в которых одна из ветвей являеться ветвью ожидания. При этом сигнал - активный только при нахождении в текущем состоянии 1 такт системной частоты. Внимание эта возможность выполнена за счет дополнительной комбинационной логики на комбинационных/регистровых выходах КА. Проверка соответствия состояния ожидания и динамического перехода НЕ осуществляеться. 4. Коментарии : --------------- Однострочные. Любая строка начиная с символа **'//'** 5. Формат выходного файла : --------------------------- .v - верилог файл с описанием КА _cmp.vo - верилог файл с инсталяцией КА _cmo.vho - вхдл файл с инсталяцией КА