Это понятно, но при clk = 100МГц, думаю эти always-ы успевают за один f2 выполниться несколько раз.
Пока не разобрался, важно-ли только первое срабатывание, или за один f2, каждый "posedge clk" в одном always происходит что-то новенькое...
Вид для печати
Проблема в том, что за один f2, который является enable, проскакивает несколько posedge clk? Наверное это можно решить добавив еще один сигнал, который по posedge clk и f2 сделает disable. Но его тоже надо как-то сбрасывать. В общем это та еще возня ;)
Пытаюсь разобраться в эмуляции на плисе "580vm80a" и что-бы хоть что-то в ней найти, ещё и пытаюсь экспериментировать с modelsim...
Написал программку в несколько строк, скомпилировал для проекта "580vm80j", всё остальное в архиве уже есть для симуляции в modelsim.
Сам проект "vm80" без изменений, заменил только код программы выполняемой процессором при симуляции.
Запускаю, разглядываю графики, и ни как не могу понять, почему после команды 05h - "dcr b", на шину адреса попадает состояние регистровой пары "BC"...
Скриншот в прицепе.
С моей точки зрения, при выполнении команды "dcr b", значение пары "ВС" не должно попадать на шину адреса... или я что-то не понимаю?
А после команды 23h - "dcx h", на шину адреса вылазит значение пары "DE" (предположительно).
https://disk.yandex.ru/i/el8u23GE4oYNmg
А по какому признаку определяется валидность адреса на шине? Я позабыл. По идее все время, пока этого признака нет нет, там может быть любой мусор. А в этих процах все кишками наружу торчит.
Проверить, не попадает ли на ША содержимое регистровых пар сравнительно просто, например так
Скрытый текст
Код:loop:
lxi d,0123h
lxi h,4567h
lxi b,89ABh
lxi sp,CDEFh
dcx b
lxi d,1230h
lxi h,5674h
lxi b,9AB8h
lxi sp,DEFCh
dcx b
jmp loop
[свернуть]
Если мне не изменяет память, для декремента/инкремента регистровых пар используется то же исполнительное устройство, что и для PC, возможно это сказывается.
Особого криминала на временной диаграмме не видно, когда на ША "странные" адреса сигналы чтения и записи не активны.
В модуле процессора нашел вот такие стоки:
mxo - содержит значение регистровой пары с которой, в данный момент, идет работа.Код:module vm80a(
...
assign mxwadr = t3363 | (t4f1 & ~id_dad & ~id_hlt);
...
always @ (posedge clk)
if (f2)
begin
if (mxwadr) a <= mxo;
...
Приведённый кусок фактически говорит, что на каждом 4-ом такте, на шину адреса выкидывается содержимое текущей регистровой пары.
А 4-ый такт в моей тестовой проскакивает часто, включая команды: inx h\ inx d\ dcr b.
Посмотрел свои старые сканы ВУ, сделанные с настоящим процессором и с ПЛИС-вариантом.
ШАВВ идентична, а так как она часть шины адреса процессора, то можно считать, что и у настоящего процессора на ША выкидываются "потроха"...
Но когда совместил графики сканов ПЛИСа и реального процессора в одной анимации, то обнаружил интересную фишечку...
У ПЛИС-процессора изменения ШД, ШАВВ, ЧТЗУ - происходят по фронту CLK (6МГц), а у реального процессора - по спаду.
анимация сканов - https://disk.yandex.ru/i/QvpWt2JQWRtFsw