Перейти к содержанию
    

RobFPGA

Свой
  • Постов

    3 315
  • Зарегистрирован

  • Посещение

  • Победитель дней

    8

Весь контент RobFPGA


  1. Приветствую! Без привязки к майнингу - очень грубая оценка Из за технологии динамического интерконнекта FPGA по скорости работы медленнее от AISC на порядок. Приблизительно на столько же меньше и плотность элементов на единицу площади. То есть как минимум в 100 раз реализация алгоритма на FPGA будет менее эффективна чем на ASIC. (в расчете на чип) А если сюда прибавить повышенное потребление и существенно выше стоимость производства чипа FPGA чем ASIC возникнет вопрос - так кому будет выгода от таких чипов? :cranky: Специализация же FPGA для узко заточенных функций (hard-IP !!!) цену чипа сильно не снизит а и так узкий рынок сбыта еще и уменьшит. FPGA это не золотая пилюля от геморроя всех май.. ..разработчиков. :) Это жесткий (и не дешевый) компромисс. Удачи! Rob.
  2. Приветствую! Так я ж и говорю - неуемная фантазия программиста ну и ADuC812 :) - страшная штука! Успехов! Rob.
  3. Приветствую! Да неужели? поверю Вам на слово :) Но если они для Вас так одинаковы - что мешает Вам использовать printf в прерывании? То есть пока ACK для сегмента не получим из printf не уйдем ? Да уж - фантазия программиста страшная штука - но моя только заставляла меня свои _Printf() писать падла ;) Удачи! Rob.
  4. Приветствую! Не внимательно читаете :) При работе в консоле из GUI и при компиляции разные пути для проекта. К тому же при запуске синтеза или P&R как таковой xpr не используется. Там все разворачивается в скрипты и запускается через кашу из tcl и js. Удачи! Rob.
  5. Приветствую! Вобще то printf и sprintf это немного разные пчелы - жужжат по разному. И стек этот наверное прямо в мозгу программиста будет - чтобы инфу получал без IO функций. Удачи! Rob.
  6. Приветствую! И не только красота - правильная очередь и функция записи в нее позволить логровать например из прерываний или из других нехороших мест куда обычному printf вход заказан. Удачи! Rob.
  7. Приветствую! Тут уж как кому нравится. Я просто никогда не делаю BD как top - у меня всегда top это мой rtl даже как просто враппер для BD. Ну а раз он мой то и что хочу то и ворочу. :) В этом случае из BD торчит несколько входов на модуль констант проекта на которые и вешаются глобальные параметры. Удачи! Rob.
  8. Приветствую! Таксс - судя по всему имеем дело с Vivado - так как это очень пакостный косяк с $proj_name - если запускаете компиляцию из GUI то root для proj_name получается внутри proj_name.run/synth_?/ а не там где proj_name.xpr лежит. :( Можете попробовать привязать путь к исходнику через путь к скрипту set PRJ_ROOT [file normalize "[file dirname [info script]]../.."] Ну и можно не генерировать исходник а просто менять generic parameters в топе при синтезе на значения полученные из скрипта или из свойств проекта. set_property -name "steps.synth_design.args.more options" -value "-generic COMPILE_DATE=$CompileDate ... -objects [get_runs synth_1] // а в top соответственно module tom #(parameter COMPILE_DATE= 0, ... Успехов! Rob.
  9. Приветствую! Через очередь - Пишете все логи в очередь сообщений, а в отдельном потоке выгребаете из нее и пишете туда куда надо и со всеми плюшками и шлю. наворотами :) Удачи! Rob.
  10. Приветствую! А Вы что думаете Ctrl-C, Ctrl-V это так просто? :) Тут учится и Ctrl-C, Ctrl-V! Правильно - это будут 4 разных блока памяти. Раз у Вас один модуль с такой памятью работает а другие 3 нет - то скорее всего при размножении Вы допустили какую то логическую ошибку - либо входы не подключили либо выходы этих модулей не используются. Посмотрите результат после P&R на Technology map viewer (Post-Fit) остались ли эти модули в дизайне в целости и сохранности. И куда от них сигналы идут. Удачи! Rob.
  11. Приветствую! Ответ на вопрос 1 - Можно - примитив памяти m9k позволяет организовать несколько, а точнее ДВА ОДНОВРЕМЕННЫХ канала (dual-port) четния/записи из блока памяти m9k. Если же под несколько Вы имели ввиду число больше 2 каналов одновременного доступа в ОДИН блок памяти то физически это сделать нельзя - этом случае Вам придется логически организовывать арбитраж для доступа нескольких каналов в одну память. Ответ на вопрос 2 - Скорее всего Ваш дизайн содержит логические ошибки. Выявить их и тем более исправить через телепатический канал пока не представляется возможным (манны не хватает). :laughing: Удачи! Rob.
  12. Приветствую! Как тяжко все начинать с нуля (особенно методом ненаучного тыка). module top_test_led ( input wire CLK, output wire led_clk // объявляем LED ); assign led_clk = CLK; //назначаем LED как CLK endmodule Увидите отличия от Вашего кода? Удачи! Rob.
  13. Приветствую! Для начала Вам было бы неплохо знать что формат ВСЕХ переменных в полях заголовков big-endian (старший байт первым) Поэтому то что Вам кажется как 0x00FF Wireshark воспринимает как 0xFF00 (и чем он Вам честно сообщает). Отсюда и все остальное Надо бы хоть чуть чуть почитать псалмы о формате сетевых пакетов. Удачи! Rob.
  14. Приветствую! Вообще то чистый Ethernet это первые 14 байт (естественно без VLAN) - как раз dst, src адреса и 16 bit type. Значение в этом поле кодирует либо длину данных и она должна быть в диавазоне 0x0000-0x05DC. Либо тип последующего заголовка - и при этом длинна пакета будет определятся в зависимости от этого типа. Естественно если Вы в type что то записали > 0x05DC то Wireshark пытается распарсить все что после type в соответствии со стандартным значением в этом поле. Если Вы хотите гонять такой траффик через стандартные устройства то что бы не было проблем придется следовать канонам сетевой религии - а иначе результат не гарантирован. Ну а если и так сойдет то для Wireshark можно создать свой шаблон для парсинга чтобы он не ругался на такое святотатство. Удачи! Rob.
  15. Приветствую! Я еще хотел эту раставлялку (и не только) внедрить в интерфейс ModelSim чтобы во всплывающей менюшке были мои custom команды. Но лень ковырять tcl так глубоко поборола лень делать это через скрипт ручками :laughing: . Удачи! Rob.
  16. Приветствую! Tcl почти что стандарт для контроля FPGA-шного софта. С помощью tcl много чего можно накрутить под себя. Например в Vivado у меня и автоматизация подключения debug-point для ChipScope, и авто генерация даты/ревизии git/ при компиляции и последующе генерация bit/mcs c правильным именем в нужной папке и с инфо-файлом, и.т.д. И работа с JTAG-AXI для быстрой отладки периферии без ожидания вечно занятого програмиста. Для Synplyfy помню извращался с парсингом логов синтеза и автогенерацией xilinx ip корок с требуемыми параметрами. Поищите я на форуме приводил примеры. Ну а ModelSim так это сплошной tcl/tk :) например мой скрипт парсит Vivado-вский скрипт для симуляции .bd чтобы компилировалось так как мне надо а не так хочет Vivado. Или например автоматом расставлять сигналы AXI шины на wave чтобы было как в армии все под линейку красиво было :) Удачи! Rob.
  17. Приветствую! Честно говоря не знаю. Так как интерфейс Vivado "живой" и постоянно что то меняется то я стараюсь не зависеть от настроения неизвестных индийский программистов - поэтому структуру проекта стараюсь контролировать самостоятельно. Соответственно есть набор скриптов который помогает в этом - создать/пересоздать проект, скомпилировать и запустить сим, подключить сигналы к debuger и.т.д ... Кстати ни кто не мешает Вам написать скрипт который будет делать эту грязную работу так как именно Вам требуется и загружать его автоматом при старте Vivado. И тогда Vivado будет делать все за Вас. :) (может даже и дизайнить - если Вы в скрипт ИИ запрограммируете) Удачи! Rob
  18. Приветствую! Не понятно что Вы имели ввиду под "...автоматом передавались в Моделсим... " Лежат где то у Вас эти фалы ..../daleko/v_zho/file1.vh ..../eshe_glubge/v_zho/file2.vh ну так и скажите modelsim где искать из - vlog ... +incdir+"..../daleko/v_zho" +incdir+"..../eshe_glubzhe/v_zho" ... А еще лучше засунуть все это в файл настроек kucha_mala.f и скормить его в modelsim vlog -f ./kucha_mala.f ... или даже vlog -F ./kucha_mala.f В последнем случае modesim относительные пути в kucha_mala превратит в абсолютные. Но -F только в последних версиях поддерживается Удачи! Rob.
  19. Приветствую! Ну не совсем уж и ересь - пути где искать include задаются в настройках проекта Vivado или командой set_property INCLUDE_DIRS "..." в скрипте или tcl консоли. Похоже задаются пути поиска include и в Modelsim/Questa через опцию в командной строке. Удачи! Rob.
  20. Приветствую! Вот - не пример а конфетка :) Успехов! Rob.
  21. Приветствую! Генерация псевдослучайных тестов это constraint random-base verification и это не главное в UVM. UVM это в первую очередь методология позволяющая упростит и стандартизировать построение сложных верификационных платформ и соответствующая OOP библиотека которая поддерживает эту методологию. Если грубо - выделяются стандартные этапы верификации, набор ролей версификационных модулей. Стандартизируются потоки управления и интерфейсы между ними. Добавляется механизм сквозной динамической конфигурации без необходимости пере-компиляции. ( короче : правила - формальности - бюрократия :( ни ка какого свободного творчества и полета фантазии). Цель соответственно благая - повысить reusable-ность верификации и соответственно снизить стоимость. Но увы это не золотая пуля - полноценное применение методологии UVM (как и подобной ей) имеет смысл в больших командах с разделением обязанностей и длительным первоначальным периодом вхождения в эту технологию и наработки своей версификационной базы. Саму же UVM библиотеку можно использовать и как есть почти без оглядки на методологию. Удачи! Rob.
  22. Приветствую! Неплохо все ж пример кода какой нибудь - всеж проще будет. Зачем Вам ОДНОВРЕМЕННЫЙ доступ двух функций к одной памяти? Как Вы конролируете доступ между ними? Можно ли сделать алгоритм с раздельной памятью и обработкой конвейером? Ведь в отличии от sw в hw реально возможен одновременный доступ и при наличии зависимостей по переменной между двумя функциями синтезатор не знает как разруливать такое. Поэтому я и говорил что будет ломать устоявшиеся привычки программирования. Успехов! Rob.
  23. Приветствую! Живой есть - но не скажу что спец - делал несколько небольших модулей для разных задач. Уж очень эта тема специфическая, особенно в начале мозги выворачивает и ломает стереотипы программирования. Успехов! Rob.
  24. Приветствую! Если грубо прикидывать то реализация RAM 8051 (128 байт) на регистрах требует 1K регистров и ~1.5K логики (4-input lut) для организации декодера записи и мультиплексора для чтения. А с учетом того что вход регистра без логики обычно не подключишь то логики надо будет все ~2.5K. :( Удачи! Rob.
  25. Приветствую! Совсем необязательно - смотрите хотя бы ZPU на opencores. 32 бит, стековая архитектура, проще некуда и при этом рабочий порт для GCC. Успехов! Rob.
×
×
  • Создать...