Forth http://www.fforum.winglion.ru/ |
|
Как сделать форт-процессор 2022 http://www.fforum.winglion.ru/viewtopic.php?f=3&t=3322 |
Страница 26 из 28 |
Автор: | Total Vacuum [ Вт дек 06, 2022 00:03 ] |
Заголовок сообщения: | Re: Как сделать форт-процессор 2022 |
В перерыве футбола... Проверил в примитивном тестовом варианте (с десяток строк на верилоге) работу VGA на Spartan-3E Starter Kit, процессором оно пока не управляется, но красный квадратик на экране уже рисует. Завел 5 ножек (red, green, blue, hsync, vsync), уменьшил частоту тактов до 25MHz, чтобы не пересчитывать, взял цифры из User Guide к этой плате, возможно где-то и ошибся на традиционную плюс/минус единицу, но главное, что монитор распознал картинку и нарисовал. Теперь надо подумать, как общаться с этим VGA: встроенной памяти BRAM в ПЛИС для графики мало, но для текстового режима или спрайтов/тайлов вполне должно хватить. Ну или попробовать задействовать отдельную RAM, она вроде есть на этой плате. Внезапно одна проблема вылезла: мониторов/телевизоров с разъемом VGA в шаговой доступности ни на работе, ни дома нет. |
Автор: | Total Vacuum [ Вт дек 06, 2022 11:21 ] |
Заголовок сообщения: | Re: Как сделать форт-процессор 2022 |
Hishnik писал(а): Есть такая, только у САПР не хочет обновляться лиценZия... Ох... Побродил по форумам, например, на electronix.ru много свежих постов по говинам, т.е. люди как-то проблему решают и вроде как лечение не слишком сложное Ладно, привезут плату - будем разбираться
|
Автор: | KPG [ Вт дек 06, 2022 23:14 ] |
Заголовок сообщения: | Re: Как сделать форт-процессор 2022 |
Freecores Хаб на Github. P.S. Форт в "картинках" при поисковом запросе на Github в гугле картинках. (ya.ru почему то, так не может) IRCIS Цитата: IRCIS — это эзотерический язык программирования, в котором программа существует в двумерной сетке ячеек, где каждая ячейка содержит одну инструкцию, и выполнение может происходить в любом кардинальном направлении по этой сетке — не только слева направо, но и справа налево, сверху вниз и снизу вверх. Он имеет визуализатор, который создает анимированное представление выполнения программы в HTML и CSS. Вдохновленный Befunge. Из подборки Programming Languages for Enthusiasts |
Автор: | Total Vacuum [ Чт дек 08, 2022 19:04 ] |
Заголовок сообщения: | Re: Как сделать форт-процессор 2022 |
LCD на Starter Kit, кстати, тоже завелся, причем не стал делать специальный отдельный блок на верилоге, а работаю с дисплеем программно через обычный GPIO. И даже бродилка завелась, правда на текстовом экране 16x2 выглядит ну очень забавно Если быть точным, фактическое разрешение 16x8, для рисования задействовал 8 символов пользователя, имеющихся на борту этого LCD. Не совсем понятно, почему в User Guide пишут, что LCD медленный. У меня бродилка летает так, что пришлось паузу ставить. ссылка на изображение |
Автор: | Total Vacuum [ Ср янв 04, 2023 15:19 ] |
Заголовок сообщения: | Re: Как сделать форт-процессор 2022 |
Hishnik писал(а): Total Vacuum писал(а): Заказал себе в Китае для тренировок плату Tang Nano 9K (там стоит ПЛИС Gowin GW1NR-LV9), должны прислать в этом году. Там вроде какие-то подводные камни с лицензиями и синтезом, но буду решать проблемы по мере их поступления Кто-нибудь имел дело с такой плисиной? Поделитесь опытом... Есть такая, только у САПР не хочет обновляться лиценZия... При подаче питания от USB светодиоды однократно загораются и гаснут один за другим. Подключил ради интереса к телевизору через HDMI и с удивлением обнаружил красивую цветную картинку (там что-то типа настроечной ТВ-таблицы), по всей видимости, какой-то тест от PicoRV зашит. Скачал с gowinsemi среду разработки (Education), а с сайта sipeed программатор и драйвера. Взял тестовый пример с гитхаба, несколько раз менял его и заливал в плату. Все прекрасно. Кстати, очень удобно, что среда разработки чем-то напоминает Xilinx ISE, так что ползать по меню и искать где что не пришлось. Можно шить или в SRAM (тогда после рестарта загружается старая прошивка из flash), или во flash (тогда после рестарта будет запускаться уже новая прошивка). Вот и думаю теперь, что я делаю не так? И чем меня не устраивает Education Version? Есть ли какие-то подводные камни? Говинцы пишут, что Цитата: Our Education Version does not require license but support only a small number of GOWIN Devices. Not recommended for business use. Но GW1NR-9 вроде как поддерживается, а другие девицы мне (пока) и не нужны...Так что буду развлекаться после праздников... |
Автор: | Hishnik [ Ср янв 04, 2023 15:38 ] |
Заголовок сообщения: | Re: Как сделать форт-процессор 2022 |
Total Vacuum писал(а): И чем меня не устраивает Education Version? Есть ли какие-то подводные камни? Если вопрос только в размере ПЛИС, то никаких проблем быть не должно. Xilinx тоже так делает, тут вопрос только в том, какая плата куплена и поддерживается ли установленная на ней ПЛИС бесплатной лицензией. Мелкие явно поддерживаются. А education надо скачать... а то у меня старая лицензия кончилась. Tang Nano, соответственно, лежит и пылится. |
Автор: | Total Vacuum [ Ср янв 11, 2023 11:19 ] |
Заголовок сообщения: | Re: Как сделать форт-процессор 2022 |
А тем временем где-то в параллельной вселенной... Процессор хоть и со скрипом, но уже запустился на Tang Nano 9K. Пусть в примитивном одноядерном варианте с выводом тестов на светодиоды, но уже видно, что дышит и слушается. Теперь надо разбираться с PLL и частотами, с BSRAM (аналог Block RAM у Xilinx), с UART (почему-то с наскока не заработал вывод в терминал) и т.д. и т.п. Разберусь рано или поздно upd. Вывод в терминал заработал, бродилка бродит. И двухъядерный основной процессор тоже завелся без проблем. Забавно, что потребление ресурсов практически такое же, как и в Xilinx. Единственное заметное отличие - использование BRAM: в Xilinx для двухъядерного процессора получилось 5 блоков (4 общих для двух ядер блока BRAM в качестве RAM и еще один общий для двух ядер блок BRAM для хранения прошивки), а в Gowin почему-то получилось 6 блоков (4 общих для RAM и почему-то 2 отдельных (?) для прошивки). |
Автор: | KPG [ Вт янв 17, 2023 04:43 ] |
Заголовок сообщения: | Re: Как сделать форт-процессор 2022 |
Немного оффтопика. Agon Цитата: Z80 (eZ80F92-18,432МГц 24 address bus) компьютер в 2-3раза быстрее ZX-Next -28МГц с графикой на основе ESP32. Форт на него тоже сделали Agon-Forth P.S. А, железных Форт контроллеров даже сравнимых с eZ80 ещё нет, поэтому Форт и запускают на всём стороннем железе и реализуют на всяких языках пpограммирования. Есть только вариант FPGA для Форт процессорв не составляющий массовку изделий с железным Форт. |
Автор: | Hishnik [ Вт янв 17, 2023 10:26 ] |
Заголовок сообщения: | Re: Как сделать форт-процессор 2022 |
KPG писал(а): Есть только вариант FPGA для Форт процессорв не составляющий массовку изделий с железным Форт. Не вполне понимаю, чем это плохо. FPGA позволяют заниматься именно разработкой, а не монтажом существующей элементной базы с ее последующим программированием. |
Автор: | KPG [ Вт янв 17, 2023 15:41 ] |
Заголовок сообщения: | Re: Как сделать форт-процессор 2022 |
Hishnik писал(а): Не вполне понимаю, чем это плохо. FPGA позволяют заниматься именно разработкой, а не монтажом существующей элементной базы с ее последующим программированием. Для разработчика, на определённом этапе прототипироваия/разработки, конечно же хорошо, но это решение, в итоге как то должно привести и к созданию ниши ASIC решений пользовательской электроники, в том числе и для стороннего разработчика использующего этот ASIC. P.S. Вот почему в магазинах продажи ASIC нет роосийской элементной МК базы чипов микросхем? (даже безотносительно Форт) |
Автор: | Hishnik [ Вт янв 17, 2023 20:37 ] |
Заголовок сообщения: | Re: Как сделать форт-процессор 2022 |
KPG писал(а): Вот почему в магазинах продажи ASIC нет роосийской элементной МК базы чипов микросхем? (даже безотносительно Форт) Потому что производство окупается при большой партии микросхем. Делать в надежде на закупку по одной штуку нерационально. Для экспериментов в области электроники есть ПЛИС. |
Автор: | Total Vacuum [ Ср янв 18, 2023 10:36 ] |
Заголовок сообщения: | Re: Как сделать форт-процессор 2022 |
KPG писал(а): Немного оффтопика. Прикольная штука. Только не совсем понятно, почему центральным процессором сделан ez80, а не в разы более шустрый esp32. Чтобы оставаться в более легком весе (8 бит) и носить гордое звание "ретро"?
Agon Цитата: Z80 (eZ80F92-18,432МГц 24 address bus) компьютер в 2-3раза быстрее ZX-Next -28МГц с графикой на основе ESP32. |
Автор: | KPG [ Вт янв 24, 2023 00:49 ] |
Заголовок сообщения: | Re: Как сделать форт-процессор 2022 |
Некоторая заметка с reddit по реализации UM/MOD на Форт в составе FPGA. Автоперевод |
Автор: | Hishnik [ Вт янв 24, 2023 13:48 ] |
Заголовок сообщения: | Re: Как сделать форт-процессор 2022 |
Последовательное деление занимает не так уж много места. Проще сделать команду "шаг деления", которая будет давать бит за такт, и повторять ее 16/32 раз. |
Автор: | Total Vacuum [ Пт авг 11, 2023 01:42 ] |
Заголовок сообщения: | Re: Как сделать форт-процессор 2022 |
Вернемся ненадолго к нашим баранам. Было: Калькуляторный тест про 8 ферзей, решения задачи на разных языках и платформах и литературный перевод под мой Форт-процессор ассемблерного решения для ARM. В режиме эмуляции ARM мой процессор уступал ARM'у в 8.92 раз (фактическое отставание было меньше, после оптимизации прыжков вперед стало 8.28). Далее были другие версии ядра, отставание уменьшилось до 7.80, 7.10 и наконец до 6.51 для текущей боевой версии системы команд. Код: 0 nibble byte + word jz call ret @ ! swap pick nand - * rshift Для чуть упрощенной версии теста (без пары лишних загрузок/сохранений переменных r7/r8) проигрыш в 5.32 раза. Неплохо, но можно лучше.Как победить ARM? Надо бить в его слабые места (а у него оно по сути только одно - команды перехода, которые весят 3 такта), а также по максимуму подчищать свои хвосты. Делаем у себя за такт n (литерал), n call, n jz, 0 pick, n +, n -, а кроме того делаем за такт n @ и n ! для первых 16 адресов. В случае @/! пришлось немного схитрить (а кто мне может запретить? ) и закешировать короткие (0-15) адреса на регистрах ПЛИС. Компилируем, запускаем... Код: 0 09 [2] 0 r1 ! [1] MOV R1,#0 Отставание от ARM уже в 2.59 раз, а для упрощенного теста и того меньше - 2.17. Отлично, но можно еще лучше.0 149 [2] 0 r0 ! [1] MOV R0,#0 0 129 [2] 0 r6 ! [1] MOV R6,#0 [ ] : line40 [ ] LINE40: 08 158 D [3] r1 @ r3 @ - [1] CMP R1,R3 2C15 [2] line180 jz [3] BEQ LINE180 128 08 173 9 [4] r6 @ r1 @ s + ! [?] STR R6,[SP,R1,LSL #2] 08 113 09 [3] r1 @ 1 + r1 ! [1] ADD R1,R1,#1 158 129 [2] r3 @ r6 ! [1] MOV R6,R3 [ ] : line70 [ ] LINE70: 148 113 149 [3] r0 @ 1 + r0 ! [1] ADD R0,R0,#1 08 119 [2] r1 @ r2 ! [1] MOV R2,R1 [ ] : line90 [ ] LINE90: 118 11D 0B 119 [4] r2 @ 1 - dup r2 ! [1] SUBS R2,R2,#1 2105 [1] line40 jz [3] BEQ LINE40 118 173 8 139 [4] r2 @ s + @ r7 ! [?] LDR R7,[SP,R2,LSL #2] 128 138 D 0B 139 [5] r6 @ r7 @ - dup r7 ! [1] SUBS R7,R6,R7 2925 [1] line140 jz [3] BEQ LINE140 138 0B 1F F 0B 3 113 E 139 [9] r7 @ abs r7 ! [1] RSBMI R7,R7,#0 08 118 D 169 [4] r1 @ r2 @ - r8 ! [1] SUB R8,R1,R2 138 168 D [3] r7 @ r8 @ - [1] CMP R7,R8 2925 0 23E5 [3] skip90 jz 0 line90 jz : skip90 [3] BNE LINE90 [ ] : line140 [ ] LINE140: 128 11D 0B 129 [4] r6 @ 1 - dup r6 ! [1] SUBS R6,R6,#1 2A65 0 2305 [3] skip70 jz 0 line70 jz : skip70 [3] BNE LINE70 08 11D 0B 09 [4] r1 @ 1 - dup r1 ! [1] SUBS R1,R1,#1 08 173 8 129 [4] r1 @ s + @ r6 ! [?] LDR R6,[SP,R1,LSL #2] 2C15 0 2925 [3] skip140 jz 0 line140 jz : skip140 [3] BNE LINE140 [ ] : line180 [ ] LINE180: Боевая система команд не очень хорошо заточена под решение тестовой задачи - затачиваем. Хуже всего дела обстоят с abs - добавляем, так же печально с jnz - тоже добавляем. В итоге имеем такую суррогатную систему команд: Код: xxx xxx xxx abs word jz call ret @ ! dec dup inc - + jnz Здесь 3 свободных слота, при желании можно чем-то нужным наполнить. При этом не сказать, что команды очень уж экзотические, любой из них (кроме, может быть, abs) найдется место в чуть более развитой системе команд, например, в процессоре с 6-битными командами. Отставание в 4.5/3.4 раза для штатного/упрощенного теста.И в 1.98/1.52 раз, если делать за такт n, n call, n jz, 0 pick, n +, n -, а также n @ и n ! для коротких адресов. Ну и наконец чуть меняем логику работы inc/dec и делаем n inc, n dec и n abs за такт. Код: 40000 400099 [2] 0 r1 ! [1] MOV R1,#0 Отставание от ARM всего в 1.17 раз на упрощенном тесте. 40000 4000D9 [2] 0 r0 ! [1] MOV R0,#0 40000 4000B9 [2] 0 r6 ! [1] MOV R6,#0 [ ] `: line40` [ ] LINE40: 400098 40008D [2] r1 @ r3 - [1] CMP R1,R3 400D05 [1] `line180` jz [3] BEQ LINE180 4000B8 400098 9 [3] r6 @ r1 @ ! [?] STR R6,[SP,R1,LSL #2] 40009C [1] r1 inc [1] ADD R1,R1,#1 40008 4000B9 [2] r3 r6 ! [1] MOV R6,R3 [ ] `: line70` [ ] LINE70: 4000DC [1] r0 inc [1] ADD R0,R0,#1 400098 4000A9 [2] r1 @ r2 ! [1] MOV R2,R1 [ ] `: line90` [ ] LINE90: 4000AA [1] r2 dec [1] SUBS R2,R2,#1 400285 [1] `line40` jz [3] BEQ LINE40 [ ] [?] LDR R7,[SP,R2,LSL #2] 4000B8 4000A8 8 D B 4000C9 [6] r6 @ r2 @ @ - dup r7 ! [1] SUBS R7,R6,R7 400AB5 [1] `line140` jz [3] BEQ LINE140 4000C3 [1] r7 abs [1] RSBMI R7,R7,#0 400098 4000A8 D [3] r1 @ r2 @ - [1] SUB R8,R1,R2 D [1] - [1] CMP R7,R8 4006AF [1] `line90` jnz [3] BNE LINE90 [ ] `: line140` [ ] LINE140: 4000BA [1] r6 dec [1] SUBS R6,R6,#1 40058F [1] `line70` jnz [3] BNE LINE70 40009A [1] r1 dec [1] SUBS R1,R1,#1 400098 8 4000B9 [3] r1 @ @ r6 ! [?] LDR R6,[SP,R1,LSL #2] 400ABF [1] `line140` jnz [3] BNE LINE140 [ ] `: line180` [ ] LINE180: Кстатати, уже вижу пару-тройку мест, где есть возможность ускорить прошивки и под боевой процессор, и под суррогатный. Но уже лень пересчитывать, может позже при случае |
Страница 26 из 28 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |