Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Инструмент для создания микропрограмных автоматов
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Stas
Имею большой автомат состояний (FSM) в девайсе Stratix II, работающий на частоте 333 MHz, хочу сделать то же самое микропрограмным автоматом на модуле памяти M512 или M4K, вроде как должно получится быстрей и ресурсов меньше занимать. Те мне надо подсказать пакет, который бы на описание состояний генерировал содержание памяти в *.hex. Кто в чем делает такие штуки??
Stas
Неужели все делают конечные автоматы и ни у кого небыло мысли сделать микропрогаммный автомат по схеме типа Уилкса и т.п. в блоке памяти? Или кодируем вручную по таблице переходов???? Интересует софт для МПА не привязываясь к производителю (XILINX/ALTERA) - без разницы... Кто что видел из этого направления?
acex2
Цитата(Stas @ Aug 1 2006, 08:13) *
Неужели все делают конечные автоматы и ни у кого небыло мысли сделать микропрогаммный автомат по схеме типа Уилкса и т.п. в блоке памяти? Или кодируем вручную по таблице переходов???? Интересует софт для МПА не привязываясь к производителю (XILINX/ALTERA) - без разницы... Кто что видел из этого направления?



Делали в свое время на BlockRAM, Xilinx Virtex-II. Все работало великолепно.
Автомат был, если не ошибаюсь, на пару сотен состояний, поэтому был на скорую руку написан ассемблер под задачу, который переводил описание алгоритма в mif- или coe- файл для заливки в память по свободному порту BlockRAM. В итоге, сэкономили кучу времени на перекомпиляциях проекта - автомат можно было менять и заливать прямо на ходу через один из интерфейсов на плате.

По поводу готового софта, в журнале Xilinx XCell где-то в 2002-2003 году была статья про реализацию микропрограммных автоматов, и там же автор рекламировал свой софт для описания автомата. Поищите на сайте Xilinx - у них есть архив журнала.
Doka
Цитата(acex2 @ Aug 1 2006, 17:57) *
Делали в свое время на BlockRAM, Xilinx Virtex-II. Все работало великолепно.
Автомат был, если не ошибаюсь, на пару сотен состояний, поэтому был на скорую руку написан ассемблер под задачу, который переводил описание алгоритма в mif- или coe- файл для заливки в память по свободному порту BlockRAM. В итоге, сэкономили кучу времени на перекомпиляциях проекта - автомат можно было менять и заливать прямо на ходу через один из интерфейсов на плате.


хех =)
на скорую руку можно было и пикоблейз взять - чем не автомат?! =)
- и блочное ОЗУ там тоже можно на лету обновлять =)
Джеймс
Цитата(Stas @ Aug 1 2006, 15:13) *
Или кодируем вручную по таблице переходов???? Интересует софт для МПА не привязываясь к производителю (XILINX/ALTERA) - без разницы... Кто что видел из этого направления?


Конечно не вручную :) HDL Designer -> State Diagram Editor (весь пакет называется FPGA Advantage)
http://www.tkt.cs.tut.fi/kurssit/1200/S05/...torial6_eng.htm

Про нюансы использования для этих целей памяти ничего не скажу. Не исключено, что это вообще можно сделать, указав только соответствующие настройки.
Stas
Цитата
Конечно не вручную smile.gif HDL Designer -> State Diagram Editor (весь пакет называется FPGA Advantage)
http://www.tkt.cs.tut.fi/kurssit/1200/S05/...torial6_eng.htm

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


В документе описывается графическое создание конечного автомата в среде FPGA Advantage. На мой взгляд это излишне, хватает Quartus'а с его убогим просмоторщиком FSM... Вопрос не в создании конечного автомата, а интересуют именно МПА. Вот если FPGA Advantage может синтезировать по какому либо из описаний автомат типа Уилкса или на счетчике - это интересно, но пока я не нашел в его возможностях этого.
Вообще интересно, в приборах типа Stratix II содержится значительное количество модулей блочной памяти, конечно много уходит на FIFO, сдвиговые регистры и прочие вещи, но логично в них же распологать крупные автоматы, а как синтезировать?
acex2
Цитата(Doka @ Aug 1 2006, 13:36) *
Цитата(acex2 @ Aug 1 2006, 17:57) *
Делали в свое время на BlockRAM, Xilinx Virtex-II. Все работало великолепно.
Автомат был, если не ошибаюсь, на пару сотен состояний, поэтому был на скорую руку написан ассемблер под задачу, который переводил описание алгоритма в mif- или coe- файл для заливки в память по свободному порту BlockRAM. В итоге, сэкономили кучу времени на перекомпиляциях проекта - автомат можно было менять и заливать прямо на ходу через один из интерфейсов на плате.


хех =)
на скорую руку можно было и пикоблейз взять - чем не автомат?! =)
- и блочное ОЗУ там тоже можно на лету обновлять =)


Во-первых, тогда PicoBlaze еще не было. Первая статья Чапмена появилась в начале 2002, а разработка была закончена в 2001. Во-вторых, частота работы автомата была около 200 Мгц, что для PicoBlaze на Virtex-II просто физически недостижимо.
disel
в XST есть описание такой фичи: RAM-based FSM Synthesis. Сам не пробывал
cdg
Как сделать полностью автоматом не знаю, но вот логику переходов можно точно упрятать в память, например с помощью синтеза в Synplify (или в Quartus применением аналогичного constraint):

Код
module FSM_Logic (
                input [...:0] CurState,
                input [...:0] DependentVar,
                output reg [...:0] NextState
                );          
          always @(*)
       case (CurState, DependentVar)
             {} : if ()  NextState = {};
             .......
             default: NextState = {};
       endcase        
endmodule




module FSM (
        input Clk,
       ...............
       output reg [...:0] CurState,
       ...............
      );

    .........
    war [...:0] NextState;
    reg [...:0] DependentVar;
    .........
                
                FSM_Logic FSM_Logic_Component (
                    .CurState(CurState),
                   .DependentVar(DependentVar)
                   .NextState(NextState))
        /* synthesis altera_implement_in_eab=1 */;
          
    always @(posedge Clk,.....)
             CurState <= NextState;
    
    ........................            

endmodule


По крайней мере Synplify генерирует mif файл, с внедрением в синхронную память придется еще помудрить.
des00
автору, если проблема еще актуально то:
1. посмотрите на алтера авалон стейт секвенсер (Avalon State Sequencer).
Это похоже на то что вы ищете. Очень простой псевдокод + ассемблер. Правда будут проблемы с дополнением (расширением) комманд, т.к исходников ассемблера нет.

2. Посмотрите на MPMC2 от ксалинкса, там все на автоматах на брамах и арбитр и секвенсер комманд ДДР. в составе есть ассемблер написаный на перле. но, в о отличие от первого варианта доков никаких.

3. у меня в планах разработка ядра на основе Avalon State Sequencer, только на VHDL с конфигурированием из пактеа (без гуя) и ассемблера для него. Можно выполнить разработку вместе %)
Gate
mentor precision в доках хвастается тем, что умеет делать fsm на блоках встроенной памяти - автоматически, задав специальную опцию при синтезе.
des00
Цитата
если кому актуально, есть такая разработка (см. документ)

распространяется свободно, код открытый, с двумя условиями:

1. не ломать
2. обо всех багах и предложениях по модернизации сообшать.

Если кого нибудь заинтересовало выложу.


Сделал более подробное описание.
Код выложу чуть позже, т.к. нужно немного модифицировать программу-ассемблер.
Stas
Конечно выкладывайте, вещь интересная. Я правда сейчас немного другим занят, мб через месяц руки дойдут попробовать...
zltigo
Цитата(des00 @ Sep 26 2006, 12:05) *
Если кого нибудь заинтересовало выложу.

Заинтересовало.
des00
Выкладываю текущую версию проекта.

если будут вопросы, обращайтесь отвечу.
des00
Приношу всем извинения, получил по голове от начальства -> внес поправки в коменты в заголовках файлов.
des00
В процессе имплементации корки в 6 ти местах блока энкодера AVC, найдено большое кол-во багов (как VHDL кода, так и в ассемблере). В данный момент обнаруженые баги пофиксены + переписаны корявые места, для увеличения тактовой и уменьшения объема (Virtex4) + добавлены дополнительные возможности в ассемблер. Все это вылилось в следующую ревизию.

За сим старую ревизию удаляю, новую выложу завтра.
des00
А очипятку в декодере комманд никто и не заметил smile.gif
теперь подправил
CaPpuCcino
Цитата(Gate @ Sep 5 2006, 15:01) *
mentor precision в доках хвастается тем, что умеет делать fsm на блоках встроенной памяти - автоматически, задав специальную опцию при синтезе.

можно, пожалуйста, уточнить в каких именно доках(?), хотя бы на какой продукт. спасибо
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.