Roman
Я уже писал выше. Я хочу задампить полный стейт программы в какой-то момент, для последующего анализа
Roman
если бы был типизированный new, я бы его перегрузил и построил бы типизированную карту памяти
Roman
Ну а в целом свой hls пишу, небольшой
Roman
В принципе я сделал замену для new :
template<class T, class... Args>
T* sc_new(Args&&... args)
Roman
Но приходится переписывать готовый код
Roman
Roman
В общем идея такая - описываем симулятор железки на C++, потом дапим его и из дампа генерируем Verilog
Roman
Есть похожий тул для Scala, называется Chisel
Roman
Хочу похожую вещь на C++ запилить
kitsu
Roman
SystemC?
Чтобы из SystemC сгенерировать Verilog нужно плагин для Clang писать
Roman
А у меня идея чисто струкурного описания
kitsu
ох ты, я думал он нативно могет
Грустненько
Roman
kitsu
а, окей
Roman
Пишем набор базовых блоков на SystemC, для которых у нас есть эквивалентный верилог
Roman
Потом собираем из них что угодно
Roman
Запускаем и дамипим netlist
Roman
Путем анализа дебагинформации
Roman
В общем я сейчас эту штуку пишу как скрипт для GDB : https://sourceware.org/gdb/onlinedocs/gdb/Python-API.html
Roman
GDB кстати оказался просто офигенно крутым, очень удобный API. Пробовал сначала LLDB, но там RTTI не всегда работает
kitsu
Крутенько!
Roman
В общем единственная проблема это нетипизированный new в C++
Roman
Вообще скриптом для GDB можно сделать что угодно. Я сначала думал сделать GUI а-ля Modelsim для SystemC в виде GDB скрпита ) Но потом понял что не хватит сил
Andrei
SystemC?
язык описания аппаратуры высокоуровневый
Andrei
оп, глюк телеграма. видимо ответили уже и я запутался
Andrei
Roman
На C++ HLS ты по сути описываешь один хардверный тред который превращается в FSM
Andrei
Да, но для остального Vivado умеет генерировать всю обвязку.
Andrei
И automation делать.
Roman
Ну по сути модель использования Vivado такая : пишешь тред на C++ , генерируешь RTL, соединяешь в GUI (Vivado IP Integrator)
Andrei
Я так смог на fpga развернуть полноценную нейронку, с обменом данными через DMA контроллер прямо в оперативку, не зная ничего не ни про верилог, ни про fpga заранее.
Roman
В SystemC или Verilog можно делать IPC прямо в коде, без GUI
Andrei
Допустим, а зачем?
Roman
У кода много преимуществ : лучше работает с системами контроля версий, проще переиспользовать, переносится между вендорами
Roman
В общем как я вижу графические среды разработки железа постепенно умирают
Roman
Помню в универе у нас профессора умели только в схемном редакторе работать, а сейчас все пишут код
Andrei
Окей, ну у меня в принципе, как у пользователя vivado нет проблем с контролем версии плюсовых файлов и констрейнтов, а что еще надо?
Roman
Вопрос исключительно в количестве и гранулярности процессов
Roman
Если у тебя пара процессов, то можно и в GUI
Andrei
И спасибо им за это, что мне не пришлось учить Верилог, чтобы сделать задачу. В итоге я потратил два месяца стартуя с нулевым пониманием fpga, вместо полгода + на обучение верилогу.
Evgenii
Roman
Roman
В общем примерно за неделю-две можно разобраться
Roman
Но HLS с Verilog пока в природе нет
Andrei
Andrei
Andrei
Roman
В общем да, Verilog это ассемблер. Его нужно знать чтобы понимать во что синтезируется С++, не более
Roman
Meaning?
С верилог есть только RTL синтез , HLS нету. Вроде был в 90-х но умер
Andrei
Vivado умеет и VHDL и Verilog генерировать, или я неправильно распарсил утверждение?
Andrei
А, понял.
Roman
Ну смотри, если ты пишешь потактовую спеку, это это RTL
Roman
Т..е в твоем коде ты пишешь что происходит в железке на каждом такте
Evgenii
Roman
Если на входе untimed-код, например C++ функция, а синтезатор сам намазывает её на FSM, то это HLS
Berkus
@geghamantonyan, если кратко:
1. Предположение, что один символ = один char верно только для ASCII или похожих вещей
2. Предположение, что один символ = постоянное число char верно только для подмножеств кодировок UTF-8 и UTF-16.
3. Предположение, что один и тот же текст записывается однозначно, неверно.
Кажется, что надо сделать ну примерно следующее:
1. Сконвертировать строчку во что-то, где хотя бы русские буквы будут одной "единицей". Стандартной виндовой недоUTF-16 хватит, но это НЕ std::string / char[].
2. Уже в ней аккуратно работать.
3. Сконвертировать обратно.
Винда, как я сказал, живёт сама по себе в кодировке, где одного символа размером в два байта хватает, чтобы записать русскую букву. Но толда и читать надо через wchar_t и их друзей, я там мало знаю. И всё равно это будет не общим решением на все языки.
2. Предположение, что один символ = постоянное число char верно только для подмножеств кодировок UTF-8 и UTF-16.
это что за бред, UTF кодировки с переменным количеством байт
Berkus
Andrei
В работе я проблем не замечал, но ворнинг меня беспокоит. Что с этим можно сделать?
Andrei
Не руками же «разводить» в самом деле.
Andrei
Понизить частоту?
Roman
Понизить частоту?
Ну два варианта, либо понизить частоту, либо переделать проблемный участок
Andrei
Руками? Но ведь за меня это страшный оптимизатор делает.
Roman
Есть ещё такой вариант - ты попросил у него нереалистичный latency или throughput
Roman
Попробуй эти констрейнты расслабить
Andrei
Andrei