Roman
Я уже писал выше. Я хочу задампить полный стейт программы в какой-то момент, для последующего анализа
Roman
если бы был типизированный new, я бы его перегрузил и построил бы типизированную карту памяти
Roman
Ну а в целом свой hls пишу, небольшой
Roman
В принципе я сделал замену для new : template<class T, class... Args> T* sc_new(Args&&... args)
Roman
Но приходится переписывать готовый код
Дмитрий ⬡
Но приходится переписывать готовый код
Очень клёвая затея! Но кажется, что только так, через make_new какой-то.
Roman
В общем идея такая - описываем симулятор железки на C++, потом дапим его и из дампа генерируем Verilog
Roman
Есть похожий тул для Scala, называется Chisel
Roman
Хочу похожую вещь на C++ запилить
Roman
SystemC?
Чтобы из SystemC сгенерировать Verilog нужно плагин для Clang писать
Roman
А у меня идея чисто струкурного описания
kitsu
ох ты, я думал он нативно могет Грустненько
kitsu
А у меня идея чисто струкурного описания
А взаимодействие между гейтами/синхронизация?
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
оп, глюк телеграма. видимо ответили уже и я запутался
Roman
А Xilinx-овский HLS C++ видели?
Я весь HLS видел, и от Cadence, и от Mentor тоже. HLS с голого C++ не заменяет целиком Verilog
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 нет проблем с контролем версии плюсовых файлов и констрейнтов, а что еще надо?
Andrei
В общем как я вижу графические среды разработки железа постепенно умирают
Не знаю, Xilinx один из двух монополистов fpga замечательно поддерживает и обновляет свой HLS
Roman
Вопрос исключительно в количестве и гранулярности процессов
Roman
Если у тебя пара процессов, то можно и в GUI
Andrei
И спасибо им за это, что мне не пришлось учить Верилог, чтобы сделать задачу. В итоге я потратил два месяца стартуя с нулевым пониманием fpga, вместо полгода + на обучение верилогу.
Roman
В общем примерно за неделю-две можно разобраться
Andrei
один из тысяч монополистов (с)
Ты знаешь кого-то кроме Альтеры и Ксайлинкса в таких объемах?
Roman
Но HLS с Verilog пока в природе нет
Andrei
Вопрос исключительно в количестве и гранулярности процессов
Можно пример дизайна, когда нужно именно ручками писать?
Roman
В общем да, Verilog это ассемблер. Его нужно знать чтобы понимать во что синтезируется С++, не более
Roman
Meaning?
С верилог есть только RTL синтез , HLS нету. Вроде был в 90-х но умер
Andrei
Vivado умеет и VHDL и Verilog генерировать, или я неправильно распарсил утверждение?
Andrei
А, понял.
Roman
Ну смотри, если ты пишешь потактовую спеку, это это RTL
Roman
Т..е в твоем коде ты пишешь что происходит в железке на каждом такте
Berkus
но когда я так пишу визула на экран хотя бы русские буквы понимает
вижла по умолчанию не уникодная (до версии 2017, а в 2017 не знаю)
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 кодировки с переменным количеством байт
Andrei
нет, просто два монополиста это оксюморон
Да нет, но если ты хочешь придраться к словам, замени монополистов на олигополистов.
Berkus
Berkus
utf32 решение всех проблем
самый жырный формат, для хранения не оч
Berkus
но вот макось например забивает
скорее принципиально хранит в decomposed form потому что так проще искать
Andrei
Если на входе untimed-код, например C++ функция, а синтезатор сам намазывает её на FSM, то это HLS
О, раз уж такой случай подвернулся, вопрос, у меня имплементированный дизайн выдаёт ворнинг о слишком большом WNS
Andrei
В работе я проблем не замечал, но ворнинг меня беспокоит. Что с этим можно сделать?
Andrei
Не руками же «разводить» в самом деле.
Andrei
Понизить частоту?
Andrei
Слишком мало, к сожалению. Даже сконвертировать не очень сходу понятно, как.
Если средствами чисто плюсов, то <codecvt> с его фасетами, Для остальных случаев всегда использовать utf-8 и по необходимости ICU.
Roman
Понизить частоту?
Ну два варианта, либо понизить частоту, либо переделать проблемный участок
Andrei
Руками? Но ведь за меня это страшный оптимизатор делает.
Roman
Руками? Но ведь за меня это страшный оптимизатор делает.
Ну вот, а ты говоришь что Xilinx круто :) А он тебе выдает дизайны который в тайминг не лезут :)
Roman
Есть ещё такой вариант - ты попросил у него нереалистичный latency или throughput
Roman
Попробуй эти констрейнты расслабить
Andrei
Ну вот, а ты говоришь что Xilinx круто :) А он тебе выдает дизайны который в тайминг не лезут :)
А это проявляется не на этапе синтеза, а на этапе имплементации уже.
Roman
А это проявляется не на этапе синтеза, а на этапе имплементации уже.
Если Place&Route не лезет, то есть небольшой шанс влезть просто покрутив его настройки