KSM (на DE0) смотрится на Viewsonic в 800x600 хорошо, без лишней коррекции
- - - Добавлено - - -
На Lenovo ThinkVision (FullHD) смотрится с урезанным левым краем:
![]()
KSM (на DE0) смотрится на Viewsonic в 800x600 хорошо, без лишней коррекции
- - - Добавлено - - -
На Lenovo ThinkVision (FullHD) смотрится с урезанным левым краем:
![]()
Оно неважно где смотрится. Если нет единого соглашения о табуляциях (вот как Торвальдс сказал что будет 8 - и вешайтесь), то при выкладке по внешний мир надо все приводить к пробелам), у меня в репке есть clean.bat - он убивает все временные файлы и еще там такая строчка есть:
for /r "./%~1/hdl" %%9 in (*.v) do atxt32 %%9 %%9 -s3 -f
Это запуск моей утилиты конверсии для всех .v файлов, -s3 значит табуляции выравнены на 3, как в Квартусе. Ну и потом оно и в FAR и на гитхабе смотрится OK.
yu.zxpk,
На vievsonic картинка стала нормальной, зато на другом мониторе съехала влево. Что интересно, на моем устройстве видеозахвата картинка съезжает в точности так же.
Возможно, конечно, что дело опять в погрешности пиксельной частоты - я использую 50 Мгц вместо 49.5. Но, скорее, дело вообще в принципиально кривой поддержке квадратных режимов современными мониторами. Я пробовал смотреть картинку на Iyama x2483, каком-то древнем 24-дюймовом асере и на современном 4K самсунге. И везеде картинка попадала точно в экран, но на асере сработал auto adjust для подстройки картинки.
Можно было бы попробовать синтезировать точно 49.5 Мгц с помощью PLL, но не вижу особого смысла. Кроме того, двухпортовая видеопамять будет работать в двух разных некратных тактовых доменах, и неизвестно к чему это может привести.
Вот уж не задумывался даже, что это имеет какое-то значение. Для меня этот вопрос решается простенькой командой
Ладно, буду релизить видеоконтроллеры - пройдусь этой командой по всему дереву проекта.Код:sed -i 's/\t/ /g' *.v
Да нет, оно тупо заменяет таб на три пробела. Ну, тогда я, видимо, не совсем понимаю, чего именно мы добиваемся. Мне казалось, что проблема у нас в том, что текст, отлично смотрящийся в редакторе квартуса, в просмотрщике гитхаба превращается в мусор, из-за разного размера табуляций. Вот, например, кусок кода с гитхаба:
Если его пропустить через sed по приведенному выше правилу, то на том же гитхабе он становится таким:Код:case (interrupt_state) // нет активного прерывания i_idle : begin // Если поднят флаг - переходим в состояние активного прерывания if ((ide == 1'b1) & (interrupt_trigger == 1'b1)) begin interrupt_state <= i_req ; irq <= 1'b1 ; // запрос на прерывание end else irq <= 1'b0 ; // снимаем запрос на прерывания end // Формирование запроса на прерывание i_req : if (ide == 1'b0) interrupt_state <= i_idle ; else if (iack == 1'b1) begin // если получено подтверждение прерывания от процессора irq <= 1'b0 ; // снимаем запрос interrupt_trigger <= 1'b0; interrupt_state <= i_wait ; // переходим к ожиданию окончания обработки end // Ожидание окончания обработки прерывания i_wait : if (iack == 1'b0) interrupt_state <= i_idle ; endcase
Вроде все отлично, все отступы встали на свои места, ничего не разрушено.Код:case (interrupt_state) // нет активного прерывания i_idle : begin // Если поднят флаг - переходим в состояние активного прерывания if ((ide == 1'b1) & (interrupt_trigger == 1'b1)) begin interrupt_state <= i_req ; irq <= 1'b1 ; // запрос на прерывание end else irq <= 1'b0 ; // снимаем запрос на прерывания end // Формирование запроса на прерывание i_req : if (ide == 1'b0) interrupt_state <= i_idle ; else if (iack == 1'b1) begin // если получено подтверждение прерывания от процессора irq <= 1'b0 ; // снимаем запрос interrupt_trigger <= 1'b0; interrupt_state <= i_wait ; // переходим к ожиданию окончания обработки end // Ожидание окончания обработки прерывания i_wait : if (iack == 1'b0) interrupt_state <= i_idle ; endcase
Да, для этого верилога отлично. Просто моя утилита писалась изначально для ассемблера, она умеет в локальные метки и еще всякое. Вот в ассемблере где табуляции бывают после имен меток, мнемоник и операндов разной длины умная табуляция нужна. Для верилога нужна чтобы выравнивать строчные комментарии после кода:
Код:module am2901 ( input cp, // clock positive input [8:0] i, // operation code input [3:0] a, // port A address (readonly) input [3:0] b, // port B address (read/write) input [3:0] d, // direct data input output [3:0] y, // data output (3-state) // input oe_n, // Y output enable inout q0, // shift line Q-register LSB inout q3, // shift line Q-register MSB inout ram0, // shift line register stack LSB inout ram3, // shift line register stack MSB input cin, // carry input // output cout, // carry output output ovr, // arithmetic overflow output f3, // MSB of ALU output output zf, // (F[3:0] == 0) flag output (OC) output g_n, // carry generate output output p_n // carry propagate output );
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Финальный этап закончен - теперь в проекте вместо текстового терминала VT52 есть родные контроллеры КГД и КСМ.
Контроллеры выводят на VGA картинку в режиме 800*600*75 Гц. В режиме удвоения пикселей графическая картинка вписывается в экран по горизонтали пиксель-в-пиксель, по вертикали остается небольшое черное поле сверху. Вот пример графической картинки:
Скрытый текст
[свернуть]
Теперь, как и в оригинале, возможен вывод накладывающихся друг на друга текстовых и графических слоев:
Скрытый текст
[свернуть]
Как и раньше, для КСМ я использовал шрифт 8х12, как более четко выглядящий на современных мониторах. Для сравнение в дереве проекта лежит также и оригинальных шрифт КСМ, который можно загрузить в ПЗУ знакогенератора и посмотреть, как текст выглядел 30 лет назад:
Скрытый текст
[свернуть]
Кроме КГД+КСМ, я внес в проект еще несколько важных дополнений.
В корне проекта появился файл конфигурации conifg.v. С его помощью можно легко убирать из схемы ненужные модули:
Достаточно закомментировать строку - и соответствующий модуль будет заменен набором заглушек, подтягивающих некоторые выходные сигналы модуля к нужному уровню. Больше не надо для этого ковыряться в потрохах схемы. Ведущий и ведомый модули sdspi теперь объединены в один, и больше не нужно заботится о назначении ведущего контроллера - все будет сделано автоматически.Код:`define KSM_module // текстовый контроллер КСМ `define KGD_module // графический контроллер КГД `define IRPS2_module // второй последовательный порт ИРПС `define IRPR_module // параллельный порт ИРПР `define RK_module // диск RK-11/RK05 `define DW_module // жесткий диск DW `define DX_module // гибкий диск RX01 `define MY_module // гибкий диск двойной плотности MY
В схему добавлена возможность снижения тактовой частоты до 4.5 Мгц, спасибо VSLAV, предусмотревшего такую возможность в своем процессоре. Режим пониженной тактовой частоты включается переключателем sw[3]. Без этого режима поиграть в игрушки не получится. Некоторый набор игрушек я собрал на диск MY0, входящий в стартовый комплект initdisk.img.
Документация серьезно переработана, по модулям КГД и КСМ написана отдельная дока. Ну и выявлена и исправлена кучка мелких, но досадных багов, как обычно.
Вот, вроде бы, и все. Теперь ЭВМ ДВК-3 полностью закончена и готова к эксплуатации. Больше тут доделывать вроде как и нечего.
На всякий случай напоминаю, что проект лежит в репозитории https://github.com/forth32/mc1201-02.
Последний раз редактировалось IgorR76; 31.01.2021 в 18:46.
Круть![]()
forth32, проделанную вами работу трудно переоценить!
Предлагаю (на усмотрение модераторов) закрепить эту тему как важную в разделе.
forth32, можно уточнение от вас организационное? Я помню, что вы делали проект для своих конкретных целей и задач, но, если пользователь вроде меня (не программист и не электронщик) захотел бы дома для личного пользования иметь такую ДВК-3, что это в деньгах и как это внешне? Неужели снова голая плата с макарошками на столе, тебе надо ты и прошивай, иди лесом дядя Ваня? Или есть вариант или планируется вариант хоть как-то оформленный в плане корпуса и полностью готовый к эксплуатации? Вопрос прошу не считать "наездом" или "реальным запросом" - просто нужно чётко и этот момент осветить. Ведь далеко не все могут самостоятельно поднять такую железячину? Для тех кто не может, но хотел бы иметь "без проблемную" ДВК-3 как хобби, дома - нужен вариант plug&play из коробки, как с этим?
Наиболее близко выглядит китайская плата QMTECH Cyclone IV Starter Kit
https://www.aliexpress.com/item/33007471265.html
но к ней надо докупать или доделывать PS/2 адаптер и SD-card reader в формате Digilent PMOD:
https://store.digilentinc.com/pmod-p...use-connector/
https://store.digilentinc.com/pmod-m...osd-card-slot/
или купить б/у борду Terasic DE0, что малость дороже. Но ничего соединять не надо
https://www.terasic.com.tw/cgi-bin/p...o=364&PartNo=1
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)