Maverick_ 15 3 июля, 2017 Опубликовано 3 июля, 2017 · Жалоба Решение подобной задачи описывается тут: "Как делать парсинг текста голым хардвером, без процессора и без софтвера" хорошая статейка... :) не подскажите, где лежат исходники MIPSfpga процессора? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 4 июля, 2017 Опубликовано 4 июля, 2017 · Жалоба Решение подобной задачи описывается тут: "Как делать парсинг текста голым хардвером, без процессора и без софтвера" спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GriXa 0 4 июля, 2017 Опубликовано 4 июля, 2017 (изменено) · Жалоба Добрый день! Мне кажется, с помощью простых if и else, парсер сделать крайне затруднительно. Нужно думать в сторону сложной комбинаторики, функций и for ... loop'ов Подобный парсер видел для SPI интерфейса. Решение для VHDL было весьма изящно, на мой взгляд. Для модуля создавался package, в котором с помощью констант и type были описаны параметры строковых данных. К примеру, package parser_pkg is --! maximum length of data packet constant MAX_DATA_LEN : integer := 54; -- Serial communication constants --! message is from command interface constant SER_COM_CMD_INTF_TYPE : std_logic_vector(7 downto 0) := X"55"; -- ... куча других констант --! command data structure type cmd_t is record --! message command cmd : std_logic_vector(15 downto 0); --! message type msg_type : bc_msg_type_t; --! interface intf_type : bc_intf_type_t; --! message length msg_len : integer range 0 to MAX_DATA_LEN; --! answer code answer : std_logic_vector(15 downto 0); --! answer length answer_len : integer range 0 to MAX_DATA_LEN; --! target host FPGA (Master / Slave) target_host: target_host_t; end record cmd_t; constant CMD_MIO_DUMMY : std_logic_vector(15 downto 0) := X"0000"; --! dummy command to reset interface type cmd_arr is array(integer range <>) of cmd_t; -- List of all supported commands with length (in bytes) and category constant BC_CMD_CMD_LIST : bc_cmd_arr := ( (CMD_MIO_DUMMY, MIO, CMD_INTF,0,EC_OK,0,BOTH), (CMD_MIO_GETNBTIMMEAS, MIO, CMD_INTF,0,EC_OK,2,SINGLE), (CMD_MIO_GETSTATUS, MIO, CMD_INTF,0,EC_OK,2,SINGLE), (CMD_MIO_GETLKDMODINF, MIO, CMD_INTF,4,EC_OK,12,SINGLE), (CMD_MIO_GETNBLKDMOD, MIO, CMD_INTF,0,EC_OK,2,SINGLE), (CMD_MIO_STOREUID, MIO, CMD_INTF,6,EC_OK,0,BOTH), (CMD_MIO_GETUID,MIO, CMD_INTF,0,EC_OK,6,SINGLE), (CMD_MIO_GETVERSION,MIO, CMD_INTF,0,EC_OK,8,SINGLE), (CMD_MIO_GETERRORCODE,MIO, CMD_INTF,0,EC_OK,4,SINGLE), (CMD_MIO_GETHWINF,MIO, CMD_INTF,0,EC_OK,52,BOTH), (CMD_MIO_DECLAREMASTER,SCO,CMD_INTF,16,EC_OK,12,BOTH), (CMD_MIO_STARTSAFECOM,SCO,CMD_INTF,0,EC_OK,0,BOTH), (CMD_MIO_TAKECFGDATA,SCO,CMD_INTF,24,EC_OK,0,BOTH), (CMD_MIO_STORECFGDATA,SCO,CMD_INTF,0,EC_OK,0,BOTH) ); -- далее следует огромный список функций для работы с командами, к примеру: -- Function declaration --! @details Get command message properties --! --! InP: Command --! OutP: message properties function get_bc_cmd_cmd (cmd : std_logic_vector(15 downto 0)) return cmd_t; end package parser_pkg; Подобные функции используются в State Machine для реализации парсера. Получился большой блок комбинаторной логики. К счастью, он работал лишь на частотах меньше 50МГц. Изменено 4 июля, 2017 пользователем GriXa Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 4 июля, 2017 Опубликовано 4 июля, 2017 · Жалоба не подскажите, где лежат исходники MIPSfpga процессора? http://www.silicon-russia.com/2015/12/11/m...d-instructions/ Ну или просто возьмите MicroBlase - он и есть MIPS Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 4 июля, 2017 Опубликовано 4 июля, 2017 · Жалоба Добрый день! Мне кажется, с помощью простых if и else, парсер сделать крайне затруднительно. Нужно думать в сторону сложной комбинаторики, функций и for ... loop'ов Подобный парсер видел для SPI интерфейса. Решение для VHDL было весьма изящно, на мой взгляд. Для модуля создавался package, в котором с помощью констант и type были описаны параметры строковых данных. К примеру, Подобные функции используются в State Machine для реализации парсера. Получился большой блок комбинаторной логики. К счастью, он работал лишь на частотах меньше 50МГц. спасибо. думаю этот подход можно взять за основу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
novikovfb 17 4 июля, 2017 Опубликовано 4 июля, 2017 · Жалоба спасибо. MIPSfpga - это не спортивно, ведь тогда задача решается на прошитом в FPGA процессоре. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tausinov 0 4 июля, 2017 Опубликовано 4 июля, 2017 · Жалоба MIPSfpga - это не спортивно, ведь тогда задача решается на прошитом в FPGA процессоре. Вам шашечки или ехать? (с) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
novikovfb 17 4 июля, 2017 Опубликовано 4 июля, 2017 · Жалоба Вам шашечки или ехать? (с) ТС хочет хардкор... Я хотел избежать связки микроконтроллер + FPGA. Nios не расматривается. Хочу попробовать поднять на голом FPGA. А как мне подойти к этому вопросу? Я со строками в FPGA дело не имел. Хочу начать и посмотреть как ресурсы расходуются. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 4 июля, 2017 Опубликовано 4 июля, 2017 · Жалоба Зачем микропроцессор, неужели команд так много и сложные? Неужели связки декодер + мультиплексор не достаточно? Тем более данные приходят последовательно и на более низкой частоте, чем частота ПЛИС Jenya7 Выложите протокол обмена на основе которого Вы хотите делать парсер Или Вы хотите хардкор, как ранее предположили? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 4 июля, 2017 Опубликовано 4 июля, 2017 · Жалоба Или Вы хотите хардкор, как ранее предположили? «Механитис – профессиональное заболевание тех, кто верит, что ответ математической задачи, которую он не может ни решить, ни даже сформулировать, легко будет найти, если получить доступ к достаточно дорогой вычислительной машине».Б. Купман, Исследование операций, 4, 442 (1956). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 5 июля, 2017 Опубликовано 5 июля, 2017 (изменено) · Жалоба Зачем микропроцессор, неужели команд так много и сложные? Неужели связки декодер + мультиплексор не достаточно? Тем более данные приходят последовательно и на более низкой частоте, чем частота ПЛИС Jenya7 Выложите протокол обмена на основе которого Вы хотите делать парсер Или Вы хотите хардкор, как ранее предположили? Протокол простой. Пользователь вводит команду в терминале. Конец команды - \r. Например задать верхний лимит - top 1000\r. Прочитать верхний лимит - top\r без аргумента. В FPGA модуль UART принял чары до \r. Ну а дальше надо парсить - выделить аргументы, найти команду, по команде выполнить действие. Выше я приводил реализацию на С в микроконтроллере. Изменено 5 июля, 2017 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 5 июля, 2017 Опубликовано 5 июля, 2017 · Жалоба Протокол простой. Пользователь вводит команду в терминале. Конец команды - \r. Например задать верхний лимит - top 1000\r. Прочитать верхний лимит - top\r без аргумента. В FPGA модуль UART принял чары до \r. Ну а дальше надо парсить - выделить аргументы, найти команду, по команде выполнить действие. Выше я приводил реализацию на С в микроконтроллере. Вы можете принимать/отправлять данные с/на ПК? Если да, то дальше вы получаете 3 байта (top) - у Вас есть декодер который должен эту команду понять и данные пердать на вход соответсвующий модуль. Также декодер должен декодировать конец команды - \r - 2 байта. Если Вы должны получить массив данных то вначале их записывете в блочную память. Потом по приему всего пакета начать вычитывать данные и подавать их на соответствующий модуль. Здесь декодер это обычный компаратор на равенство. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 5 июля, 2017 Опубликовано 5 июля, 2017 (изменено) · Жалоба Приведенная программа не расскрывает "аргументы, найти команду, по команде выполнить действие". Расскажите подробнее. Это и есть протокол обмена Вы можете принимать отправлять данные с/на ПК? в контроллер пришла строка some_command arg1 arg2 \r. делимитер пробел. я разбиваю строки на массив строк по делимитеру. беру команду и ищу в списке. если есть такая команда - указатель на функцию отсылает нас к функции обработки команды. если есть аргументы - происходит валидация аргументов и запись значений в нужные переменные и сохранение в памяти, нет аргументов - отсылаю значение переменной на терминал по UART. неужели никто до меня не решал такой задачи? это ж маст! как без этого? у меня 90% проектов имеют интерфейс с пользователем через терминал. я в шоке. :) Изменено 5 июля, 2017 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vladec 7 5 июля, 2017 Опубликовано 5 июля, 2017 · Жалоба Посмотрите по ресурсам, может уложите задачу в один-два PicoBlaze Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 5 июля, 2017 Опубликовано 5 июля, 2017 · Жалоба в контроллер пришла строка . делимитер пробел. я разбиваю строки на массив строк по делимитеру. беру команду и ищу в списке. если есть такая команда - указатель на функцию отсылает нас к функции обработки команды. если есть аргументы - происходит валидация аргументов и запись значений в нужные переменные и сохранение в памяти, нет аргументов - отсылаю значение переменной на терминал по UART. неужели никто до меня не решал такой задачи? это ж маст! как без этого? у меня 90% проектов имеют интерфейс с пользователем через терминал. я в шоке. :) правильно для общеня с микропроцессором/ПК возможно такой протокол и прокатит. Для ПЛИС сделайте проще протокол обмена. Данные это цифры правильно? Можно сделать после команды цифровые данные ПЛИС их сразу принимает и выполняет. Не надо будет делать в ПЛИС преобразователя из аски кода в обычные цифры для ПЛИС. Тогда сделать по одной букве в аске коде - команду. Количество данных фиксированное. Тогда получиться а236369к что будет обозначать а - аски код - команда top 236369 - 4 байта (например) - значение данных к - аски код - команда окончание В зависимости от команды данные в 4 байта сами разбираете... Для подобного протокола процессор не нужен... В простом случае подтверждение получения команды ПЛИС - Вы просто возвращаете обратно всю команду в ПК (можно какую-то константу в каком-то байте добавлять при отправке при желании) Реализация этого простая - простой loopback, т.е. замыкаете приемник и передатчик Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться