User Tag List

Страница 91 из 273 ПерваяПервая ... 878889909192939495 ... ПоследняяПоследняя
Показано с 901 по 910 из 2727

Тема: Цифровая археология: 1801 и все-все-все

  1. #901

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    148
    Поблагодарили
    79 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    .

    При следующей модификации модели Qsync - изменение сигналов SEL1 и SEL2 происходит аналогично модели Async :

    Код:
    always @(posedge pin_clk_n)
    begin
       sync_out <= qbus_win_h;
       sync_ena <= sync_out_h;
     
       if (~qbus_win_h)
       begin
          sel_14 <= sel177x & (pin_ad_in[3:1] == 3'b110);
          sel_16 <= sel177x & (pin_ad_in[3:1] == 3'b111);
       end
    end 
    
    always @( posedge pin_clk_p or posedge sel177x )
    begin
       if (~pin_sync_in)
       begin
          sel_xx <= sel177x;
          sel_00 <= sel177x & (pin_ad_in[3:1] == 3'b000);
          sel_02 <= sel177x & (pin_ad_in[3:1] == 3'b001);
          sel_04 <= sel177x & (pin_ad_in[3:1] == 3'b010);
          sel_06 <= sel177x & (pin_ad_in[3:1] == 3'b011);
          sel_10 <= sel177x & (pin_ad_in[3:1] == 3'b100);
          sel_12 <= sel177x & (pin_ad_in[3:1] == 3'b101);
          sel_14 <= sel177x & (pin_ad_in[3:1] == 3'b110);
          sel_16 <= sel177x & (pin_ad_in[3:1] == 3'b111);
       end
    end
    - - - Добавлено - - -

    Цитата Сообщение от Vslav Посмотреть сообщение
    Кстати, начальная цель при переходе на Qsync была оставить только одну тактовую частоту и только одно событие по фронту тактовой частоты (это бы и ускорило CPP-модель, только eval_p остался бы).
    Именно так работает текущая A-модель ( все сигналы изменяются только по срезу CLC ). По иронии судьбы как раз сейчас я добавляю в A-модель полутактовую синхронность с V-моделью, потому и появились претензии к тем полутактам, где V-модель даёт маху.
    Последний раз редактировалось Patron; 19.12.2015 в 00:07.

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

  3. #902

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

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    .
    Код:
    always @( posedge pin_clk_p or posedge sel177x )
    В симуляторе оно, возможно, и собирается, но Квартус синтезировать такое не сможет (update: попробовал - ага, ModelSim норм, а Quartus послал, даже до синтеза не дошел). В принципе, можно попытаться использовать асинхронный сброс (но с огромной комбинационной функцией с шины sel177x - это очень плохая идея), но деактивацию тогда сделать не получится. Также есть методы все-таки позволяющие реализовать аналог схемы always @(posedge clk1 or posedge clk2), но будет слегка громоздко и некрасиво, поэтому нафиг.

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

    Там еще оказывается и по always @(posedge pin_clk_n) sel_14/sel_16 изменяются. Одна из первых вещей, когда обучают Верилогу - НЕ писать обработку одной и той же переменной в разных блоках. Часто можно нарваться на невозможность синтеза, неоднозначное поведение, не всегда очевиден порядок следования событий в списке чувствительности, или просто легкость внесения ошибок.

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

    Цитата Сообщение от Patron Посмотреть сообщение
    .
    добавляю в A-модель полутактовую синхронность с V-моделью, потому и появились претензии к тем полутактам, где V-модель даёт маху.
    Имелось ввиду что в Qsync-е полутактовая синхронность изначально не планировалась. Когда же стало понятно что одной фазой не обойтись, и все равно будут полутакты, то некоторое внимание было уделено основным сигналам qbus, чтобы ставились-снимались согласно "фазовому расписанию". SELx это все-таки не qbus-ные сигналы, поэтому их никто не смотрел и к фазовой точности не стремился. Да и сейчас считаю что усложнять промежуточный синтезируемый дизайн ради второстепенного сигнала не самый лучший вариант. Реальные платы если SELx используют - то только в связке с nDIN/nDOUT. Также нет смысла ставить внешнюю защелку на SELx, потому что она есть внутренняя, так что фаза относительно nSYNC тоже не особо важна для внешних схем.

  4. #903

    Регистрация
    27.11.2015
    Адрес
    г. Самара
    Сообщений
    341
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я пытаюсь начать проект БК0011М для MIST-board. Опыт программирования FPGA у меня небольшой. До этого тренировался на портировании ZX Spectrum 128 для достижения 100% совместимости по тактам с железом с ULA чипом. Поскольку цель достигнута, перехожу к проекту БК0011М. Видел одну реализацию, но там, ВМ1 эмулируется чисто функционально (как Т80, который популярен, но мало общего имеет с настоящим Z80), а не по тактам. В проекте Spectrum 128 я использовал прецизионную модель процессора A-Z80. Что мне нравится в той модели - то, что модуль имеет сигналы идентичные железному прототипу. По сути можно запихнуть в CPLD и вставить в сокет вместо Z80.
    Для проекта БК0011М хочу взять модель из этого топика, поскольку видно что это самая точная модель ВМ1.
    Но вот с сигналами - полный швах. Ничего подобного в реальном ВМ1 нет. Это сильно огорчает, поскольку возникает куча неизвестных и попутно некоторые непонимания решения.
    В первую очередь о клоках:
    1) Зачем столько клоков? Какой клок использовать для частоты 4мгц?
    2) Зачем используются два противофазных клока? Разве нельзя обойтись одной полярностью и обрабатывать в коде posedge и negedge?

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

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

  5. #904

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

    По умолчанию

    Цитата Сообщение от Saar Посмотреть сообщение
    1) Зачем столько клоков? Какой клок использовать для частоты 4мгц?
    2) Зачем используются два противофазных клока? Разве нельзя обойтись одной полярностью и обрабатывать в коде posedge и negedge?
    Модель воссоздавалась по схеме реального процессора 1801ВМ1, а в нем события происходят как по фронту, так и по срезу тактовой частоты. Как чуть выше писалось, была предпринята попытка привести эту модель к единому событию по фронту, но, ввиду сложности модели, она пока не увенчалась успехом, поэтому имеются две частоты.

    На промежуточном этапе был вариант с posedge и negedge одного тактового сигнала, но это накладывает требования на его форму - определенное соотношение длительностей высокого и низкого уровней (сейчас это должен быть меандр (равные полупериоды)), поэтому был добавлен еще один тактовый сигнал и вся модель переведена на posedge (есть парочка negedge, но они относятся к асинхронным сбросам). Сложность отрабатывающей логики между фазами неравнозначна, поэтому я еще игрался с фазами - двигал тактовые сигналы относительно друг друга для поднятия Fmax проекта, но в итоге удалось достичь запланированных 100МГц и на меандре. Форма записи с двумя тактовыми вполне позволяет использовать и один тактовый сигнал, при условии что он является меандром (тут надо аккуратно с настройками PLL), снаружи на модуль vm1_wb надо просто на вход vm_clk_n подать инвертированный сигнал.

    Если будет применяться модель Wsync, то для работы на 4МГц следует использовать не тактовый сигнал, а вход vm_clk_ena (подать импульсы с периодом 4МГц, длительностью один такт vp_clk_p, синхронизированные с vm_clk_p), а также активировать vm_clk_slow, который будет притормаживать интерфейсный блок и запускать транзакции точно в моменты когда это сделал бы реальный процессор на 4МГц. Такой подход позволяет добиться точной потактовой симуляции и при этом сохранить быструю шину.

    Цитата Сообщение от Saar Посмотреть сообщение
    Но вот с сигналами - полный швах. Ничего подобного в реальном ВМ1 нет
    В модели Qsync есть файл vm1.v, это обертка над синтезируемым ядром vm1_qbus, приводит его сигналы к реальному процессору (все, отличия только в тактировании). Там уже можно просто подать 4МГц на pin_clk_p/pin_clk_n. pin_ena в этой модели влияет только на ВЕ-таймер.

  6. #905

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    148
    Поблагодарили
    79 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vslav Посмотреть сообщение
    pin_ena в этой модели влияет только на ВЕ-таймер
    В модели Async - pin_ena тоже влияет только на ВЕ-таймер, а в реальном 1801ВМ1 это так ?

  7. #906

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

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    В модели Async - pin_ena тоже влияет только на ВЕ-таймер, а в реальном 1801ВМ1 это так ?
    В реальном процессоре нет такого вывода pin_ena. В модели Async/Qsync он добавлен чтобы можно было обеспечить разные частоты таймера и ядра. Например, ядро запустить на 100МГц, а на таймере оставить на 4МГц. В модели Wsync этот вывод стал называться более внятно vm_clk_tve.

    Update: наверное в Async надо pin_ena удалить, чтобы поближе к процессору быть, все равно эту модель на ПЛИС запускать вряд ли будут, хотя надо бы попробовать, вдруг заработает, несмотря на 600+ предупреждений и матюков от Квартуса )
    Последний раз редактировалось Vslav; 19.12.2015 в 18:11.

  8. #907

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    148
    Поблагодарили
    79 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vslav Посмотреть сообщение
    наверное в Async надо pin_ena удалить, чтобы поближе к процессору быть
    А в CPP-модели pin_ena вообще делать нечего.

  9. #908

    Регистрация
    27.11.2015
    Адрес
    г. Самара
    Сообщений
    341
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    То есть для эмуляции БК0011М достаточно использовать Qsync модель? Какие-то подводные камни с этой моделью есть? Просто в ридми написано так, что Wsync типа самая правильная. Собственно поэтому я в другие папки даже не заглядывал.

    Правильно ли я понимаю, что для Qsync надо так?

    vm1
    (
    pin_clk_p(clk4mhz),
    pin_clk_n(~clk4mhz),
    pin_ena(1'b1),
    ...

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

    вдруг заработает, несмотря на 600+ предупреждений и матюков от Квартуса
    У A-Z80 порядка 1600 предупреждений, однако работает Он тоже по маскам создавался, если верить автору.

  10. #909

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

    По умолчанию

    Цитата Сообщение от Saar Посмотреть сообщение
    То есть для эмуляции БК0011М достаточно использовать Qsync модель?
    Зависит от того как будет построена "эмуляция БК". Если по типу SoC, то конечно надо брать Wsync и строить SoC на основе шины Wishbone.

    Цитата Сообщение от Saar Посмотреть сообщение
    Правильно ли я понимаю, что для Qsync надо так?
    vm1
    (
    pin_clk_p(clk4mhz),
    pin_clk_n(~clk4mhz),
    pin_ena(1'b1),
    Да.

  11. #910

    Регистрация
    30.08.2011
    Адрес
    Зеленоград
    Сообщений
    7,161
    Спасибо Благодарностей отдано 
    2,979
    Спасибо Благодарностей получено 
    374
    Поблагодарили
    311 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Saar Посмотреть сообщение
    У A-Z80 порядка 1600 предупреждений
    Могу предположить, как не специалист, что цифра - это не показатель.
    Показатель отсутствие "критически важных для эмуляции" предупреждений, наверное?
    Архив программ для УК-НЦ, ДВК и БК.

    Ищу игру "СТРАНА МОНСТРОВ" [monstr.sav] для ДВК.

Страница 91 из 273 ПерваяПервая ... 878889909192939495 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 7
    Последнее: 28.06.2014, 17:50
  2. Микросхемы МПК 580,1801,1810 и другие...
    от Alex_Vac в разделе Барахолка (архив)
    Ответов: 44
    Последнее: 07.04.2012, 08:03
  3. ЦИФРОВАЯ МУЗЫКА НА ZX
    от AAA в разделе Музыка
    Ответов: 98
    Последнее: 18.09.2011, 22:33
  4. Учебный стенд УМПК-1801
    от dk_spb в разделе ДВК, УКНЦ
    Ответов: 2
    Последнее: 12.05.2010, 16:52
  5. Цифровая музыка от Вадима Ермеева
    от zxmike в разделе Музыка
    Ответов: 2
    Последнее: 06.08.2007, 23:13

Метки этой темы

Ваши права

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