-
Вроде почти всё, плюющее свои данные на шину данных при выданном адресе, но ещё не выданном сигнале чтения - почикал. Если только в не задействованных модулях ещё остался код.
Но, %ц%ко, ПЗУ-уха так и бросает. Может, Signal Tap из за того же клока, что и проц - не ловит не большую задержку в выдаче сигнала чтения?..
- - - Добавлено - - -
Щас забабахаю ему ешё 100MHz-овый клок...
Кстати, похоже сообразил, что не так с 0.5Hz-овым клоком. Но позже попробую
-
Надоело трахаться с месивом из клоков. Переделал. Опорный клок используется для signal tap, он же генерирует клок для процессора - 50MHz и 0.5Hz в зависимости от режима, он же моргает светодиодом раз в секунду.
-
Фигасе.. Даже переключение частоты на ходу заработало и плевало оно теперь на дребезг :)
-
Продолжаю отлаживать клоки и связку с Signal Tap.
На шинах опять пакостит ПЗУ - вылезают его (???) сигналы до сигнала запроса на чтение.
- - - Добавлено - - -
Хотя может я и зря бочку качу на ПЗУ, может это модуль UNIBUS - он у автора тааак своеобразно реализован.. Что если захочешь добавить свой контроллер - не из числа реализованных - мат будет пятиэтажный. Как только отработаю работу с памятью (как синтезированной, так и SDRAM) - будет большая разборка с UNIBUS
-
Для копающихся в 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 или ещё какой) поля. Только в описании сущностей - что в них входит, а что выходит. Поэтом приходится комбинировать в два типа - один - входные сигналы, другой - выходные.
Самое главное - при правильном подходе не подсоединишь не то не туда и не забудешь подсоединить.
-
Вся моя возня примерно уже с месяц как c исходниками проекта всё больше убеждает меня в том, что все проблемы с ошибкой 000000 и ей подобными - это результат, мягко говоря, неудачного решения автора работы с SDRAM. За последние два дня УЖ КАК Я ТОЛЬКО НЕ ИЗДЕВАЛСЯ над исходниками - особенно последние сутки - запускается и откликается.
К сожалению, полностью проверить синтез (ака загрузить RSX) не могу - модуля памяти пока нет. Идёт глубокая переработка того, как отдельные модули взаимодействуют друг с другом - и результат будет - ДА ДА ДА! - больше похож не PDP, чем у автора. Не то, как работает модуль процессора - там всё достаточно неплохо - а именно взаимодействие - типа - как сигналы передаются и обрабатываются, если процессор полез в память или обратился к контроллеру DB.
Пока достаточно простая часть - фактически - редактирование текста - ничего нового не добавляется, ничего старого не удаляется. Но текст становится проще для понимания.
-
Почему не работает?
Почему почему. Потому что кто-то взял и забыл включить синтез системного (177560-177566) терминала :)
-
Удаление в знак протеста против действий MM
-
Уф... сдвинулся с мёртвой точки (читай - разобрался в очередной VHDL-ной хрени). Более менее понял, как использовать RECORD :) И оно не работало (см предыдущее моё сообщение) не только потому, что системный терминал отсутствовал, оно ещё не работало потому, что я не правильно делал :) Ещё не совсем полностью работает - но по крайне мере не встаёт как вкопанное :)
- - - Добавлено - - -
А вот очередное изменение показал, что я иду в правильно направлении - ожидаемое заработало полностью. Двигаюсь дальше :)
- - - Добавлено - - -
Круть! Заработал тот вариант, на котором я прервался. В общем, сигналы надо правильно соединять даже виртуальные :)
-
Продолжаю объединять сигналы и редактировать исходники. Из первоначального шага (попытка правильно подключить SDRAM) пока в синтезируемом PDP нет оперативки, так что вся проверка - что оно откликается на команды подключённого ПЗУ. Пока, если делать аккуратно, всё идёт нормально - PDP включается :) Но редактировать ещё прилично...