Блог страдающего Лиса
Lorem ipsum hello dolor sit world amet
17 ноя 2024 Вс
Нарисовать Night City
Мне помню, очень нравилось кодом рисовать ночные города под светом фонарей в дождливую ночь. Надо продолжить эту традицию и нарисовать Night City более цветасто и более детализированно, чем я делал до этого. Все это надо нарисовать в разрешении 320 на 200, 256 цветов. Это важно. Без этого никуда.
Впрочем, мне все равно уже.
Впрочем, мне все равно уже.
24 окт 2024 Чт
Микропроекты и квадратный корень
Я часто думаю, что мне от этого программирования нужно, и понимаю, что мне очень нравится делать микроскопические проекты, демосцены. Все время вспоминая прошлое и прежние времена, когда я радовался кубу, нарисованному где угодно, хоть на туалетной бумаге, теперь я тоже понимаю, что мне все равно нравится рисовать эти кубы. И даже шары (
Поскольку вчера я сделал шахматную трехмерную доску, то думаю, что можно в принципе, продолжить делать что-то такое в этом же стиле и куда-то складировать на сайте с исходниками, которые никому абсолютно не нужны.
Все что было в детстве — было лучше всего, потому что там радовался всему, даже
Из ближайших мыслей о проектах — нарисовать стохастические горные вершины, флаппи бёрд, попробовать вырисовывать окружность по принципу вычисления . Есть такой метод довольно простого поиска quadratного корня, через серию вычитаний -1, -3, -5, -7 и так далее. Я уже ранее рассказывал об этом методе, где 1+3+5+7+9 дает значение квадратов от чисел 1,2,3,4 и т.д. Если же действовать в обратную сторону, то получим корень.
Возьмем число 100, вычислим куадраутный корень через серию вычитаний:
Есть быстрый, шустрый метод быстро найти квадратный корень (приблизительно) через подсчет количества значимых битов, для начала. Например, нам надо вычислить быстренько квадратный корневище через такой подсчет. Возьмем крупное число, 25612461 например, что в шестнадцатеричном виде будет 186D0AD, а в двоичном виде:
Понятное дело, что это является лишь грубой оценкой корня и что придется еще искать, но подобный подход позволяет снизить количество проб c 24 до 12 при бинарном поиске. И конечно же, чем больше число, тем больше оно и занимает времени на поиск решения.
oh my balls!
).Поскольку вчера я сделал шахматную трехмерную доску, то думаю, что можно в принципе, продолжить делать что-то такое в этом же стиле и куда-то складировать на сайте с исходниками, которые никому абсолютно не нужны.
Все что было в детстве — было лучше всего, потому что там радовался всему, даже
stosb
радовал так, что я аж подпрыгивал от счастья на месте. Раньше у меня были очень простые радости, не то что сейчас, когда ничего не радует, но ладно, это лирическое отступление от темы.Из ближайших мыслей о проектах — нарисовать стохастические горные вершины, флаппи бёрд, попробовать вырисовывать окружность по принципу вычисления . Есть такой метод довольно простого поиска quadratного корня, через серию вычитаний -1, -3, -5, -7 и так далее. Я уже ранее рассказывал об этом методе, где 1+3+5+7+9 дает значение квадратов от чисел 1,2,3,4 и т.д. Если же действовать в обратную сторону, то получим корень.
Возьмем число 100, вычислим куадраутный корень через серию вычитаний:
1) 100-1=99, 2) 99-3=96, 3) 96-5=91, 4) 91-7=84 5) 84-9=75, 6) 75-11=64, 7) 64-13=51, 8) 51-15=36, 9) 36-17=19, 10) 19-19=0Количество вычитаний получилось 10. А значит, квадратный корень из 100 будет 10. На верилоге это бы записано было таким образом:
always @(posedge clock) if (A >= B) begin A <= A - B; B <= B + 2; C <= C + 1; endГде A — исходное число, B=1 на старте, C=0 на старте, и это результат. Ну и A будет в остатке потом. Короче, через серию вычитаний можно добиться вычисления квадратного корня. Есть только один баг в том, что если исходное число например 65535, то придется 255 раз вычесть прежде чем добьемся ответа от него. Есть и другие методы, например, поиск корня через серию делений, например, или там, по табличке искать сначала, двоичной.
Есть быстрый, шустрый метод быстро найти квадратный корень (приблизительно) через подсчет количества значимых битов, для начала. Например, нам надо вычислить быстренько квадратный корневище через такой подсчет. Возьмем крупное число, 25612461 например, что в шестнадцатеричном виде будет 186D0AD, а в двоичном виде:
0001 1000 0110 1101 0000 1010 1101Сразу быстро можно посчитать высоту последнего разряда у числа, который содержит единицу. И это бит номер 24, начиная с 0. Если разделить число 24 на 2, то получится 12 битов. Это значит что результат корня гарантированно старше чем 2^12, и не меньше чем 4096 (то есть 4096^2=16'777'216). Результат будет находиться между 4096^2 и 8192^2.
Понятное дело, что это является лишь грубой оценкой корня и что придется еще искать, но подобный подход позволяет снизить количество проб c 24 до 12 при бинарном поиске. И конечно же, чем больше число, тем больше оно и занимает времени на поиск решения.
07 окт 2024 Пн
Блог чёкнутого Лиса
Есть такая привычка у меня, писать программы снова и снова, снова и снова, снова и снова, и каждый раз они начинаются как обычно:
Хочу его сделать для OMDAZZ EPC4 на 10К элементов, чтобы было. А там как пойдет. В общем и целом, план такой. Есть система регистров [ax, bx, cx, dx, sp, bp, si, di] и этих регистров на самом деле, всего лишь 8. Есть и другие регистры, сегментные [es, cs, ds, ss] и специальные [flags, ip]. Они тоже являются регистрами, но доступ к ним другого характера.
Как и обычно, процессор мне надо сделать именно простой, напоминающий 8088, потому что он простой. На этот раз я хочу попробовать вариант сделать не как раньше делал, через сначала считывание опкода, префиксов, а вот попробовать сделать считывание опкода и выполнение его. Пока не придумал как это будет точно, но посмотрим по ходу дела, как говорится. Посмотрим... Например, можно сделать сохранение регистров на негативном CLK, почему бы и нет, спектрум так вот смог сделать.
110 PRINT "HELLO WORLD! "; 220 GOTO 10И это классно, потому что мне нравится не вылазить с песочницы и делать одно и тоже годами, такова моя судьба. Теперь вот моя идея заключается в том, чтобы писать в блог все что я могу придумать по поводу того, что такое 8088, который является моим любимым процессором и который делаю годами и никак сделать не могу, потому что лень заела. Не знаю как бы его сделать, но начну.
Хочу его сделать для OMDAZZ EPC4 на 10К элементов, чтобы было. А там как пойдет. В общем и целом, план такой. Есть система регистров [ax, bx, cx, dx, sp, bp, si, di] и этих регистров на самом деле, всего лишь 8. Есть и другие регистры, сегментные [es, cs, ds, ss] и специальные [flags, ip]. Они тоже являются регистрами, но доступ к ним другого характера.
Как и обычно, процессор мне надо сделать именно простой, напоминающий 8088, потому что он простой. На этот раз я хочу попробовать вариант сделать не как раньше делал, через сначала считывание опкода, префиксов, а вот попробовать сделать считывание опкода и выполнение его. Пока не придумал как это будет точно, но посмотрим по ходу дела, как говорится. Посмотрим... Например, можно сделать сохранение регистров на негативном CLK, почему бы и нет, спектрум так вот смог сделать.
1// ЛИСНЫЙ ПРОЦЕССОР 8088 2module fox86 3( 4 input clock, // Тактовая частота 25 5 input reset_n, // Сброс процессора 6 input ce, // Разрешение работы процессора 7 output [19:0] address, // Адрес 1Мб 8 input [ 7:0] in, // Входящие 9 output reg [ 7:0] out, // Исходящие 10 output reg we // Разрешение на запись 11); 12endmoduleТак выглядят процессоры, которые создаются лисами. Стандарт. Теперь переходим к разработке системы. Обычно я делаю сначала считывание префиксов, после идет разбор байта modrm, считываются данные операндов из регистров или памяти, потом выполняются и записываются обратно. Это тоже стандартная схема работы. Лучше я пока придумать не смог.
14 мар 2023 Вт
Мне как-то нечего писать сюда
Обнаружил то, что спустя два месяца я полностью выдохся и мне нечего писать в свой блог. Продолжаю постепенно делать то, что делал, это процессор AVR, вот к примеру, сегодня я сделал вывод стартового экрана для Award Modular, и это оказалось не так сложно. У меня нет до сих пор модуля SDRAM, так что тест памяти будет невозможен, но с другой стороны, его легко можно будет сделать просто так, без всякого теста памяти, а просто счетчиком.
Проснулся я сегодня с мыслью о трехмерной графике, и опять понимания, что ничего не выйдет, начал снова задавать один и тот же вопрос, который задаю уже на протяжении столетий — 3ой4? Ну зачем мне эта трехмерная графика, когда я не могу ничего сделать в трехмерном пространстве. Куб вращать? Надоело уже постоянно его вращать, без конца только и занят кубовращением бессмысленным. Можно же уже и перестать это делать и нормальное что-то давно сделать, но нет же, я вращаю кубы налево и направо, сверху вниз.
Когда-то давно была идея сделать на верилоге этот куборотор, но есть одна колоссальная проблема, которая заключается в том, что это далеко не так просто, вообще. Сделать на верилоге трехмерный ускоритель... это же ужасно трудно, и все равно, зачем оно мне так надо? Ну вообще же не надо совершенно! Не нужно, не нужно, не нужно... а хочется. Никак не могу убедить себя в том, что мне это не нужно, потому что все время хочется сделать и все тут. Ну как же быть то...
Вся эта затея с трехмерной графикой мне кажется идиотской.
Вот реально, допустим, ну сделаю я к примеру, кубы. И что дальше то, что дальше делать буду? На этом все, кубы и это все, на что я способен? Больше нет ничего, кроме кубов? Мне даже обычную трехмерную модель загрузить сложно, не то что все остальное сделать. У меня еще есть одна странная мысль, которая заключается в том, чтобы сделать симулятор космического полета к другим планетам и даже звездам. Для этого потребуется создать трехмерный космический корабль и я не знаю, как это сделать, ведь его нужно делать, а как, неизвестно. Сделать на ПЛИС такую штуку, типа, вылетаешь с планеты и летишь куда-то за определенное время. Мысли сумбурны и не оформлены, да и постоянное ощущение, что мне это не будет нужно. И это и правда, мне не будет нужно, это так.
Может, сделать рейтрейсинг на ПЛИС?.. А зачем.. нет, я все-таки упираюсь в одну и ту же фразу — зачем? Нет никакого смысла, незачем, а если это так, то тогда может, просто отпустить эту тему? Не все так просто! Я не могу ее отпустить. Уже сколько раз пытался, но не могу.
Единственное, что я понял за все время, что занимаюсь плисами и верилогом, это только одно, мне все это не нужно. Ни верилог, ни плис, ни програмирование, ни вообще что-либо, кроме бесконечного прослушивания музыки. А раз так, то мне надо сделать аудиоплеер!
— А зачем?
Ахахахаха! Вот именно, а зачем, зачем, зачем, зачем? Этот дебильный вопрос не отпускает. Даже такую важную штуку для меня, как музыка, я не хочу делать, не вижу смысла. А зачем? Есть же комп. Для чего мне надо напрягаться и делать что-то, когда я просто одену наушники и буду прослушивать себе спокойно любую музыку.
Ответ на вопрос "Зачем" есть только один "Шутки ради". Больше мне делать все это незачем.
Проснулся я сегодня с мыслью о трехмерной графике, и опять понимания, что ничего не выйдет, начал снова задавать один и тот же вопрос, который задаю уже на протяжении столетий — 3ой4? Ну зачем мне эта трехмерная графика, когда я не могу ничего сделать в трехмерном пространстве. Куб вращать? Надоело уже постоянно его вращать, без конца только и занят кубовращением бессмысленным. Можно же уже и перестать это делать и нормальное что-то давно сделать, но нет же, я вращаю кубы налево и направо, сверху вниз.
Когда-то давно была идея сделать на верилоге этот куборотор, но есть одна колоссальная проблема, которая заключается в том, что это далеко не так просто, вообще. Сделать на верилоге трехмерный ускоритель... это же ужасно трудно, и все равно, зачем оно мне так надо? Ну вообще же не надо совершенно! Не нужно, не нужно, не нужно... а хочется. Никак не могу убедить себя в том, что мне это не нужно, потому что все время хочется сделать и все тут. Ну как же быть то...
Вся эта затея с трехмерной графикой мне кажется идиотской.
Вот реально, допустим, ну сделаю я к примеру, кубы. И что дальше то, что дальше делать буду? На этом все, кубы и это все, на что я способен? Больше нет ничего, кроме кубов? Мне даже обычную трехмерную модель загрузить сложно, не то что все остальное сделать. У меня еще есть одна странная мысль, которая заключается в том, чтобы сделать симулятор космического полета к другим планетам и даже звездам. Для этого потребуется создать трехмерный космический корабль и я не знаю, как это сделать, ведь его нужно делать, а как, неизвестно. Сделать на ПЛИС такую штуку, типа, вылетаешь с планеты и летишь куда-то за определенное время. Мысли сумбурны и не оформлены, да и постоянное ощущение, что мне это не будет нужно. И это и правда, мне не будет нужно, это так.
Может, сделать рейтрейсинг на ПЛИС?.. А зачем.. нет, я все-таки упираюсь в одну и ту же фразу — зачем? Нет никакого смысла, незачем, а если это так, то тогда может, просто отпустить эту тему? Не все так просто! Я не могу ее отпустить. Уже сколько раз пытался, но не могу.
Единственное, что я понял за все время, что занимаюсь плисами и верилогом, это только одно, мне все это не нужно. Ни верилог, ни плис, ни програмирование, ни вообще что-либо, кроме бесконечного прослушивания музыки. А раз так, то мне надо сделать аудиоплеер!
— А зачем?
Ахахахаха! Вот именно, а зачем, зачем, зачем, зачем? Этот дебильный вопрос не отпускает. Даже такую важную штуку для меня, как музыка, я не хочу делать, не вижу смысла. А зачем? Есть же комп. Для чего мне надо напрягаться и делать что-то, когда я просто одену наушники и буду прослушивать себе спокойно любую музыку.
Ответ на вопрос "Зачем" есть только один "Шутки ради". Больше мне делать все это незачем.
10 мар 2023 Пт
Подключил почти все
Осталось сделать sdram и было бы хорошо, если не было бы так страшно. Мне кажется, что эта история с sdram — это такая же история, что с алгоритмами сортировки, которые я никак сделать не мог только потому, что мне было страшно их читать, а на деле оказалось, что я придумал проблему. Планирую я эту sdram сделать через icarus, с проверкой на реальной схеме тут же, причем можно сделать такой мини-процессор, чтобы точно быть уверенным в том, что работать будет. Я хочу использовать эту память в проекте, где у меня avr процессор.
Как приблизительно она будет работать.
При чтении и записи в память, я буду использовать порты, как наиболее удобный метод. То есть, выставлять адрес в порт, и потом последовательно считывать оттуда или писать. Этот способ наиболее быстрый, на самом деле, хотя можно еще и маппить на память, но я так делать не хочу, лучше делать обмен с внешними девайсами через порты делать и я буду думать, как сделать это намного лучше.
Полагаю, у меня будет несколько ревизии памяти. Видимо, первую ревизию стоит сделать как можно проще. Подумал, что можно сделать так.
Обычно память маппят на общее адресное пространство, что правильно так делать, но не в этом случае. Мне просто нужен доступ в память любым методом, и это — один из них. Так что буду его делать.
Дело в том, что память работает на частоте 100 мгц, так что я буду фиксировать статус BSY только на негативном фронте CLK100 во время CLK25=0 (третий такт от начала). Это позволит избежать многих проблем.
Как приблизительно она будет работать.
- При получении сигнала WE, останавливать процессор и выполнять запись в память
- При получении RD=1 немного сложнее будет, надо чтобы он сразу же останавливал процессор
При чтении и записи в память, я буду использовать порты, как наиболее удобный метод. То есть, выставлять адрес в порт, и потом последовательно считывать оттуда или писать. Этот способ наиболее быстрый, на самом деле, хотя можно еще и маппить на память, но я так делать не хочу, лучше делать обмен с внешними девайсами через порты делать и я буду думать, как сделать это намного лучше.
Полагаю, у меня будет несколько ревизии памяти. Видимо, первую ревизию стоит сделать как можно проще. Подумал, что можно сделать так.
- Выставляется адрес через порты
- Если записываем, то пишется байт в порт
- Делается запись команды - RD/WR в какой-то из портов
- Ожидается результат через статус BSY
- Читается байт данных из порта (если читаем)
Обычно память маппят на общее адресное пространство, что правильно так делать, но не в этом случае. Мне просто нужен доступ в память любым методом, и это — один из них. Так что буду его делать.
Дело в том, что память работает на частоте 100 мгц, так что я буду фиксировать статус BSY только на негативном фронте CLK100 во время CLK25=0 (третий такт от начала). Это позволит избежать многих проблем.
09 мар 2023 Чт
Делаю кучу шаблонов
Решил, что на сайте у меня будет куча шаблонов и билдов разных мастей для всего подряд. Сделал целый ворох этих шаблонов для своей девборды DE0. Навернул, например, код, где с помощью процессора AVR можно обновлять видеопамять не напрямик, а через запись в порты с автоинкрементом. Это позволит сделать так, чтобы общая память оставалась целой как можно больше. Это касается только записи, но не чтения, с этим пока что не сделал и не знаю, пока нужно ли это делать. Предполагаю, что в основном это будет касаться именно записи — для будущего, там где буду делать видеоадаптер.
Творческий день очень был, и на работе тоже, кстати получилось что-то сделать более-менее. Что хочу сделать то? Ну хотя бы тот самый муляж биоса для начала, а для этого мне требуется изменять знакогенератор, чтобы вывести тот самый Award Mordular. Я делал для софт-процессора Z80, но это такая тягомотина... оно не стоит потраченных на него усилий, когда можно сделать тоже самое, но гораздо быстрее и проще.
Как обычно, сегодня я не выспался, и вчера и позавчера и как всегда.
Творческий день очень был, и на работе тоже, кстати получилось что-то сделать более-менее. Что хочу сделать то? Ну хотя бы тот самый муляж биоса для начала, а для этого мне требуется изменять знакогенератор, чтобы вывести тот самый Award Mordular. Я делал для софт-процессора Z80, но это такая тягомотина... оно не стоит потраченных на него усилий, когда можно сделать тоже самое, но гораздо быстрее и проще.
Как обычно, сегодня я не выспался, и вчера и позавчера и как всегда.
08 мар 2023 Ср
Делаю шаблоны кода
Сегодня сделал заготовку, стартовый проект, можно сказать, шаблон для AVR процессора. Я оснастил его простым видеоадаптером, который берет данные для знакогенератора из 2К ROM, а данные для 80 x 50 символьной сетки из 4Кб общей памяти процессора. Сама по себе организация памяти это 64Кб для ROM + 64K для RAM. Конечно же, на девборде DE0, 130К из 308К возможных — я специально оставил там места для 125К видеоадаптера 640 x 400 x 16 цветов.
Вот такие вот технические характеристики устройства. Занимает этот процессор 1550 ALM (это примерно 3000 LE), не скажу, чтобы прямо значительно, но чем больше ALM/LE, тем дольше синтез проекта занимает по времени, так что, лучше делать процессоры небольшими, чтобы быстрее компилировался.
Это лишь первая итерация. Вторая итерация проекта будет включать в себя поддержку PS/2 Keyboard, SDCARD, но пока что без SDRAM, потому что я еще никак доделать не могу, но обязательно нужно. Вообще, у меня в планах сделать видеокарту, которая управляется командами и буфером команд, то есть, процессор складывает необходимые данные в буфер команд и дает команду на обработку, а видеопроцессор это все дело выполняет. Запись в память происходит через порты, последовательно, чтобы ускорить передачу.
У меня сегодня появилась идея такая, сделать фейковый процесс инсталяции Windows 98, и проверить на нем как раз вот это все, все возможности контроллера видеопроцессора. В будущем, я обязательно должен освоить работу с SDRAM, это прямо реально нужно мне, очень нужно! Может даже и сделаю этот SDRAM в ближайшее время как раз. Надо еще дописать все остальное, такое как тестбенчи и верилятор. Это небольшая проблема, но все-таки, надо написать шаблон для верилятора именно отдельный поначалу, чтобы потом его легко было мержить с другими проектами.
И да, у меня только завтра и послезавтра рабочий день, а потом долгожданный отпуск
Вот такие вот технические характеристики устройства. Занимает этот процессор 1550 ALM (это примерно 3000 LE), не скажу, чтобы прямо значительно, но чем больше ALM/LE, тем дольше синтез проекта занимает по времени, так что, лучше делать процессоры небольшими, чтобы быстрее компилировался.
Это лишь первая итерация. Вторая итерация проекта будет включать в себя поддержку PS/2 Keyboard, SDCARD, но пока что без SDRAM, потому что я еще никак доделать не могу, но обязательно нужно. Вообще, у меня в планах сделать видеокарту, которая управляется командами и буфером команд, то есть, процессор складывает необходимые данные в буфер команд и дает команду на обработку, а видеопроцессор это все дело выполняет. Запись в память происходит через порты, последовательно, чтобы ускорить передачу.
У меня сегодня появилась идея такая, сделать фейковый процесс инсталяции Windows 98, и проверить на нем как раз вот это все, все возможности контроллера видеопроцессора. В будущем, я обязательно должен освоить работу с SDRAM, это прямо реально нужно мне, очень нужно! Может даже и сделаю этот SDRAM в ближайшее время как раз. Надо еще дописать все остальное, такое как тестбенчи и верилятор. Это небольшая проблема, но все-таки, надо написать шаблон для верилятора именно отдельный поначалу, чтобы потом его легко было мержить с другими проектами.
И да, у меня только завтра и послезавтра рабочий день, а потом долгожданный отпуск
07 мар 2023 Вт
Скоро отпуск на 14 дней
Давно я ждал этот отпуск и надеюсь, что он пройдет нормально, а не как обычно. Хочется вот писать рассказы разные, да никак не позволяет мне фантазия и не только. Хотя, в основном, фантазия, конечно же. Идеи в каком-то роде, есть даже, а реализация их всегда сложная. К тому же, почему я пишу рассказы, я уже и ранее объяснял, чтобы на это время уйти в другую реальность, мыслями оказаться в другой сфере.
Из того, что сегодня мне удалось сделать, это лишь только прием скан-кодов и разбор их на нажатие кнопки, сохранение в буфере, но и только, более ничего. На самом деле, это тоже неплохо, только вот при получении кнопок их скан-коды выходят именно такие, которые пришли от клавиатуры, а это AT&T, их надо преобразовывать в ASCII, с учетом, кстати говоря, чтобы реагировало на нажатие SHIFT. Это не так все просто сделать, скорее, муторно, долго. Главное то, что принимает коды клавиш и то уже спасибо. Проверил на ПЛИС, да, все работает нормально, пока что. Попробую для начала сделать просто, а сложнее мне и не нужно. Нужно раздобыть преобразование в ASCII.
Хочу сделать модуль SDRAM, в данном случае, немного посложнее, чем просто модуль, пусть он будет совмещен с видеокартой, выводом на экран. Как я и говорил, это непросто будет, но ведь я уже делал такой модуль раньше, так что, почему бы я не сделал бы еще раз его? У меня для этого есть все возможности! Просто надо начать делать да и все, к тому же, у меня сейчас есть и верилятор, где я бы мог проверить работу модуля.
Из того, что сегодня мне удалось сделать, это лишь только прием скан-кодов и разбор их на нажатие кнопки, сохранение в буфере, но и только, более ничего. На самом деле, это тоже неплохо, только вот при получении кнопок их скан-коды выходят именно такие, которые пришли от клавиатуры, а это AT&T, их надо преобразовывать в ASCII, с учетом, кстати говоря, чтобы реагировало на нажатие SHIFT. Это не так все просто сделать, скорее, муторно, долго. Главное то, что принимает коды клавиш и то уже спасибо. Проверил на ПЛИС, да, все работает нормально, пока что. Попробую для начала сделать просто, а сложнее мне и не нужно. Нужно раздобыть преобразование в ASCII.
Хочу сделать модуль SDRAM, в данном случае, немного посложнее, чем просто модуль, пусть он будет совмещен с видеокартой, выводом на экран. Как я и говорил, это непросто будет, но ведь я уже делал такой модуль раньше, так что, почему бы я не сделал бы еще раз его? У меня для этого есть все возможности! Просто надо начать делать да и все, к тому же, у меня сейчас есть и верилятор, где я бы мог проверить работу модуля.
03 мар 2023 Пт
Доделал этот Award Modular
Или, проще говоря,
Сколько же я пытался разобраться в этом, сколько страдал. Сегодня еще сделал функцию деления 16-битного числа HL на DE, с результатом в HL и остатком в DE. Потребовалось дополнительные 2 байта памяти для этого действия.
Позже попробую сделать вывод на экран прогресса проверки "памяти", так сказать, а далее хочу сделать так, чтобы можно было легко запустить синий экран великого Биоса и не париться сильно с этим вопросом, сделать все этим менюшки там фейковые. Все это только для того, чтобы у меня был вывод биоса и ощущение того, что наконец-то доделал то что хотел.
Прошло ровно 2 месяца как я каждый день что-то записываю в блоге, не пропуская ни одного дня. Начал 4 января, а сейчас уже 3 марта. Это меня радует, хоть я и обещал, что писать могу не всегда, но мне пока что есть о чем писать.
Energy Star EPA POLLUTION PREVENTER
наконец-то готов.Сколько же я пытался разобраться в этом, сколько страдал. Сегодня еще сделал функцию деления 16-битного числа HL на DE, с результатом в HL и остатком в DE. Потребовалось дополнительные 2 байта памяти для этого действия.
Позже попробую сделать вывод на экран прогресса проверки "памяти", так сказать, а далее хочу сделать так, чтобы можно было легко запустить синий экран великого Биоса и не париться сильно с этим вопросом, сделать все этим менюшки там фейковые. Все это только для того, чтобы у меня был вывод биоса и ощущение того, что наконец-то доделал то что хотел.
Прошло ровно 2 месяца как я каждый день что-то записываю в блоге, не пропуская ни одного дня. Начал 4 января, а сейчас уже 3 марта. Это меня радует, хоть я и обещал, что писать могу не всегда, но мне пока что есть о чем писать.
02 мар 2023 Чт
Особо ничего нового
Сегодня день, в котором ничего такого не произошло, просто работал, что-то делал, выполнял определенные задачи. Часто размышляю о том, что бы мне хотелось сделать на ПЛИС, и даже если и думаю, то все эти проекты довольно сложные для их реализации. К примеру думал о том, чтобы сделать нейросеть. Как можно вспомнить, искусственная нейросеть опирается на нейроны, реализованные через сигмоиду, то есть вот такую функцию
Она сложна по двум причинам для своей реализации. Во-первых, тут требуется найти экспоненту дробного числа, что уже само по себе непростое дело, и, во-вторых, требуется разделить число. Сложность вычисления очень велика для каждого нейрона.
Как вообще вычислять это дело? К примеру, экспонента может быть разложена следующим образом:
Для нейронной сети хорошо бы использовать float-point, но вполне даже может пригодиться число половинной точности, так что количество умножении может быть к примеру, 10 или 11, по количеству двоичных чисел в мантиссе. Значит, 11 тактов придется потратить на то, чтобы возвести экспоненту в степень. Однако, это не все! Как минимум, надо сделать деление, и на деление тоже тратится 11 тактов (длина мантиссы). Кстати, в случае с отрицательной экспонентой, то есть, при возведении в степень отрицательного значения, можно лишь взять другой набор значений.
Получается, чтобы вычислить один нейрон, потребуется минимально 22 такта + то количество тактов, которое нужно для сложения и умножения весов на входящие значения. Допустим, что мы даже так, тратим 50 тактов на вычисление одного нейрона, то сколько нейронов можно будет вычислить в секунду? На частоте 25 мгц это будет 500 тыс нейронов. Это в целом, неплохо, если нейросеть не делать очень большой.
У меня постоянный запар какой-то идет по оптимизации, чем бы ни занимался, хочется сделать все с максимальной скоростью. В итоге же я ничего не делаю! Да сколько можно то! Надо просто брать и делать и вообще на все плевать, хоть медленно, но сделать, чтобы работало.
Она сложна по двум причинам для своей реализации. Во-первых, тут требуется найти экспоненту дробного числа, что уже само по себе непростое дело, и, во-вторых, требуется разделить число. Сложность вычисления очень велика для каждого нейрона.
Как вообще вычислять это дело? К примеру, экспонента может быть разложена следующим образом:
Для нейронной сети хорошо бы использовать float-point, но вполне даже может пригодиться число половинной точности, так что количество умножении может быть к примеру, 10 или 11, по количеству двоичных чисел в мантиссе. Значит, 11 тактов придется потратить на то, чтобы возвести экспоненту в степень. Однако, это не все! Как минимум, надо сделать деление, и на деление тоже тратится 11 тактов (длина мантиссы). Кстати, в случае с отрицательной экспонентой, то есть, при возведении в степень отрицательного значения, можно лишь взять другой набор значений.
Получается, чтобы вычислить один нейрон, потребуется минимально 22 такта + то количество тактов, которое нужно для сложения и умножения весов на входящие значения. Допустим, что мы даже так, тратим 50 тактов на вычисление одного нейрона, то сколько нейронов можно будет вычислить в секунду? На частоте 25 мгц это будет 500 тыс нейронов. Это в целом, неплохо, если нейросеть не делать очень большой.
У меня постоянный запар какой-то идет по оптимизации, чем бы ни занимался, хочется сделать все с максимальной скоростью. В итоге же я ничего не делаю! Да сколько можно то! Надо просто брать и делать и вообще на все плевать, хоть медленно, но сделать, чтобы работало.
<< Ранние записи |
Поздние записи >>