aniSKY, извини, а сколько строк у тебя по вертикали выходит?
Да и кадровый "толщиной" в одну строку как-то смущает...
Вид для печати
aniSKY, извини, а сколько строк у тебя по вертикали выходит?
Да и кадровый "толщиной" в одну строку как-то смущает...
по вертикали 264(или 528 если весь счетчик брать, я беру только начиная с с 1го разряда)
кадровый - если брать все разряды то получится две строки, просто 0й разряд не беру в расчет.
опишу в общем весь проект - смесь схемного ввода с кусками на ВХДЛ, пытался на чистом ВХДЛ, но начинаю путаться, мне схемный немного ближе, визуально более понятен, да и та часть что сдвигает пиксели (сдвиговый регистр пикселей) так и не поддается мне....:v2_blush:
на всякий пожарный мой проект по частям:
может кто поможет в написании мультиплексора, коммутирующего двунаправленную шину к двунаправленной или к шине на вывод по сигналу выбора какимнить маленьким примером? а возможно ли такое?
з.ы. хочется подрубить свою поделку к компутеру, а в двунаправленности шин в ВХДЛ все никак не разберусь....ток сильно не пинайте, на конкретных примерах както проще разобраться.
Для затравки выкладываю пример:
двунаправленный порт FF (условно, конечно), проц его читает и туда пишет;
Если для записи и чтения порты разные, но номер одинаковый, то в процессах пишем в один сигнал, читаем из другого (его нужно добавить).
Код:-- ПЛИС <-> Z80 чтение-запись порта, например, FF
port (
signal iAddrZXbus : in std_logic_vector (15 downto 0);
signal ioDataZXbus : inout std_logic_vector (7 downto 0);
signal iIorqZXbus : in std_logic;
signal iRdZXbus : in std_logic;
signal iWrZXbus : in std_logic;
signal iM1ZXbus : in std_logic; -- добавить, чтобы не срабатывал при подтв.прерывания
signal iResetZXbus : in std_logic;
signal iFZXBus : in std_logic ) -- тактовый 14 МГц
signal sIoWr : std_logic;
signal sIoRd : std_logic;
signal A1,A2 : std_logic;
signal sFF : std_logic_vector (7 downto 0);
sIoWr <= iIorqZXbus or iWrZXbus;
sIoRd <= iIorqZXbus or iRdZXbus;
process (iFZXbus)
begin
if iReset = '0' then
ioDataZXbus <= (others => 'Z');
elsif rising_edge(iFZXbus) then
A1 <= sIoWr;
A2 <= not A1;
if sIoRd = '0' and iAddrZXbus = x"00FF" then
ioDataZXbus <= sFF;
else
ioDataZXbus <= (others => 'Z');
end if;
if (A1 or A2) = '0' and iAddrZXbus = x"00FF" then
sFF <= ioDataZXbus;
end if;
end if;
end;
aniSKY, то есть, все понятно? Могу прокомментировать.
Код я не проверял, но, по идее, должен работать.
Нужно еще сделать проверку на /IORQ и M1,
чтобы не реагировало на подтверждение прерывания
(это надо в доке на проц уточнить).
aniSKY, что-то я не понял у тебя в блоках hsgen.vhd и vsgen.vhd отсутствует приращение горизонтальных и вертикальных счётчиков. Забыл? Еще одна ошибка. На выходе элемента И (inst20) всегда будет 0. Это в формировании сигнала PINF.
fifan, не, счетчики строк/пикселей в графическом блоке. В текстовиках только селекторы синхры.
эт пока счетчик на ФЛЭШ не добавлен, позже допишу, как более менее заработает буду подчищать, по возможности в ВХДЛ переписывать:)
---------- Post added at 20:36 ---------- Previous post was at 20:33 ----------
на 100% еще наверно нет, просто как пример использовании двунаправленных портов/сигналов/шин (или как там правильнее) немного прояснил, а мысли пошли думать дальше....:v2_thumb:
---------- Post added at 20:42 ---------- Previous post was at 20:36 ----------
если можно в краце пояснить данную конструкцию:
if iReset = '0' then
ioDataZXbus <= (others => 'Z');
elsif rising_edge(iFZXbus) then
... далее по примеру
ioDataZXbus <= (others => 'Z'); -- как это описывается словами? (правильно наверно (others) ?)