Вход

Просмотр полной версии : PDP-11 на FPGA



Страницы : [1] 2 3 4

Hunta
15.03.2018, 22:10
Случайно нашлось увидеть (06.12.2017) - когда оно ко мне приехало :)


Набор для разработчика Cyclone+Cortex в моих щастливых руках :) Правда, когда я до него доберусь по плотному - пока не понятно - работа...

06.12.2017

Третий мой проект :)

Всякое, связанное с ним, буду выкладывать здесь: http://www.kpxx.ru/PDPonFPGA

Информация к размышлению для читающих эту тему.

Модуль процессора построен так, что я могу как генерировать реально существующие процессора (которы проходят или почти проходят тесты, созданные под эту модель) с учётом всех (или почти всех) их особенностей, так и собирать процессора с определёнными характеристиками.

То есть - есть некий набор характеристик. Были созданы описания реально существоваших моделей процессоров, в которых уже заданы эти характеристики. И когда генерируется прошивка - как параметр - идёт ссылка на какое-то описание процессора. Но никто не мешает насоздавать такие описания с любым уникальным набором характеристик. Типа - PDP-11/03 с FPP.

Тестирование.

Выставляю разные варианты процессора, синтезирую, заливаю прошивку и прогоняю некоторый (формальный) набор тестов, один из которых - зашитый в ОЗУ тест (из набора, но остальные нацелены на ДП), проверяющий работу таймера, эхо с консольного ввода и показ на регистре дисплея - условное название - тест 1000, а ещё один - тест памяти из ПЗУ - условное название - тест ZZ.

Объём теоретически доступной памяти - 512 кб, объём доступной реально памяти - зависит от процессора.

Варианты проца J11 с суффиксом wSOBBug - это попытка автора бороться за прохождения теста J11, в котором проверяется прилёт запроса на прерывание от консольного порта с задержкой на ожидание, сделанной весьма тупо (а ля SOB R0, .) - на быстром процессоре (типа FPGA-шной реализации) цикл заканчивает ДО того, как будет прерывание от терминал - и тест считает, что типа ошибка. В процах с суффиксом wSOBBug сделана искусственная задержка скорости выполнения команды SOB, что обеспечивает прохождения теста.

Тесты прошивки:
1. запустилась в ПЗУ
2. прошёл тест 1000
3. прошёл тест ZZ
4. загрузилась DOS-11, каталог успешно считан и показан
5. загрузилась RT11SB и прошла тест копирования RK и RL с проверкой
6. загрузилась RT11XM и прошла тест копирования RK и RL с проверкой
7. загрузилась RT11ZM и прошла тест копирования RK и RL с проверкой
8. загрузилась RSX-11M-Plus и прошла тест копирования RL с проверкой

Не все тесты сразу пришли в голову, поэтому не на всех процессорах пробовал запустить полный набор. Ну и на некоторых процах некоторые тесты в принципе не возможны :)

Суммарный лог (+ - тест пройден, x - тест не пройден, . - тест на данном процессоре не возможен, ? - данный тест на этом процессоре не запускался, в конце - как был определён процессор и мои примечания)
По мере прохождения тестов информация будет добавляться, в конце добавлю более подробный лог



ROM started
Test 1000 completed successfully
Test ZZ completed successfully
DOS-11 started
RT11SB started, test completed successfully
RT11XM started, test completed successfully
RT11ZM started, test completed successfully
RSX started, test completed successfully

PDP-11/03 +x+x+... -> 56kb LSI 11 or PDP 11/03 (Check Test 1000 for invalid ops)
PDP-11/04 +++++... -> 56kb PDP 11/15,20
PDP-11/05 +++++... -> 56kb PDP 11/15,20
PDP-11/10 +++++... -> 56kb PDP 11/15,20
PDP-11/15 +++++... -> 56kb PDP 11/15,20
PDP-11/20 +++++... -> 56kb PDP 11/15,20
SBC-11/21 ++???...
PDP-11/23 ++++++.. -> 512kb PDP-11/24
PDP-11/24 ++++++.. -> 512kb PDP-11/24
PDP-11/34 ++?++??. -> 248kb PDP-11/34
PDP-11/34a ++?++??. -> 248kb PDP-11/34
PDP-11/34c ++?++??. -> 248kb PDP-11/34
PDP-11/35 ++++x??.
PDP-11/40 ++++x??.
PDP-11/44 ++++++++ -> 512kb PDP11-44
PDP-11/45 +++++++x -> 248kb PDP-11/45,50,55 (RSX - not enough memory)
PDP-11/50 +++++++x -> 248kb PDP-11/45,50,55 (RSX - not enough memory)
PDP-11/55 +++++++x -> 248kb PDP-11/45,50,55 (RSX - not enough memory)
PDP-11/60 ++++xxxx
PDP-11/70 ++++++++ -> 512kb PDP-11/45,50,55
PDP-11/53_wSOBBug ++++????
PDP-11/53 ++++????
PDP-11/73_wSOBBug ++++++++ -> 512kb PDP-11/73A (SOB - 5 op/s)
PDP-11/73 ++++++++ -> 512kb PDP-11/73A (SOB - 101 op/s)
PDP-11/83_WSOBBug ++++++++ -> 512kb PDP-11/83
PDP-11/83 ++++++++ -> 512kb PDP-11/83
PDP-11/84_wSOBBug ++++++++ -> 512kb PDP-11/84
PDP-11/84 ++++++++ -> 512kb PDP-11/84
PDP-11/93_wSOBBug ++++++++ -> 512kb PDP-11/93
PDP-11/93 ++++++++ -> 512kb PDP-11/93
PDP-11/94_wSOBBug ++++++++ -> 512kb PDP-11/94
PDP-11/94 ++++++++ -> 512kb PDP-11/94


----------------------------------------------------------------------------------------------------------------------

Сегодня - первое проявление жизни PDP-11 на Циклоне :) Фото - завтра утром.

К сожалению, на моей DE-10 нет выхода на классический последовательный порт, но есть IrDA передатчик и приёмник. И я пока не понял, можно ли это считать COM через IrDA. У меня есть вроде бы что то похожее на IrDA, втыкающееся в COM порт, но я так же не уверен - можно ли это считать COM через IrDA. Пока друг дружку не видят.

К DE-10 можно подключить PS/2 клавиатуру и VGA монитор, но код, которые есть (по крайне мере, VGA-часть) - не совсем для моей платы - требуется допиливание.

Попробую завтра поковыряться...

Tronix
15.03.2018, 22:16
В смысле нет COM? У этой платы хотя-бы два пина наружу торчат в виде PLS штырьков или еще как? Если да - то ничто не мешает их сделать RX и TX UART, а дальше хоть через max232 на реальный RS232, хоть через китай-свисток на USB-UART.

Hunta
16.03.2018, 05:35
В смысле нет COM?
В смысле - готового нет. А сделать - да, никто не мешает.
Но учитывая наличия PS/2 и VGA - интересно задействовать и их - получается самодостаточное устройство

Hunta
18.03.2018, 12:16
Пока плюнул на PS/2 и VGA. Подключил с гребёнки пару контактов к COM-USB, а к COM - эмулятор VT52 Патрона.
PDP-11 в FPGA загружается и начинает работать - биос работает, с консоли могу ввести прогу и запустить - работает. Регенерация памяти DRAM тоже вроде идёт без проблем - что записал в ОЗУ, то и читаю :)

Подключил к гребёнке плату для SD карт - и на этом завис. Синтезированный контроллер (RH) со стороны PDP откликается, начальный загрузчик пытается его шевелить - а в ответ - тишина. Автор предупредил, что его код работает только с SD картами. У меня вроде SD карта (2 гига, но microSD) и переходник, но... Чуть позже схожу куплю натуральную SD (тоже на 2 гига) - посмотрю, что будет...

MacBuster
18.03.2018, 12:49
Удаление в знак протеста против действий MM

Hunta
18.03.2018, 13:03
скорость обмена
Правильно ли я понимаю, что - максимальная скорость обмена?

MacBuster
18.03.2018, 13:25
Удаление в знак протеста против действий MM

Hunta
18.03.2018, 18:14
Ну, при всём богатстве выбора, SD карта только одна - 2 Гб и 2 класс
Лана, потопал забрать её

- - - Добавлено - - -

Похоже всё таки проблема в microSD карте. Купленную SD карту модуль по крайне мере видит (отладочные светодиоды)

- - - Добавлено - - -

ДА!!
Проблема в поддержке только SD карт.

Первая загрузка:

http://www.kpxx.ru/PDPonFPGA/Софт/RSX-11M-Plus/FirstBoot

- - - Добавлено - - -

Всякое, связанное с ним, буду выкладывать здесь: http://www.kpxx.ru/PDPonFPGA
Адрес так же в первом сообщении.

- - - Добавлено - - -

Блин, до боли знакомое моргание на передней панели :):):)

- - - Добавлено - - -

Запустил SYSGEN. Как закончится (включая загрузку, сохранение и первую загрузку сохранённой системы) - выложу текстовый лог - с самого начала - с первой загрузки системы на PDP-11(FPGA).

- - - Добавлено - - -

Кстати, интересный факт об этом проекте. Автор создал три процессора - один - центральный, второй будет собран, если использовать встроенный модуль терминала (если на плате есть VGA часть, как у меня), третий используется в адаптере Ethernet XU :)

- - - Добавлено - - -

Работает примерно в 5-9 раз медленней эмулятора simh на моём компе.

Листинг работы, включая SYSGEN

http://www.kpxx.ru//PDPonFPGA/Софт/RSX-11M-Plus/sysgen/01. Sysgen.txt

Hunta
18.03.2018, 20:50
PDP-11/70, который я могу поднять одной рукой и поставить на стол :v2_finge: :v2_eek: :v2_laugh: :v2_laugh: :v2_laugh:

Я оооооочень сильный компьютерщик :v2_laugh: :v2_laugh: :v2_laugh:

Hunta
19.03.2018, 19:51
Читаю про сигналы VGA. Приличный слов пока нет - доходит с трудом. А все эти микросекунды и пиксели надо ещё и на сигналы переложить.

Надеюсь, что всё таки въеду и будет у меня ещё и VT100|VT52 в FPGA :)

LeoN65816
20.03.2018, 07:31
Читаю про сигналы VGA. Приличный слов пока нет - доходит с трудом. А все эти микросекунды и пиксели надо ещё и на сигналы переложить.
Вот здесь (http://zx-pk.ru/threads/26944-mechta-agat-na-plis.html?p=906800&viewfull=1#post906800) пройди по ссылочке, качни VGA_Test1.zip, посмотри, так сказать, на примере. Обрати особое внимание на синхронность.

Hunta
20.03.2018, 08:59
посмотри, так сказать, на примере
Спасибо. Но с этим примером (как и с тем, который есть от производителя) есть проблема - писал код не я (я его только адаптирую пока под DE10-Standard), написан он на VHDL и я пока толком не знаю ни VHDL (хотя тут уже кое что понимаю - всё таки перенести смог :) ), ни Verilog - и как назло оба примера - на Verilog. Но - два примера лучше, чем один - посмотрю и его, что бы вычленить принцип :)

LeoN65816
20.03.2018, 10:26
Verilog намно-о-о-о-го проще, чем VHDL. Очень похож на си, очень легко познается и дизайнится в нем, рекомендую.

zebest
20.03.2018, 10:59
Но - два примера лучше, чем один
три в таком случае -вообще замечательно
http://searle.hostei.com/grant/Multicomp/
очень хороший конструктор\пример. и модуль SBCTextDisplayRGB - практически терминал, причем настраиваемый в широких пределах.

Hunta
20.03.2018, 11:40
zebest, спасибо. Интересный пример и главное - на VHDL. Хотя напрямую использовать не буду - у меня на плате продвинутый модуль DAC для VGA - интересно его использовать - в максимуме можно будет использовать до 24 бит на цвет. Присланный Вами вариант напоминает тот, что реализовал авто PDP2011, но у него 640x480. Сравнение позволит определить смысл всяких констант в тексте.

zebest
20.03.2018, 12:37
у меня на плате продвинутый модуль DAC для VGA
у продвинутого модуля DAC ну максимум пару сигналов добавляется, которые обычному модулю RGB+Sync особо не мешают.

Hunta
20.03.2018, 13:15
Три. Clock, Blank_N (N - negative) и ещё какой то, которые вместе говорят - когда сигнал гасить, когда выдавать. Но основная проблема пока другая - плохое знание VHDL

- - - Добавлено - - -

LeoN65816, это я уже понял. Но пока у меня проект, который написан не мной - и переделывать его на Verilog буду (если буду), когда в проекте досконально разберусь и запущу оставшиеся два модуля - VGA (плюс модуль терминала с клавиатурой - но с ним проще - он построен на процессоре PDP-11 :) ), и адаптер Ethernet. Вот когда всё заработает (с минимальным моим воздействием) - тогда можно проект уродовать :)

Hunta
21.03.2018, 20:10
Похоже, нашёл что то подходящее под мою плату: https://eewiki.net/pages/viewpage.action?pageId=15925278
На другой плате такой же встроенный DAC :)
Когда руки дойдут поковыряться - пока не знаю, в выходные скорее всего буду играться с УК-НЦ

- - - Добавлено - - -

Офигеть - информация со страницы: Создатель Scott Larson, отредактировано мар 07, 2018
Ну прям вовремя создал :)

batr
21.03.2018, 20:56
Verilog намно-о-о-о-го проще, чем VHDL. Очень похож на си, очень легко познается и дизайнится в нем, рекомендую.

Прошу прощения за оффтоп, но вы немного погорячились в сравнении Verilog'a с VHDL. VHDL ни сколько не сложнее Verilog'a. Просто Verilog допускает, в отличии от VHDL, некоторые вольности, которые, кстати говоря, могут выйти боком разработчику. Например, если мне не изменяет память, можно записать в регистр сигнал другой разрядности и компилятор послушно откомпилирует проект и разработчик даже и не поймёт, что у него есть в проекте неточности. В VHDL откомпилировать такой файл невозможно, т.к. он строгий язык описания и приучает разработчика к строгости и порядку. Этим он напоминает язык Pascal.
Я изучил VHDL достаточно быстро, после чего начал осваивать Verilog, но недоучил :(, т.к. пропало желание и время.

Hunta
21.03.2018, 22:26
Verilog намно-о-о-о-го проще, чем VHDL

VHDL ни сколько не сложнее Verilog'a

Как человек, знакомый с многими языками (обычными, не железячными) программирования (что то лучше, что то хуже) - могу сказать - у каждого языка есть свои плюсы и свои минусы. И - лёгкость или сложность изучения - не являются ни плюсами ни минусами. Для меня, по крайне мере. А *****код можно написать на любом языке. Из тех, которые мне знакомы - за другие не отвечу.

Hunta
22.03.2018, 20:44
Полноценно руки не доходят, но потихоньку продолжаю доделки топ модуля для использования VGA выхода. Интересное наблюдение - реализация автора топ модулей для разных плат отличается разной степенью... готовности, что ли.. Где то есть отладочный код и сигналы для каких то устройств, где то нет.. У меня пока только одна плата, так что я делаю под неё, но попробую тщательней выделять зависимые часть

Hunta
25.03.2018, 15:33
Планировал вчера повозиться с УК-НЦ, но из-за домашних дел - руки не дошли. Решил подождать, когда для него монитор (надеюсь, рабочий) приедет - а то надоело от ДВК открывать для подкрутки кадровой. Да и питание у него от разъёма - тоже не удобно.

Сегодня вожусь в текстами для FPGA - причёсывание и постепенное добавление кода для VGA в моём варианте платы.

Hunta
25.03.2018, 20:48
Первое достаточно существенно вмешательство в текст - немного причесал в плане читабельности и упрощения переделки под другие платы. Успешно (правда, пока у меня критерий успешности - RSX загрузилась и работает :) )
Очередной затык. Пробую перевести скорость с 9600 на 19200 (изменение в одном месте) - и система встаёт по адресу 000000. Никаких признаков жизни. Даже встроенный биос ничего не выдаёт. Как будто до него дела не доходят. Чешу затылок. Думаю :)

- - - Добавлено - - -

Прикол за приколом :) Сделал 38400, после загрузки стоп по адресу 000002, нажал сброс - по 000000, ещё сброс - начал биос подавать признаки, ещё сброс - больше от биоса жизни, ещё сброс - начал грузиться и загрузился. Такое вчепетление, что где то какой то клок сбоит.

- - - Добавлено - - -

Остановил RSX, сброс - и всё, больше не грузится ни биос, ни, естественно, RSX. Лана, пока верну на 9600, пытать буду после того, как VGA и клаву PS/2 заведу. Может ещё и логика работы с DRAM подсбаивает. Это пока для меня тоже тёмный лес :)

Hunta
26.03.2018, 21:45
Сегодня устраивался на новое место работы, редактировал исходники PDP-2011 и опять развлекался со скоростью работы порта :) Хрень какая то. После "прошивки" может сразу завестись, может после некоторого количества нажатий на ресет, может вообще не завестись...

В соседней теме домерились штангенциркулями...

Hunta
03.04.2018, 23:05
Рождение
http://www.KpXX.Ru/PDPonFPGA/Железо/VGA/VGA birth.jpg

Hunta
04.04.2018, 20:04
Ну, в общем, отладка FPGA не отличается от отладки драйвера WQ :) Изменили, подождали (только тут раза в четыре дольше), посмотрели, сказали - #$53^#$%^#$^ и снова тупо смотрим текст :))

zebest
04.04.2018, 20:44
отладка FPGA не отличается от отладки драйвера WQ
ну это при условии, что драйвер WQ не компилится от 40 минут до полутора часов. Иначе при каждом чихе материЦЦа приходится дольше.
Даже если компиляция занимает 10-15 мин - и то напрягает. Профи предлагают при отладке хотя бы SignalTap-ом пользоваЦЦа.

Hunta
04.04.2018, 20:55
Компилился он за секунды, а вот перенос нового варианта системы с образа на CF - минуты 2-3
Проект на моём компе собирается от 10 до 20 минут, как правило - 12-15.
До SignalTap ещё не добрался, но вот когда начну код переделывать (ядро я не трогаю - только особенности под мою плату)... Тогда точно придётся осваивать. Да и вопросы у меня к ядру есть - почему то не всегда запускается, хотя вроде ничего серьёзного не делал...

- - - Добавлено - - -

О! Собрался :)
Наверное, ещё только пару раз сегодня вечером успею...

- - - Добавлено - - -

Хрен вам с маком....
Пока лучший вариант - ожил модуль видеотерминала, а PDP лежало и PDP работал - модуль видеотерминала лежал...

zebest
04.04.2018, 20:57
Проект на моём компе собирается от 10 до 20 минут, как правило - 12-15.
Ну я про Квартус и говорю.

перенос нового варианта системы с образа на CF
Эмм... а что так сурово? CF ? почемуу не SD ?

Hunta
04.04.2018, 20:59
Это я про Квант и плату WQ - там CF
На FPGA - SD

Hunta
05.04.2018, 21:22
Уууу.. Ошибку таки нашёл :) Собирается :)

- - - Добавлено - - -

В общем, надо внимательно смотреть на непривязанные выводы циклона

- - - Добавлено - - -

К сожалению, в поисках проблемы слегка перепахал работу с SDRAM, так что... VGA завелось, PDP нет :)

- - - Добавлено - - -

Но это восстановить было проще. Собирается

- - - Добавлено - - -

Неть... сегодня не судьба..

Hunta
07.04.2018, 18:57
(тупо смотря в экран) Может, виноват оптимизатор Квартуса?...

К сожалению - или в нем нет условной компиляции или я про неё не знаю. А автор делал код так, что бы (видимо) оптимизатор выкидывал не используемые блоки - не нужен для нас, скажем, контроллер RK05 - ставим количество устройств в 0 - и всё - никаких следов RK05 в результате..

Пример - последнее, с чем воевал сегодня - kl0_force7bit : in integer range 0 to 1 := 0; (сброс или несброс старшего бита (кто то его у автора не поддерживал - вот он и добавил код)). Беру (почти (ключевое слово) не тронутый) авторский файл, в котором он выставлен в 1 - заливка запускается и RSX даже начинает грузиться, но - перед или во время стартовой надписи RSX-11 тра-ля-ля - виснет. Потому что до эмулятора VT52 Патрона доходит или сигнал BREAK серийного порта или Ctrl-S (кстати, только щас дошло - стоит попробовать Ctrl-Q). И прикол ещё в том - если нажать кнопку Reset для PDP - дальше всё тип том. А сразу после заливки - хрен вам.

Сейчас прошивка (вроде) заработал, после того как в код добавил сигналы для VGA (которые пока никак не используются, но инициализируются) - и всё заработало. Контрольная сборка - проверка - и если работоспособность повторяется - моя отправная точка. Дальше пойду мелкими шагами.

- - - Добавлено - - -

Ну, отправная точка есть. Фиксирую :)

- - - Добавлено - - -

Не дописал третий абзац. Добавка:

А ставлю kl0_force7bit => 0 - и останов по адресу 0. Без каких либо шевелений...

- - - Добавлено - - -

Блин, в отправной точке - kl0_force7bit => 1

- - - Добавлено - - -

Попробую выставить kl0_force7bit => 0

- - - Добавлено - - -

Прошло с kl0_force7bit => 0. Кое что ещё до этого подредактировал. Новая отправная точка. Зафиксировал.

Hunta
08.04.2018, 23:21
Всего то 5 дней мата, переделки кода, выдирания волос и... ТА-ДА-ДА-ДАМ!!!!

http://www.KpXX.Ru/PDPonFPGA/Железо/VGA/VGA Ready.mp4

Как обычно, извиняюсь за большой размер, тряску телефона и телефонное качество :)

- - - Добавлено - - -

Следующий шаг (ну кроме причёски кода - это постоянно) - добавить XU. Китайская плата для выхода на витую пару Ethernet есть - остался только вопрос - подойдёт или нет. Но это уже не сегодня :) Вечерами на неделе и след выходные :) Посмотрим, сколько мата ЭТО будет стоить :)

- - - Добавлено - - -

БК-2011 с PDP-11/70 на борту :):):):)

zebest
09.04.2018, 00:15
ну полсе прически кода и ДО эзернету - сам то код увидеть можно будет?))

Hunta
09.04.2018, 00:32
zebest - код основан на http://pdp2011.sytse.net/wordpress/
Пока вся переделка - под DE10-Standard. Само ядро автор достаточно хорошо сделал независимым от конкретной модели FPGA
Если у Вас тоже DE10-Standard - хоть щас :)

zebest
09.04.2018, 08:03
у автора же без VGA ? мне "хоть щас" исходник крайний интересует, я уж подо что нибудь его скомпилю :( Можно в архиве, не облизательно git

Hunta
09.04.2018, 08:39
у автора же без VGA

Как раз от него у меня VGA и работает (и не сильно нравится, но это переделка будет точно не сейчас - сначала восстановлю полностью функционал)
Организация примерно такая - есть ядро PDP-11 плюс папка с top элементом под конкретную плату или даже несколько вариантов под одну плату. В ядре есть модуль VGA плюс модуль VT (модуль очень простого видеотерминала, если правильно помню, автор реализовал только CR и LF)

Так если нужен вариант не под DE10-Standard - можно забрать отсюда - http://pdp2011.sytse.net/wordpress/download/

Если же на плате полноценная микросхема DAC, а не DAC, собранный на резисторах - я подскажу, что сделать, что бы заработал VGA от автора. Если на резисторах - насколько я понимаю, ничего делать не придётся (но у меня только одна плата и проверить я не могу)

Hunta
09.04.2018, 22:41
Сегодня ничего нового не делал - только код причёсывал :)

Теперь в моём распоряжении УК НЦ-2018. Тоже двухпроцессорная (PDP-11/70 как ЦП и PDP-11/20 как ПП). На ЦП 1920 килослов, на ПП пока не понял :) ПП пока рулит только VGA :)

Hunta
10.04.2018, 22:41
Код более менее причесал.
Добавил второй порт терминала. Программа autoconfig-a в RSX его нашла :) Генерирую вторую системы на FPGA. Общался с SYSGEN-ом через VGA и PS/2 клавиатуру :)

- - - Добавлено - - -

КЦГД что ли попробовать сделать :)

- - - Добавлено - - -

Двухтерминальная RSX :)

AFZ
11.04.2018, 07:02
КЦГД что ли попробовать сделать Не стоит. И вообще, все эти упражнения с VGA - это взгляд вслед уходящему поезду. Возьми в руки любую современную видюшку чуть поприличнее (не самый отстой). Сколько на ней портов VGA? Правильно, меньше единицы. То есть, единственный порт DVI на ней комбинированный: DVI-D (цифровой) и DVI-A (аналоговый, который, по сути, тот же VGA, только разъем другой). Обрати внимание: даже порт DVI всего один. Зато всяких HDMI или DP - по паре! Или глянь на телевизор (ЖКИ). В телевизорах постарше обязательно был порт VGA, чуть моложе - DVI, в новых же ни того, ни другого. Зато HDMI штуки три, не меньше.

Такими темпами лет через 10 монитор с VGA тоже станет раритетом. Это одна сторона проблемы. Вторая - это тот факт, что все нынешние мониторы - ЖКИ, OLED и т.п. имеют единственное правильное разрешение - их родное, количество физических пикселей их экранов по горизонтали и вертикали. То есть, конечно, если подать на монитор видеоданные с другим разрешением, моник это как-то преобразовывает, но результат преобразования смотрится, обычно, коряво - края букв и другие подобные элементы изображений всегда размазаны.

То есть проблем, собственно, две. Первая - обеспечить работу более-менее свежих устройств отображения видеоинформации - через что-то, вроде HDMI/DP, на худой конец DVI, это в дополнение к обычному VGA. И вторая - обеспечить более-менее приличную конвертацию разрешения наших ретро-устройств в современные разрешения мониторов.

Как их решать - тема отдельной дискуссии, но, по-любому, работы очень много.

Hunta
11.04.2018, 07:55
Зато всяких HDMI или DP - по паре
На моей плате только разъем VGA. Для HDMI или DP нужны свободные пины - а их у меня всего 36 и некоторые уже заняты, так что по любому - ничего кроме VGA


Такими темпами лет через 10 монитор с VGA тоже станет раритетом
Я думаю, предсказывать - не интересное занятие. Уже сколько кричат, что все перейдут на SSD, а винчестеры вымрут как класс. Вот только проблемы - как оказалось три, а не две, как я думал - стоимость (ну ка посчитайте мне стоимость перевода моих порядка за 120 терабайт на SSD), деградация при записи и постепенный разряд ячеек (причём, чем старше - и с точки зрения года выпуска и с точки зрения интенсивности использования или чем выше температура - тем быстрее разряжается). Забыл, понимаешь ли, SSD с любимой порнушкой на подоконнике - вечером домой пришёл - а вся добытая тяжёлым трудом инфа пошла попи... в общем стерлась.


То есть проблем, собственно, две
Очень больших проблем, собственно, одна - есть софт, написанный под кучу древних видеоконтроллеров. И так же как с VGA мониторами (есть куча устройств, которые другое не поддерживают) - необходимость его поддержки. А значит - реализация соответствующих контроллеров. Я не знаю как там на дискретной и не очень логике, но на FPGA - не сложней бинома Архимеда.

Проблема менее масштабная (старые мониторы телевизоры пока ещё находятся без особого труда и за вменяемые деньги) - конвертация. Я не железячник - так флаг не мне в руки.


наших ретро-устройств

И самое главное - мне не обязательно аутентичное устройство - меня вполне устраивает вариант в FPGA - тем более, что это всё сильно напоминает микропрограммирование - а на нем и сама DEC не гнушалась делать устройства.

- - - Добавлено - - -

И ещё про конвертацию. Если делать FPGA аналог какого-то видеоконтроллера, то до конвертации аналогового сигнала в цифру, преобразование и конвертации цифры в аналог дело не дойдёт - будет преобразование (цифра в цифру) и в аналог. Что IMHO, значительно проще

zebest
11.04.2018, 08:07
Возьми в руки любую современную видюшку чуть поприличнее (не самый отстой). Сколько на ней портов VGA? Правильно, меньше единицы. То есть, единственный порт DVI на ней комбинированный: DVI-D (цифровой) и DVI-A (аналоговый, который, по сути, тот же VGA, только разъем другой).
Тут тоже тебя расстрою. В послендее время чисто DVI-D, без всякого аналогово сигнала. Нету там ничего комбинированого. Меняешь видюшку на современную - меняй и монитор :(

обычная 1050, VGA нет никакого, даже через переходник, ну если только через активный преобразователь HDMI2VGA
https://c.dns-shop.ru/thumb/st1/fit//wm/800/650/a5e9538f488f96f3c2aec24532aba977/a761aee3870259aefed9c627c2381aa3196b9e9f3c5a73f9f9 ceb3237d4eddf9.jpg



вторая - обеспечить более-менее приличную конвертацию разрешения наших ретро-устройств в современные разрешения мониторов.
На более менее приличных dev-board уже ставят HDMI, а там уже немного проще, программно-аппаратный апскалер, на входе сигналы VGA - на выходе чистый HDMI, особо парится не надо, все синтезируемое ретро-старье кажет в разрешении хоть 1920х1080

Hunta
11.04.2018, 08:21
zebest, исходники с сайта PDP-2011 скачал?

zebest
11.04.2018, 08:25
скачал. еще полгода назад. я не такой фанат PDP, чтобы в там разобраться. Так что мимо, я уже говорил. Буду ждать, может когда нить добрые люди синтезируют ДВК-2

Hunta
11.04.2018, 08:29
я не такой фанат PDP, чтобы в там разобраться
На самом деле, я в саму реализацию PDP-шных объектов и не совался. Да и не PDP-шником там для начала надо быть, а VHDL-ником.
А именно ДВК-2 нужен?

zebest
11.04.2018, 08:31
А именно ДВК-2 нужен?
ну я когда то на нем живом работал, с зелененьким монитором. вроде двойка была. а может и тройка? НостальжИ, т.с.

Hunta
11.04.2018, 08:46
Конкретно ДВК, там, конечно нет, по умолчанию собирается PDP-11/70, хотя, что бы понастальгировать - вопрос в другом - что собираетесь делать? Программировать - без вопросов, играть в игрушки - если графическая - то облом - нужны модули конкретных графических адаптеров - тут модуля VGA не хватит от слова совсем, если же текстовая - без проблем.
И самое главное - есть по крайне мере один файл (или два), которые зависят от конкретной железки, куда собираетесь синтезированное заливать. Именно с ними, как я уже писал - я и возился - под свою железку.

AFZ
11.04.2018, 11:26
Я думаю, предсказывать - не интересное занятие. Уже сколько кричат, что все перейдут на SSD, а винчестеры вымрут как класс.Уже вымирают. Вспомни 10 лет назад: каждые год-два емкость винчестеров удваивалась, старые сильно дешевели... Где это всё? Нет, и больше не будет. Более того, на то, что есть, цены растут. Это потому, что компьютер перестал быть продуктом массового потребления - сейчас он перешел в категорию "профессиональный инструмент". Тиражи падают, цены растут... Массовый потребитель перешел на андроиды, данные потихоньку переползают в облака, и все!..


Тут тоже тебя расстрою. В послендее время чисто DVI-D, без всякого аналогово сигнала. Нету там ничего комбинированого. Меняешь видюшку на современную - меняй и монитор Вот-вот, тем более. Впрочем, интеля в своих набортных видюхах, вроде-бы, еще делают порт VGA...


ну я когда то на нем живом работал, с зелененьким монитором. Скорее всего, ДВК-2 с классическим 15ИЭ-00-013 (более поздние были уже с монитором 6105, серенькие).

На моей плате только разъем VGA. Для HDMI или DP нужны свободные пины - а их у меня всего 36 и некоторые уже заняты Это я к тому, что КЦГД надо делать не в этом проекте и, скорее всего, на другом железе.

zebest
11.04.2018, 11:56
Впрочем, интеля в своих набортных видюхах, вроде-бы, еще делают порт VGA...
Как то тоже на последних материнках only DVI-D мне , по крайней мере, встречаеЦЦа, да и на предыдущих поколениях - то жи.
Я даже выкинул на ветер аж 100 рублей, кЕтайцы честно прислали типааа переходник DVI-D => VGA, но он ожидаемо не работал, что я с успехом а5 же лично для себя и доказал. Поэтому при крайней нужде пользуюсь преобразователем HDMI2VGA, более менее сносно работает

Hunta
11.04.2018, 12:10
каждые год-два емкость винчестеров удваивалась
А что, придумали как писать не на атомах, а на элементарных частицах? Количество транзисторов и частоту процов тоже обещали удваивать вечно - но ограничения технологий никто не отменял. А пока - по надёжности винты ещё никто не обошёл - и смерть их будут предсказывать ещё долго


Более того, на то, что есть, цены растут
По тому, что я трачу на винту - не растут, а падают


КЦГД надо делать не в этом проекте
Мой проект, что хочу, то и делаю ;) А учитывая, как устроен КЦГД - большая часть кода для него уже есть.


скорее всего, на другом железе
Когда у меня будет железка с HDMI или DP - тогда и попробую

- - - Добавлено - - -

DNS
В продаже 568 моделей, с VGA разъёмом - 399
В ценовом диапазоне до 6000 рублей - 27 на 27
6001-8500 - 90 на 87
8501-11000 - 97 на 96
11001-15000 - 89 на 84
15001-20000 - 78 на 50
дороже 20000 - 186 на 54

AFZ, ты серьёзно собрался для ретрокомпьютера покупать монитор дороже 20к? Тогда тебе действительно есть почему волноваться.
А до 15 штук можно не париться и брать почти любой

Hunta
11.04.2018, 18:42
Последнее, что осталось сделать в рамках исходного проекта - подцепить адаптер Ethernet.

К сожалению, из-за всего двух пар питания (одна +5В, вторая +3.3В), отсутствия проводов разветвителей и отсутствия (пока, по крайне мере) желания их делать - буду делать на хлебной доске :) Переподключил адаптер SD, проверил работоспособность.

Теперь - подключение Ethernet адаптера и описание его пинов для Циклона.

- - - Добавлено - - -

Провода развёл, сигналы расписал, синтез запустил.

CodeMaster
11.04.2018, 19:09
В продаже 568 моделей, с VGA разъёмом - 399

И это без учёта всяческих конвертеров видео на Али за копьё.

Hunta
11.04.2018, 23:36
Ну, старая, добрая, непонятная ошибка, когда после загрузки кода запускается только VT, а основной проц стоит на 000000

- - - Добавлено - - -


И это без учёта всяческих конвертеров видео
У меня FPGA, на котором я могу собрать что угодно из ретро-компов и вывести на VGA - на фига мне конвертеры?

- - - Добавлено - - -

Вторая попытка :)

- - - Добавлено - - -

И снова жопель :) Лана, бум потихоньку двигаться :) Попытки три ещё сегодня успею сделать, может четыре :)

- - - Добавлено - - -

Помнится, когда я выход на сом делал где то примерно на тех же разъёмах - оно тоже сопротивлялось. Переставил выше. Синтез

- - - Добавлено - - -

Не знаю, почему так, не знаю, будет ли этот способ работать всегда - но вроде я нащупал - как обходить любимую ошибку. Почему то, если внешние пины напрямую подключать к синтезируемым компонентам (например, сейчас - к синтезируемому XU) - хороший шанс словить незапуск. Так же было при первых попытках подключить VGA. Описал сигналы, пины подключил к сигналам, а уже сигналы завёл на интерфейс компонента - и вуаля - мы снова щастливы, мы снова работаем. Правда, аутоконфиг RSX XU не нашёл. Фиг пока с ним. Запустил стандартный тест - полный SYSGEN. Чё получится - проверю утром - а щас - спатькать.

- - - Добавлено - - -

Адреса XU, по крайне мере, откликаются. Похоже завтра буду мучать модуль TCP/IP для RSX :)

Hunta
12.04.2018, 06:39
Собрал систему с драйвером XE: (XU и XE - одно и тоже устройство для шин QBUS и UNIBUS соответственно, ЕМНИП). Система по крайне мере в онлайн его переводит. Дальше нужна поддержка со стороны системы - или DECNET или BQTCP-TCPIP. Вечером :)

Hunta
12.04.2018, 17:19
TCP/IP - PDP ждёт тебя :) Нус, приступим :)

Hunta
12.04.2018, 21:24
А ещё, млин!!!!! даже виртуальные провода нехило бы присоединять друг к дружке :)))))))
Запустил синтез :)

- - - Добавлено - - -

Сопротивляется.. может сетевуху не так подключил... может не знаю что..

- - - Добавлено - - -

В общем, пока сетевуха не завелась.. Как обычно - бум думать :)

Hunta
13.04.2018, 18:13
У меня сетевой модуль - не тот, который был у автора. И похоже, нужно допиливание под мой....

Hunta
13.04.2018, 20:42
Приведу в рабочее состояние, так что бы XE(XU) был синтезирован, подключен и система не вставала на 000000. Маленькими шажками

- - - Добавлено - - -

Хе. Похоже дочери буду передавать наследство компьютерщика. Победила на конференции для школьников и студентов, который проводил аэрокосмический, а в Артеке мучает программированием роботов и преподов :)

Hunta
14.04.2018, 18:59
О! Синтез дал новый вариант ошибки - теперь вообще не запустилось и на индикаторе вообще тишина :):):)

Hunta
14.04.2018, 21:21
Хм.. Похоже нашёл главную причину ошибки - Не Стартуем И На Индикаторе Все Нули. Автор сделал... как бы это помягче сказать... занимательно, что ли, генератор тактовой частоты для процессора - в качестве генератора выступает контроллер памяти (dram). В результате формально никаких ожиданий доступа к памяти :) Но иногда (похоже) контроллер памяти не заводится. А вот почему - херен его знать... Чего то похоже с таймингами работы его контроллера. Поставил на старте сигнал, который делает ДЛИННЫЙ РЕСЕТ, в 1. Синтез, который без этой установки давал Все Нули, с ней - завёл проц после загрузки вполне себе так ничего. Зырю дальше. Пока занят причёской кода - но косюсь и на контроллер Ethernet

Hunta
15.04.2018, 12:42
Прикольно всё таки реализована в VHDL (язык) или Quartus-е (среда разработки) условная компиляция.

Если проводить аналог с классическими языками программирования - вызовы процедуры анализируются на предмет значений параметров и если какая то часть процедуры зависит от конкретного параметра, а с таким значением параметра ни одного вызовы процедуры нет - то эта часть кода просто не компилируется. Ну понятно, что это возможно, когда такой параметр всегда используется в вызовах в виде константы.

В классических языках программирования условная компиляция (по крайне мере то, что вспоминается) реализована совершенно отдельными конструкциями языка.

Плюсы такого подхода - синтезированное описание содержит только то, что в данном проекте используется. Минусы - нет понятия откомпилированных библиотечных модулей (или я пока про них не знаю) и синтезатор (язык не поворачивается назвать его компилятором) должен иметь доступ ко ВСЕМ ИСХОДНЫМ текстам.

Хотя есть ещё понятие IP cores - они слегка напоминают библиотечные модули, но пока мой опыт работы с ним говорит о том, что я от использования их на выходе получаю описание в VHDL (или Verilog), который потом опять же обрабатывается синтезатором

AlexG
15.04.2018, 13:52
оффтоп. IP cores (подразумевается что корка уже написана, проверена и она считается "библиотечным элементом") "компилятся" один раз в проекте, заново собирается только ТОП проекта (синтез - это компиляция исходных файлов). но разводка по плисе все равно идет по всему проекту (это как линовка в Си). Плюс в том что синтез нужен только для изменяемой части проекта. Минус используется больше ресурсов. тк отсутствует оптимизация между корками (оптимизация осуществляется в пределах корки). но это тоже "плюс" - меньше глюков при глобальной оптимизации. тк обычно каждая корка отлажена и проверена.

Hunta
15.04.2018, 14:07
AlexG, в этом проекте используется одна IP core - PLL, но с её использованием сделаны два clock.

Не совсем понял, что подразумевается под TOP проекта. В конфиге указан качестве TOP-а

set_global_assignment -name TOP_LEVEL_ENTITY PDP11

а такими операторами

set_global_assignment -name VHDL_FILE PDP11/cpu.vhd

есть ссылки ещё примерно на 27 файлов (включая PDP11.vhd в котором собственно код TOP элемента)

Плюс то, что сгенерировало добавление PLL

set_global_assignment -name QIP_FILE pll.qip
set_global_assignment -name SIP_FILE pll.sip
set_global_assignment -name QIP_FILE pll2.qip
set_global_assignment -name SIP_FILE pll2.sip

из них идёт ссылка на компонент pll_0002 - если я правильно понимаю, как раз такой "скомпилированный" библиотечный модуль, как я понимаю

И если я правильно понимаю, все эти примерно 27 файлов при синтезе полностью обрабатываются.

Где я ошибся в предположениях? :)

AlexG
15.04.2018, 14:40
сорри - не силён в альтере. ксайлинк у меня. но принцип тот же. IP-корки это к примеру та же ПЛЛ, процессор, UART, SPI, контроллер SDRAM итд. под ТОПом подразумевается то что написано своими руками для "склейки" сих корок. Сии корки - это уже кем то написанные исходники, проверены, отлажены, оптимизированы. В ксайлинксе это (корки) "оформлено" как отдельный комплект исходников(отдельный проект). В Вашем случае судя (ИМХО) по всему корки не используются совсем. PLL-в общем смысле да, является коркой, но по сути это всего лишь "обёртка" аппаратного модуля плисы.

Hunta
15.04.2018, 14:58
Посмотрел описание IP cores. Их аж три типа выделяют.

Получается, что у меня используется некоторое количество аппаратных core (типа разъёма PS/2 который для меня видится как два входных сигнала).

А PLL, похоже программная - синтезируется из ячеек - и сигнал на вход - клок от аппаратного генератора (опять один входной сигнал). Но не наверняка.

Ну а всё в .vhd в понимании xilink - похоже TOP.

Хотя в Altera TOP (ну по крайне мере в моём понимании) - это модуль, порты которого (по именам) привязываются в pin-ам кристалла, которые обычно именуют в понятном для человека виде (типа FB_VGA_RED, а не PIN_AK29), и для удобства выносят описание этих имён в отдельный файл.

Такой поход, кстати, позволил мне достаточно быстро перенести проект с одной платы для разрабов на другую. По сути до сих пор я трогаю только два файла - описание пинов и тот самый TOP

AlexG
15.04.2018, 15:15
скюз ми - ни разу не видел аппаратных корок для ps/2 внутри плис альтера. вся логика плис делиться на плл, лут, тригера, блочную память (это типа джентльменский набор). При этом ПЛЛ это грубо говоря синтезатор частот. на вход поступает внешняя частота (в общем случае с генератора) - на выходе требуемая частота для работы "схемы" внутри плис. Это такой аппаратный модуль (чёрный ящик), который настраивается снаружи (заданием нужных сигналов на выводах этого ЧЯ). а корка облегчает сей процесс (там очень много различных параметров) те создаётся некий исходный текст в котором будут прописаны все параметры этого ЧЯ. Весь проект состоит в общем случае из hdl-описания(vhdl, verilog итд) и файлов ограничений (задание временных ограничений, назначение соответствия цепей внешним выводам, а также их типа ttl, cmos , lvd итд), .
пс: я под забыл которая плис у Вас используется? Я не совсем корректно применил понятие ТОП. ТОП - это модуль который больше нигде не используется (в других модулях).

Hunta
15.04.2018, 15:32
не видел аппаратных корок
Я не совсем корректно выразился. Я не имел ввиду, что это внутри кристалла, я имел ввиду, что я PS/2 использую как что то готовое - без синтеза в тексте.

Посмотрел по описанию - вроде как есть и аппаратные PLL (в количестве шесть штук) - но аппаратный у меня или нет - на моём текущем уровне знаний даже гадать не буду :)

У меня вот эта модель -

http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=167&No=1098&PartNo=2

но как выяснилось после того, я начал активно с ней играться - можно было вполне взять плату, лежащую в её основе -

http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=167&No=1098&PartNo=2

потому как задействовать экран, USB для клавиатуры, SD карту и Ethernet адаптер (то есть сделать почти самодостаточную PDP-11) я смогу в несколько отдалённом будущем - когда скилы прокачаю :)

AlexG
15.04.2018, 20:32
Чёт я сегодня в "ударе". Напрочь забыл по "SoC".
https://www.xilinx.com/content/dam/xilinx/imgs/block-diagrams/zynq-mp-core-dual.png
Там действительно есть аппаратные USB, EATHERNET итд. По сути это: "обычный" процессор с периферией + классическая плис = SoC (у самого лежит отладка на базе ZINC)
http://zedboard.org/product/zedboard
ПС обе Ваши ссылки одинаковые и "идут" на описание платы "VEEK-MT2S". так которая у вас плата ?

Hunta
15.04.2018, 20:51
На SOC-е там действительно есть много чего интересного - но нужно писать модули общения между FPGA и SOC-ом (хотя там много чего сделано для упрощения - но - это мой следующий этап, пока я трогаю только FPGA)

Но кое что (типа PS/2 и выхода на VGA) подключено непосредственно к FPGA - поэтому с синтезированным PDP-11 я общаюсь через (PS/2) клавиатуру и картинку на мониторе, подключённым к VGA (и соответственно есть модули взаимодействия с ними). Сейчас кроме причёски кода косюсь на модуль работы с адаптером Ethernet (который внешний, как и SD карта, а не те, которые на SOC-е висят)

У меня именно VEEK-MT2S, но по сути это DE10-Standard:

http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=167&No=1081&PartNo=2

плюс ЖК экран. И если бы на момент покупки чуть больше ориентировался в платах - возможно взял бы и DE10-Standard - использование ЖК экрана (а он подключён к SOC) - возможно, в будущем, но не сейчас

Hunta
16.04.2018, 08:31
Вчера было первое вмешательство в КОД авторы проекта. У меня размер SDRAM несколько больше, чем у автора и не нравится, что фактически всем управляет контроллер SDRAM. Поправил первое (правда, PDP-11/70 от этого ни холодно, ни жарко - 16 или 64 мегабайта доступно в принципе - но в купе со второй правкой это позволит мне использовать память в других компонентах) и смотрю на код, думая, как решить вторую проблему.

После правки RSX не отказалась работать :)

Hunta
17.04.2018, 13:04
Вопрос на форуме программистов:

- ЭтаНуТипаУменяПробелПолом алсяЧеДелатьТо?

Ответ:

- Настоящие_программисты_про белы_не_используют

Hunta
22.04.2018, 18:36
Фсё, заип.... замучался с авторским модулем DRAM, нашёл в инете, щас занят пристеплированием

- - - Добавлено - - -

Эт я погорячился... Знаниев пока не хватат. Пока оставлю, причешу всё, не трогая модуля DRAM

bigral
23.04.2018, 12:07
Фсё, заип.... замучался с авторским модулем DRAM, нашёл в инете, щас занят пристеплированием Эт я погорячился... Знаниев пока не хватат. Пока оставлю, причешу всё, не трогая модуля DRAM

не DRAM а SDRAM, был бы DRAM было бы все гораздо проще (там просто мультиплексированная шина)

Hunta
23.04.2018, 13:06
не DRAM а SDRAM
Да, поправка, SDRAM. Замыленная голова уже была.
В принципе, в логике работы уже более менее разобрался, но прикол в том, тактовый генератор для проца в этом проекте реализован в модуле работы SDRAM. Поэтому - типа никаких ожиданий. А если присобачивать классический - надо в модуль проца вставлять ожидание чтения записи памяти. А модуль проца там ещё та загогулина - в нем разобраться - не один вечер.

bigral
23.04.2018, 13:20
Да, поправка, SDRAM. Замыленная голова уже была.
В принципе, в логике работы уже более менее разобрался, но прикол в том, тактовый генератор для проца в этом проекте реализован в модуле работы SDRAM. Поэтому - типа никаких ожиданий. А если присобачивать классический - надо в модуль проца вставлять ожидание чтения записи памяти. А модуль проца там ещё та загогулина - в нем разобраться - не один вечер.

На скоко я понял бывают схемы:
1) ассинхрононная без ожиданий (ну типа SRAM или мультипортовый SRAM);
2) синхронная без ожиданий (но тогда есть timeslots - скоординированный поочередный доступ);
3) ассинхронная с ожиданиями;

и SDRAM и DRAM требуют refresh-а а потому могут работать только по 2 и 3 варианту :(

Hunta
29.04.2018, 22:21
Непонятность, вырезанная с корнем - нажатие на кнопку Reset сбрасывало ЦП, но почему то на этот сигнал не реагировал проц модуля VT - из за этого (но не понятно почему) часто зависала работа с клавиатурой. Сделал отдельный Reset для модуля VT - стало работать в этом плане стабильно.

Ещё одно ковыряние в проекте - и теперь (ТТТ) вроде как после сборки он начал запускаться (не возникает ошибки 000000) стабильнее. Запустил синтез для проверки - до этого попытка выставить скорость на последовательных портах в 38400 гарантированно приводило к этой ошибке. Ну-с, посмотрим, что будет в этот раз.

- - - Добавлено - - -

Ну надо же :)

- - - Добавлено - - -

Ну раз пошла такая пьянка - попробую ещё одно изменение, которое гарантированно вызывало 000000

- - - Добавлено - - -

Нее, этот фокус не прошёл... - подключить inout сигналы напрямую на top level пины - даже синтезатор ругаиЦЦа...

Hunta
30.04.2018, 14:13
Почти вся работа с TOP модулем для DE10-Standard закончена.
Осталось только дождаться сетевого модуля и прикрутить-проверить его.

Много мистики - из разряда - две строчки переставляем местами - и опаньки - проблема в работе.

Hunta
01.05.2018, 01:31
Похоже, зря грешил на модуль поддержки SDRAM. Для того, что бы понять - он или не он - приделал индикатор тактового сигнала (который для процов генирирует модуль SDRAM) - в общем, пока он у меня моргал всегда, не смотря ни на какие проблемы. И судя по тому, что проц из модуля VT работает вполне ничего себе (но у него своя сгенерённая память) - причина кроется где то в основном ЦП. Бум думать и смотреть. И ждать плату сетевухи :)

Hunta
01.05.2018, 15:32
Поскольку идея о не запуске тактового генератора от модуля SDRAM провалилась (ну работает эта зараза всегда) - полез разбираться в модуль CPU

Hunta
01.05.2018, 19:08
Как записать 16-ти битный вектор в восьмеричной нотации - 16o"165020"
Требуется компилятор, поддерживающий VHDL 2008

LeoN65816
01.05.2018, 23:48
Как записать 16-ти битный вектор в восьмеричной нотации - 16o"165020"

16'o165020, не?

Hunta
02.05.2018, 00:25
16'o165020
Я немного про другое. Каждая восьмеричная цифра - это три бита, так что 165020 - это 18 бит. Если проц (как PDP-11) 16-ти битный - то, скажем в 16-ти битный регистр о"165020" - не запишутся (в то время как четыре шестнадцатеричные цифры дадут 16 бит). Автор PDP-2011 использовал из за этого шестнадцатеричные константы - что для истинных пидипишников - не комильфо :) Я долго использовал такой вариант - '1'&"65020" - что то же не очень. А сегодня наткнулся на такой вариант - 16o"165020".

И кстати - 16o'165020 (или 16o'165020') - у меня дали ошибки при компиляции - нужны именно двойные кавычки - строка, а не один символ в данном случае

Hunta
02.05.2018, 13:04
Добавил кнопку Continue (Продолжить) - продолжить работать после команды HALT. RSX-11M-Plus штатно продолжила работу.

Добавляю кнопку Step (Шаг) - в зависимости от положения переключателей (на плате 10 штук, начинаю задействовать) - хочу получить выполнение или по одной команде за раз (вторая цель) или кнопка буде выступать в роли тактового генератора для процессора.

Дальний прицел - добавить управляющий процессор (УП) (что то типа схемы УК-НЦ, управляющей процессор будет играть роль, похожую на роль ПП).

Итого в полном наборе на плате будет 4 процессора - УП, ЦП, VT и XU(XE) :) Если не добавлю что то ещё :)

- - - Добавлено - - -

Блин, переключатели с дребезгом, в отличии от кнопок... Значит надо будет добавить и защиту от дребезга. Потом. Пока добьюсь работы в принципе. После сброса, например :)

- - - Добавлено - - -

Ну, как бы первая цель достигнута (надо ещё привязать ручной тактовый генератор к тактовому - если по хорошему). Можно даже посчитать количество тактов для команд :)

AFZ
02.05.2018, 13:06
Добавляю кнопку Step (Шаг) - в зависимости от положения переключателей (на плате 10 штук, начинаю задействовать) - хочу получить выполнение или по одной команде за раз (вторая цель) или кнопка буде выступать в роли тактового генератора для процессора.А сделать микро-ODT, как в Э-60 не выйдет? ДВК-шная Shadow-ODT, конечно, посложнее будет...

Hunta
02.05.2018, 13:12
А так же избавиться от дребезга :) Ну и в целом - ручной тактовый генератор нужен будет, думаю, достаточно редко. Шаговое выполнение команд, скорей всего, пригодится больше :)

- - - Добавлено - - -


А сделать микро-ODT, как в Э-60 не выйдет?
Пока не рискну - тут потребуется бОльшее вмешательство в модуль cpu - а я его только ещё в порядок (в плане читабельности) начал приводить. Сделать УП (по принципу УК-НЦ) мне кажется - несколько проще. А на выходе будет похожий результат.

- - - Добавлено - - -


А сделать микро-ODT
Или оно там висит как ПЗУ где то на странице ввода вывода? (у автора, кстати, есть второй вариант начального ПЗУ - там сделан что то типа нано-ODT)

Hunta
02.05.2018, 19:27
Продолжаю борьбу с ошибкой 000000. Вывел на светодиоды сигнал - cpu в останове - получил от процессора, что таки да, он выполнил команду HALT.

Hunta
18.05.2018, 19:26
Пришла пара сетевых модулей. Тех, которые использовал автор PDP-2011. Щаз попробуем :)

- - - Добавлено - - -

Пока результат - АфотХрен

- - - Добавлено - - -

Посмотрел отладочный вывод - модуль работы с Ethernet модулем плату вроде как опознал. Похоже, дело не в нем, а в софте. Копаю.

AFZ
19.05.2018, 06:28
Или оно там висит как ПЗУ где то на странице ввода вывода? (у автора, кстати, есть второй вариант начального ПЗУ - там сделан что то типа нано-ODT) Нет, оно сделано в виде микропрограммы, когда исполняется команда (приходит сигнал) HALT, запускается микропрограмма, которая и исполняет действия упрощенной ODT.

Сигнал HALT проверяется после окончания исполнения каждой команды и не проверяется перед началом исполнения следующей. Поэтому, если продолжить исполнение программы командой P, а HALT при этом постоянно активен активен, получится пошаговое исполнение программы. Естественно, сама микро-ODT ничего не изменяет в программно-доступном оборудовании, если ее не попросишь это сделать.

Про HALT-mode ДВК рассказать?

Hunta
19.05.2018, 08:56
Про HALT-mode ДВК рассказать
Спасибо, пока нет :) Основной принцип работы HALT я понимаю, тонкости понадобятся, когда буду пробовать реализовать - но для начало надо опыта поднабраться :)

Hunta
19.05.2018, 19:12
В некоторой растерянности.

В проекте PDP-2011 вроде как синтезируется XE устройство. В доках BQTCP/IP упоминается оно же. А не работает. Причём то, что видно по логам и по тексту драйвера XEDRV (набор команд) - оно как бы разное - то, что ожидает XEDRV и то, что ожидает синтезированный XE. При этом взаимодействие синтезированного XE с модулем Ethernet - вроде как без проблем - ошибок не выдаёт, MAC адрес считывает..

Продолжаю копать...

- - - Добавлено - - -

Хотя нет, похоже я что то не так понял. Это не команда со стороны PDP, это что то другое. Продолжаю копать исходники

Hunta
20.05.2018, 12:16
Склоняюсь к тому, что это мой косяк. Что бы разобраться с ошибкой 000000, тронул модули UNIBUS и CPU, а оно (из за ошибки 000000) - дело тонкое. Попробую использовать оригинальные UNIBUS и CPU.

Не прошло и трёх лет, как на сайте PDP-2011 новый пост :) http://pdp2011.sytse.net

Hunta
21.05.2018, 20:48
Оригинальные модули - та же проблема.

Зато нашёл и устранил "почти мелкое" дрожание пикселей в буквах. Думал - из за конвертирования 640х480 в 1920х1080, оказалось - из за двух разные пиксельклоков (у автора платы с простым модулем VGA, у меня несколько более навороченный - переборщил с пиксельклоками :) )

Hunta
23.05.2018, 08:09
Вчера под вечер налетел на то, что программирова..... ээээ... синтез железки в FPGA подчиняется тем же правилам, что и сборка в реале и что оно имеет (в некоторых случаях) существенное отличие от классического программирования :) Образно говоря - при программировании, если два или больше нечта (модуля, потока, процессора, компьютера) пишут что то в переменную (фактически - ячейку памяти) - это ВСЕГДА последовательный процесс, даже если программеру кажется, что параллельный :) А в железе это может быть (попытка, успешная или нет) и параллельный процесс. Ну а фактически я, по привычке программиста, попытался подать сигнал с двух выходов на один вход. Конечно, Квартис сказал - чё?.... :) Я сначала вообще не допёр - про что это, почему синтез не может провести :) Потом уже, едучи в трамвае и размышляя... Осенило :)

Да, да, знаю, если ОК - такой фокус провернуть можно :)

- - - Добавлено - - -

Не вчера, позавчера :):)

Hunta
25.05.2018, 08:41
У меня получается такой список - 55-65, 68-73, 76-79, 115-119
120 грохнуть

Создал новую тему Эмуляция КЦГД, КСМ, КГД (вопросы и проблемы)... (http://zx-pk.ru/threads/29190-emulyatsiya-ktsgd-ksm-kgd-(voprosy-i-problemy).html) Arseny

Hunta
25.05.2018, 17:09
Достаточно давно впилил в код FPGA ручной тактовый генератор, за вчера и сегодня добавил кнопку покомандного выполнения программы, а так же отображения состояния внутреннего автомата процессора. Всё для ненаглядной ошибки 000000. Сижу, изображаю из себя тактовый генератор :)

MacBuster
25.05.2018, 21:22
Удаление в знак протеста против действий MM

Hunta
25.05.2018, 23:08
Можно морзянку заодно подучить
Там кнопки сильно неудобные. Зато их четыре :)

Делаю всякий отладочный вывод. Всё больше прихожу к выводу, что в схеме УК-НЦ ЦП-ПП заложено много ценного :) В принципе, как и в схеме VAX-консольный процессор :)

- - - Добавлено - - -

Arseny, спасибо!

Hunta
26.05.2018, 20:04
Надоело пальцем жать, сделал тактовый генератор на 0.2 Гц. Похоже, слишком медленный :) Но прикольно наблюдать работу state аппарата :)

- - - Добавлено - - -

Посмотрел на работу с таким тактовым генератором, посмотрел на листинг ПЗУ. Вывод, который надо было давно сделать - ПЗУ автора совсем без ОЗУ не работают. Хотя бы в адресах 0-776 ОЗУ должно быть. Ок, попробую сделать небольшое ОЗУ в самом FPGA - заодно некоторые моменты отладить

- - - Добавлено - - -

Ковыряюсь в исходниках, краем глаза смотря на работу PDP с медленным генератором :) Вспомнилось из Понедельника - ... дошёл до буквы "и" в слове "передовую" :) Оно уже напечатало, что откликается адрес 177776 и что это psw :) Но скоро придётся прервать титанический труд - почти готова новая прошивка :)

AFZ
27.05.2018, 05:51
дошёл до буквы "и" в слове "передовую"- ...я уже букву "К" нарисовал.

...

- Газета называется "За передовую магию". Покажи мне там хоть одну букву "К"!

:)

Hunta
27.05.2018, 11:03
AFZ, а ты думаешь, ник - откуда ;)

Hunta
27.05.2018, 14:37
Продолжаю пытаться отделить модуль ОЗУ, что бы он тоже был как устройство на шине uni(q)bus.. Частично уже что то есть. Самое главное - после того, как процессор перестал тактироваться от DRAM он запускается ВСЕГДА :) ТТТ, по крайне мере пока вылета на ошибку 000000 не было :)

Hunta
27.05.2018, 19:03
Прикольно работает первая версия :) Читаешь, скажем, ячейку 0, а там... 0 (а не 123456, которые в коде), второй раз читаешь - и вот они - заветные 123456 :) Чуть чуть не синхронно - и труляля :)

Hunta
27.05.2018, 21:29
Ну понятно, почему автор не хочет дизайн работы с памятью переделывать... Блин..

Hunta
28.05.2018, 08:20
Муха-бляха! Кааааааак же не хватает последовательного выполнения операторов!! Единственный способ, который пока знаю - state machine + clock...

Hunta
28.05.2018, 23:16
Первый синтез ОЗУ (пока синхронный, но выдаёт сигнал типа ACK, что память выдала данные на шину), который работает...

AFZ
29.05.2018, 05:16
Так естественно, если клоки разные, ACK обязателен.

Hunta
29.05.2018, 05:59
Так естественно, если клоки разные, ACK обязателен
В исходном дизайне проц тактируется от (sdram) памяти, поэтому никаких подтверждений - когда процу надо - память готова. К сожалению, мы живём не в идеальном мире и есть задержки и время смены сигнала - я подозреваю, что поэтому часто получаю нестартующий результат синтеза. Моя первая цель - сделать работающими независимо проц и sdram память - поэтому и нужно подтверждение. Пока у меня дизайн на синтезированной памяти и без задержек - теперь буду пробовать добавить (искусственные) задержки. Отработаю дизайн и синтез - буду подключать реальную память.
Второй результат - в такую синтезированную память можно дизайном загнать любое содержимое - например - тесты или сделать её как ПЗУ. Автор это дело использует для проверок, модуля видеотерминала и сетевухи. Проблема в том, что он расписывает содержимое памяти а) в виде двух блоков - отдельно чётные, отдельно нечётные байты и б) в шестнадцатеричном виде - делая загон содержимого памяти трудным (он листинг специально написанной прогой обрабатывает) и нечитабельным для труПиДиПишника. Я сделал так, что бы это были 16-ти битные слова и в восьмеричной кодировке - правильно сгенерированный листинг MACRO-11 будет достаточно слегка подрихтовать FAR-ом - и он будет читабельным

Hunta
29.05.2018, 22:06
Сделал с задержкой. State machine наше всё для последовательного выполнения... Плюс clock, есссвенно :)
Пока не получается выставлять готовность памяти только по фронту такта, по спаду - Квартус сопротивляиица, а у меня не хватает знаний-идей, как преодолеть...

- - - Добавлено - - -

Поставил 50 МГц процу, 140 МГц памяти (пока синтезированной). Буду посмотреть, что на выходе - минут через 20-30 :)

- - - Добавлено - - -

Глюкает на 140 :) Попробую 100

- - - Добавлено - - -

На 100 вроде работает :) Но по хорошему - надо тест загонять :)

Hunta
30.05.2018, 05:32
А ещё надо научиться делать буфер.. Куда сохранять прочитанное (или записываемое) на время действия сигнала - хочу читать - со стороны проца.. ну или там dma

Hunta
30.05.2018, 09:23
Попробовал - АфДруГ - подцепить SDRAM :) В общем - единицы с шины данных я читать умею :) Не больше и не меньше :)

Hunta
02.06.2018, 13:07
Продолжаю трах... пытаться связать проц и SDRAM

Hunta
02.06.2018, 20:07
Нуу... просто разглядывание написанного ничего не даёт. В код автора попалась директива - как сохранить сигнал от исчезновения или переименования в процесс оптимизации. Учусь пользоваться Signal Tap-ом :)

Hunta
03.06.2018, 03:27
Прикольная штуччччка :) Умеет группировать сигналы и показывать в шестнадцатеричном виде :) Посмотрел на прерывание по вектору 4 :)

- - - Добавлено - - -

Ура! Не только в шестнадцатеричном - но и в восьмеричном тоже :)

- - - Добавлено - - -

Плюс этой платы - не нужен осциллограф или логический анализатор
Минус этой платы - на синтез уходит минут 30-40
Плюс этой платы - при написании кода надо думать
Минус этой платы - при написании кода надо думать "параллельно"

(почесал нос) когда придумаю ещё - напишу

- - - Добавлено - - -

Правило номер 0.
Внутри FPGA двунаправленных сигналов нет. Они есть только снаружи. Поэтому - на входе разделять, на выходе соединять, внутри - только однонаправленные.

Hunta
06.06.2018, 18:33
Ндя... с синтезированной памятью я крепко лопухнулся :) Оказывается, что бы синтезатор мог использовать встроенные блоки памяти (и не использовать логические элементы) - надо или делать строго так как надо или использовать IP Core :) Ну попробовал я сделать память на 32 Кб - квартус отказался - типа - нету у тебя столько LE. Попробовал 16 Кб (сильно удивившись от предыдущего) - он пыхтел всю ночь (порядка 7 часов), пытаясь распихать.. И мне надоело - как говорится - если всё сломал - пора читать инструкцию :) Пробую свой первый дизайн (не SDRAM) перевести на блоки памяти :)

Hunta
09.06.2018, 06:30
Млин... чем больше читаю, тем больше нихера не понятно. Это я про process.. Придётся сделать специально проект для изучения process..

AFZ
09.06.2018, 12:20
Придётся сделать специально проект для изучения process..Когда окончательно озвереешь от FPGA, достань из кладовки ту самую платку с SFM32F407 и запусти на ней пример от Чана, а то я близок к завершению своего макета. У Чана пример сделан для STM32F100, да еще и не доведен до конца (и еще он на CooCox'е), надо бы все это аккуратно спортить под Кейл и под F407. :)

Hunta
09.06.2018, 12:40
достань из кладовки ту самую платку с SFM32F407
Не поверишь - на столе лежит :) Вместе с жк-экранчиком :) И есть один нюанс - много кода от Gotek-а должно подойти :) Я сначала пробовал Gotek-овский проект загнать в Keil, но чего-то он слишком много мата вывалил и тогда я раскрутил скрипты, которыми автор Gotek-а собирает, даже пробовал свой код писать туда :) В общем, не то, чтобы проект активно развивался, но он отнюдь и не заброшен. Даже кака никака макетка для Кванта приобретена :)


Когда окончательно озвереешь от FPGA
На самом деле, не всё так плохо - только надо бы всё таки найти хороший учебник. А то пока больше методом ненаучного тыка. Хотя он приводит к железобетонной, отлитой из гранита памяти :)

- - - Добавлено - - -


достань из кладовки
Гы :) Вторая её сестра действительно в кладовке лежит :) Со всяким барахлом для прототипирования - типа хлебных досок :)

Hunta
11.06.2018, 17:36
Сброс, тактовый генератор (Полноскоростной и 0.5Гц-овый и переключение между ними) в совокупности работали не правильно.

Поправил.

Вроде теперь без проблем запускается как при прошивке, так и при сбросе, как при начальном режиме Полноскоростной, так и при 0.5Гц-овый.

За исключением переключения с полной скорости в 0.5 Гц-овый режим (дребезг переключателей) и режим Выполнить Одну Команду и Ждать - но это не сейчас, как-нибудь.

Теперь учусь в Signal Tap ставить триггер запуска. Вроде на первый взгляд все ок, но при запуске пишет - пре-триггерный захват.. Из за этого не могу увидеть, что происходит сразу после сброса (как при прошивке, так и при нажатии кнопки Reset).

Продолжаю чесать репу...

Hunta
12.06.2018, 01:12
Ну.. На быстром (50 МГц) клоке триггер запуска срабатывает. А если поставить медленный (0.5 Гц) - жилище северо-американского коренного жителя. В принципе - уже неплохо - когда буду опять пробовать память подключать - меня больше скоростной режим и интересует. На крайняк (что бы увидеть, чего творится) - можно будет специализированную микро-пзу-ху залепить.

Прикольный момент.

У автора модуль процессора выставляет адрес чтения инструкции из памяти и только на следующем клоке - сигнал чтения. Но модуль типа-ПЗУ выдаёт данные уже на первом клоке. Неправильные (установлен 15 бит). И только на втором клоке (когда прилетает сигнал чтения) - данные становятся правильные. Уже даже любопытно - какого??

Hunta
12.06.2018, 11:21
Какого какого. Типа - UNIBUS и QBUS - шины с ОК плюс оригинальный дизайн автора. Почикать надо :)

Hunta
12.06.2018, 14:42
Вроде почти всё, плюющее свои данные на шину данных при выданном адресе, но ещё не выданном сигнале чтения - почикал. Если только в не задействованных модулях ещё остался код.

Но, %ц%ко, ПЗУ-уха так и бросает. Может, Signal Tap из за того же клока, что и проц - не ловит не большую задержку в выдаче сигнала чтения?..

- - - Добавлено - - -

Щас забабахаю ему ешё 100MHz-овый клок...

Кстати, похоже сообразил, что не так с 0.5Hz-овым клоком. Но позже попробую

Hunta
13.06.2018, 01:10
Надоело трахаться с месивом из клоков. Переделал. Опорный клок используется для signal tap, он же генерирует клок для процессора - 50MHz и 0.5Hz в зависимости от режима, он же моргает светодиодом раз в секунду.

Hunta
13.06.2018, 05:16
Фигасе.. Даже переключение частоты на ходу заработало и плевало оно теперь на дребезг :)

Hunta
14.06.2018, 22:12
Продолжаю отлаживать клоки и связку с Signal Tap.
На шинах опять пакостит ПЗУ - вылезают его (???) сигналы до сигнала запроса на чтение.

- - - Добавлено - - -

Хотя может я и зря бочку качу на ПЗУ, может это модуль UNIBUS - он у автора тааак своеобразно реализован.. Что если захочешь добавить свой контроллер - не из числа реализованных - мат будет пятиэтажный. Как только отработаю работу с памятью (как синтезированной, так и SDRAM) - будет большая разборка с UNIBUS

Hunta
16.06.2018, 19:41
Для копающихся в VHDL - информация к размышлению :) Да, в принципе банально, но вдруг кому пригодиться.

Как уменьшить количество описываемых сигналов в компонентах и соединениях? Объединять сигналы. Пример:

Описываем:


-- (Signals To the bus) physical signals driven -out- to the bus by cpu or busmaster peripherals

type BusSignalsTo is
record

Addr : std_logic_vector(21 downto 0); -- physical address

ctrlDataIn : std_logic; -- if '1', this is an input cycle

ctrlDataOut : std_logic; -- if '1', this is an output cycle
ctrlDataOutB : std_logic; -- if '1', the curr out cycle is for a byte
DataOut : std_logic_vector(15 downto 0); -- data out from cpu or busmaster peripherals

end record BusSignalsTo;

-- (Signals From the bus) physical signals driven -in- from the bus by cpu or busmaster peripherals

type BusSignalsFrom is
record

AddrMatch : std_logic; -- '1' if the address is recognized

DataReady : std_logic;
DataIn : std_logic_vector(15 downto 0); -- data input to cpu or busmaster peripherals

end record BusSignalsFrom;

type Signals is
record

sTo : BusSignalsTo;
sFrom : BusSignalsFrom;

end record Signals;


Используем:


component unibus is
port(
-- bus interface
BusOut : out BusSignalsTo
; BusIn : in BusSignalsFrom

...

signal Slot0 : Signals;

...
pdp11: unibus port map (
BusOut => Slot0.sTo
, BusIn => Slot0.sFrom


Итог - по две строчки (вместо восьми) в компоненте и отображении портов компонента на сигналы. На ЛЮБОМ количестве сигналов.

Почему две? Потому что, сцу... плохая собака - в описании типа (в нашем случае - записи) нельзя указать тип (in, out или ещё какой) поля. Только в описании сущностей - что в них входит, а что выходит. Поэтом приходится комбинировать в два типа - один - входные сигналы, другой - выходные.

Самое главное - при правильном подходе не подсоединишь не то не туда и не забудешь подсоединить.

Hunta
17.06.2018, 11:12
Вся моя возня примерно уже с месяц как c исходниками проекта всё больше убеждает меня в том, что все проблемы с ошибкой 000000 и ей подобными - это результат, мягко говоря, неудачного решения автора работы с SDRAM. За последние два дня УЖ КАК Я ТОЛЬКО НЕ ИЗДЕВАЛСЯ над исходниками - особенно последние сутки - запускается и откликается.

К сожалению, полностью проверить синтез (ака загрузить RSX) не могу - модуля памяти пока нет. Идёт глубокая переработка того, как отдельные модули взаимодействуют друг с другом - и результат будет - ДА ДА ДА! - больше похож не PDP, чем у автора. Не то, как работает модуль процессора - там всё достаточно неплохо - а именно взаимодействие - типа - как сигналы передаются и обрабатываются, если процессор полез в память или обратился к контроллеру DB.

Пока достаточно простая часть - фактически - редактирование текста - ничего нового не добавляется, ничего старого не удаляется. Но текст становится проще для понимания.

Hunta
17.06.2018, 16:42
Почему не работает?
Почему почему. Потому что кто-то взял и забыл включить синтез системного (177560-177566) терминала :)

MacBuster
17.06.2018, 17:32
Удаление в знак протеста против действий MM

Hunta
25.06.2018, 22:25
Уф... сдвинулся с мёртвой точки (читай - разобрался в очередной VHDL-ной хрени). Более менее понял, как использовать RECORD :) И оно не работало (см предыдущее моё сообщение) не только потому, что системный терминал отсутствовал, оно ещё не работало потому, что я не правильно делал :) Ещё не совсем полностью работает - но по крайне мере не встаёт как вкопанное :)

- - - Добавлено - - -

А вот очередное изменение показал, что я иду в правильно направлении - ожидаемое заработало полностью. Двигаюсь дальше :)

- - - Добавлено - - -

Круть! Заработал тот вариант, на котором я прервался. В общем, сигналы надо правильно соединять даже виртуальные :)

Hunta
30.06.2018, 18:20
Продолжаю объединять сигналы и редактировать исходники. Из первоначального шага (попытка правильно подключить SDRAM) пока в синтезируемом PDP нет оперативки, так что вся проверка - что оно откликается на команды подключённого ПЗУ. Пока, если делать аккуратно, всё идёт нормально - PDP включается :) Но редактировать ещё прилично...

Hunta
05.07.2018, 19:20
Старинный FPGA с механической прошивкой :)
http://www.KpXX.Ru/Феликс

Hunta
06.07.2018, 20:01
Уф... Война с сериал-портами :) То, как сделано у автора плюс - ну вылетело у меня из головы, что в VHDL - это не операторы присваивания, а соединения и у них есть направление сигнала... В общем, то в одном месте пытался соединить rx с rx, tx с tx, то в другом :) В очередной раз - рисуем на бумажке - вход выход - пишем код :) Переделал :) Заработало :) Теперь делаю более простой вариант переключения - кто у меня системный терминал - COM порт PC или модуль VT в FPGA :)

AFZ
07.07.2018, 06:41
Сделай и тот, и другой, один 177560, второй 176570 и меняй у них адреса, это изменить один бит.

Hunta
07.07.2018, 10:01
Поздравляю, ты тоже сейчас думаешь как программист, а не как железячник ;)

В синтезируемом PDP есть 4 модуля KL-11 (так что вопрос не в - сделай тот и другой ;) у автора сделано достаточное количество)

Их нужно

а) правильно соединить с выходным серийным портом и портом синтезируемого VT
б) параметризовать эти СОЕДИНЕНИЯ

Основная война у меня - пункт а :)

- - - Добавлено - - -

Могу сказать образней.
Перед тобой стоит PDP, откуда выходят два кабеля - в два терминала :)
Нужно поменять их подключение.
Ты предлагаешь мне добраться до плат контроллеров и поменять адреса на них :)
Я хочу - просто переткнуть провода :)

Но это я уже научился делать (и не втыкая провод не в то гнездо) :):)
Теперь моя задача - сделать переключатели, которыми я мог бы выбирать - в какой порт воткнут терминал.
В общем, такой переключатель я "спаял", но опять провода перепутал :):)

Hunta
10.07.2018, 08:03
Уф... Вроде сделал типа простого мультиплексора. С утра правда успел проверить только, что на нулевом канале с PC и на первом канале с VT всё работает. Вечером проверю, если РС сидит на первом канале, а VT на нулевом - тоже всё работает :) Но почти уверен :) В коде переключение выглядит так


portForFPGA <= 0; -- PC подключен на PDP к KL11-0
portForVT <= 1; -- VT подключен на PDP к KL11-1
или


portForFPGA <= 1; -- PC подключен на PDP к KL11-1
portForVT <= 0; -- VT подключен на PDP к порту KL11-0

Hunta
10.07.2018, 19:47
Мля... Думаю дальше

Hunta
11.07.2018, 21:18
Уф... Вроде убедил синтезатор сделать так, как Я хочу, а не так, как ЕМУ хочется :) В попытках убедить код немного поменялся, теперь выглядит так:



type SerialPortOnDevice is (PDPSerialPort0, PDPSerialPort1, PDPSerialPort2, PDPSerialPort3, XUSerialPort);

-- FPGA port connection
constant FPGAPortForSerial : SerialPortOnDevice := PDPSerialPort0;

-- for vt
constant VTPortForSerial : SerialPortOnDevice := PDPSerialPort1;


Так же исправил неточность с XU (но учитывая, что до его проверки я не дошёл - пока это никак не сказалось бы

Hunta
11.07.2018, 23:58
Похоже, с серийниками разобрался :) Ещё немного знаний о электронике - науке о контактах и соединениях :)

Причесал код (после безумных разборок с серийными портами).
Собрал один вариант соединений (системный терминал - к PC, доп терминал - к VT) - работает.
Поменял код (системный терминал - к VT, доп терминал - к PC), поставил синтезироваться. Проверять буду утром :)

Если всё нормально - продолжу причёсывать код в плане интерфейсов (переделка под RECORD)

Hunta
12.07.2018, 06:34
Двигаемся дальше :)

Hunta
12.07.2018, 20:33
Блямбус... Только разобрался с одним... и влетел в другое... Кабы раньше то подумать.... Короче, скорее всего застрял надолго - буду учиться работать с памятью. Собственно, с этой темы и начались большие переделки PDP-2011.

Пока на генерируемой в FPGA. Надеюсь, надыбленное пригодится с SDRAM.

Ушёл надолго - вернусь не скоро :) Ну то есть перодически буду сюда пописать об неудачах (много) и успехах (мало) :))

Hunta
14.07.2018, 00:19
Посмотрел, подумал - откатил изменения, пока занят более простыми правками кода.
Сейчас под раздачу попали модули MMU и Unibus - объединяю сигналы в них (а также в тех модулях, которые ими пользуются)
Пока ТТТ :)

Hunta
15.07.2018, 14:22
Хм.. Перепахал прилично, но синтезируемое пока держится :)

Занят интеграцией сигнала типа DataReady (пока от памяти) с процессором и Bus Master Device-ами (пока это RK, RL, RH и XU, причём контроллер RH, зараза, ещё и напрямую (в варианте RH70) общается с памятью).

Для проверки интеграции с процессором есть хороший подопытный контроллер - терминал VT (у него, в редакции автора, внутри своя PDP и синтезируемая память :) ) По аналогичному устроен и XU, но его работоспособность заметить сложней :)

Hunta
15.07.2018, 21:47
Ну, подцепил блок памяти. Пока ещё не совсем правильно (бита готовности нет), но - работает :)
Двигаемся дальше :)
Хм.. К основному PDP что ли подцепить... :)

Hunta
16.07.2018, 09:03
Почесав всё почесуемое, до чего смогли дотянутся руки, решил всё таки добавить к основной PDP память (пока генерируемую в FPGA), так как это позволит проводить более глубокое тестирование того, что успел наворотить.

В общем, за остаток вечера и утро, успел добавить модуль памяти, прописать (пока) код для чтения, сгенерировать и проверить, что а) синтез приводит к работающему устройству (да, и основной проц и проц в VT запустились и работают) и что попытка чтения не приводит к эксцессам. Вестимо, что проверить - а действительно ли оно читается или модуль озу только делает вид - пока (до реализации записи) не представляется возможным.

Вечером попробую добить запись и протестировать уже более плотно. После того, как память заработает - можно будет грузить RT и тесты, например, с RK

Hunta
16.07.2018, 22:26
С утра точно читалось не то - с сонных глаз перепутал вход и выход :) Пытался с входа читать :)

Блин.. Что то не даётся никак память. Придётся лезть Signal Tap-ом.. А с ним каждая попытка - это час
А без памяти не проверишь - чего там я ещё успел наворотить...

Hunta
18.07.2018, 13:15
Не прошло и полгода (а если точнее - чуть-чуть меньше четырёх месяцев, как узнал про очередной полезный стрУмент - RTL Viewer
Теперь можно увидеть микросхемы синтезированной PDP :)

AlexG
18.07.2018, 13:58
Я конечно понимаю что альтера "наше всё", но всё ж предложу почитать (и посмотреть мультики)
https://www.xilinx.com/products/design-tools/ultrafast.html
ug949.pdf что то типа "торы" для разработчика. (правда это уже левел 80 экспиренса нужно)
И может быть "открою глаза" на то что есть "чипскоп" это типа очень умного осцилографа/логического анализатора содержимого плисы. У альтеры есть аналогичный инструмент. (да и симулятор ModelSim тож полезен).
Сорри, если это уже известно. :)
ПС: жарко, путаю слова...

Hunta
18.07.2018, 14:26
чипскоп"
Signal Tap?

AlexG
18.07.2018, 14:54
Йа Йа натюрлих. Он самый :v2_dizzy_botan:

Hunta
18.07.2018, 17:21
Ну им то я уже достаточно давно пользую. Бесит только необходимость перекомпиляции...

Я конечно понимаю что альтера "наше всё",
Просто она, а точнее - Cyclone мне первый под руку подвернулся :) И пока оно мне нужно только под один конкретный проект - я его пытаюсь допились, я на нём и учусь. Из за нехватки времени, так же потому как я так лучше запоминаю - методом - Аффтар, убейся ап стенку :) Когда очередной кусок осваиваю - в учебники заглядываю :)
Никак руки до симулятора толком не дойдут :)

Но сильнее всего тормозит (хотя и учит) - стиль написания кода автора. Уже не раз налетал - пока аккуратно текст не отформатирую - ничё не понятно :)

В общем, по мере свободного времени движусь вперёд :)

AlexG
18.07.2018, 17:55
Просто мысли вслух. ИМХО. Без желания поучать.
Ну как бы в общем случае:
1) Весь дизайн разбивают на блоки
2) Описывают как и что они должны делать
3) пишутся блоки - как бы отдельным проектом
4) пишется тестбенч для отдельного блока
5) в симуляторе проверяется "как работает" блок при подачи "нужных сигналов" - должен выполняться пункт 2 - "компиляция" достаточно быстро проходит и все нужные сигналы видны.
6) апосля соединяются блоки в один общий дизайн
7) повторяем 4 и 5 для 6 пункта
Общая мысль: пока не будет выполнены первые стадии разработки - не зачем "лезть осциллографом" в заведомо не работающую плису.
Грубо говоря можно нарисовать проект , который заведомо по ресурсам не лезет в плису или не выполняются временные ограничения, вот такой проект даже и не стоит имплементировать и грузить в плис.
Удачи.
ПС: к примеру если времянки не укладываются - то процесс имплементации может идти "сутки", а если времянки укладываются в ограничения - то за "пять минут".
ПСПС: в пользу альтеры - она в бытности быстрее синтезировала и имплементировала проекты, чем ксайлинкс (по крайней мере то что я встречал). но это не значит что альтера лучше чем ксайлинкс. они оба достаточно "кривые".

Hunta
18.07.2018, 18:15
Просто мысли вслух. ИМХО. Без желания поучать.
Я программист ;) Так что все 7 пунктов мне знакомы - пусть и из другой области.

Проблема в том, что я имею то, что у программистов называется легаси код - проект УЖЕ есть и с моими (даже текущими знаниями) - мне пока проще его править (возвращаясь на шаг назад, если очередное изменения не взлетело и пытаясь понять - где я накосячил :) )


зачем "лезть осциллографом" в заведомо не работающую плису.
Не совсем правы - уже пару раз он мне показал - где косяк :) Но в целом я согласен - если всё уже соединено и не понятно, какой блок косячит - сигнал тап тяжело использовать :)


к примеру если времянки не укладываются
А у автора временные ограничения не описаны от слова совсем :) Это то, что мне предстоит освоить (но после того, как выправленный мной проект заработает, в первую очередь - с SDRAM) - а то прикольно наблюдать за модулем VGA :) Иногда чётко буквы рисует, иногда буквы - как жиробасики :)


но это не значит что альтера лучше чем ксайлинкс. они оба достаточно "кривые".
Скорей, не сами камни, а софт :) Точнее говоря, как мне кажется на примере квартуса - его оптимизирующая часть :) Но здесь тоже есть нюанс - дерьмо на входе, дерьмо на выходе :)

AlexG
18.07.2018, 18:26
https://www.youtube.com/watch?v=ZEl11MGn2mU
А вот с времянками лучше сразу "бороться" - половину граблей можно убрать одним чёхом.
иначе получается что:
"Маяк то потухнет - то погаснет" (с) из загадки.

"Но здесь тоже есть нюанс - дерьмо на входе, дерьмо на выходе"
Ксайлинкс более "жёсткий" то что проходит на альтере здесь в принципе отваливается сразу.

Hunta
18.07.2018, 18:31
У него тактовый генератор для процессора выдаёт модуль работы с SDRAM. Там такооооой маяк получился - и оно прилетело мне тогда, когда я только начинал с VHDL и FPGA :) После того, как (пока) убрал SDRAM - даже с моими кривыми ручками постабильней синтезируемость стала :)

Hunta
19.07.2018, 17:29
AlexG, добрый вечер.

Я так понимаю, что с VHDL и FPGA не первый день знакомы? :)

Можете вкратце, на пальцах или простом примере, объяснить про времянку - пример (всё таки пример :) ), когда нужна и как задаётся. Самый простой - я пока всё равно с ней колдовать не буду, но чутьё подсказывает - есть сценарии (тот же контроллер VGA) - когда нужна будет :) Когда доберусь - будет стартовой точкой понимания :)

Hunta
20.07.2018, 21:42
Вчера вечером психанул.. ну, в хорошем смысле этого слова :) Была массовая замена семейств сигналов на записи - из тех, которые я уже описал :) ПиДиПяха стойко выдержала - синтез работоспособен :) Осталось только для BusMaster устройств сделать аналогичную замену. Фактически - редакционные изменения :) Должно тоже пройти - БестПроблем

AlexG
21.07.2018, 00:07
Мне до гуру как удаву до аляски пешком.:)
Основная деятельность "С". в плисах я изучаю systemverilog на xilinx под vivado.
Рядом есть коллеги у которых плисы это основное.
если очень кратко:
1) тактовая в плисе должна быть одна (для простых схем)
2) любую схему можно представить как: входной сигнал - триггер - комбинаторная логика - триггер - выходной сигнал
3) пункт 2 можно комбинировать как в "длину" так и в "параллель"
4) главный принцип: за один период тактовой сигнал с выхода первого триггера должен успеть попасть на вход второго триггера
5) для очень простых схем достаточно указать параметры тактового сигнала (частота и скважность)
6) тактовые сигналы должны приходить на спец. вывод(-ы) плис
7) есть ещё понятия " клоковый домен (CDC, Clock Domain Cross)", асинхронные входные сигналы и др. ещё более высокие материи
пс: у плисы обычно надо задавать тип входа/выхода (ттл, кмоп3.3 кмоп1.8 итд).
не соблюдения 4 пункта приводит к тому что любое минимальное изменение схемы, температуры воздуха, напряжения питания - приводит к полной глючности проекта.

Hunta
21.07.2018, 00:40
1) тактовая в плисе должна быть одна (для простых схем)
Я так понимаю - это про входной задающий генератор. У Циклона их можно сделать не то три, не то четыре, но у меня используется один - 50 МГц.

Или это про внутренние тактовики? У меня задающий через PLL размножается - 27 с чем то там (VGA 640х480), 100 (генерируемая в FPGA память) и 300 (Signal Tap). Из 300 кодом делается или 0.5 Гц - для меееееедленной работы процессора, что бы можно было наблюдать (отладка) или 50 МГц - штатная работа.


главный принцип: за один период тактовой сигнал с выхода первого триггера должен успеть попасть на вход второго триггера
Правильно ли я понял, что речь идет о триггерах из пункта 2?

Про седьмой знаю, но пока не использую - с учётом того, что внешний у меня задающий генератор один - вроде как получается один клоковый домен
Вход или выход и его тип задаётся (по крайне мере в случае Quartus-а) в описании проекта. Поскольку это описание делалось в тот момент, когда знания были минимальны - использовал спец утилиту, которая сгенерировала это описание. Ну и с внешним миром, если синтез прошёл удачно и я не напутал входы-выходы - устройство общается вроде без проблем :)

Я так понимаю, что в более сложных (чем в пункте 5) схем - надо указывать - за какое время сигнал должен (см пункт 20 с входного триггера достичь выходного?

AlexG
21.07.2018, 14:08
в меру своих знаний:
входная 50мгц, идёт на pll на выходе 27, 100, 300
а 0.5 и 50мгц формируется на триггерах ?
так вот по феншую так не делают. Принято что все тактовые частоты формируются только на pll и dcm и др. но не на триггерах.
0.5 гц я б по пробывал бы сделать из 50мгц путём выделения одного импульса из миллиона.
пункт 2 - да - он "свят"
п7 это как раз когда в схеме несколько тактовых и не кратных меж собой 50 и 27
п5 это больше ко входным/выходным сигналам, которые тоже выдаются с привязкой к тактовой частоте.
пс: какие книжки с картинками листались ? (чтоб не повторяться) я у своих спрашиваю что не ясно..

Hunta
21.07.2018, 15:04
входная 50мгц, идёт на pll на выходе 27, 100, 300

а 0.5 и 50мгц формируется на триггерах ?

Посмотрел. На одном PLL из 50 делается 100 и 300, на другом PLL (из той же 50) делается 25.155 (VGA) (когда пробовал сделать на одной PLL - частоту точно нельзя было выставить для всех)

На триггерах делается тактовая для всех модулей в синтезируемой PDP (0.5 и 50 - что используют модули, определяется переключателем на плате)
Ещё на триггере сделана 0.5 Гц (отдельная от PDP) - которой (раз в секунду) моргает светодиод

Если тактовая PDP 0.5 Гц - для SignalTap используется 3 Гц, сделанная на триггерах
Если тактовая PDP 50 МГц - для SignalTap используется 300 МГц, сделанная на PLL

100 МГц - это задел для SDRAM, пока не используется


так вот по феншую так не делают. Принято что все тактовые частоты формируются только на pll и dcm и др. но не на триггерах.

0.5 гц я б по пробывал бы сделать из 50мгц путём выделения одного импульса из миллиона.

На PLL не даёт, максимально, что умеет - ЕМНИП, 1 МГЦ


п7 это как раз когда в схеме несколько тактовых и не кратных меж собой 50 и 27
Те, которые на входе или и те, которые синтезируются? Причину появления понятия clock domain и работу с ними я вроде себе представляю - борьба с иголками


п5 это больше ко входным/выходным сигналам, которые тоже выдаются с привязкой к тактовой частоте.
Входные-выходные - для модуля или вообще наружу?


пс: какие книжки с картинками листались ? (чтоб не повторяться) я у своих спрашиваю что не ясно..
Хе... Толком пока никакие - в основном по принципе - во что упираюсь - начинаю искать в инете и листать книжки, которые попадаются там. Ну и примерно по тому же принципу - доки от ALter-ы :)

svofski
21.07.2018, 15:22
Можно я попробую парой строк кода проиллюстрировать тезисы AlexG про распределение клоков?

Было годно для симуляции, но катастрофически и непредсказуемо рушится при синтезе, как только дизайн становится сложнее :


reg [3:0] clock_div;
always @(posedge mclk) clock_div <= clock_div + 1;
wire evil_derived_clock_div16 = clock_div[3];
wire evil_derived_clock_div8 = clock_div[2];

..

always @(posedge evil_derived_clock_div16) begin
// то, что будет тактировано этим клоком разойдется по фазе с mclk и с evil_derived_clock_div8
end

always @(posedge evil_derived_clock_div8) begin
// то, что будет тактировано этим клоком разойдется по фазе с mclk и с evil_derived_clock_div16
end



Стало хорошо, годно для синтеза и устойчиво к попаданию мюонов потому, что теперь все регистры тактируется одним клоком. При синтезе достаточно только убедиться, что сигналы clock enable стабилизируются к приходу очередного фронта mclk. Это и человеку просто сделать, и Квартусу понятно, что надо оптимизировать.


reg [3:0] clock_div;
always @(posedge mclk) clock_div <= clock_div + 1;
wire clock_enable_div16 = ~|clock_div; // держится один такт пока все разряды == 0
wire clock_enable_div8 = ~|clock_div[2:0]; // держится один такт, пока 0000 или 1000
...
always @(posedge mclk)
if (clock_enable_div16) begin
// все записи во все регистры тактируются одним клоком mclk, но разрешены только раз за 16 тактов
end

always @(posedge mclk)
if (clock_enable_div8) begin
// все записи во все регистры татируются одним клоком mclk, но разрешены только раз за 8 тактов
end

AlexG
21.07.2018, 16:11
Йа йа натюрлих. Плисе плохеет, если обычный сигнал превращать в тактовый. см. первый пример.
на десерт:
https://electronix.ru/forum/index.php?showtopic=20307

Hunta
21.07.2018, 16:23
Нуу.. насколько я себе представляю, evil_derived_clock_div16 и clock_enable_div16 (как и вторая пара) ведут себя по разному, точнее, ээ.. скважность разная - термин правильно вспомнил? :)


_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_

_______________----------------________________----
-______________________________--__________________

Если я правильно понял мысль - тактовый клок и синтезируемый клок не должны одновременно меняться по разному - то есть если тактовый идёт из 0 в 1, то синтезируемый или стоит или тоже идёт из 0 в 1 и наоборот - да?
Кстати, насколько я понял код на Verilog (PDP-2011 на VHDL) - есть тоже момент, когда они в противофазе.
Поясняю, почему так понял (начало картинки - mclk = 0, reg = 15, ++ - переход в фазе, !! - переход в противофазе)


++!!
_-_-_

-____
_--__

Или я опять не допонял? :)

- - - Добавлено - - -


Плисе плохеет, если обычный сигнал превращать в тактовый
Ну, автор PDP-2011 этим несколько страдает....


на десерт:
https://electronix.ru/forum/index.php?showtopic=20307
Аха, спасибо.

- - - Добавлено - - -


Плисе плохеет
Чёт мне кажется, что не ПЛИС-е... Кстати, не ПЛИС-е, а ППВМ-у ;) Так вот, не ППВМ (ака FPGA), а синтезатору :)

svofski
21.07.2018, 16:39
Hunta, я чего-то плохо паршу эти картинки, но кажется правильно. Суть в том, что clock enable держится только один такт из многих (один из 16, например, или один из 100 миллионов, если мы из 50МГц получаем 0.5Гц). Все остальные такты просто проносятся мимо. Эффективная тактовая и периодичность получаются те же самые, что и при деленном клоке.

(Это к тому же удобный механизм, если надо разнести несколько устройств во времени. Например, первая фаза на div == 0, вторая фаза на div == 1 итд).

VHDL или Verilog значения в этом вопросе не имеет, они транслируются в одно и то же. Но вот если автор оригинального проекта страдал использованием деленных клоков, то это проблема, с которой надо разбираться. Все это почти механически исправляется добавлением "if (ce)" во все тактируемые процессы.

- - - Добавлено - - -

Еще добавлю, потому что жто очевидно, но может быть не сразу бросается в глаза. Если clk_enable ошибочно сделать не "div == 0", а просто использовать clk_div[3], то получится эффективное деление всего лишь на 2. Будет работать пачка из 8 mclk, затем 8 пропусков итд.

Если в качестве условия использовать LFSR вместо константы, то можно сделать spread spectrum clock для уменьшения помех и требовательности к энергопотреблению. Что в проекте PDP-11 на FPGA, уверен, очень востребовано =)

Hunta
21.07.2018, 16:50
Hunta, я чего-то плохо паршу эти картинки
Делается просто - копируешь эти строчки в notepad, а в notepad-е ставишь шрифт покрупнее :)
Вот нарисовать их было сложнее - запарился считать такты :)


VHDL или Verilog значения в этом вопросе не имеет
Это я знаю, я больше про то, что Verilog мне надо было ещё въехать - в отличи от VHDL, который уже более менее неплохо читаю :)


Если clk_enable ошибочно сделать не "div == 0", а просто использовать clk_div[3], то получится эффективное деление всего лишь на 2
Не совсем понял, но (как понял) у нас будет восемь клоков держаться флаг в 1 и в это время схема будет реагировать на все mclk, а потом (флаг в 0) - восемь клоков тупо ждать, так что эффективное деление будет да - на 2.


Если в качестве условия использовать LFSR вместо константы
За LFSR пришлось лезть в инет (такое сокращение было не знакомо), но думаю, это может пригодиться после того, как я всё таки добьюсь цели номер 2 (работа SDRAM) и начну выжимать из железки все соки :)

svofski
21.07.2018, 17:01
у нас будет восемь клоков держаться флаг в 1 и в это время схема будет реагировать на все mclk, а потом (флаг в 0) - восемь клоков тупо ждать, так что эффективное деление будет да - на 2
Все правильно.


Вот нарисовать их было сложнее - запарился считать такты
Честно говоря, при всей полезности умственной гимнастики, для таких вещей все-таки стоит разобраться с симуляцией. Сделать маленький набросок, где без особой драмы можно будет написать ту или иную конструкцию и быстро посмотреть, что из нее получается.

Hunta
21.07.2018, 17:36
при всей полезности умственной гимнастики

стоит разобраться с симуляцией
Из опыта - это приводит к тому (по крайне мере в программировании), что начинаешь писать НЕБРЕЖНО (а чё, под дебаггером проверим и сделаем как надо), что в конечном итоге приводит к большему времени на написание кода. Да, периодически возникает мысля - надо бы с симулятором разобраться, но пока хватало тупого рассматривания кода и периодически - Signal Tap-а :)

Вопрос. Если скважность у клока, скажем 50 МГц, два - то понятно, сколько времени будет держаться высокий уровень и что на него успеют среагировать все, кто надо :) Но если у него высокий уровень будет держаться не 20 наносекунд, а 6,666666 нс (если мы его получили из 300 МГц) - успеют ли на него среагировать все, кто надо? Поэтому или придётся понижать тактовую или добавлять внутренний триггер, который будет держаться дольше, да? Или есть альтернативы?

И вроде как в PLL можно задать скважность, да? То есть если мы делаем на PLL, то проблему предыдущего вопроса снимаем? И она актуально только на ручных клоках?

svofski
21.07.2018, 18:04
Отвечаю на вопрос, как я его понял. При клоке 300 МГц и clock enable равномерно пропускающим один клок из 6, мы получаем эффективную тактовую частоту 50МГц. Если вся логика завязана на один и тот же фронт клока, вся комбинаторика должна устаканиваться за один период 50 МГц, или 20нс.

Cкважность собственно клока имеет значение только при передаче сигналов от процессов на posedge к процессам на negedge, или наоборот. При записи на negedge вся комбинаторика должна будет успеть успокоиться со времени posedge и это время будет зависеть от скважности клока.

Hunta
21.07.2018, 19:00
Э.. не совсем то имел ввиду.. Что то типа


base_addr_match <= '1' when (base_addr(21 downto 15) = FromBus.Addr(21 downto 15)) and (clk = '1') else '0';
...
process(clk)
begin
if rising_edge(clk) then
if (base_addr_match = '1') then
...

base_addr_match будет в 1, пока совпадает адрес устройства с адресом на шине и высокий уровень clk

Логика в процесс должна успеть отработать, пока base_addr_match будет в 1.

Одно дело, когда base_addr_match будет в 1 - 20 нс, другое дело, когда - 6.666 нс. Технически, во втором случае внутренности process-а могут не успеть среагировать. Я понимаю, что пример кривой и так делать не надо, но это попытка объяснить :)

- - - Добавлено - - -


комбинаторика должна устаканиваться за один период 50 МГц, или 20нс.
То есть у них есть время до следующего клока 1?

- - - Добавлено - - -

Попробовал переделать клок процессора :) До переделки синтезировалось от 25 до 35 минут, после переделки - чувствую, минут 55 будет пахать :)

- - - Добавлено - - -

Ню... на частоте 50 МГц не запустилось, на частоте 0.5 Гц начало кода в ПЗУ начало отрабатывать, а потом встало. Скорее всего по вектору 4
Щас посмотрим, где оно сломалось

- - - Добавлено - - -

Пока выбирало команды из ПЗУ, всё нормально. Потом полезло через регистры в ПЗУ и в какой то момент - УПС...

- - - Добавлено - - -

Вырубил синтез ОЗУ (у меня впечатление, что иногда ОЗУ откликается, когда не надо), посмотрим, что получится...

svofski
21.07.2018, 19:13
base_addr_match будет в 1, пока совпадает адрес устройства с адресом на шине и высокий уровень clk

base_addr_match <= '1' when (base_addr(21 downto 15) = FromBus.Addr(21 downto 15)) and (clk = '1') else '0';
Так делать не надо, я даже подозреваю, что где-то в варнингах Квартуса есть на этот счет замечание. Дело в том, что в этом случае условие if (base_addr_match = '1') в процессе rising_edge(clk) никогда не выполнится. Вот почему: clk становится входом комбинаторной схемы, которая имеет задержку. В то же время выход этой схемы является входом enable регистров, которые должны записываться в процессе rising_edge(clk). clk приходит всюду напрямую, равномерно, с минимальным разбросом. Таким образом, в момент rising_edge(clk) на проводе base_addr_match всегда будет установившееся значение выражения при clk = 0.

Можно представить себе такой наклонный желоб, по которому катятся шарики. В желобе с некоторым интервалом расположены ворота, которые открываются периодически, причем все они дергаются одной веревочкой. Комбинаторика — это неровности в желобе, которые заставляют шарики катиться неравномерно. Ворота с веревкой это клоки. В исправной машине к моменту открытия всех ворот все шарики будут лежать ровно и ждать ворот. Если к моменту открытия ворот какие-то шарики еще в движении, значит клок слишком быстрый для этой машины, надо дергать веревочку реже.

Hunta
21.07.2018, 19:26
Как я и написал, я знаю, что это неправильно :) Просто пытаюсь объяснить, что я имел ввиду раньше.
По быстрому прошерстил код автора - вроде у него ничего похожего нет.

Второй абзац можно было не писать - я и так понимаю, что все элементы в схеме вносят задержки, которые зависят от а) (постоянная задержка) самого элемента и б) (случайная задержка) фазы Луны, когда этот элемент был изготовлен :):)

Интересно.. Без ОЗУ синтез за 22 минуты...

- - - Добавлено - - -

Ну... без ОЗУ истчо интересней... Время Signal Tap :)

Hunta
22.07.2018, 23:04
Рассматривал под микроскопом процесс общения с ROM. Интересные процессы происходят - даже как то не задумывался о задержках :) Программист, чули :)

Hunta
23.07.2018, 06:55
(заинтересованно-озадаченно почёсывая разное) Дааа... главное - уметь думать в возможностях и особенностях FPGA.. Этак я на партийно-правильном клоке заставлю работать.. Вечером ещё буду смотреть на результат в Signal Tap-e.. Занимательно получается :)

Hunta
26.07.2018, 01:20
Резиновая женщина, да? ;)

http://www.KpXX.Ru/PDPonFPGA/Железо/Схема

Продолжаю процесс редактирования..

AlexG
26.07.2018, 10:01
Это Множество Мандельброта.:v2_dizzy_botan:

Hunta
26.07.2018, 10:07
На этой ветке просто было несколько раз - типа эмуляторы и FPGA - это резиновые женщины, которые труПиДиПи-шники не юзают.
И если ты хочешь FPGA - типа проще эмулятор юзать.
Ну вот им доказательство, что FPGA - это железячней некуда :) И с ним тоже паять придётся :)

Ну, а лично моё мнение насчёт тех, кто от FPGA возбуждается - они просто НЕ СМОГЛИ :) "Лиса и Виноград" :)

Vslav
26.07.2018, 18:24
Ну, а лично моё мнение насчёт тех, кто от FPGA возбуждается - они просто НЕ СМОГЛИ :) "Лиса и Виноград" :)
Много хороших и сильных людей, имеющих богатый многолетний опыт программирования не смогли в HDL :)
Причем, чем богаче и круче опыт - тем сложнее СМОЧЬ :)

svofski
26.07.2018, 18:45
=)

Субъективно по картинкам кажется, что как-то не очень хорошо с модульностью. На одном уровне иерархии не должно быть столько мочалы.

Hunta
26.07.2018, 18:51
Причем, чем богаче и круче опыт - тем сложнее СМОЧЬ
Я бы сказал - тем, как правило, сложнее СМОЧЬ. У меня достаточно многолетний и богатый опыт программирования, но это не мешает мне СМОЧЬ :)

Причём, судя по моему опыту разборок, в первую очередь или из-за качества учебника или из-за того, что он написан желеязчником, для которого - параллельное выполнение операторов или последовательное выполнение операторов означает вполне определённую вещь, которая (СЮРПРИЗ!) - совсем не то, что подумает про этой дело программист :)

- - - Добавлено - - -


Субъективно по картинкам кажется, что как-то не очень хорошо с модульностью
Автор разбил достаточно просто проект на модули - вот процессор (один модуль), вот ДП (второй модуль), вот контроллер RK, вот контроллер RL, вот контроллер KL ну и т.д.

И всё это объединяется (СЮРПРИЗ) модулем Unibus, внутри которого (СЮРПРИЗ) создаются экземпляры этих модулей. И если хочешь что то добавить (например, ещё один контроллер RK) (убрать проще - об это автор (СЮРПРИЗ) позаботился) - придётся попыхтеть. Ну или скажем создать несколько (разных) PDP-11 (внутри кристалла) и связать их - тоже придётся попотеть :)

svofski
26.07.2018, 18:55
Может быть в VHDL модулем что-то другое называется, но мне так не очевидно. Что не так в том, что процессор это модуль, контроллер диска это модуль итд? Или речь о том, что модули внутри себя такие поросшие, типа весь процессор это один единственный модулище?

Hunta
26.07.2018, 19:02
С терминами надо как нть разобраться, но когда я пишу модуль - в одном файле пишется Entity (например, Entity cpu, это интерфейс) и Architecture Implementation (Architecture Implementation cpu - реализация интерфейса). Из другого модуля ссылка будет как - Сomponent (Сomponent cpu, дублирует описание в Entity)
И типа да - процессор (и все остальное) - это такие (почти) самодостаточные модулищща

svofski
26.07.2018, 19:21
Ну пока они работают то и ладно, пусть они внутри себя будут сколь угодно сложны. Главное, чтобы на уровне, на котором с ним приходится общаться, все было относительно читаемо. То есть вот вариант на картинке "PDP%20on%20FPGA%2002.jpg" по-моему прекрасный, все хорошо. А вот "PDP%20on%20FPGA%2003.jpg" выглядит кромешно. Что это?

Hunta
26.07.2018, 19:40
Это меня и привлекло - что оно работает и главное - процессор полный, то есть реализовано или всё или почти-почти всё :) Так что RSX-11M-Plus загрузилась без жужжжания :)


выглядит кромешно. Что это?
Ну так это он самый и есть :) Модулищще CPU :)

- - - Добавлено - - -

Я последовательно увеличивал картинку :) Сначала сам PDP (без внешнего обвеса), потом место с процом, потом проц (Великий и Ужастный) целиком, потом внутренности :) Жалко не знаю как снять всю картинку целиком в один файл) :)

- - - Добавлено - - -

Кстати, всякие зелёные прямоугольники - это эти самые модули и есть :)

AlexG
26.07.2018, 19:47
у ксайлинкса есть экспорт в пдф сей картины. правая кнопа мыши.

Hunta
26.07.2018, 21:39
ксайлинкса есть экспорт в пдф сей картины. правая кнопа мыши

Сейчас идёт синтез, как закончится (эта заразка не даёт работать с просмотрщиком во время синтеза) - я покопаюсь, может, тоже есть чёньт похожее

- - - Добавлено - - -

Спасибо за подсказку - есть экспорт в pdf, но через меню.

Выложил там же pdf-ник, для тех кому любопытно. Но увы, макс увеличение у pdf - 6400 процентов. И естественно, в pdf компоненты развернуть нельзя..

Развернут процессор :)

- - - Добавлено - - -

Цель:
http://www.KpXX.Ru/PDPonFPGA/Железо/PDP-11(74)

- - - Добавлено - - -

:):):)

svofski
26.07.2018, 22:42
Стало любопытно, заглянул в свой vm1: https://imgur.com/a/KOLtOXH
Дизайн у меня прилежно списан с Симидзу-сенсея (POP-11).

Hunta
26.07.2018, 23:16
А исходники POP-11 сейчас где то доступны?

Занимательно выглядят эти схемы :)

svofski
26.07.2018, 23:46
А исходники POP-11 сейчас где то доступны?
http://www.telegraphics.com.au/pdp11/shimizu-lab.dt.u-tokai.ac.jp/
Исходники на SFL красивые, но результат трансляции в Верилог хоть святых выноси. Поэтому я вм1 писал вручную.

Hunta
27.07.2018, 06:28
svofski, спасибо!

Hunta
27.07.2018, 19:54
Грёбаное 'Z'!! :):):)

AlexG
27.07.2018, 21:24
Это Zzzzz не спроста... (с) ВинниПух
Z-состояние надо предавать анафеме по жизненно.

- - - Добавлено - - -

Оригинальный сайт тоже доступен токмо надо через прокси в японию ползать.

Hunta
27.07.2018, 21:40
Ну, как я понимаю - только на внешних пинах...

Пробую повторить синтезируемую память на массиве... Как известно, PDP может писать отдельные байты (хотя читает всегда целиком слово)... Встал в тупик. Если делать два массива (чётный и нечётный байты), то синтез использует блоки памяти. А если пытаться сделать массив из 16-ти битный слов.. то пока оно делает регистры... Ж...

svofski
27.07.2018, 22:12
Если делать два массива (чётный и нечётный байты), то синтез использует блоки памяти. А если пытаться сделать массив из 16-ти битный слов.. то пока оно делает регистры
Может быть поможет глава из гандбука: https://www.altera.com/content/dam/altera-www/global/en_US/pdfs/literature/hb/qts/qts_qii5v1.pdf страница 12-9, глава "Inferring RAM functions from HDL Code"?

Hunta
27.07.2018, 22:20
Спасибо, почитаю

svofski
27.07.2018, 22:48
Кстати еще, в Квартусе есть возможность генерировать сорец по шаблону (Edit->Insert template). Шаблоны подогнаны под то, что он хорошо понимает. Конечные автоматы, все виды памяти и тд.

Hunta
27.07.2018, 22:54
Из достижений.
Пока плюнул на более правильный вариант (использование ip core) для памяти, сделал память на массивах (байтовых), которые синтезатор успешно распознал. Так что у меня теперь есть (вроде работающих) 256 кб памяти. Буду проверять - чего там я ещё наворотил с проектом. Цель - заставить весь этот бардак взлететь (ака - загрузить RSX+). Поскольку все изменения аккуратно сохранялись - я могу возвращаться (при необходимости) назад, когда всё заработает, что бы понять - что сломал :)

- - - Добавлено - - -


(Edit->Insert template).
Э.. не вижу такого пункта в меню.

MiX
27.07.2018, 23:23
Встал в тупик. Если делать два массива (чётный и нечётный байты), то синтез использует блоки памяти.
Запись байта ведется по двум условиям- наличие сигнала WTBT, и выбор чет/нечет по нулевому адресу шины. Сигнал WTBT дают байтовые команды (с лидирующей единицей вначале), а выбор чет/нечет с ноль/единицей в конце адреса.

Hunta
27.07.2018, 23:25
Запись байта ведется по двум условиям- наличие сигнала WTBT, и выбор чет/нечет по нулевому адресу. Сигнал WTBT дают байтовые команды (с лидирующей единицей вначале), а выбор чет/нечет с ноль/единицей в конце адреса.

Это про FPGA, да?

MiX
27.07.2018, 23:28
Это про FPGA, да?
Про PDP11. Как там в FPGA реализуется, Вам виднее.

Hunta
27.07.2018, 23:32
У меня было про FPGA. Как оно в PDP - я и сам знаю.

svofski
28.07.2018, 00:12
Э.. не вижу такого пункта в меню.
А он есть. Даже если в гугле написать "quartus edit insert template", появляются скриншоты этого диалога.

Для байтового доступа в altsyncram можно сгенерировать вход bytemask для 16-битного ОЗУ. Его получить можно из WTBT и младшего бита адреса. У SDRAM-а будет похоже.

Hunta
28.07.2018, 00:41
А он есть.
Уточнение - он есть, если ты находишься в редактировании файла.


го получить можно из WTBT и младшего бита адреса
Ещё раз. Сигналы PDP я знаю. Проблема не в них. Проблема в том, что при попытке использовать массив из 16-ти битных слов синтез приводит к регистрам, а не к использованию блоков памяти. Сгенерить 400 слов на регистрах можно, сгенерить 16 килослов уже проблема

svofski
28.07.2018, 00:45
Не надо так кипятиться. Был вопрос про синтез BRAM. Я сказал, что его можно синтезировать с bytemask-ом.

Hunta
28.07.2018, 00:48
Посмотрел код, который предлагается в шаблонах. Ничего для меня нового (кроме многобайтовых слов - но это я уже в книжке сегодня увидел, так что можно сказать - тоже ничего нового). Ни один из примеров не показывает, как использовать память, описание которой через IP..
Кроме того, как авторский вариант, так и вариант в шаблоне мне не очень нравится - сложно через код прошить содержимое - придётся прошивать по байтно - и сразу не видно, что делает код. А смотря на словное восьмеричное представление - я уже в значительной степени понимаю - и что делает код и как при необходимости без перекомпиляции его поправить

svofski
28.07.2018, 01:14
Примеры показывают как описывать память, которая Квартусу понятна. Это не гарантирует то, что она станет мегафункцией. Дальше работают алгоритмы оптимизации и они уже решают запихивать в BRAM или в регистры. На ход их работы можно влиять через global assignmentы. Не подскажу, как заставить инферрить ОЗУ там, где оно не инферрится, но может быть в нужную сторону поиск направит если скажу наоборот, как запретить: "set_instance_assignment -name MAX_RAM_BLOCKS_M4K 1 -to *". Звездочка тут имя инстанса. Если знать имя инстанса своего ОЗУ, то можно намекнуть сколько штук M4K не жалко на него выделить.

Это я недавно разбирался, почему инферрилась здоровенная ОЗУ из на первый взгляд безобидной маленькой таблички.

Hunta
30.07.2018, 02:34
Уф.... Подведя итоги :) Промежуточные :)

Двухбайтовые слова массива я теперь умею отправлять в блоки памяти. К сожалению - или удобная инициализация или работа с байтами. Одновременно пока - не получается. Поэтому - в баню.

Наконец то (YES!!!!) я разобрался, как работать с блоком памяти, которые сгенерировала мегафункция. Пока не проверил работу записи в байтовом режиме, но хоть что то. До сих пор получал - ноль на чтение, после записи всё равно ноль на чтение :) А теперь хоть и пишется и читается после этого записанное :) Сильно не оптимально, зато работает - а с этим проще работается :) Отдельное спасибо AlexG и svofski за тыканье носом в то, что сигнал(ы) не устанавливается(устанавли аются) моментально. Да, теоретически я это знал и до этого. Но, видимо, пока сам крепко не влетишь... В общем, ещё раз спасибо :) Что ещё долго доходило - нужные сигналы для памяти должны быть выставлены ДО очередного клока, а не во время. Ну, тут помогли тыканье носом и Сигнал Тап - в конце концов правильная мысль продралась в голову :) Теперь можно сгенерировать, скажем, 256 кб памяти и начать проверять остальные мои изменения, в первую очередь процессор и ДП - RT-11 c SJ, XM и ZM мониторами в этом поможет. Пока не научусь работать с SDRAM.

SDRAM - тут пока ничего нового - даже не пробовал сделать, потому что более простой случай (блоки памяти) не работали. Скорее всего буду делать в параллель - проверку изменений и попытку заставить работать SDRAM.

Уф.. :) Утопал спать :)

Hunta
31.07.2018, 07:14
Немного переделал модуль работы с BRAM - вынес из процесса всё, что можно "просчитать" снаружи. В процессе осталось - реакция на сигналы запросов чтения и записи и сигналы подтверждения.

Попробовал увеличить размер блока памяти до 256 кб - с пульта - вроде работает. Пока лучше проверить не могу - из за изменения протокола работы с памятью (он, кстати, стал ближе к протоколу unibus) нужно доделать (буквально 3-4 строчки) остальные модули - пока на новом работают только процессор, память и интерфейс терминала. Вечером.

Из за предыдущего пункта - скорее всего до SDRAM сегодня не доберусь

Hunta
01.08.2018, 18:09
Вчера - переделал клоки (вместо планировавшегося) - перевёл основные на PLL, ручной только - 0.5 (CPU), и 4 (Signal Tap) Гц и секундный тик светодиодом. После некоторого количества танцев вокруг - заработало.

Сегодня займусь SDRAM.

После этого доделаю всё, что ещё не успел, на новый вариант протокола общения по шинам. Проц, память и терминальные порты - уже на нём. В принципе - не сильно много работы. Если, конечно, я опять КакуНибудь глупость не сотворю :)

После этого - или попробую поразгонять проц и памяти (BRAM и SDRAM) или допилю DMA устройства на предмет подключения к шине (под мой вариант). А может это будет сначала в процессе допиливания устройств на новый протокол - а тесты после этого. Как рука зачешется :)

Ну и продолжается форматирование текста, а так же переименовывание сигналов (пытаюсь подобрать такие имена, что бы были говорящие). На русский их переделать, что ли? :)

Hunta
02.08.2018, 08:41
Похоже, накосячил где то при редактировании mmu - на модулях памяти до 256 кб не проявляется, расцвело пышным цветом на 4 мб :)

Сегодня вечером буду выверять - процесс знакомый :)

Главное - проц работоспособен (он ещё в vt и xu, и в vt точно всё работает (в пределах 11/20, который там используется))

Надо почитать про 11/20 (который был первым), что то у меня сложилось впечатление, что он был... немножко другой. Но не факт - хорошая вероятность того, что я не так понял

Hunta
02.08.2018, 20:46
А вот не факт, что это у меня косяк...

Hunta
03.08.2018, 18:26
Time Quest - слово недели :)

SDRAM начинает оживать :) Попробовал записать слово (123 по адресу 1000) - повис :) После сброса из ячейки 1000 прочиталось 100 :) Если сравнить с BRAM - когда у меня не помню сколько - чего бы не писал - читалось строго 0 - прогресс - не прошло и двух дней :)

К сожалению, приходится помечать сигналы для Signal Tap - а это лишние регистры, ALM и скорость синтеза...

- - - Добавлено - - -

В фоне крутится прошивка на частоте 0.5 Гц, уже дошла до буквы К в словах За Передовую Магию :) Тьфу, до цифры 0 слове 000106 :)

- - - Добавлено - - -

О! Второй ноль нарисовала :)

- - - Добавлено - - -

Для проверки контроллеров RK11, RL11 и DB - придётся присоединить три считывателя SD
О! Третий ноль и синтез закончился :)

- - - Добавлено - - -

YES!! Попробую программу запихать c пульта :)

- - - Добавлено - - -

А вот хрен :) Не успела записать - программа прохерена :) Лана, буду смотреть на диаграмму :)

- - - Добавлено - - -

Или регенерация не работает..

svofski
03.08.2018, 18:30
Hunta, а какой SDRAM, на какой частоте, какой контроллер, что делает TimeQuest?

Hunta
03.08.2018, 19:02
DE10-Standard - всё на ней. Контроллер синтезируется в FPGA - частота - теоретически задаю сам (практически - есть максимальная - но до неё не скоро)

Time Quest - программа анализа всяких временных параметров при синтезе

svofski
03.08.2018, 19:19
У этого контроллера есть имя?

У частоты есть абсолютное значение? Как оно соотносится с частотой процессора?

Какие именно ограничения ты задаешь в TimeQuest-е и как оцениваешь результат наложения ограничений? Этот пункт мне особенно интересен, потому что я так и не разобрался с чем его едят.

Hunta
03.08.2018, 19:33
Ещё раз повторяю.

Плата DE10-Standard (альтеровская, ныне интеловская)

На плате распаян кристалл Циклона и кристалл SDRAM. Они между собой соединены. Всё. Никакого внешнего контроллера нет. Что внутри FPGA насинтезируешь - то и будешь использовать :) Похожее я делал BRAM - только там не надо думать о регенерации. :)

Код контроллера не мой. Точнее говоря - у меня их два - найденный на просторах и от автора PDP-2011. Попробовал поиграться с найденным. Частично рабочий, но похоже проблема в регенарации.

Time Quest только начинаю изучать. Идея у него достаточно простая - подсказать, какие допустимы задержки - а он тебе подскажет - иде у тебя косяки

svofski
03.08.2018, 20:06
Что внутри FPGA насинтезируешь - то и будешь использовать
Вот именно это я и спрашиваю, что именно ты там синтезируешь? И какой клок на него подаешь. SDRAM можно тыщей разных способов завести.

Покажу личным примером пример понятного ответа на свои вопросы:
Контроллер SDRAM такой (https://github.com/svofski/vector06c-lesshadoks/blob/master/quartus/src/sdram/SDRAM_Controller.v). Он поддерживает чтение-запись только одного слова, без бурста, без кеширования. Оригинал имел внутреннюю регенерацию, я его переделал под внешнюю.
Частота тактирования контроллера и SDRAM 96 МГц, это частота системы * 4.


Идея у него достаточно простая
Досюда и я разобрался, у меня дальше проблемы :)

Hunta
03.08.2018, 20:13
что именно ты там синтезируешь?
Контроллер SDRAM :) Который будет работать в PDP-2011.


И какой клок на него подаешь
Пока 100. У автора PDP-2011 был 140


можно тыщей разных способов завести.
У меня пока два - и оба не мои :) Хотя в одном я хорошо разобрался :)


Он поддерживает чтение-запись только одного слова, без бурста, без кеширования. Оригинал имел внутреннюю регенерацию
Почти то же самое, только можно читать и один байт. Кэширование я сделаю на BRAM. Регенерация так и будет внутренней, хотя, возможно, будут подсказки от проца.


у меня дальше проблемы
У меня сегодня первый день - так что ни проблем, ни (пока) особого понимания, как правильно использовать, но идею я понял, остальное дело техники и времени :)

svofski
03.08.2018, 20:19
Теперь понятно.

Если вдруг случится желание документировать свое освоение TimeQuest-а, было бы интересно почитать.

Hunta
03.08.2018, 20:26
Я периодически сюда пописываю :) А сейчас читаю вот это:
http://caxapa.ru/thumbs/442268/TimeQuest_for_dummies.pdf

Hunta
05.08.2018, 12:09
Вопрос к знатокам :)

Есть ... хм... сигнал, который используется как флажок (то есть или 0 или 1).

Есть ли какой то эзотерический смысл описывает его как signal (и постоянно писать = '0' или = '1')?

Или всё таки никакой разницы (кроме уменьшения набиваемых символов в прошивке) не будет, если его описать (как это принято у программистов) как boolean.

Если предположить, что наружу из кристаллы он не выводится или остальные состояния signal них...фиг не нужны?

- - - Добавлено - - -

Посмотрел по синтезу на тестовых кусках кода - вроде результат одинаковый...

Hunta
06.08.2018, 22:28
Повоевал с клоками... Что то мне не нравится, что у меня (или у PLL) получается на выходе PLL. Вроде ставлю скважность 50, а Signal Tap показывает всякую хрень со скважностью. Или может он врёт... Пока не понял. А осциллографа посмотреть - нету. В общем, пока плюнул и сделал клоки кодом. По крайне мере со скважностью и фазой всё нормально. Или мне опять Signal Tap врёт :)

Сегодняшний вечер посвящён борьбе в BRAM (в проекте их штук). Стоит только на секунду отвернутся - хлоп - и синтезатор вместо BRAM собирает на регистрах. А опыт показывает, что попытка собрать RAM на регистрах (помимо улетающих LE) приводит чаще всего к нестартующему синтезу.

В общем, аккуратно вычистил, что бы все блоки стали BRAM (кроме основной оперативки - чего то я опять напортачил и синтез вообще не пойми чего с ней делает - в регистрах столько не уместишь и блоков памяти тоже как то маловато используется - ну и PDP гутарит - нет у тебя оперативки - но этим я займусь позже). Запустил синтез проверить.

И кстати - ещё наблюдение - когда с BRAM всё тип-топ - синтез идёт всего минут 15 :) А я только к 30-ти привык... :)

Пока как то так :)

С Time Quest пока разбираюсь. То есть я понимаю, когда показатели плохие - но что с этим делать - пока опыта не хватает :)

Hunta
19.08.2018, 18:41
Из переменных новостей.

Продолжается война с клоками. Помимо моих кривых (пока) ручек, оказалось, что и у автора с клоками полный атас. Прошерстил его привязки к клокам. Как ни странно, но после этого синтез заработал сразу (ну из тех модулей, которые я пока проверить могу). Но война с клоками продолжается.

Из хороших новостей.

Автор весьма "элегантно" делал память (и ROM и RAM) с предустановленным содержимым (типа загрузочных ПЗУ у PDP и ОЗУ с firmware у VT и XU) - собственно чего и была моя первая войнушка с попыткой описать 16-битный ROM/RAM с байтовым доступом и отображением на BRAM - я хотел описать и содержимое. В виде слов, а в не в виде двух байтовых блоков с непойми с чем в них для tru PDP-шника. Был бы 16-ти битный массив - я мог бы и "читать" его и подправлять быстро.

Ну.. тогда счёт был 1:1 - описать 16-ти битное отображение на BRAM - да, байтовый доступ - хрен. Или чего то наподобие (давно было, надо старые версии смотреть - что бы точнее сказать) с результатом - нэ взлэтэло.

Плюнул тогда - мне проблем и с клоками хватает.

Сегодня я зашёл с другой стороны.

Через мегафункцию можно не только описать блок памяти в BRAM, но и указать инициализирующий файл. Попробовал. Пока не всё получилось, но - главное - 16-ти битная память (ROM или RAM), байтовый доступ и инициализирующий файл в виде (та-да-да-дам!) 16-ти битных восьмеричных слов. С возможностью указания - из какого файла грузить :)

Осталось заставить её работать :) Опять гнусные клоки выползли :)

Но главное - в сигнал тапе видно, что читаются правильные слова :)

Потом слегка подрихтую сгенерённое мегафункцией, что бы можно было через параметр указать - тип памяти, размер и ини-файл. И тогда будет проще проводить внутреннее тестирование :) А то у меня сейчас главный тестировщик - VT - если он не завёлся - крупно накосячил :)

Hunta
23.08.2018, 08:20
Вчера был первый почти успешный вариант дизайна :):) То есть проц с ПЗУ стартует и даже общается с консолью, хотя и с некоторыми глюками.

Значительная часть проблем - из за особенностей дизайна проца от автора. Чего стоит, например, вариант, когда, прочитав первое слово команды (которая, скажем, косвенно через регистр читает ячейку из ПЗУ), проц, не снимая никаких сигналов, просто выставляет новый адрес и ждёт ответа :)

Пока не хочу трогать дизайн проца и пытаюсь обрабатывать в модуле ПЗУ и такой вариант. В целом - оно как бы неплохо, потому что позволяет быстрее читать или писать :) Но нужно очень точно выдерживать порядок приёмы и выдачи сигналов.

Hunta
24.08.2018, 19:38
Я таки её достал :) Первый вариант, который работает - и пока не к чему придраться :)
Делалось с прицелом, что все устройства на шине могут работать с разной тактовой частотой. Сейчас у проца 25 МГц, ROM - 50 МГц.
Теперь буду пробовать гонять в разных вариантах :)

Hunta
25.08.2018, 18:00
Переделал :) На выходе тоже рабочий вариант :)
Пробую увеличить тактовую памяти - до 100 МГц

Hunta
26.08.2018, 21:55
Сегодня с VHDL не работал :) Сегодня работал с листингами MACRO-11 - поскольку из них делается прошивка для ROM и RAM :) Рисовал скрипт, который из листинга делает MIF файл. Пока ещё в процесс :)

AFZ
27.08.2018, 21:28
А почему не из OBJ/LDA/SAV? Я бы делал из LDA.

Hunta
27.08.2018, 22:33
А почему не из OBJ/LDA/SAV?
А зачем? Есть исходники, транслируем - извлекаем из листинга. С остальными возни больше.

forth32
28.08.2018, 06:14
А зачем? Есть исходники, транслируем - извлекаем из листинга. С остальными возни больше.

С остальным возни в разы меньше. В том же объектном модуле все коды уже лежат готовыми кусками - собираем их в буфер, кое-где подправляем относительные адреса на основании RLD-записей, и готово. Я в свое время за пару часов написал программку, делающую бинарник из объектyого модуля формата RT-11, просто почитав книжку File Formats из комплекта документации по rt11. А из бинарника получается MIF одной командой srec_cat.
Как раз делал терминал VT52 для этого самого pdp2011, взамен авторского убожества blockramxx.

Hunta
28.08.2018, 06:42
С остальным возни в разы меньше.
У меня большой опыт парсинга текстовых файлов и всё, что нужно - powershell. Плюс при парсинге листинга я могу в mif вставить исходник - что позволяет мелкий ремонт делать прямо в mif-е. Попробуйте тоже самое сделать с двоичными файлами.

AFZ
31.08.2018, 06:50
В том же объектном модуле все коды уже лежат готовыми кусками - собираем их в буфер, кое-где подправляем относительные адреса на основании RLD-записей, и готово.В LDA-файле еще лучше. Те же готовые куски, только адреса там уже исправлены на абсолютные. Записи там всего двух типов: (1) данные и (2) конец программы, там же пусковой адрес. А если программа расположена компактно, то еще проще взять .SAV-файл, ему просто обрезать незначащие начало и конец, тут и программу обработки-преобразования сочинять не надо.


Плюс при парсинге листинга я могу в mif вставить исходник - что позволяет мелкий ремонт делать прямо в mif-е. С этим, конечно, не поспоришь. С одной стороны. С другой - а на фига править прямо в mif-е, если есть эмулятор? Поправил исходник, запустил в эмуляторе батник... Отставить! .COM-файл, потом в винде из полученного бинарника батником делаем mif и вперед!

Hunta
31.08.2018, 08:27
С другой - а на фига править прямо в mif-е, если есть эмулятор?
Потому что

Поправил исходник, запустил в эмуляторе батник... Отставить! .COM-файл, потом в винде из полученного бинарника батником делаем mif и вперед!
куча лишних телодвижений. И плюс достаточно хорошее знание команд PDP-11, что бы сыграть роль MACRO-11 :)

Но для меня главное, что глядя в один (готовый) файл - можно видеть - и что располагается по каким адресам и что оно там делает :)
Я, конечно, в начале работы над FPGA запускаю несколько FAR-ов и даже могу расположить 4 из окна на мониторе, чтобы видеть всё и не переключаться между окнами, но когда одно-два окна, в которые надо смотреть - оно удобнее :)

Saar
09.09.2018, 21:47
Hunta,
Выложите исходники. У меня похожая плата - DE10-nano. На ней нет SDRAM, но у меня модулем она подключена. Опыт работы с SDRAM у меня большой. Можно будет совместно развивать.

Hunta
10.09.2018, 08:36
Saar, как такового - готового проекта нет. Основное, что я сделал - оторвал тактовый генератор процессора от того, что выдаёт SDRAM (или SRAM, если на плате нет SDRAM) в проц. Ну и плюс сильно недоделанный сигнал типа Ready, поступающий от всего (ну или должный поступать от всего в идеале) на шине при обращении проца.
Я пока больше развлекаюсь с попыткой подстроится под особенности работы проца с памятью (но чувствую - надо сделать нормально эту работу), а так же с BRAM и занесением инфы в неё из прошивки - в режиме - а ещё я так vhdl учу, потому как пока в голове не отложилось - что насинтезируется железного из моих описаний...
Ну и пока у меня таймаут из-за других дел.. Недели две уже как...

Hunta
14.10.2018, 13:13
После долгого перерыва опять вернулся к FPGA. Точнее, к скрипту, который переделывает листинг в MIF файл. Добил до вариант, прогон которого уже позволяет (правда, пока ещё делается некоторое количество правок руками как в исходном листинге, так и в MIF файле) получившийся результат использовать в синтезе. Как выглядит:


-- begin_signature
-- m9312l
-- end_signature
WIDTH=16;
DEPTH=256;

ADDRESS_RADIX=UNS;
DATA_RADIX=OCT;

CONTENT BEGIN
0 : 165000; -- 165000 165000 data0: .word data0 ; test data structures
1 : 165000; -- 165002 165000 .word data0 ;
2 : 100000; -- 165004 000 200 data1: .byte 000, 200 ;
3 : 177777; -- 165006 177777 data2: .word 177777 ;
4 : 165006; -- 165010 165006 .word data2 ;
5 : 165006; -- 165012 165006 .word data2 ;
6 : 000500; -- 165014 000500 .word memloc+0 ;
7 : 000501; -- 165016 000501 .word memloc+1 ;
-- ; .=base+20
-- DIAG: ; PRIMARY DIAGNOSTIC ENTRY POINT
8 : 005003; -- 165020 005003 T1: clr r3 ; R3=000000 C=0
9 : 005203; -- 165022 005203 inc r3 ; R3=000001 C=0
10 : 005103; -- 165024 005103 com r3 ; R3=177776 C=1
11 : 006203; -- 165026 006203 asr r3 ; R3=177777 C=0
12 : 006303; -- 165030 006303 asl r3 ; R3=177776 C=1
13 : 006003; -- 165032 006003 ror r3 ; R3=177777 C=0
14 : 005703; -- 165034 005703 tst r3 ; R3=177777 C=0
15 : 005403; -- 165036 005403 neg r3 ; R3=000001 C=1
16 : 005303; -- 165040 005303 dec r3 ; R3=000000 C=1
17 : 005603; -- 165042 005603 sbc r3 ; R3=177777 C=1
18 : 006103; -- 165044 006103 rol r3 ; R3=177777 C=1
19 : 005503; -- 165046 005503 adc r3 ; R3=000000 C=1
20 : 000303; -- 165050 000303 swab r3 ; R3=000000 C=0
21 : 001377; -- 165052 001377 bne . ; br . if FAIL
22 : 012702; -- 165054 012702 T2: mov #data0,r2 ; R2=165000
23 : 165000; -- 165000

--здесь текст вырезал, особого смысле полностью приводит не вижу - всё вырезанное примерно такое же...

250 : 014304; -- 165764 014304 T8D: mov -(r3),r4 ; memory FAIL, put bad data to R4
251 : 010300; -- 165766 010300 mov r3,r0 ; put bad addr to R0
252 : 005006; -- 165770 005006 clr sp ; zap SP
253 : 000000; -- 165772 000000 halt ; and DIE
254 : 040460; -- 165774 060 101 verson: .ascii "0A" ; version ID
255 : 123162; -- 165776 123162 crc16: .word <123162> ; CRC-16 will go here
END;

Работа над ним продолжается :)

Hunta
19.11.2018, 13:13
Перодически, по мере свободного времени, продолжаю копаться в PDP-11 на FPGA. Вчера случайно забабахал в модуль проца предвыборку слова из следующего адреса. Но поскольку случайно - оно как бэ не совсем работает. То есть на однословных командах (не переходах) просто Зупер, но поскольку получилось случайно - в целом проц не работает :)

ROM BRAM сейчас работает 200 МГц тактовой, но каждый цикл чтения - три такта. В планах - поднять до 400 МГц и/или сделать работу однотактовой.

Ну и проц всё таки вернуть в рабочий вид :)

Hunta
20.11.2018, 20:08
Случайно научился задержки выдачи сигнала по полтакта, то есть типа - данные выдаются по фронту, готовность - по (следующему) срезу, а на следующем фронте - сигнал готовности без задержки относительно фронта клока. Может, где и описан - но я ж книжек не читаю, метод обучения - исключительно битьём головой об стол :):) В общем, когда видишь готовый результат - ЭХ, КАК ЖЕ Я РАНЬШЕ ТО НЕ ДОДУМАЛСЯ!!! :):)

- - - Добавлено - - -

В целом, сейчас воюю с заставлением проца работать с BROM, которая работает на произвольной частоте :) В силу своеобразного дизайна проца... Тяжело идёт :) Но резать проц по крупному ишо не готов :) Надо мышление натренировать на железячное :)

- - - Добавлено - - -

А, да, предвыборку пришлось покоцать. Рано исчо с этим воевать :)

bigral
22.11.2018, 02:08
Случайно научился задержки выдачи сигнала по полтакта, то есть типа - данные выдаются по фронту, готовность - по (следующему) срезу, а на следующем фронте - сигнал готовности без задержки относительно фронта клока. Может, где и описан - но я ж книжек не читаю, метод обучения - исключительно битьём головой об стол :):) В общем, когда видишь готовый результат - ЭХ, КАК ЖЕ Я РАНЬШЕ ТО НЕ ДОДУМАЛСЯ!!! :):)

эх не понял ниче, но чувствую что там чтото интересное... может какой кусочек кода небольшой чтоб понять как обычно делают и как по новому можна делать?

Hunta
22.11.2018, 08:54
кусочек кода небольшой
Ок, вечером.

Hunta
22.11.2018, 19:12
entity SysROM is
port
(
BaseAddr : in std_logic_vector((bus_addr_width-1) downto 0)

; FromBus : in typeFromBus18
; ToBus : out typeToBus

; mem_clk : in std_logic
);
end SysROM;

architecture implementation of SysROM is

component ROM
PORT
(
address : IN STD_LOGIC_VECTOR ((addr_width-1) DOWNTO 0);
clock : IN STD_LOGIC := '1';
rden : IN STD_LOGIC := '1';
q : OUT STD_LOGIC_VECTOR (15 DOWNTO 0)
);
end component;

begin

sdram: ROM
port map
(
address => RomCurrAddr((addr_width-1) downto 0)
, clock => mem_clk
, rden => isReadEnable
, q => Data
);

isAddrMatch <= (BaseAddr((bus_addr_width-1) downto addr_width) = FromBus.Addr((bus_addr_width-1) downto addr_width)) and FromBus.Common.isAddrReady;

isDataReady <= isAddrMatch
and FromBus.Common.isGetData
and (CurrAddr = FromBus.Addr)
and (CurrMemState = memIdle);

ToBus.isAddrMatch <= isAddrMatch;

ToBus.Data <= Data when isDataReady else
(others => '0');

ToBus.DataReady <= '1' when isDataReady else
'0';

process(mem_clk)
begin
if rising_edge(mem_clk) then

case CurrMemState is

when memIdle =>

if isAddrMatch
and FromBus.Common.isGetData
and (CurrAddr /= FromBus.Addr) then

RomCurrAddr <= FromBus.Addr;
isReadEnable <= '1';
NextMemState <= memLoadAddr;

else

isReadEnable <= '0';

end if;

when memLoadAddr =>

CurrAddr <= RomCurrAddr;
NextMemState <= memWaitRead;

when memWaitRead =>

isReadEnable <= '0';
NextMemState <= memDataReady;

when memDataReady =>
NextMemState <= memIdle;

when others =>

isReadEnable <= '0';
NextMemState <= memIdle;

end case;

end if;
end process;

process(mem_clk)
begin
if falling_edge(mem_clk) then

CurrMemState <= NextMemState;

end if;
end process;

end implementation;


Задача - ToBus.DataReady должен быть выставлен после того, как ToBus.Data устаканились.
Можно, конечно, на следующем rising_edge(mem_clk), но это потеря такта :) Интересней - на falling_edge(mem_clk).
Но снимать его надо без задержки - на rising_edge(mem_clk)

Hunta
26.11.2018, 20:47
Сначала делаем state машину с кучей действий для каждого state, а потом выдавливаем это всё в параллельное выполнения.
И хрен кто разберёт, КАК ЭТО все РАБОТАЕТ???? :D

Hunta
02.12.2018, 18:33
После длительной неработоспособности проца (где то недели три, как я его "разобрал" - попытка реализовать протокол, похожий на протокол обмена по МПИ) сегодня прошёл первый запуск с работоспособностью пульта :)

Теперь посмотрю, что будет, если менять тактовую проца и ПЗУ пульта - одна из целей - добиться работоспособности на любой (ну в пределах работы внутренности - вряд ли заведу проц или ПЗУ на гигагерце) комбинации скоростей. Сейчас у меня на выбор 25, 50, 100, 200 и 400 МГц

Hunta
02.12.2018, 21:25
Попытка повысить клок проца с 25 до 50 МГц прошла успешно.

Попытка повысить скорость памяти с 50 до 100 МГц - сбой внутреннего обработчика состояний. Так же проц перестал работать на клоке 1 Гц. Буду разбираться, но позже.

Hunta
02.12.2018, 23:32
Надо же. Проц и на 100 МГц завёлся :) Раньше максимум на 50-ти :)
Сколько получалось у автора - не совсем понятно, там клок от памяти шёл.
Но пока у меня медленно получается по скорострельности в инструкция (около трех миллионов) - надо дорабатывать работу памяти (что бы можно было повысить скорость) и процессора с шиной

Hunta
15.12.2018, 23:33
Пользуюсь тем, что синтез идёт приличное время (сейчас, видимо из за top элемента - минут 35, буду с этим разбираться, но потом) - иногда вношу изменения даже с работы :)

Сейчас отрабатываю работу с BRAM памятью пословно и побайтно (собственно, само по себе это проблем не вызывает) плюс смотрю - удастся ли прикрутить её инициализацию. Собственно, если синтез ROM - то вопросов вообще нет - PDP не читает с шины байты, а вот если RAM...

Значительно чаще синтез стал проходить успешно, но, видимо, где то возросли задержки и пришлось снизить скорость до 50 МГц. Пошёл второй подход к Timing Analyzer - буду потихоньку учиться добавлять временные констрейнты.

Внутри синтезированного ядра решил отказаться от подхода QBUS - слишком много тратится клоков на отработку протокола, пусть и без фаз - выдача адреса-выдача данных - учитывая, что шины адреса и данных - раздельные. Но надо будет реализовать модуль работы с QBUS, подключенной снаружи - 36 контактов на гребёнке вроде должно хватить для подключения внешний плат. Но это - не ближайшее будущее :)

Время только катастрофически не хватает...

Hunta
16.12.2018, 16:38
Как это не странно, но Квартус не отказался инициализировать RAM массив из двух-байтовых слов (слова описаны как двухбайтовый массив, то есть получаем двухмерный массив) mif файлом, в котором использовались 16-ти битные слова, не байты (то есть, например 012737, а не 025, 337). Одной проблемой меньше :)

- - - Добавлено - - -

В общем, делать RAM и загонять туда тестовую (или не тестовую) прошивку, полученную из листинга, теперь нет особых проблем. А когда допилю скрипт - и вообще mif файл будет делаться мухой.

Hunta
21.12.2018, 08:55
Немного ускорил работа процессора с шиной (вместо четырёх тактов стало три), к чему стремиться - ещё есть. Пока на этом остановлюсь, займусь восстановлением работоспобности модуля видеотерминала. Времени, как обычно, кот наплакал, так что - урывками и пользуюсь тем, что синтез идёт в лучшем случае минут 15, если не свезёт (как с попыткой сделать два такта) - то и под час - так что в параллель с основной работой. Чего сломал в модуле VT, пока не понял, так что, скорее всего начну с доделки скрипта генерации mif из листинга - что бы проще было загонять тестовый код в память. Ну и может сигналТуп что подскажет..

zebest
21.12.2018, 23:18
не ПДП-11 конечно, но где то рядом. Значительнее ранее
Увы, удалить попозже не представляеЦЦа возможным. лесники запретили .

https://www.youtube.com/watch?v=iymD9eysqXo

Hunta
22.12.2018, 00:03
Ну, что такое PDP-1 - я знаю. Где то даже наталкивался на ссылки - реализации разных PDP на FPGA. Когда доведу до ума PDP-2011 - может, другие поковыряю..


Увы, удалить попозже не представляеЦЦа возможным. лесники запретили .
Эту фразу чет не понял...

Korchagin
22.12.2018, 11:17
Hunta, а в Вашей переработанной реализации уже сделана внешняя шина или планируется к реализации?