User Tag List

Показано с 1 по 10 из 472

Тема: Потактовый клон i8080 на FPGA/CPLD

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

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

    По умолчанию

    Вот этот кусочек:

    Если предыдущая догадка верна и внизу здесь IR, а над ним дешифрация, то можно предположить, что каждая секция дешифратора это отдельный машинный цикл?

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

  3. #2

    Регистрация
    14.04.2013
    Адрес
    г. Ростов-на-Дону
    Сообщений
    608
    Спасибо Благодарностей отдано 
    70
    Спасибо Благодарностей получено 
    54
    Поблагодарили
    48 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    Вот этот кусочек:

    Если предыдущая догадка верна и внизу здесь IR, а над ним дешифрация, то можно предположить, что каждая секция дешифратора это отдельный машинный цикл?
    В Z80 каждый выход декодера (здесь это горизонтальные линии металлизации) это какая-то инструкция или группа по маске, например, 00xxx101 - декремент регистра, или 00xx1001 - add HL,RR. Они дополнительно группируются, а потом уже около сотни многовходовых элементов, на которые заведены в том числе циклы и такты. Их выходы это уже и есть (почти) управляющие сигналы АЛУ, регистров и прочего. "Секции" в нём тоже есть, но это, видимо, просто питание так заведено на дешифратор.

    ---------- Post added at 17:07 ---------- Previous post was at 16:38 ----------

    Цитата Сообщение от Titus Посмотреть сообщение
    ...убедительная просьба не переводить полученные данные только во всякие Verilog'и, а выкладывать еще и принципиальные схемы.
    Согласен. Схема наглядней Verilog'а, но всё-таки в тексте таскать туда-сюда куски схемы мне показалось проще. Поэтому в конце я (или может кто-то другой) всё равно переведу в схему, но она не будет один в один как на кристалле, там есть много мест, в которых можно повысить наглядность и читаемость. Например, тот же счётчик циклов. У него очень закрученные условия инкремента/сброса, но в результате упростил до (условно) "(цикл1 И такт3 И выход_декодера) ИЛИ (цикл2 И такт4 И выход_декодера) ИЛИ ...". То есть изначально оно наверное так и было, но её "сжали" чтобы было меньше транзисторов.

    ---------- Post added at 17:14 ---------- Previous post was at 17:07 ----------

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    Мне проще понимать "тактируемый D триггер" (например 555ИР23) и "прозрачная защелка" (555ИР22). Первый работает строго по перепаду, второй прозрачен всегда, пока действует условие и защелкивает когда условие не действует.
    Z80 в основном построен на "прозрачных защёлках", описываю их так:
    Код:
    always @(*) if (clk)
    begin
       ...
    end
    iverilog (симулятор такой) понимает правильно, Quartus вроде тоже.

  4. #3
    HardWareMan
    Гость

    По умолчанию

    Цитата Сообщение от Bolt Посмотреть сообщение
    Z80 в основном построен на "прозрачных защёлках", описываю их так:
    Код:
    always @(*) if (clk)
    begin
       ...
    end
    iverilog (симулятор такой) понимает правильно, Quartus вроде тоже.
    Это потому, что латч требует всего 2 транзистора, а D триггер гораздо больше. Вот пример из дендечипа:

    Когда левый транзистор закроется на одном из полупериодов /PCLK, заряд, оставшийся на затворе правого транзистора, поддержит его открытым. Естественно, эта схема не статична и требует минимальной тактовой частоты. У многих старых чипов и процессоров есть минимальная разрешенная частота.

  5. #4

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

    По умолчанию

    Цитата Сообщение от Bolt Посмотреть сообщение
    Согласен. Схема наглядней Verilog'а, но всё-таки в тексте таскать туда-сюда куски схемы мне показалось проще. Поэтому в конце я (или может кто-то другой) всё равно переведу в схему, но она не будет один в один как на кристалле, там есть много мест, в которых можно повысить наглядность и читаемость. Например, тот же счётчик циклов. У него очень закрученные условия инкремента/сброса, но в результате упростил до (условно) "(цикл1 И такт3 И выход_декодера) ИЛИ (цикл2 И такт4 И выход_декодера) ИЛИ ...". То есть изначально оно наверное так и было, но её "сжали" чтобы было меньше транзисторов.
    Главное, чтобы при таком упрощении и приведении к общему виду, не потерялась изюминка изначальной схемы (какой-нибудь фирменный глюк или же еще какая-то особенность).

  6. #5

    Регистрация
    14.04.2013
    Адрес
    г. Ростов-на-Дону
    Сообщений
    608
    Спасибо Благодарностей отдано 
    70
    Спасибо Благодарностей получено 
    54
    Поблагодарили
    48 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я больше боюсь зависимости работы схемы от скорости переключения элементов. Пока попалось только две "линии задержки" на соединённых последовательно инверторах, но они особой роли не играют.

  7. #6

    Регистрация
    14.04.2013
    Адрес
    г. Ростов-на-Дону
    Сообщений
    608
    Спасибо Благодарностей отдано 
    70
    Спасибо Благодарностей получено 
    54
    Поблагодарили
    48 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Главное, чтобы при таком упрощении и приведении к общему виду, не потерялась изюминка изначальной схемы (какой-нибудь фирменный глюк или же еще какая-то особенность).
    Поясню на примере, что можно упростить в Z80 для повышения наглядности.

    Есть провод, указывающий, какие биты опкода брать для получения номера регистра
    Код:
    assign w185 = ~(~(w[40] | w[45]) & (w210 | ~w[47]));
    куча инверсий упрощается до вполне понятной логики "A or B or C"
    Код:
    assign w185 = w[40] | w[45] | (w[47] & ~T2);
    Потом мультиплексор, но его выходы также инвертированы
    Код:
    assign w3[351] = w185 ? ~cmd[0] : ~cmd[3];
    assign w3[357] = w185 ? ~cmd[1] : ~cmd[4];
    assign w3[361] = w185 ? ~cmd[2] : ~cmd[5];
    Дальше бардак
    Код:
    assign w3[355] = ~(w3[357] | w3[361]);
    
    ...  (w3[351] | w3[355]) ... // это обращение к каким регистрам?
    ... ~(w3[351] | w3[355]) ...
    который с учётом инверсии выходов мультиплексора приводится к
    Код:
    assign w3[355] = (cmdmux1 & cmdmux2); // =1 при обращении к регистру 6 или 7 (SP/[HL]/A)
    
    ...  (~cmdmux0 | (cmdmux1 & cmdmux2)) ... // =1 - обращение к регистру 0 2 4 6 7 (B D H [HL] A)
    ... ~(~cmdmux0 | (cmdmux1 & cmdmux2)) ... // =1 - обращение к регистру 1 3 5 (C E L)
    или даже
    Код:
    (cmdmux[0]==0) | (cmdmux==7) // любой старший регистр или аккумулятор
    причём w3[355] больше нигде не используется, его можно убрать.

    Мне кажется в 580ВМ80 логику И-НЕ / ИЛИ-НЕ так же можно будет сильно упростить при переводе на HDL, а инкремент/декремент со всеми ускоренными переносами вообще привести к одной строчке
    Или оставлять как есть?

  8. #7

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

    По умолчанию

    Цитата Сообщение от Bolt Посмотреть сообщение
    Поясню на примере, что можно упростить в Z80 для повышения наглядности.
    Это опять же Verilog-оподобный язык. Меня интересуют схемы)

  9. #8

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

    По умолчанию

    Цитата Сообщение от Bolt Посмотреть сообщение
    Мне кажется в 580ВМ80 логику И-НЕ / ИЛИ-НЕ так же можно будет сильно упростить при переводе на HDL, а инкремент/декремент со всеми ускоренными переносами вообще привести к одной строчке
    Или оставлять как есть?
    Ну схема рисуется 1-к-1. А вот на НDL, думаю, надо будет писать понятнее, все равно синтезатор перекрутит под конкретную платформу, так что смысла оставлять нативное представление логических функций никакого нет.

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

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

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

Похожие темы

  1. Комманды ассемблера/коды i8080/КР580ВМ80А
    от sergey2b в разделе Разное
    Ответов: 4
    Последнее: 29.11.2015, 14:01
  2. МикроСтеплер. Компилятор ЯП СТЕПЛЕР для i8080
    от Kakos_nonos в разделе Программирование
    Ответов: 8
    Последнее: 31.05.2013, 16:34
  3. Эмулятор i8080
    от Higgins в разделе Разное
    Ответов: 2
    Последнее: 20.05.2011, 11:43
  4. Использование FPGA и CPLD (ПЛИС и ПЛМ)
    от Mick в разделе Для начинающих
    Ответов: 69
    Последнее: 03.05.2006, 11:47

Ваши права

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