User Tag List

Страница 60 из 81 ПерваяПервая ... 565758596061626364 ... ПоследняяПоследняя
Показано с 591 по 600 из 803

Тема: Реверс-инжиниринг Z80

  1. #591

    Регистрация
    12.12.2007
    Адрес
    Жлобин
    Сообщений
    47
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    79
    Поблагодарили
    40 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Какой будет более приоритетный вход, если на Verilog'е я напишу так:

    Код:
    begin
    always @ (posedge clk)
        if (set)
            Q = 1;
        else if (reset)
            Q = 0;
    end
    Set

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

    Titus(20.10.2024)

  2. #592
    HardWareMan
    Гость

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Какой будет более приоритетный вход, если на Verilog'е я напишу так:

    Код:
    begin
    always @ (posedge clk)
        if (set)
            Q = 1;
        else if (reset)
            Q = 0;
    end
    Тут даже без компиляции понятно, что первое условие (Set) приоритетнее, потому что (Reset) стоит в блоке ELSE у (Set). Внезапно, да?

  3. #593

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

    По умолчанию

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    Тут даже без компиляции понятно, что первое условие (Set) приоритетнее, потому что (Reset) стоит в блоке ELSE у (Set). Внезапно, да?
    На всякий случай надо уточнить. Я же очень начинающий вериложник)
    Забыл, я там хотел неблокирующее присваивание написать, <= вмест =.

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

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

    1. /BUSREQ защелкивается в другом полутакте, чем описано в документации.
    2. Шины переводятся в Z-состояние тоже не в том полутакте.
    3. Ну и возвращается все обратно тоже в другом полутакте.


  4. #594

    Регистрация
    19.01.2009
    Адрес
    Белгород
    Сообщений
    385
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    13
    Поблагодарили
    12 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну от этого внешняя логика не пострадает.
    Описание версталось параллельно, и, видимо, не все изменения попали в него. А потом посмотрели - и забили, как на не особо критичные.

  5. #595

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

    По умолчанию

    Цитата Сообщение от aviator Посмотреть сообщение
    Ну от этого внешняя логика не пострадает.
    В основном-то да.

    Интересно, есть спектрумы, где процессор тормозится через BUSREQ?

  6. #596

    Регистрация
    19.01.2009
    Адрес
    Белгород
    Сообщений
    385
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    13
    Поблагодарили
    12 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Интересно, есть спектрумы, где процессор тормозится через BUSREQ?
    Надеюсь, что нет. Это был бы какой-то лютый костылинг... Это ж для DMA-контроллеров.

  7. #597

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

    По умолчанию

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



    Вот фрагмент кода управления шиной для примера.
    Если есть концептуальные косяки, можно сделать замечание)
    Код:
    //----------------------------------------------------------------------
    //
    //                    Управление внешней шиной                         
    //
    //----------------------------------------------------------------------
    
        assign  stop_rd_cycle = ((!m1) & t3) | t4 | res;                    // Сигнал окончания циклов MREQ, IORQ, RD для чтения/записи данных
                                                                            // По сигналу RES
                                                                            // По T4 любого цикла
                                                                            // По Т3 любого цикла кроме M1
    
                                                                            // Сигнал нначала цикла памяти
        assign  start_mem_cycle = ((!m1) & t1 & (!grp_io) |                 // По сигналу GRP_IO и T1 любого цикла, кроме M1 
                                    (m1 & t1 & (!int_ack))) &               // По M1.T1, кроме INT_ACK (цикл чтения кода команды)
                                    (!dis_bus);                             // При этом сигнал DIS_BUS не должен быть активен
    
                                                                            // Вспомогательные сигналы
        assign  m1_t3_mask = t3_del & m1 & t3;                              // Сигнал маски по M1.T3.2
    
    
        always @ (negedge clk)                                              // Управление триггером mreq_rs (/CLK)
        begin
            if (stop_rd_cycle)                                              // Если сигнал окончания записи,
                mreq_rs <= 0;                                               // то mreq_rs = 0 (высший приоритет),
            else if (start_mem_cycle)                                       // Иначе, если сигнал начала цикла памяти,
                mreq_rs <= 1;                                               // то mreq_rs = 1
        end
    
        assign  mreq = mreq_rs & (!m1_t3_mask);                             // Внешний сигнал запроса памяти формируется с учетом врезки окончания цикла чтения кода операции
    
    
        always @ (posedge clk)                                              // Управление разрешением RD (CLK)
        begin
            disable_rd_port <= (int_ack & m1) |                             // В m1.int_ack,
                                req_write |                                 // В цикле записи
                                dis_bus;                                    // В цикле без доступа к памяти
        end
    
        always @ (negedge clk)                                              // Управление триггером rd_rs (/CLK)
        begin
            if (stop_rd_cycle |                                             // Если сигнал окончания записи,
                (m1 & t3))                                                  // или начало цикла регенерации памяти M1.T3,
                rd_rs <= 0;                                                 // то mreq_rs = 0 (высший приоритет),
            else if (start_mem_cycle & (!disable_rd_port))                  // Иначе, если сигнал начала цикла памяти и сигнал RD не запрещен,
                rd_rs <= 1;                                                 // то mreq_rs = 1
        end
    
        assign  rd = rd_rs   & (!(t3_del & m1));                            // Внешний сигнал чтения памяти формируется с учетом удлиненной врезки окончания цикла чтения кода операции

  8. #598

    Регистрация
    20.06.2014
    Адрес
    г. Чехов
    Сообщений
    56
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    61
    Поблагодарили
    30 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Если есть концептуальные косяки, можно сделать замечание)
    Замечаний нет, есть немного обмена опытом.
    После assign можно написать #n (n - число), чтобы сделать задержку при симуляции.

    Только CLK в тестбенче нужно делать не always #1 CLK = ~CLK;, а подольше, можно даже примерно подогнать тайминги под timescale.

    Например на самом верху пишем: `timescale 1ns/1ns (1 шаг равен 1 нс), а для дергания CLK пишем always #120 CLK = ~CLK; -- что равно 120 нс на полупериод (240 нс - 1 цикл).
    Что даёт возможность делать задержки сигнала в симуляции с шагом 1/120 нс.
    Таким образом можно имитировать все эти ваши "транзисторные особенности"

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

    P.S. Немного читнул ранее про "ПОЛУ-такты". Да, это так. Большая часть ядер ретро-чипов (да что там.. скорее даже все) реализует оба полупериода (полуцикла), ещё их называют "фазами". Это абсолютная нормальность на таком уровне, если есть какой-то психологический "запор" в восприятии, то его необходимо как можно быстрее "пробить"

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

    Titus(22.10.2024)

  9. #599

    Регистрация
    27.11.2013
    Адрес
    г. Санкт-Петербург
    Сообщений
    974
    Спасибо Благодарностей отдано 
    51
    Спасибо Благодарностей получено 
    197
    Поблагодарили
    164 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Все манипуляции с " #1 CLK = ~CLK; `timescale 1ns/1ps " абсолютно не важно до тех пор пока "мы" не начнём учитывать реальные времянки логических элементов. Вот тут две дороги:
    1) мы моделируем абстрактные времянки абстрактной ЛА3 - и это будет абсолютно не синтезируемая модель поведения.
    или
    2) мы не мудрим с этими абстракциями, а задаём рельную частоту клока и реальны тип плисы.
    При этом #1 и еже с ними используется для моделирования поведения внешнего окружения (как то sdarm память - реальная микросхема, аль ещё чего...) - но ни разу не используется в синтезируемой части кода.

    ПС:
    Это типовое значение и именно nS и pS
    `timescale 1ns/1ps

    ПС:ПС:
    #1 CLK = ~CLK
    здесь по первости можно указывать #5 чтоб получить "красивую" частоту в 100 МГц. и чтоб проще "отсчитывать" какой щаз период времени (хотя это можно сделать в автоматическом режиме отображение номера периода со счётчик оного клока).
    Последний раз редактировалось AlexG; 21.10.2024 в 23:54.

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

    Titus(22.10.2024)

  10. #600

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

    По умолчанию

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

Страница 60 из 81 ПерваяПервая ... 565758596061626364 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 1739
    Последнее: 09.01.2025, 10:55
  2. Ответов: 32
    Последнее: 18.12.2024, 18:19
  3. Реверс-инжиниринг игры Boovie
    от Oleg N. Cher в разделе Программирование
    Ответов: 41
    Последнее: 09.01.2022, 23:07
  4. Реверс МК-92
    от Случайность в разделе Программируемые калькуляторы
    Ответов: 55
    Последнее: 24.04.2021, 23:47
  5. Реверс инжиниринг печатной платы
    от Filin в разделе Несортированное железо
    Ответов: 36
    Последнее: 11.03.2018, 22:46

Ваши права

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