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

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

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

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

  3. #2

    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    4,307
    Спасибо Благодарностей отдано 
    1,032
    Спасибо Благодарностей получено 
    818
    Поблагодарили
    489 сообщений
    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 небось)
    Больше игр нет

  4. #3

    Регистрация
    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.

  5. #4

    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    4,307
    Спасибо Благодарностей отдано 
    1,032
    Спасибо Благодарностей получено 
    818
    Поблагодарили
    489 сообщений
    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.
    Больше игр нет

  6. #5

    Регистрация
    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. Всё зависит от входного значения и характеристик транзисторов внутри ЛЭ.

  7. #6

    Регистрация
    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

Ваши права

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