User Tag List

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

Тема: Результаты сканирования шин Вектора

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

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

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

    По умолчанию

    Цитата Сообщение от Sandro Посмотреть сообщение
    А зря. Всё твое сообщение можно свести к фразе "у меня ничего не работает, почему -- не знаю".
    Именно так... Самую суть узрел...

    Цель проекта на Альтере, изучить потенциальную возможность реализовать "в железе" идею подключения внешней ПЗУ к разъёму ВУ, используя минимальное количество простых цифровых микросхем логики, используя минимум регистров.
    Именно по этой причине, экспериментирую исключительно с wire и assign. Так как есть у меня предположение, что любое использование конструкций типа "if" - приведёт к использованию компараторов, а конструкции типа reg и always - будут добавлять в схему дополнительные корпуса регистров.

    Альтера 100% тут не виновата. Ищи ошибки в проекте.
    ...
    Конечно железо не может быть виновато (если оно исправно).
    Не может ошибаться тот кто слепо выполняет инструкции, даже если в результате выдаёт результат, не тот которого ждали. Ошибся тот кто написал инструкции.
    Последний раз редактировалось KTSerg; 07.04.2022 в 06:57.

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

  3. #2

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

    По умолчанию

    KTSerg, повторюсь, ситуация с нечетким срабатыванием похожа на то, с чем сталкивался svofski в шадке. Можно попробовать полечить примерно аналогичным антидребезгом для сигналов с ВУ - детект первого изменения + некоторая задержка.

  4. #3

    Регистрация
    20.01.2010
    Адрес
    г. Зеленоград
    Сообщений
    600
    Спасибо Благодарностей отдано 
    28
    Спасибо Благодарностей получено 
    231
    Поблагодарили
    123 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от KTSerg Посмотреть сообщение
    Цель проекта на Альтере, изучить потенциальную возможность реализовать "в железе" идею подключения внешней ПЗУ к разъёму ВУ, используя минимальное количество простых цифровых микросхем логики, используя минимум регистров.
    Это понятно. Но, если ты не понимаешь, как кормпилируется верилог, то хотя бы код выложи, чтобы тебе показали основные проблемы. Иначе абсолютно непонятно, что сделано не так.

    Цитата Сообщение от KTSerg Посмотреть сообщение
    Именно по этой причине, экспериментирую исключительно с wire и assign. Так как есть у меня предположение, что любое использование конструкций типа "if" - приведёт к использованию компараторов, а конструкции типа reg и always - будут добавлять в схему дополнительные корпуса регистров.
    Это неверно. В обе стороны. Даже в три, поскольку wire и reg -- вообще объявления проводов, а не логические конструкции. Триггер на assign делается, но так писать не принято. Хотя у новичков получаются паразитные триггеры в assign, бывает такое. If без компаратора -- без проблем. always без триггера -- пожалуйста.
    Так что -- код в студию.

    Цитата Сообщение от KTSerg Посмотреть сообщение
    Конечно железо не может быть виновато (если оно исправно).
    Не может ошибаться тот кто слепо выполняет инструкции, даже если в результате выдаёт результат, не тот которого ждали. Ошибся тот кто написал инструкции.
    Код -- это и есть инструкции. Компилятору. Выкладывай код.

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

  5. #4

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

    По умолчанию

    Цитата Сообщение от Sandro Посмотреть сообщение
    ... поскольку wire и reg -- вообще объявления проводов,
    ...
    Так что -- код в студию.
    ...
    А какой смысл выкладывать код, если оказывается, что reg - это объявление провода, а не переменной (регистра) как я раньше думал.
    После получения такой важной инфы, мне сначала нужно переосмыслить всю концепцию проекта...
    Снова начну гуглить...
    If без компаратора -- без проблем. always без триггера -- пожалуйста.
    Мне известен и понятен факт, что одинаковый результат можно получить разными средствами/инструментами, и пользуясь одним инструментом можно получать разные результаты.

    Скрытый текст

    Был в моей жизни опыт сдачи контрольных работ по Прологу и Лиспу.
    Препод дал задание, по его словам задача решалась вложенными циклами (инструментом данного языка программирования) программой в четыре строки.
    Видя, что я не понимаю концепции, мне были даны готовые три строки, осталось дописать одну строку программы...
    Я так и не понял кода программы, и написал свой код на три десятка строк, без вложенных циклов... Так как мой код выдавал правильный результат, то зачет я получил, хотя и не проникся прелестью инструментария этих языков.
    Замечу, что данной историей я не горжусь. На месте препода, я бы в такой ситуации зачёт не поставил, так как контрольная была по программированию на Лиспе/Прологе (не помню уже точно которому из них), а не на линейном языке.
    [свернуть]
    Последний раз редактировалось KTSerg; 08.04.2022 в 06:59.

  6. #5

    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    4,305
    Спасибо Благодарностей отдано 
    1,032
    Спасибо Благодарностей получено 
    817
    Поблагодарили
    488 сообщений
    Mentioned
    26 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от KTSerg Посмотреть сообщение
    А какой смысл выкладывать код, если оказывается, что reg - это объявление провода, а не переменной (регистра) как я раньше думал.
    Память, то есть все регистры, работает по клоку. Клок в ПЛИС принято делать синхронным, один общий клок на весь проект. Никакие делители клоков как в традиционных схемах на 155ла3 недопустимы. Переходы между разными клоками возможны, но это боль. Лучше оставить это крутым профессионалам. Если есть входящие сигналы типа как у Вектора, мы их фактически семплируем. Отсюда всякий антидребезг.

    Что до регистров и проводов, то все просто на самом деле.

    Если есть описание процесса на клоке (always @(posedge или negedge)), присваивания внутри этого процесса происходят по тактирующему сигналу, или асинхронному сбросу. Левая часть оператора присваивания синтезируется в настоящий железный регистр, а на вход CLK и nRESET ему подводятся сигналы из списка чувствительности оператора always.

    Если сигнал объявлен как reg, но нету ни одного процесса, который бы его заклочил, получается, что и смысла превращать его в регистр нет. Правда, как упомянул Sandro, можно сделать защелку. Можно использовать always без клока для присваивания reg значения. Обычно в этом нет смысла, кроме может быть каких-то синтактических выкрутасов для совместимости.

    Есть еще интересный момент, который лично мне помог с интуицией. Все, что находится в правой части присваивания в блоках always @(posedge/negedge), суть комбинаторика. То, что большие и сложные многоэтажные выражения можно писать прямо внутри блока always, это для удобства. А так их можно смело описывать как wire и размещать снаружи.

    Во что именно синтезируются различные языковые конструкции - не так важно. Корни всего этого уходят в то, что изначально язык был предназначен не для описания синтезируемой логики, а для симуляции обычных схем. Чтобы не вляпыватся в ложных друзей лучше обходиться минимумом. Например, for не делает ничего напоминающего циклы в языках программирования.

    P.S. Когда я разбирался с ПЛИС много лет назад, мне не попалось нигде простого и четкого объяснения того, что же мы собственно делаем. Были хорошие ресурсы с примерами, но не то я невнимательно читал, не то там тоже этому не уделялось достаточно внимания, но все время складывалось такое ощущение, что мы как будто пишем обычную программу, только вот как-то не совсем, потом какой-то пыщ-пыщ и все мигает. Это не совсем отягощалось мутной терминологией типа "верилог исполняет этот оператор" -- очевидно, авторы таких текстов либо где-то в академически-симуляционных облаках, либо просто нихрена не понимают (не хочу никого обидеть -- очень может быть, что на самом деле понимают, но не понимают, что их читатели не понимают). Путаница с тем, что в вызывающей доверие литературе Верилог очень часто вообще не упоминается в контексте синтеза, нисколечко не помогала. Интересно, что большое количество людей умудряются пользоваться ПЛИС явно не осознавая нескольких простых вещей. Я сам умудрился сделать свой первый Понг на ощупь, совершенно не врубаясь в то, как это работает. Продравшись же через завесу липкой мути, оказалось, что по крайней мере в рамках вполне достаточных для хобби все просто и магии даже как то почти и нет.

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

  7. #6

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

    По умолчанию

    Цитата Сообщение от svofski Посмотреть сообщение
    ... Если есть входящие сигналы типа как у Вектора, мы их фактически семплируем. Отсюда всякий антидребезг.
    ...
    Сейчас вопрос появился...
    А этот дребезг на сигнале какое значение имеет: "0", "1", "х" или "z" ?
    Если какой-то из двух последних, может в верилоге есть инструмент для их вылавливания на сигналах, где они не предусмотрены и замены их в потоке на значение из предыдущего семпла...

    А про определение reg... мне проще понять замечание, что не каждое объявление reg приводит к появлению регистра (т.к. можно что-то объявить, но использовать не стандартно, видимо это относится и к reg), чем высказывание, что wire и reg - объявление провода, т.к. последнее (с моей точки зрения) противоречит всем докам, что я прочитал про эту шнягу.
    Последний раз редактировалось KTSerg; 08.04.2022 в 15:50.

  8. #7

    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    4,305
    Спасибо Благодарностей отдано 
    1,032
    Спасибо Благодарностей получено 
    817
    Поблагодарили
    488 сообщений
    Mentioned
    26 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от KTSerg Посмотреть сообщение
    А этот дребезг на сигнале какое значение имеет: "0", "1", "х" или "z" ?
    Отличие дребезга от метастабильности в том, что дребезг -- это то 0 то 1 -- как на выходе металлических контактов, или при гонках в комбинаторной логике. А метастабильность -- это переходный процесс, когда мы на входе имеем не то 0, не то 1 и не можем решить. С чем именно мы тут имеем дело я не знаю, это легко может быть и то и другое сразу, но лучше считать, что это метастабильность. Значений x или z не существует в реальном железе. x может использоваться для обозначения неопределенности в симуляции. Все реальные сигналы 0, или 1. Для этой проблемы есть классическое решение -- добавление ТШ. Но если ТШ нет, то можно попробовать выкрутиться поджидая, пока сигнал не устаканится. То есть пока несколько чтений подряд не дадут одно значение.

    В обычном коде reg используется для регистров, а wire для комбинаторики. По клоку в reg записывается wire, или другой reg. Если придерживаться простых правил, то так всегда и будет. В Верилоге есть прорва оговорок и всяких не всегда, в них можно надолго погрязнуть и ничего полезного из этого не вынести. Этот язык правда древний, с ятями и твердыми знаками и самое смешное, что придуманный совсем не для того.
    Последний раз редактировалось svofski; 08.04.2022 в 16:19.
    Больше игр нет

  9. #8

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

    По умолчанию

    Цитата Сообщение от svofski Посмотреть сообщение
    А метастабильность -- это
    Пример.

    Для TTL логики то, что меньше (могу ошибится в числах, но не в этом суть) 0,4 вольт - это 0, а то, что больше 2.4 в - это 1. А вот всё то, что больше 0.4 и меньше 2.4 - это она самая, родимая.

    То есть если такой сигнал подать на вход логического элемента, скажем, НЕ - то на выходе может быть больше 2.4 В, а может быть меньше 0.4 В, а может плясать - то больше 2.4, то меньше 0,4. Всё зависит от входного значения и характеристик транзисторов внутри ЛЭ.

  10. #9

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

    По умолчанию

    Цитата Сообщение от svofski Посмотреть сообщение
    ... Значений x или z не существует в реальном железе. ... Все реальные сигналы 0, или 1. ...
    Но мы пока говорим о проекте на Альтере, и у меня срабатывает RS-триггер, на вход "С" которого заведён злополучный СБРОС.
    И я всё больше склоняюсь к мнению, что параллельно подключенный сканер не видит ни чего из-за того, что сканер мне показывает чисто двоичное состояние сигнала, а там ловлю метастабильность "х".
    Вот буквально на этой неделе штудировал (выдержки) :
    Verilog обрабатывает всего четыре значения переменной:
    1) “1” - логическая единица
    2) “0” - логический ноль
    3) “z” - состояние высокого импеданса
    4) “x” - неизвестное логическое состояние
    Далее:
    Если хотя бы один операнд равен х, то и результат всего выражения х.
    Далее:
    - переходы posedge: 0->1, 0->x, 0->z, x->1, z->1
    - переходы negedge: 1->0, 1->x, 1->z, x->0, z->0
    Значит, если представить себе ситуацию, что я ловлю на шине 0->х а потом обратно х->0 , то сканер ни чего мне не покажет, а RS-триггер честно отработает так как получит на управляющий вход последовательность posedge, negedge.

    Нужно детектор х-остояния придумать со счетчиком события, и смотреть, будут-ли сработки...
    Хотя скорее всего я ошибаюсь, и метастабильность тут ни при чём, и вообще выглядит она совсем по другому.
    Последний раз редактировалось KTSerg; 08.04.2022 в 19:59.

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

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

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

Похожие темы

  1. Ответов: 10
    Последнее: 14.12.2016, 22:46
  2. Ответов: 4
    Последнее: 24.03.2016, 21:26
  3. Нагрузочная способность шин Z80
    от KeKc в разделе Для начинающих
    Ответов: 3
    Последнее: 06.06.2014, 18:52
  4. ламерский вопрос о временных диаграммах шин Z80
    от boo_boo в разделе Несортированное железо
    Ответов: 3
    Последнее: 30.01.2006, 13:14

Ваши права

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