User Tag List

Страница 4 из 5 ПерваяПервая 12345 ПоследняяПоследняя
Показано с 31 по 40 из 42

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

  1. #31

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

    По умолчанию

    Цитата Сообщение от svofski Посмотреть сообщение
    Пример семплера (со скидкой на то, что я не вериложил годы и не проверял)
    Не надо так делать. Наличие элемента "И" порождает комбинаторный путь для потенциально метастабильного сигнала. Правильно так:

    Код:
    reg [1:0] sample;
    wire stable_input;
    ...
    always @(posedge clk)
    begin
      sample <= {sample[0], metastable_input};
    end
    
    assign stable_input = sample[1];  // пустышка чисто для наглядного оформления исходника; можно сразу использовать sample[1]

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

  3. #32

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

    По умолчанию

    Sandro, так вроде просто задержка получается?
    Больше игр нет

  4. #33

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

    По умолчанию

    Цитата Сообщение от svofski Посмотреть сообщение
    Sandro, так вроде просто задержка получается?
    А мне кажется, при логическом "И" - будет задержка переднего фронта, а спад - без задержки.
    Если сделать логическое "ИЛИ" - будет передний фронт вовремя, а спад с задержкой.
    Мне так кажется...

    С логическим "И" - для RAS/CAS подойдёт, т.к. актуален спад, а вот для "ЧТЗУ" задержка фронта может быть чревата последствиями, для него "ИЛИ" - безопаснее, т.к. фронт важен.

    Хотя могу и ошибаться.

    Вообще пока не могу понять как логическая операция может стать источником метастабильности...
    Или имеется в виду, что метастабильный параметр в выражении, может "без мыла" дальше пролезть...
    Последний раз редактировалось KTSerg; 10.04.2022 в 19:40.

  5. #34
    HardWareMan
    Гость

    По умолчанию

    Цитата Сообщение от Sandro Посмотреть сообщение
    Не надо так делать. Наличие элемента "И" порождает комбинаторный путь для потенциально метастабильного сигнала.
    Если этот сигнал не является сигналом чувствительности другого always блока а используется внутри того же, то пофигу, это раз. Второе, лучше указывать полный вектор явно, чтобы потом не ловить граблей из-за обратного порядка или других проблем. Правильно писать вот так: sample[1:0] <= {sample[0], metastable_input}; Заодно синтезатор будет ругаться, если вдруг где-то ошибёшься с размерностью.
    Цитата Сообщение от svofski Посмотреть сообщение
    Sandro, так вроде просто задержка получается?
    Не только. Это стандартная схема перевода сигнала из одного в другой тактовый домен. Так надо делать не только со внешними сигналами, но и со внутренними, которые идут между блоками с разным тактированием. А ещё, такая схема позволяет отлавливать перепад любой полярности, складывая по И оба регистра ((sample[1] & ~sample[0]) | (~sample[1] & sample[0])).
    Цитата Сообщение от KTSerg Посмотреть сообщение
    Вообще пока не могу понять как логическая операция может стать источником метастабильности...
    Или имеется в виду, что метастабильный параметр в выражении, может "без мыла" дальше пролезть...
    Чтобы это понять, нужно почитать буквари на ПЛИС. И осознать тот факт, что фиттер будет располагать элементы там, где ему вздумается (кроме случаев ручного раскроя - да, ПЛИСоводы 80 уровня и в такое умеют). А значит, пути прохождения сигналов по интерконнекту могут настолько отличаться, что задержка распространения одного сигнала относительно другого породит иголку. Когда всякие новички пишут без познания дзена по строго синхронному дизайну а потом жалуются, что их проект работал, а после добавления ещё одного кусочка перестал работать или стал сбоить, но после добавления ещё одного опять стал вроде как работать - это оно и есть. И так делать не надо.
    Последний раз редактировалось HardWareMan; 10.04.2022 в 21:39.

  6. #35

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

    По умолчанию

    Цитата Сообщение от KTSerg Посмотреть сообщение
    Вообще пока не могу понять как логическая операция может стать источником метастабильности...
    Или имеется в виду, что метастабильный параметр в выражении, может "без мыла" дальше пролезть...
    В моем варианте логическая операция между двумя регистрами. Метастабильный сигнал переписывается в регистр по клоку. Чем опасна операция "И" между двумя регистрами без дополнительных комментариев пока не понятно.

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

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    Не только. Это стандартная схема перевода сигнала из одного в другой тактовый домен. Так надо делать не только со внешними сигналами, но и со внутренними, которые идут между блоками с разным тактированием. А ещё, такая схема позволяет отлавливать перепад любой полярности, складывая по И оба регистра ((sample[1] & ~sample[0]) | (~sample[1] & sample[0])).
    Для перехода в другой клоковый домен понимаю, FIFO это хорошо. Для устранения метастабильного дребезга по-моему этого не будет достаточно.

    (про запись сдвига в одну строку итд поддерживаю)
    Больше игр нет

  7. #36
    HardWareMan
    Гость

    По умолчанию

    Цитата Сообщение от svofski Посмотреть сообщение
    Для устранения метастабильного дребезга по-моему этого не будет достаточно.
    Выходной сигнал всегда можно синхронизировать, поставив ещё один регистр с тем же тактовым списком как у источников сигнала. Просто результат будет запаздывать ещё на 1 такт. И самое главное: всегда консультируйтесь с RTL, чтобы понять как именно понял вас синтезатор. Это самый мощный инструмент отладки и корректировки ошибок и/или узких мест. Ну и по традиции пример выше:
    Код:
    module test(
    	input		Clk,
    	input		InputStream,
    	output	reg PosEdge,
    	output	reg AnyEdge,
    	output	reg NegEdge,
    	output	reg FilteredOut
    );
    
    reg [1:0]FIFO;
    
    always @(posedge Clk) begin
    	FIFO[1:0] <= {FIFO[0],InputStream};
    	PosEdge <= ~FIFO[1] & FIFO[0];
    	NegEdge <= FIFO[1] & ~FIFO[0];
    	AnyEdge <= ((~FIFO[1] & FIFO[0]) | (FIFO[1] & ~FIFO[0]));
    	FilteredOut <= FIFO[1] & FIFO[0];
    end
    
    endmodule
    Схема:


    Результат:
    Последний раз редактировалось HardWareMan; 11.04.2022 в 07:05.

  8. #37

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

    По умолчанию

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    Если этот сигнал не является сигналом чувствительности другого always блока а используется внутри того же, то пофигу, это раз.
    Нихрена не пофигу. Метастабильность прекрасно распространяется сквозь комбинаторную логику. Особенно,через КМОП, поскольку она (почти) симметрична.

    Мне как-то реально пришлось разгребать последствия такого вот заблуждения, когда разработчик не защитил от метастабильности вход UART, "поскольку метастабильность бывает только из-за медленно меняющихся сигналов, а у меня там триггер Шмитта!" Цитата дословная, запомнил ниазусть. Разумеется, это чушь, а ошибка вылазила совсем в другом месте, на шин процессора сыпался мусор. Метастабильность просачивалась через автомат состояния предатчика в автомат управления шиной, и привет.

    Поэтому -- два триггера последовательно, стабильное значение брать с выхода второго. Выход первого нестабилен. Был бы он стабилен -- второй триггер был бы не нужен.

  9. #38

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

    По умолчанию

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    ...
    Ну и по традиции пример выше:
    Код:
            ...
    	AnyEdge <= ((~FIFO[1] & FIFO[0]) | (FIFO[1] & ~FIFO[0]));
            ...
    Сразу приношу извинения за глупый вопрос, возможно я ещё не проснулся, и не понимаю смысла этой конструкции...
    Но разве процитированную функцию нельзя записать вот так:
    Код:
      AnyEdge <= (FIFO[1] ^ FIFO[0]);
    Или просто схема сгенерируется более сложная?
    Последний раз редактировалось KTSerg; 11.04.2022 в 07:19.

  10. #39

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

    По умолчанию

    Цитата Сообщение от svofski Посмотреть сообщение
    В моем варианте логическая операция между двумя регистрами. Метастабильный сигнал переписывается в регистр по клоку.
    Нет там логической операции, это иллюзия. Логические операции можно проводить только над логическими значениями. 0 и 1. Метастабильное сосотояние -- по определению переходное между ними. Ничего там не записывается, и никаких логических операций там не происходит. Там имеется неопределенноё поведение схемы, потенциально -- заразное. То есть, оно может от источника неопределённости распространяться очень далеко по схеме.


    Цитата Сообщение от svofski Посмотреть сообщение
    Чем опасна операция "И" между двумя регистрами без дополнительных комментариев пока не понятно.
    Пока триггер находится в метастабильном состоянии, на его выходе нет логических значений. Вообще нет.

    Операция "И" в этом случае невозможна. Реально у тебя логический элемент будет находиться в линейном режиме, то есть, работать, как аналоговый усилитель. И выдавать аналоговый сигнал, содержащий всё, что угодно. Включая сводку электрических помех на плате.

    Цитата Сообщение от svofski Посмотреть сообщение
    Для устранения метастабильного дребезга по-моему этого не будет достаточно.
    Метастабильность -- это не дребезг. Это длительно устойчивое (откуда и название) состояние триггера между 0 и 1.

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

    Цитата Сообщение от KTSerg Посмотреть сообщение
    Сразу приношу извинения за глупый вопрос, возможно я ещё не проснулся, и не понимаю смысла этой конструкции...
    Но разве процитированную функцию нельзя записать вот так:
    Можно. Это то же самое. И скобки тогда ни к чему.

  11. #40

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

    По умолчанию

    Цитата Сообщение от Sandro Посмотреть сообщение
    ...
    Метастабильное сосотояние -- по определению переходное между ними. Ничего там не записывается, и никаких логических операций там не происходит. Там имеется неопределенноё поведение схемы, потенциально -- заразное. То есть, оно может от источника неопределённости распространяться очень далеко по схеме.
    ...
    Значит цитата из статьи, которую я ранее приводил:
    Если хотя бы один операнд равен х, то и результат всего выражения х.
    Так-же справедлива и для метастабильности, но при этом "х"- не является метастабильностью по определению?
    Т.е. нет возможности детектировать метастабильность средствами верилога/Альтеры ?

Страница 4 из 5 ПерваяПервая 12345 ПоследняяПоследняя

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

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

Эту тему просматривают: 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

Ваши права

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