User Tag List

Страница 3 из 3 ПерваяПервая 123
Показано с 21 по 27 из 27

Тема: LEN2PENT: как доработать тайминги ?

  1. #21

    Регистрация
    03.05.2020
    Адрес
    г. Челябинск
    Сообщений
    796
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    260
    Спасибо Благодарностей получено 
    274
    Поблагодарили
    145 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Дошли сегодня руки припаять и прошить то, что накодилось в посте #9. Пребываю в состоянии легкого офигения - потому что посчитанные тогда по экрану на глаз ~17 знакомест запаздывания КС, которые равны 68 тактам процессора, а также момент начала следующего INTа и его длительность с первого раза попали в точку.
    Галерея того, что имеем сейчас:
    Нажмите на изображение для увеличения. 

Название:	image001.jpg 
Просмотров:	194 
Размер:	65.8 Кб 
ID:	74918Нажмите на изображение для увеличения. 

Название:	image002.jpg 
Просмотров:	190 
Размер:	59.5 Кб 
ID:	74919Нажмите на изображение для увеличения. 

Название:	image003.jpg 
Просмотров:	181 
Размер:	34.3 Кб 
ID:	74920Нажмите на изображение для увеличения. 

Название:	image004.jpg 
Просмотров:	189 
Размер:	59.1 Кб 
ID:	74921Нажмите на изображение для увеличения. 

Название:	image007.jpg 
Просмотров:	170 
Размер:	61.9 Кб 
ID:	74922Нажмите на изображение для увеличения. 

Название:	image008.jpg 
Просмотров:	174 
Размер:	75.0 Кб 
ID:	74923Нажмите на изображение для увеличения. 

Название:	image011.jpg 
Просмотров:	183 
Размер:	28.9 Кб 
ID:	74924

    На данный момент только изменено включение счетчиков D4 и D5 для 320 пентагоновских строк и 71680 тактов на кадр, а также добавлен тот самый генератор INT. Ничего не делал с КС, и даже не инвертировал пока /IOWR.
    Да, бордюрные линии слегка "квадратиш", но они все на своем месте.


    Схема того, что сейчас в ПЛИСке
    spec128.zip
    сорс модуля int_gen был в посте выше.

    Можно поделить исходную частоту вдвое или вчетверо, сэкономив одну-две макроячейки, можно получить частоту H2 из уже имеющейся H1 и сэкономить ногу... но вроде без надобности.

    На очереди - доработка бордюрных сигналов перед КП13 по схеме П321, только пока не придумал, на чем собирать. На мелкоте это делать уже лениво, придется еще одну 3032 туда вкрячить )


    Upd:
    Для понимания кучки констант решил прокомментировать, как это работает:

    весь экран выводится за 71680 тактов;
    /nKS (кадровый синхроимпульс, его начало, т.е. СПАД) в ленинграде задержан на 68 тактов относительно начала первой скан-строки;
    длина КСИ равна 3584 такта;
    счетчик же формирователя INT у нас запускается по концу КСИ, то есть по ПЕРЕДНЕМУ ФРОНТУ /nKS, это на (68+3584) такте после начала первой скан-строки;
    активируем INT (прямой) в начале первой скан-строки СЛЕДУЮЩЕГО кадра, это через 71680 - (68 + 3584) = 68028 тактов после конца КСИ
    деактивируем INT через 36 тактов, это 71680 - (68 + 3584) + 36 = 68064 после конца КСИ.
    /nKS берем с 6DD40, H0 берем c 1DD13, INT (прямой) подаем на 13DD1 (а на 12DD1 формируется /INT для процессора)


    сорс упомянутыми константами
    Код:
    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.numeric_std.all;
    
    entity INT_GEN is
       port
       (
           CLK                    : in  std_logic;
           nKS                    : in  std_logic;
           INT                    : out  std_logic
       );
    end INT_GEN;
    
    architecture RTL of INT_GEN is
       signal COUNTER : integer range 0 to 71680;
    begin
       
    
    -- весь экран выводится за 71680 тактов
    -- /nKS (кадровый синхроимпульс, его начало, т.е. СПАД) в ленинграде задержан на 68 тактов относительно начала первой скан-строки 
    -- длина КСИ равна 3584 такта
    -- счетчик же формирователя INT у нас запускается по концу КСИ, то есть по ПЕРЕДНЕМУ ФРОНТУ /nKS,
    -- это на (68+3584) такте после начала первой скан-строки.
    -- активируем INT (прямой) в начале первой скан-строки СЛЕДУЮЩЕГО кадра, это через 71680 - (68 + 3584) = 68028 тактов после конца КСИ
    -- деактивируем INT через 36 тактов, это 71680 - (68 + 3584) + 36 = 68064 после конца КСИ.
    -- /nKS берем с 6DD40, H0 берем c 1DD13, INT (прямой) подаем на 13DD1 (а на 12DD1 формируется /INT для процессора)
    
      process (CLK, nKS)
      begin
         if (rising_edge(CLK)) then  
      
            if (COUNTER < 71680) then  
                 COUNTER <= COUNTER + 1;
            end if;
    
            if (COUNTER = 71680 - 68 - 3584) then  
                INT <= '1';
            end if;
    
            if (COUNTER = 71680 - 68 - 3584 + 36) then  
                INT <= '0';
            end if;
    
            if (nKS = '0') then
               COUNTER <= 0;
            end if;
    
         end if;
       end process;               
    
    end architecture;
    Последний раз редактировалось valerium; 13.03.2021 в 09:56.

  2. #22

    Регистрация
    03.05.2020
    Адрес
    г. Челябинск
    Сообщений
    796
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    260
    Спасибо Благодарностей получено 
    274
    Поблагодарили
    145 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от П321 Посмотреть сообщение
    Доработку BORDER-а я делал вот так:

    И сигнал IOWR я тоже инвертировал и ещё RC цепочкой добивался совпадения до пикселя.
    П321, не до конца понял суть этой схемы, поэтому вопрос возник - мы только для D31-D32 заменяем сигнал H2 на NEW_H2 ?
    У ленинграла дорога на 11-е выводы D31-32 продолжается до выв. 1 D19 - на нем должен оставаться старый H2 или тоже нужно подать NEW_H2 ?
    Дорожка H2 к КП13 режется в двух местах, получается ?

    И второй момент - что должно измениться при инвертировании /IOWR, как это будет видно ?

  3. #23

    Регистрация
    28.06.2020
    Адрес
    г. Краснодар
    Сообщений
    74
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    39
    Поблагодарили
    35 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Да новые сигналы идут только на КП13-е. Я этот кусочек схемы брал из Ленинград-2012 так что можно глянуть на оригинал.
    При инвертировании /IOWR Border смещается на 3-4 пикселя но у тебя похоже уже всё нормально. Эта проблема обсуждалась здесь.
    Поздравляю что всё получилось с INT-ом (теоретические расчёты сразу попали в точку). Дискретность BORDER-а довести и будет Пентагон.

  4. #24

    Регистрация
    03.05.2020
    Адрес
    г. Челябинск
    Сообщений
    796
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    260
    Спасибо Благодарностей получено 
    274
    Поблагодарили
    145 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от П321 Посмотреть сообщение
    Дискретность BORDER-а довести и будет Пентагон.
    Все получилось, спасибо за идеи и советы.
    Только после того, как бордюр я развернул по 7мгц-такту все-таки выяснилось, что задержка активного /КС составляет не 68, а 67 тактов H0 от начала кадра, просто при 8-пиксельной градации этого не было видно.
    Возможно это связано с тем, что обработку фронта /IOWR я править не стал (он исходный).
    При этом получилось опережение экрана бордюром на 2 пикселя, то есть на один такт H0:
    Нажмите на изображение для увеличения. 

Название:	IMG_20210317_002742.jpg 
Просмотров:	95 
Размер:	73.2 Кб 
ID:	74956
    Поэтому правим исходник INT_GEN, уменьшая задержку на 1 такт (67 вместо 68):

    Скрытый текст


    Код:
    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.numeric_std.all;
    
    entity INT_GEN is
       port
       (
           CLK                    : in  std_logic;
           nKS                    : in  std_logic;
           INT                    : out  std_logic
       );
    end INT_GEN;
    
    architecture RTL of INT_GEN is
       signal COUNTER : integer range 0 to 71680;
    begin
       
    -- весь экран выводится за 71680 тактов
    -- /nKS (кадровый синхроимпульс, его начало, т.е. СПАД) в ленинграде задержан на 67 тактов относительно начала первой скан-строки 
    -- длина КСИ равна 3584 такта
    -- счетчик же формирователя INT у нас запускается по концу КСИ, то есть по ПЕРЕДНЕМУ ФРОНТУ /nKS,
    -- это на (67+3584) такте после начала первой скан-строки.
    -- активируем INT (прямой) в начале первой скан-строки СЛЕДУЮЩЕГО кадра, это через 71680 - (67 + 3584) = 68029 тактов после конца КСИ
    -- деактивируем INT через 36 тактов, это 71680 - (67 + 3584) + 36 = 68065 после конца КСИ.
    -- /nKS берем с 6DD40, H0 берем c 1DD13, INT (прямой) подаем на 13DD1 (а на 12DD1 формируется /INT для процессора)
    
      process (CLK, nKS)
      begin
         if (rising_edge(CLK)) then  
      
            if (COUNTER < 71680) then  
                 COUNTER <= COUNTER + 1;
            end if;
    
            if (COUNTER = 71680 - 67 - 3584) then  
                INT <= '1';
            end if;
    
            if (COUNTER = 71680 - 67 - 3584 + 36) then  
                INT <= '0';
            end if;
    
            if (nKS = '0') then
               COUNTER <= 0;
            end if;
    
         end if;
       end process;               
    
    end architecture;
    [свернуть]


    Ну и вот что после этого:
    Нажмите на изображение для увеличения. 

Название:	IMG_20210317_012731.jpg 
Просмотров:	112 
Размер:	33.4 Кб 
ID:	74957Нажмите на изображение для увеличения. 

Название:	IMG_20210317_004909.jpg 
Просмотров:	105 
Размер:	40.2 Кб 
ID:	74958

    Вот финальная схема доработки, где кирпич int_gen - это модуль, который схематиком описать на мой взгляд невозможно
    l2p_sch.zip

    Объединенный гайд по резке-пайке

    Скрытый текст


    *****************************************************************************************************************
    * L2P ("ЛЕНЬ-В-ПЕНЬ") - подборка модов для приведения таймингов классического Ленинграда-1
    * к стандарту Пентагона
    * на ОДНОЙ микросхеме (пример на EPM3032ALC44)
    *
    * https://zx-pk.ru/threads/32987-len2p...-tajmingi.html
    * valerium@rambler.ru
    * Chelyabinsk, Russia, 2021
    *
    * Thanx to П321, Serg6845, solegstar, IanPo
    *****************************************************************************************************************
    Требования:

    - Ленинград-1;
    - Кварц 14,0 МГц;
    - Память 4164 или 41256, способная корректно работать без тактов /WAIT процессора.
    - Cигнал /IOWR на DD39 в первозданном виде (не инвертирован).
    - Сигнал /КС на выв.6 DD40 в первозданном виде.


    *****************************************************************************************************************
    Доработки:

    1. Изменение количества строк в кадре
    1.1. Счетчик DD4 включается входами 10 - на +5в, 1,9,15 - на GND (на многих платах это по умолчанию так).
    1.2. Счетчик DD5: вход 5 отрезается от схемы и подключается к GND.


    2. Отключение /WAIT
    Отключается выход 5 DD9 от входа 24 (/WAIT) процессора DD20. Вход 16 DD20 подтянуть резистором 10К к +5в.

    *** После этих двух доработок имеем 71680 тактов на 1 кадр (=на 1 период /INT).


    3. Подготовка и прошивка CPLD
    В проекте она подготовлена для EPM3032ALC44 в корпусе PLCC, ее панелька удобно размещается на макетном поле Ленинграда.
    Эту CPLD нужно запитать от 3,3в через линейный стабилизатор AMS1117-3,3 или подобный.
    Питание: выводы 3,15,23,35 - +3,3в, выводы 10,17,22,30,36,42 - GND.
    Не забудьте про блокировочные конденсаторы на все 4 входа питания.
    Разъем JTAG (можно подключить временно для прошивки): выв.7 - TDI, выв.13 - TMS, выв.32 - TCK, выв.38 - TDO.


    4. Корректировка /INT (см. схему в L2P.PNG)
    4.1. На вывод 41 CPLD подается сигнал H0 (удобнее взять с выв.1 DD13).
    4.2. На вывод 4 CPLD подается сигнал /КС (кадровый синхроимпульс - удобнее взять с выв.6 DD40).
    4.3. Убираем C2, R2 и VD20, вход 13 DD1 освобождается от остальной схемы, на него подается сигнал INT с вывода 6 CLPD.

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


    5. Корректировка дискретности вывода бордюра с точностью до пикселя (см. схему в L2P.PNG)
    5.1. На вывод 40 CPLD подается сигнал H1 (удобнее взять с выв.1 DD40).
    5.2. На вывод 39 CPLD подается сигнал H2 (удобнее взять с выв.6 DD10).
    5.3. На вывод 43 CPLD подается сигнал ТИ (с выв. 5 DD2).
    5.4. Выводы 10 DD31-32 (исходно /BORDER) отрезать от схемы (место разреза показано оранжевым в файле CUTS.PNG с пометкой 5.4).
    5.5. На вывод 9 CPLD подается сигнал /BORDER c выв.6 DD13.
    5.6. На выводы 10 DD31-32 подается сигнал BORDER_PENT c выв.11 CPLD.
    5.7. Выводы 11 DD31-32 (исходно H2) отрезать от схемы (два места разреза показаны оранжевым в файле CUTS.PNG с пометкой 5.7).
    5.8. На отрезанную дорожку к выв.1 DD19 восстановить подключение H2 с выв.10 DD14 (соединение показано оранжевым с пометкой 5.8).
    5.9. На выводы 11 DD31-32 подать сигнал NEW_H2 с выв.8 CPLD.

    Все.
    [свернуть]


    и файл CUTS.PNG с точками для резки дорожек
    cuts.zip


    Проект в квартусе
    CPLD.zip

    и на всякий случай все здесь
    https://github.com/valerium-labs/L2P

    Этот пользователь поблагодарил valerium за это полезное сообщение:

    Eltaron(17.03.2021)

  5. #25

    Регистрация
    30.12.2018
    Адрес
    г. Москва
    Сообщений
    1,375
    Спасибо Благодарностей отдано 
    11
    Спасибо Благодарностей получено 
    384
    Поблагодарили
    346 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от valerium Посмотреть сообщение
    Вот финальная схема доработки, где кирпич int_gen - это модуль, который схематиком описать на мой взгляд невозможно
    l2p_sch.zip
    схематиком можно описать все
    в квартусе tools-netlist viewers-RTL viewer - покажет что там схематиком получилось.

    Зверинецъ

    Специалист (был когда-то "совсем стандарт") - 1988-2023
    Ленинград1 +256К +AY+BDI+VGA выход +Ethernet (Speccyboot) +Xmodem (115200)+divmmc
    Ленинград2 + CF карта
    Платформа 8085+Z80+CPLD (Специалист МХ2 +SD +FDD +PS/2kbd)
    БК0010-01 стоковый
    [свернуть]

  6. #26

    Регистрация
    03.05.2020
    Адрес
    г. Челябинск
    Сообщений
    796
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    260
    Спасибо Благодарностей получено 
    274
    Поблагодарили
    145 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Serg6845 Посмотреть сообщение
    схематиком можно описать все
    в квартусе tools-netlist viewers-RTL viewer - покажет что там схематиком получилось.
    Понятно, что есть какой-то универсальный вид, в который выстраивается наш проект из элементов в макроячейках.
    Только понимание этих схем настолько неинтуитивное, что разрыв мозга неизбежен.

    Ну ок, пусть так: _мое_ понимание не заточено не рассмотрение/обсуждение, а тем более _отладку_ схем в том виде. А описание на VHDL/verilog хотя бы как-то дает видеть суть. Поэтому мне приятнее ставить задачу квартусу в том виде, где видна суть, а схема там уж потом пусть генерится, как ей удобнее )

  7. #27

    Регистрация
    30.12.2018
    Адрес
    г. Москва
    Сообщений
    1,375
    Спасибо Благодарностей отдано 
    11
    Спасибо Благодарностей получено 
    384
    Поблагодарили
    346 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от valerium Посмотреть сообщение
    Понятно, что есть какой-то универсальный вид, в который выстраивается наш проект из элементов в макроячейках.
    Только понимание этих схем настолько неинтуитивное, что разрыв мозга неизбежен.

    Ну ок, пусть так: _мое_ понимание не заточено не рассмотрение/обсуждение, а тем более _отладку_ схем в том виде. А описание на VHDL/verilog хотя бы как-то дает видеть суть. Поэтому мне приятнее ставить задачу квартусу в том виде, где видна суть, а схема там уж потом пусть генерится, как ей удобнее )
    ок. просто у меня ровно наоборот - одного взгляда на схему достаточно чтобы понять как оно работает, а VHDL и ему подобные - требуют вникания и разбирательства...

    Зверинецъ

    Специалист (был когда-то "совсем стандарт") - 1988-2023
    Ленинград1 +256К +AY+BDI+VGA выход +Ethernet (Speccyboot) +Xmodem (115200)+divmmc
    Ленинград2 + CF карта
    Платформа 8085+Z80+CPLD (Специалист МХ2 +SD +FDD +PS/2kbd)
    БК0010-01 стоковый
    [свернуть]

Страница 3 из 3 ПерваяПервая 123

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. А что если доработать SMUC?
    от AmoNik в разделе Scorpion
    Ответов: 21
    Последнее: 16.06.2015, 20:24
  2. Тайминги Leningrad-1
    от ZXMAK в разделе Ленинград
    Ответов: 17
    Последнее: 14.06.2013, 03:09
  3. Тайминги DENDY
    от evgs в разделе Nintendo
    Ответов: 7
    Последнее: 01.11.2011, 22:59
  4. Как доработать "Пентагон-128"?
    от AlexBel в разделе Pentagon
    Ответов: 36
    Последнее: 18.09.2011, 15:11

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •