User Tag List

Страница 65 из 132 ПерваяПервая ... 616263646566676869 ... ПоследняяПоследняя
Показано с 641 по 650 из 1740

Тема: Реверс-инжиниринг УКНЦ (1515ХМ1&2, 1801ВП1, 1801ВМ2)

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    20.06.2005
    Адрес
    Светлогорск
    Сообщений
    885
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    23
    Поблагодарили
    20 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Ynicky Посмотреть сообщение
    Синтезаторы (в том числе и Quartus) так и делают.
    К сожалению - нет. Уже не раз синтезировал такие счётчики у себя и порой ловил глитчи на них, потому что биты выставлялись асинхронно новые. Было очень заметно, потому что это было в генераторе видеосигнала, логика сброса счётчиков и формирование сигнала конца строки (для инкремента по Y) была полностью асинхронной - в итоге иногда при запуске на FPGA пролетало 2 инкремента подряд, в итоге видеосигнал не определялся монитором вообще.
    Так что, если логика после счётчиков асинхронная - надо делать схему с ускоренным переносом или буферировать.
    А приведённый выше код Quartus собирал цепочкой D-триггеров банально - посмотри, что вышло в Post-Fit.
    "Байт-48"

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    09.04.2009
    Адрес
    Зеленоград
    Сообщений
    449
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    429
    Поблагодарили
    196 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Да, не понятно почему выходные биты идут через комбинаторную логику.
    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_unsigned.all;

    entity cnt is
    port(ld, clk : in std_logic;
    din : in std_logic_vector(2 downto 0);
    qout : out std_logic_vector(2 downto 0));
    end;

    architecture behavior of cnt is
    signal sCNT: std_logic_vector(2 downto 0);
    begin
    process (ld,clk,din)
    begin
    if ld = '1' then
    sCNT <= din;
    elsif (clk = '1' and clk'event) then
    sCNT <= sCNT + "1";
    end if;
    end process;

    qout <= sCNT;

    end;



    - - - Добавлено - - -

    А если загрузку сделать синхронной, то выходы от триггеров:
    process (ld,clk,din)
    begin
    if (clk = '1' and clk'event) then
    if ld = '1' then
    sCNT <= din;
    else sCNT <= sCNT + "1";
    end if;
    end if;
    end process;


  4. #3

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,514
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    715
    Поблагодарили
    597 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Ynicky Посмотреть сообщение
    Да, не понятно почему выходные биты идут через комбинаторную логику.
    Надо смотреть шаблоны. Со счётчиками ещё не имел дело, в основном - блоки памяти. Немного отошёл от шаблона - и усё, вместо использования встроенных блоков памяти - куча триггеров (вплоть до исчерпания максимального количества ЛЭ).

  5. #4

    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    759
    Поблагодарили
    353 сообщений
    Mentioned
    88 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Ynicky Посмотреть сообщение
    Да, не понятно почему выходные биты идут через комбинаторную логику.
    ...
    А если загрузку сделать синхронной, то выходы от триггеров:
    Вот именно потому что если загрузка асинхронная, то получаем латч и выходы комбинаторикой нагружаем.
    Я не очень понимаю, это для моделирования (тогда латчи пофиг) или синтеза? Если синтез, то неужели Квартус не ругается?

  6. #5

    Регистрация
    09.04.2009
    Адрес
    Зеленоград
    Сообщений
    449
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    429
    Поблагодарили
    196 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну раз такое дело, сделаю счетчики на россыпи.

  7. #6

    Регистрация
    09.04.2009
    Адрес
    Зеленоград
    Сообщений
    449
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    429
    Поблагодарили
    196 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Это синтез. И не ругается. Только сообщает о LATCH.
    Warning (13004): Presettable and clearable registers converted to equivalent circuits with latches. Registers power-up to an undefined state, and DEVCLRn places the registers in an undefined state.
    Warning (13310): Register "sCNT[0]" is converted into an equivalent circuit using register "sCNT[0]~_emulated" and latch "sCNT[0]~1"
    Warning (13310): Register "sCNT[1]" is converted into an equivalent circuit using register "sCNT[1]~_emulated" and latch "sCNT[1]~5"
    Warning (13310): Register "sCNT[2]" is converted into an equivalent circuit using register "sCNT[2]~_emulated" and latch "sCNT[2]~9"
    Последний раз редактировалось Ynicky; 07.08.2020 в 20:20.

  8. #7

    Регистрация
    20.06.2005
    Адрес
    Светлогорск
    Сообщений
    885
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    23
    Поблагодарили
    20 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Ynicky Посмотреть сообщение
    Это синтез. И не ругается. Только сообщает о LATCH.
    Warning (13004): Presettable and clearable registers converted to equivalent circuits with latches. Registers power-up to an undefined state, and DEVCLRn places the registers in an undefined state.
    Warning (13310): Register "sCNT[0]" is converted into an equivalent circuit using register "sCNT[0]~_emulated" and latch "sCNT[0]~1"
    Warning (13310): Register "sCNT[1]" is converted into an equivalent circuit using register "sCNT[1]~_emulated" and latch "sCNT[1]~5"
    Warning (13310): Register "sCNT[2]" is converted into an equivalent circuit using register "sCNT[2]~_emulated" and latch "sCNT[2]~9"
    Это и есть "ругается" - оно же явно пишет, что "добавило latch". Если писать всё нормально, такого не пишет.
    "Байт-48"

  9. #8

    Регистрация
    09.04.2009
    Адрес
    Зеленоград
    Сообщений
    449
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    429
    Поблагодарили
    196 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    @Titus, выложи, пожалуйста, схемы ХМ2-001, ХМ2-003 в формате пикада, а то в PDF поиск по названиям сигналов не работает.
    Последний раз редактировалось Ynicky; 09.08.2020 в 09:28.

  10. #9

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,415
    Спасибо Благодарностей отдано 
    1,713
    Спасибо Благодарностей получено 
    2,238
    Поблагодарили
    881 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Ynicky Посмотреть сообщение
    @Titus, выложи, пожалуйста, схемы ХМ2-001, ХМ2-003 в формате пикада, а то в PDF поиск по названиям сигналов не работает.
    Только в 003 я начал некоторый рефакторинг работы с памятью, и еще не закончил. Ничего принципиально не поменялось, поменялась оптимизация и полярности сигналов. И в блоке прерываний тоже)
    Вложения Вложения

    Эти 2 пользователя(ей) поблагодарили Titus за это полезное сообщение:

    Alex_K(09.08.2020), Ynicky(09.08.2020)

  11. #10

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,415
    Спасибо Благодарностей отдано 
    1,713
    Спасибо Благодарностей получено 
    2,238
    Поблагодарили
    881 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию Описание циклов памяти видеоконтроллера

    Описание циклов памяти видеоконтроллера.

    Один цикл памяти видеоконтроллера равен 4 тактам PCLK (PCLK - PixelClock). Один такт - это 80нс, или 12.5МГц, или одна точка в высоком разрешении экрана.
    Все четные циклы отданы видеоконтроллеру, а нечетные - контроллерам памяти ПП и ЦП, или арбитру ПП и ЦП в составе видеоконтроллера, если это необходимо.
    В итоге на 800 горизонтальных точек высокого разрешения (640 видимых точек и 160 точек интервала HBlank) приходится 100 циклов памяти видеоконтроллера. А на один кадр развертки - 100 * 312 = 31200 циклов памяти видеоконтроллера. Учитывая, что за один цикл читается три поля памяти (два плана из ОЗУ ЦП, и один план из ОЗУ ПП), за один кадр видеоконтроллером читается 93600 байт информации.
    В дальнейшем, циклом памяти будем называть цикл памяти видеоконтроллера.


    Интервал HBlank:

    Во время интервала HBlank (точки 640..799, циклы памяти 80..99) для каждой строки происходит два процесса:

    1. Регенерация памяти.
    2. Считывание новых данных из списка строк ПП.

    Причем, считывание новых данных из списка строк ПП происходит в течение всех 312 строк развертки, а не только видимых 288 строк.


    Регенерация памяти:

    Регенерация памяти происходит прозрачным способом в цикле HBlank (циклы 80..99, всего 20 циклов).

    Старший байт адреса - всегда CTR_MEM_ADR_H (регистр адреса строки экрана).
    Младший байт адреса изменяется от 0 до 127, и составляется из:

    0./VCTR_D3./VCTR_D2./VCTR_D1./VCTR_D0./HCTR_D5./HCTR_D4./HCTR_D3

    Таким образом, за каждые 16 линий развертки (0.58мс) будет регенерирована вся память. Исключение составляют линии экрана 304..311 (8 линий развертки), во время которых будет регенерирована лишь половина памяти, после чего начнется следующий кадр, и регенерация возобновится сначала. Таким образом, период регенерации, попавший на последние 8 линий экрана будет длиться не 0.58мс, а 0.29 + 0.58 = 0.87мс. Исходя из вышеперечисленных параметров, подойдет любая память с матрицей 128x512 (т.к. регенерируется только 128 строк памяти), и периодом регенерации >= 0.9мс.

    Для ОЗУ ПП циклы 88..95 (8 циклов) - это всегда циклы чтения списка строк экрана.

    Таким образом, для ОЗУ ПП:
    Циклы 80..87 - это регенерация 8 строк памяти.
    Циклы 88..95 - это 8 циклов чтения списка строк.
    Циклы 96..99 - это 4 побочных цикла повторной регенерации 4 строк памяти.

    Для ОЗУ ЦП:
    Циклы 80..87 - это регенерация 8 строк памяти.
    Циклы 88..95 - повторная побочная регенерация 8 строк памяти.
    Циклы 96..99 - 4 побочных цикла повторной регенерации 4 строк памяти.


    Чтение списка строк (циклы 88..95):

    Чтение списка строк происходит только из ОЗУ ПП. ОЗУ ЦП в это время повторно регенерируется, как было описано выше.
    Адрес элемента списка составляется из битов 15..3 регистра ENTRY_ADR и HCTR_D5.HCTR_D4.HCTR_D3 для четырехсловного элемента списка, и из битов 15..2 регистра ENTRY_ADR и HCTR_D4.HCTR_D3 для двухсловного элемента списка.

    Если бит 1 (ENTRY_SIZE) регистра ENTRY_ADR (регистр адреса следующего элемента списка) равен нулю, то циклы 88..91 читают данные в никуда (используется при двухсловном элементе списка).

    Если бит 1 (ENTRY_SIZE) равен единице, то в циклах 88..91 читаются два слова четырехсловного элемента списка (используется при четырехсловном элементе списка):

    Если бит 2 (ENTRY_DATA_Q2) = 0:
    Цикл 88: Чтение регистра CUR_CON_L (младшая часть первого слова регистра управления отображением).
    Цикл 89: Чтение регистра CUR_CON_H (старшая часть первого слова регистра управления отображением).
    Цикл 90: Чтение регистра DISP_CON_L (младшая часть второго слова регистра управления отображением).
    Цикл 91: Чтение в никуда.

    Если бит 2 (ENTRY_DATA_Q2) = 1:
    Цикл 88: Чтение регистра COL_CON_1_L (младшая часть первого слова регистра управления цветом).
    Цикл 89: Чтение регистра COL_CON_1_H (старшая часть первого слова регистра управления цветом).
    Цикл 90: Чтение регистра COL_CON_2_L (младшая часть второго слова регистра управления цветом).
    Цикл 91: Чтение регистра COL_CON_2_H (старшая часть второго слова регистра управления цветом).


    Цикл 92: Чтение регистра МЕМ_ADR_L (младшая часть регистра адреса начала строки).
    Цикл 93: Чтение регистра МЕМ_ADR_H (старшая часть регистра адреса начала строки).
    Цикл 94: Чтение регистра ENTRY_ADR_L (младшая часть регистра адреса следующего элемента списка).
    Цикл 95: Чтение регистра ENTRY_ADR_H (старшая часть регистра адреса следующего элемента списка).

    Регистр ENTRY_ADR_L буферизирован. В цикле 94 данные сперва загружаются в регистр ENTRY_ADR_CACHE, а уже в цикле 95 переписываются в ENTRY_ADR_L синхронно с обновлением ENTRY_ADR_H.


    Отображение одной строки экрана (точки 0..640, циклы памяти 0..79):

    Каждый цикл происходит чтение памяти по адресу CTR_MEM_ADR. Это не зависит ни от разрешения экрана, ни от того, активен ли в данный момент интервал VBlank.
    Счетчик CTR_MEM_ADR (адрес строки) загружается из списка строк в конце каждой строки (циклы 92 и 93), и инкрементируется при переходе от одного знакоместа к другому. В зависимости от разрешения экрана - это каждая 8, 16, 32 или 64 точка, что соответствует каждому 1, 2, 4 или 8 циклу памяти. Во время интервалов VBlank и HBlank инкремента не происходит.


    Интервал VBlank (строки 288..311):

    Интервал VBlank практически не влияет на работу видеоконтроллера, за исключением того, что во время строк 291..293 вырабатытвается синхросигнал V_SYNC, а во время строки 292, и позиции 0..511 (цикл памяти 0..63) выставляется сигнал EVNT (сетевой таймер 50Гц).

    Также во время интервалов HBlank и VBlank блокируется инкремент счетчика CTR_MEM_ADR (адрес строки), а видеовыход маскируется, выдавая нули на PL0, PL1, PL2 и Y, и единицы на /P0, /P1, /P2.


    Начальное состояние регистров:

    В начале каждого кадра по сигналу EVNT (первые 64 цикла 292-й строки) инициализируется содержимое регистров:
    1. ENTRY_ADR (регистр адреса следующего элемента списка) = 0x00B8 (курсор выключен, двухсловный элемент списка).
    2. ENTRY_ADR_CACHE (буферный регистр для ENTRY_ADR_L) = 0x00 (ненужное действие).
    3. CUR_FLIP_TRIGGER - курсор выключен.
    4. Регистры палитры COL_CON_1_L, COL_CON_1_H, COL_CON_2_L и COL_CON_2_H инициализируются значениями 0x10, 0x32, 0x54, 0x76 соответственно (все цвета от черного к белому, пониженной яркости).
    5. CUR_CON (первое слово регистра управления отображением) = 0x0008 (курсор в 0-й позиции, символьный, цвет черный повышенной яркости).
    6. Биты 4 и 5 регистра DISP_CON (второe словo регистра управления отображение) сбрасываются (высокое разрешение), биты 0..2 (эмфазис компонент R, G, B) - без изменения.

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


    p.s.: При более рациональном построении видеоконтроллера, гораздо больше циклов памяти могло бы быть отдано ПП и ЦП. Нагрузка на память оправдана только для разрешения 640. В более низких разрешениях память простаивает (циклы чтения идут в никуда). Также циклы памяти HBlank могли бы быть отданы ПП и ЦП.
    Последний раз редактировалось Titus; 09.08.2020 в 15:17.

    Эти 6 пользователя(ей) поблагодарили Titus за это полезное сообщение:

    Alex_K(09.08.2020), BlaireCas(30.10.2020), nzeemin(09.08.2020), tnt23(13.08.2020), Ynicky(09.08.2020), yu.zxpk(09.08.2020)

Страница 65 из 132 ПерваяПервая ... 616263646566676869 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 32
    Последнее: 18.12.2024, 18:19
  2. Реверс-инжиниринг игры Boovie
    от Oleg N. Cher в разделе Программирование
    Ответов: 41
    Последнее: 09.01.2022, 23:07
  3. Реверс инжиниринг печатной платы
    от Filin в разделе Несортированное железо
    Ответов: 36
    Последнее: 11.03.2018, 22:46
  4. Куплю 1515ХМ1-6006, 1515ХМ1−6008
    от moxjemi в разделе Барахолка (архив)
    Ответов: 3
    Последнее: 10.01.2012, 17:23
  5. 1801ВМ2 А и Б
    от dk_spb в разделе ДВК, УКНЦ
    Ответов: 2
    Последнее: 03.05.2010, 11:51

Ваши права

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