User Tag List

Страница 15 из 18 ПерваяПервая ... 1112131415161718 ПоследняяПоследняя
Показано с 141 по 150 из 178

Тема: Вектор-06Ц, 580хх на ПЛИС

  1. #141

    Регистрация
    22.02.2014
    Адрес
    г. Курган
    Сообщений
    1,706
    Спасибо Благодарностей отдано 
    275
    Спасибо Благодарностей получено 
    318
    Поблагодарили
    222 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Что-то я не совсем понимаю, вернее совсем не понимаю, как такое происходит...
    Есть always, в котором регистру "acc" передаётся значение регистра "d".
    Код:
    always @(posedge clk)
    begin
       if (f2)
          begin
             if (alu_xwr) xr <= id_rst ? (i & 8'b00111000) : d;
             if (alu_awr) acc <= d;
    ...
    Судя по всему acc должен получить новое значение при "posedge clk" и "f2==1" и "alu_awr==1".
    Но судя по графику ModelSim, "acc" меняет своё значение при "f2==0".
    Инверсии "f2" в коде я не заметил.
    Что я упускаю?

    Запутался ещё больше.
    Все процессы происходят при "инверсных" значениях сигналов "f1" и "f2", если верить графикам ModelSim.
    Нужно сначала искать, где они инвертируются, в коде или при выводе в график.
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	Снимок_асс.jpg 
Просмотров:	753 
Размер:	20.3 Кб 
ID:	77763  
    Последний раз редактировалось KTSerg; 07.09.2022 в 09:39.

  2. #142

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,927
    Спасибо Благодарностей отдано 
    106
    Спасибо Благодарностей получено 
    291
    Поблагодарили
    217 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Если в коде нет ветки else, то можно считать else acc <= acc;. Почему ModelSim решил показывать значение acc именно с этого posedge clk, знают только его разработчики. В принципе, если acc нигде больше не инициализируется, там должен быть мусор уже после первого posedge clk.

  3. #143

    Регистрация
    22.02.2014
    Адрес
    г. Курган
    Сообщений
    1,706
    Спасибо Благодарностей отдано 
    275
    Спасибо Благодарностей получено 
    318
    Поблагодарили
    222 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    Если в коде нет ветки else, то можно считать else acc <= acc;. ...
    В принципе, если acc нигде больше не инициализируется, там должен быть мусор уже после первого posedge clk.
    Можно считать, что acc больше ни где не инициализируется. В соседней строке кода есть ещё один IF, в коде так:
    Код:
    ...
       if (alu_awr) acc <= d;
       if (alu_ald) acc <= s;
    ...
    Но второй IF в моём случае срабатывает значительно позднее.
    А мусор в асс и есть до указанного момента, т.к. до него не было операций с аккумулятором.

  4. #144

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,927
    Спасибо Благодарностей отдано 
    106
    Спасибо Благодарностей получено 
    291
    Поблагодарили
    217 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от KTSerg Посмотреть сообщение
    Но второй IF в моём случае срабатывает значительно позднее.
    Нельзя сказать "срабатывает". Регистр, в котором хранится acc, будет обновляться при каждом posedge clk (в таком варианте кода). Значение на входах регистра, если присутствует if, формируется при помощи мультиплексоров, а входы мультиплексоров в любом случае куда-то подключены. Если нет ветки else, то соответственно к выходу регистра acc.

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

    Данный код:
    Код:
    ...
       if (alu_awr) acc <= d;
       if (alu_ald) acc <= s;
    ...
    не содержит синтаксических ошибок, но тут не определён приоритет alu_awr alu_ald. Можно, конечно, надеяться, что приоритет последнего if выше, и код будет соответствовать следующему:
    Код:
    if (alu_ald) acc <= s; else if (alu_awr) acc <= d; else acc <= acc;

  5. #145

    Регистрация
    22.02.2014
    Адрес
    г. Курган
    Сообщений
    1,706
    Спасибо Благодарностей отдано 
    275
    Спасибо Благодарностей получено 
    318
    Поблагодарили
    222 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    Нельзя сказать "срабатывает". Регистр, в котором хранится acc, будет обновляться при каждом posedge clk (в таком варианте кода). ...
    Да, я понимаю.
    Я имел в виду, что значение "alu_ald" на изучаемом участке графика всегда равно "0", и код второй строки не выполняется в изучаемом интервале времени.
    Подозреваю, что сигналы alu_awr и alu_ald ни когда не пересекаются. Так как отвечают за обозначение активности разных групп команд, первая активна при выполнении операций с памятью (при чтении/записи), вторая в момент выполнения арифметических операций:
    assign alu_ald = t2222 & ( id_adc | id_add | id_daa | id_xra | id_sbb | id_sub | id_ana | id_ora | id_sha | id_cma);

    По крайней мере, у меня создалось именно такое впечатление.
    Но это уход в сторону от вопроса, почему в "асс" значение меняется не в ту фазу "f2".

    До меня только недавно дошло, что частота clk = 50MHz, а частота "f1" и "f2" = 25MHz.
    Если получится, попробую сначала в симуляторе снизить частоту f1 и f2, что-бы иметь графики, более приближенные к реальности.

  6. #146

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,927
    Спасибо Благодарностей отдано 
    106
    Спасибо Благодарностей получено 
    291
    Поблагодарили
    217 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от KTSerg Посмотреть сообщение
    почему в "асс" значение меняется не в ту фазу "f2"
    На графике как раз видно, что асс меняется на 0 чуть раньше, чем ты поставил вертикальную линию, как раз по posedge clk (tb/clk), а в предыдущем клоке alu_awr установилось в 1.
    Последний раз редактировалось b2m; 07.09.2022 в 11:50.

  7. #147

    Регистрация
    22.02.2014
    Адрес
    г. Курган
    Сообщений
    1,706
    Спасибо Благодарностей отдано 
    275
    Спасибо Благодарностей получено 
    318
    Поблагодарили
    222 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    На графике как раз видно, что асс меняется на 0 чуть раньше, чем ты поставил вертикальную линию, как раз по posedge clk (tb/clk), а в предыдущем клоке alu_awr установилось в 1.
    Вертикальную линию поставил не я, а ModelSim, который формировал график.
    Мне нравится, что acc меняется по posedge clk, к этому я претензий не имею.
    Но на графике видно, что когда происходит "posedge clk", и асс меняется, f2==0 - что не соответствует коду.
    Так как ветка в которой: "acc <= d", находится в ветке: "if (f2)" - и не должна работать, т.к. f2==0.
    Вот это меня и смущает.

    Ладно.
    Сначала попробую уменьшить частоту сигналов f1 и f2, а потом снова буду смотреть графики... вполне возможно, что там будет ещё больше "чудес"...

  8. #148

    Регистрация
    22.02.2014
    Адрес
    г. Курган
    Сообщений
    1,706
    Спасибо Благодарностей отдано 
    275
    Спасибо Благодарностей получено 
    318
    Поблагодарили
    222 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну вот...
    Модифицировал эмуляцию.
    Влепил clk=100MHz (как в проекте, залитом в ПЛИСину), выставил длительности f1 и f2, приближенные к реальным (с интервалами между ними).
    И сразу стало видно, какие сигналы меняются по переднему фронту f1, какие по переднему фронту f2.
    И асс стал меняться как ему положено, при f2==1 (типа по переднему фронту).
    Уже съедобные графики получились, можно дальше "ехать"...

  9. #149

    Регистрация
    22.02.2014
    Адрес
    г. Курган
    Сообщений
    1,706
    Спасибо Благодарностей отдано 
    275
    Спасибо Благодарностей получено 
    318
    Поблагодарили
    222 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Тестирую "хотелки" пока только на ModelSim-е...
    Удалось упаковать 4 команды:
    Код:
      ldax d
      mov m,a
      inx d
      inx h
    в одну: "ldmi" - копия байта из (de) в (m) с инкрементом указателей.
    При этом аккумулятор пока не используется и его значение не "портится".
    Команда выполняется в ModelSim за 10 (4,3,3) тактов, предполагаю, что на Векторе будет выполняться за 12 тактов.

    Не очень удобно, что в проекте "580vm80j" обозначение регистровых пар HL и DE - перепутаны сбивает с толку маненько...
    Последний раз редактировалось KTSerg; 21.09.2022 в 16:55.

  10. #150

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,393
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Как посмотреть, xchg же их меняет (перекоммутирует)

Страница 15 из 18 ПерваяПервая ... 1112131415161718 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 4
    Последнее: 23.06.2016, 00:02
  2. Продам Вектор 06Ц
    от zzz в разделе Барахолка (архив)
    Ответов: 27
    Последнее: 29.04.2011, 12:20
  3. Вектор-06Ц
    от Robusta в разделе Барахолка (архив)
    Ответов: 11
    Последнее: 17.03.2009, 23:18
  4. Вектор-06Ц: БП от PC
    от Dmitry Dubrovenko в разделе Вектор
    Ответов: 11
    Последнее: 08.03.2009, 21:53
  5. Вектор-06Ц
    от AlexBel в разделе Барахолка (архив)
    Ответов: 4
    Последнее: 20.12.2007, 08:23

Ваши права

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