Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Unsorted (http://zx-pk.ru/forumdisplay.php?f=13)
-   -   -=Reverse=- Конфигурации. (http://zx-pk.ru/showthread.php?t=13875)

Ewgeny7 7th March 2011 20:53

vlad, спасибо!
У меня тут другое творится - по "просьбе товарищей" пишу туториал в трёх частях о ваянии спектрума на uX_Reverse. Своеобразный учебник для тех, кто уже что-то понимает в VHDL, но интересен принцип построения компьютеров на ПЛИС. Цель - Спектрум-48.

vlad 7th March 2011 21:07

Сделал за выходные мануал по железу u9 Reverse, хотел выложить, но он оказался больше 640К :( думаю над частями...

Ewgeny7 7th March 2011 21:30

Quote:

Originally Posted by vlad (Post 364253)
Сделал за выходные мануал по железу u9 Reverse

Во, документации будет изрядно :)

Quote:

Originally Posted by vlad (Post 364253)
но он оказался больше 640К

"яндекс народ" рулит.

Ewgeny7 8th March 2011 00:18

1 Attachment(s)
Закончил "самый маленький спектрум" на u9. Без клавиатуры, поскольку речь шла о создании видеогенератора. Теперь надо художественно расписать по шагам теорию и практику...

Black_Cat 8th March 2011 01:51

Quote:

Originally Posted by vlad (Post 364253)
Сделал за выходные мануал по железу u9 Reverse, хотел выложить, но он оказался больше 640К думаю над частями...

а чего думать? выкладывай здесь: http://zx.clan.su/forum/7-69-1

Ewgeny7 8th March 2011 12:43

Quote:

Originally Posted by vlad (Post 364253)
Сделал за выходные мануал по железу u9 Reverse, хотел выложить, но он оказался больше 640К

Закинул на сайт "Скорпиона", читать здесь.

Geban 8th March 2011 12:59

А чего на англицком? Международные стандарты?

Ewgeny7 9th March 2011 19:25

Quote:

Originally Posted by Ewgeny7 (Post 364251)
пишу туториал

Написал половину. Поразмыслив, правильно ли я понимаю суть задачи, решил выложить кусок мануала. Всё ли там понятно?

lisica 9th March 2011 19:36

Хоть здесь на русском - уже за это спасибо!

Geban 9th March 2011 19:53

ооо!! продолжение. спасибо :)
немного оффтоп:
Пытаюсь запустить проц T80 на плис... молчит гад.. на M1 глухо, RD/WR молчат

lisica 9th March 2011 20:02

Quote:

process (clock, hcnt, vcnt)
begin
if (clock'event and clock = '1') then
if (hcnt > 301 and hcnt < 417) or (vcnt(9 downto 1) > 224 and
vcnt(9 downto 1) < 285) then
blank <= '1';
else
blank <= '0';
end if;
end if;
end process;
А разве blank не активируется '0'?

---------- Post added at 18:01 ---------- Previous post was at 17:54 ----------

Quote:

if (vid_h_cnt < 301 or vid_h_cnt > 417) and (vid_v_cnt(8 downto 0) < 224 or vid_v_cnt(8 downto 0) > 285) then
vid_blank <= '1';
else
vid_blank <= '0';
end if;
Это из рабочего проэкта.
Попутаны знаки ><

---------- Post added at 18:02 ---------- Previous post was at 18:01 ----------

Или присвоение переставить, хотя бы...
blank <= '0';
else
blank <= '1';
end if;

примерно...

Ewgeny7 9th March 2011 20:09

1 Attachment(s)
lisica, ты не смотри в наш проект. Здесь многое переиначено в более толковую сторону.
Всё правильно в туторе написано, и проект работает у меня на u9 :)

---------- Post added at 19:09 ---------- Previous post was at 19:08 ----------

Quote:

Originally Posted by lisica (Post 364739)
Попутаны знаки ><

ничего не попутано.

Вот сырок и .sof

vlad 9th March 2011 20:16

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

Ewgeny7 9th March 2011 20:21

Quote:

Originally Posted by vlad (Post 364753)
Хотя, для начала не мешало бы добавить вводную статью типа про логику, дешифраторы, счетчики, регистры...

Подразумевается, что чел уже умеет это. Иначе это получится талмуд толщиной с энциклопедию.


Quote:

Originally Posted by vlad (Post 364753)
Просто столкнулся с асинхронными и синхронными процессами, где требуется согласование разных частот работы схем...

С асинхронностью в этом проекте или вообще? ПЛИС по любому предпочитает синхронность, это ёжику понятно. Но у нас процессом рулит процессор, который за счет своих тормозов прекрасно справляется с многими вольностями.

vlad 9th March 2011 20:21

1 Attachment(s)
Во к примеру:
Code:

LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_logic_unsigned.ALL;


--**********************************************************************************************
-- Input/Output Declarations
--**********************************************************************************************

ENTITY AddrSync IS

        PORT (
                RESET                : IN        std_logic;
                AIN                        : IN        std_logic_vector(3 DOWNTO 0);
                nIORIN                : IN        std_logic;
                nIOWIN                : IN        std_logic;
                nCS                        : IN        std_logic;
                CLK                        : IN        std_logic;

                SyncAddrOut        : OUT        std_logic_vector(3 DOWNTO 0)
        );

END AddrSync;


--**********************************************************************************************
-- Architecture Body
--**********************************************************************************************

ARCHITECTURE rtl OF AddrSync IS

        SIGNAL AddrVal : std_logic_vector(3 DOWNTO 0);

BEGIN

        --
        -- AddrLatchProc:        The.
        --
        AddrLatchProc: PROCESS ( nCS, nIORIN, nIOWIN, AIN, AddrVal, RESET )
        BEGIN

                IF ( RESET = '1' ) THEN

                        AddrVal <= "0000";

                ELSIF ( (nCS = '0') AND ( (nIOWIN = '0') OR (nIORIN = '0') ) ) THEN

                        AddrVal <= AIN;

                ELSE

                        AddrVal <= AddrVal;

                END IF;

        END PROCESS AddrLatchProc;


        --
        -- WriteSyncProc:        The mode register synchronizer. Synchronizes
        --                                                changes in mode register data to the internal
        --                                                timing domain i.e. the falling edge of CLK.
        --
        WriteSyncProc : PROCESS ( CLK, RESET )
        BEGIN

                IF ( RESET = '1' ) THEN        -- Asynchronous clear

                        SyncAddrOut        <= "0000";

            ELSIF ( CLK'EVENT AND (CLK = '1') ) THEN
                                                               
                        SyncAddrOut <= AddrVal;

                END IF;

        END PROCESS WriteSyncProc;

END rtl;


Ewgeny7 9th March 2011 20:25

Выше выложил файлик прошивки

---------- Post added at 19:25 ---------- Previous post was at 19:23 ----------

Quote:

Originally Posted by vlad (Post 364757)
Во к примеру

Ага, в первом процессе синтезируется защелка вместо триггера, Кактус будет материться. Этого надо избегать. Проще всего заключить процесс в "клок".

vlad 9th March 2011 20:32

Если в общем, то все отлично!

---------- Post added at 18:32 ---------- Previous post was at 18:27 ----------

Quote:

Originally Posted by Ewgeny7 (Post 364758)
в первом процессе синтезируется защелка вместо триггера, Кактус будет материться. Этого надо избегать. Проще всего заключить процесс в "клок".

Ну насчет материться, может... но таким методом удастся засинхронизировать процесс с меньшей частотой клока.

Ewgeny7 9th March 2011 20:35

Всё, я пошел в F.E.A.R. поиграю в награду :)

---------- Post added at 19:33 ---------- Previous post was at 19:32 ----------

Quote:

Originally Posted by vlad (Post 364762)
Ну насчет материться, может... но таким методом удастся засинхронизировать процесс с меньшей частотой клока.

Возможно. Поэтому правила правилами, а мозги и интуиция полезней :)

---------- Post added at 19:35 ---------- Previous post was at 19:33 ----------

Но защелки и в самом деле могут работать непредсказуемо, сталкивался с этим.

lisica 9th March 2011 20:38

Прочитал... Увлекательно вышло! Ждём продолжения. Тогда и на счёт бланка понятно будит.

---------- Post added at 18:38 ---------- Previous post was at 18:36 ----------

Жень, извини, если что. Просто я подумал, что ты очепятался.

vlad 9th March 2011 20:48

Да, еще совет, не мешает хоть изредка после компиляции заглядывать в RTL Viewer и Chip Planner... Пути кактуса могут быть непредсказуемыми со взгляда только с одной стороны. Да, и для конкретной архитектуры свои конкретные заморочки (при оптимизации).

vlad 9th March 2011 22:32

1 Attachment(s)
Quote:

Originally Posted by Ewgeny7 (Post 364766)
Но защелки и в самом деле могут работать непредсказуемо, сталкивался с этим.

Вот, не совсем как хотелось (отличия с первым примером явно видны). Получили мастер-помощник :) а, хотели к примеру просто защелку по (nCS = '0') AND (nIORIN = '0') с синхронным триггером...

Code:

LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_logic_unsigned.ALL;
--**********************************************************************************************
-- Input/Output Declarations
--**********************************************************************************************
ENTITY ReadSync IS
        PORT (
                RESET                        : IN        std_logic;
                CLK                        : IN        std_logic;
                nIORIN                : IN        std_logic;
                nCS                        : IN        std_logic;
                ReadEnable        : OUT        std_logic
        );
END ReadSync;
--**********************************************************************************************
-- Architecture Body
--**********************************************************************************************
ARCHITECTURE rtl OF ReadSync IS
        SIGNAL SampledRead        : std_logic;
        SIGNAL SyncRead1                : std_logic;
        SIGNAL SyncRead2                : std_logic;
BEGIN
        --
        -- ReadSampleProc:       
        --
        ReadSampleProc: PROCESS ( nCS, nIORIN, CLK, RESET, SampledRead )
                VARIABLE next_SampledRead : std_logic;
        BEGIN
                IF ( RESET = '1' ) THEN
                        next_SampledRead := '1';
                ELSIF ( (nCS = '0') AND (nIORIN = '0') ) THEN
                        next_SampledRead := '0';
                ELSE
                        next_SampledRead := '1';
                END IF;
                IF ( RESET = '1' ) THEN
                        SampledRead <= '1';
                ELSIF ( CLK'EVENT AND (CLK = '1') ) THEN
                        SampledRead <= next_SampledRead;
                END IF;
        END PROCESS ReadSampleProc;

        --
        -- ReadSyncProc:        The mode register synchronizer. Synchronizes
        --                                                changes in mode register data to the internal
        --                                                timing domain i.e. the falling edge of CLK.
        --
        ReadSyncProc : PROCESS ( CLK, RESET, SampledRead, SyncRead1, SyncRead2 )
                VARIABLE next_SyncRead1        : std_logic;       
                VARIABLE next_SyncRead2        : std_logic;

        BEGIN
                next_SyncRead1  := SampledRead;       
                next_SyncRead2  := SyncRead1;

                IF        ( (SyncRead1 = '1') AND (SyncRead2 = '0') ) THEN
                        ReadEnable <= '1';
                ELSE
                        ReadEnable <= '0';
                END IF;

                IF ( RESET = '1' ) THEN        -- Asynchronous clear
                        SyncRead1        <= '1';
                        SyncRead2        <= '1';
            ELSIF ( CLK'EVENT AND (CLK = '0') ) THEN
                        SyncRead1        <= next_SyncRead1;
                        SyncRead2        <= next_SyncRead2;
                END IF;

        END PROCESS ReadSyncProc;

END rtl;


vlad 9th March 2011 22:40

Но это уже скорее для другого раздела :)

Ewgeny7 10th March 2011 14:02

2 Attachment(s)
Всё, мануал по проектированию простого спектрума на ПЛИС закончил.
Держите :)

Также прилагаю сами файлы проекта к ентой книжке.

vlad 10th March 2011 15:22

Отличная работа Ewgeny7.
Первый полный мануал по проектированию простого Speccy 48К на VHDL / Verelog (клавиатурный модуль).
bak файлы в проекте оставлены для истории... :)

Ewgeny7 10th March 2011 16:01

Quote:

Originally Posted by vlad (Post 365008)
bak файлы в проекте оставлены для истории...

Ээээ... ну да... надо подчистить :) Я проект ухнул на форум целиком, прямо от Квартуса оторвал. Только DB удалил для уменьшения размера.

---------- Post added at 15:01 ---------- Previous post was at 14:53 ----------

Quote:

Originally Posted by vlad (Post 365008)
на VHDL / Verelog

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

Geban 10th March 2011 17:08

Добавлю свои 5 копеек :) Спасибо автору за мануал.Очень познавательно. Прояснил для себя очень много непонятных моментов. Столкнулся с проблемой такого рода, монитор TFT Acer 19' Wide .. отказывается хавать 50Гц кадровую синхронизацию!!!.. минимум подавай ему 60 Гц. Долго бился с этим делом.. в конце концов по совету Жени поднял тактовую до 17 Мгц... изображение есть но теперь не запускается проц, но это уже отдельная история скорее связанная с переносом проекта на платформу Xilinx и его среду разработке ISE. Может быть кто подскажет как решить проблему с кадровой синхрой ? Покупать новый монитор не пойду :)

Ewgeny7 10th March 2011 17:30

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

---------- Post added at 16:28 ---------- Previous post was at 16:26 ----------

Quote:

Originally Posted by Geban (Post 365038)
поднял тактовую до 17 Мгц... изображение есть но теперь не запускается проц

Это на проц не должно влиять вообще. В этом проекте проц прекрасно работает и на 7Мгц, так что твои 4Мгц ему совсем до лампочки. Скорее, оптимизатор что-то не то вытворяет...

---------- Post added at 16:30 ---------- Previous post was at 16:28 ----------

Попробуй отдельно процик синтезировать, и в симуляторе посмотреть что там на его лапках творится.

vlad 10th March 2011 17:43

Quote:

Originally Posted by Ewgeny7 (Post 365043)
Нормальное решение - настоящий скандаблер, с полем памяти на весь фрейм. На нем можно задавать любую частоту видеовывода при сохранении "внутренней" 50Гц. Но это будет по сути еще один видеогенератор, что не входит в рамки мануала.

Уже было хотел делать такое (50Гц на ЭЛТ не сильно приятно смотрится), но обзавелся ЖК монитором, на нем все нормально... А в общем, если у Geban есть желание и время повозиться над скандаблером работающем на оптимальной частоте мона, то можно попробовать сделать... только память под вопросом.

Geban 10th March 2011 18:58

Мне бы проц запустить сначала. Там ещё ISE ругался на модуль клавиатуры, я его заремил пока. потом разберусь.

Вчера попробовал просто проц сделать... дал тактовую, wait & nmi & busrq & rst = vcc
М1 на выходной пин... получил сипульсы 700КГц при тактовой около 4 МГц. Если я правильно понимаю то проц на каждые 4 такта выдает 1 импульс с М1... тогда получается все работает? или нет? А вот проц + ула выпендриваются

ZEK 10th March 2011 19:18

В ISE с Verilog был такой задрот что она не переваривает wire и reg которые объявляются позже чем юзаются, квактусу пофик

Geban 10th March 2011 19:26

оно ругается на использование wire и reg перед их объявлением и объявление assign в самом начале файла. там надо просто местами блоки поменять. но дело не в кнопках пока. с этим я разберусь я думаю

vlad 10th March 2011 20:26

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

Geban 10th March 2011 20:36

Память работает. т .е на экране при включении область видеопамяти заполнена хаотично цветными квадратами. Поидее если не подключать ПЗУ то на экране должен быть матрас. а его нет. отсюда я решил что процессор не работает. может быть я не прав

Ewgeny7 11th March 2011 00:58

Geban, скинь сюда файлик .vhdl своего проекта... Вдруг чо там не так.

lisica 11th March 2011 18:23

Ewgeny7, Где ты нашёл кота с таким взглядом? Как будто на нос муха села...

Спасибо за руководство. На очереди руководство подключения мафона, звука, 128, AY, кемпстона, и т д и т п... Осилишь?
PS А ещё и скандаблера со спеки на VGA.

Ewgeny7 12th March 2011 00:29

Quote:

Originally Posted by lisica (Post 365338)
На очереди руководство подключения мафона, звука, 128, AY, кемпстона, и т д и т п... Осилишь?

Осилю. Только это в планы не входит.

vlad 12th March 2011 01:37

Quote:

Originally Posted by lisica (Post 365338)
Ewgeny7, Где ты нашёл кота с таким взглядом? Как будто на нос муха села...

Спасибо за руководство. На очереди руководство подключения мафона, звука, 128, AY, кемпстона, и т д и т п... Осилишь?
PS А ещё и скандаблера со спеки на VGA.

После таких предложений, и не такое увидишь... :)

Geban 12th March 2011 13:19

Так, вроди разобрался с процессором. Расскажите плз как осуществляется загрузка ПЗУ из SD карты. Я так понимаю что есть некая программа-загрузчик внутри плис, поторая обеспечивает минимальные функции работы с ФС карты.. типа поиска файла и его чтения с последующий загрузкой в определенную область памяти. да?

vlad 12th March 2011 14:13

Quote:

Originally Posted by Geban (Post 365590)
Так, вроди разобрался с процессором.

И в чем был баг?

Quote:

Originally Posted by Geban (Post 365590)
Расскажите плз как осуществляется загрузка ПЗУ из SD карты. Я так понимаю что есть некая программа-загрузчик внутри плис, поторая обеспечивает минимальные функции работы с ФС карты.. типа поиска файла и его чтения с последующий загрузкой в определенную область памяти. да?

Да, есть загрузчик в (корке) ROM выполняющий загрузку ROM из FLASH или SD в область памяти, при этом может использоваться два контроллера (корки): SPI(FLASH <-> system bus) и ZCSPI (SD <-> system bus). system bus - это внутренняя системная шина, к которой имеет доступ CPU (через порта в/в) или DMA... Для конкретного железа могут быть свои задумки... можно подсмотреть в исходниках.

Geban 12th March 2011 14:19

Баг был в черезмерной бдительности ISE. Подумываю и покупке 3го циклона для опытов.
С SD картой все понятно. В принципе все так как я думал.

Небольшое уточнение. )
Т.е внутри плис(или где то ещё) есть небольшой кусок кода для процессора, который исполняется при включении загружая основной ROM из того места где он хранится (FLASH,SD, etc.) и после говорит процессору что работать ему нужно с такого то адреса памяти (там где лежит основной ром)

так?


All times are GMT +4. The time now is 16:34.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.