User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 42

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

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

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

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

    По умолчанию

    RS-триггер можно симулировать защелкой, но не надо так делать. В физической Альтере нет RS-триггеров. Есть блоки в которых реализуется небольшая табличка истинности + D-триггер с асинхронным сбросом (на самом деле конечно сложнее, но это вполне по-моему убедительная модель). Вся комбинаторика синтезируется через таблицы, результаты фиксируются в регистрах по клоку.

    В дополнение к тому, что сказал Hunta - x бывает используется как состояние при сравнении и в case, тогда x -- это "наплевать". Но это не то же самое, что состояние x в симуляции. В симуляции x -- это заразная неопределенность, эквивалент NaN в плавающей точке. Фраза "Если хотя бы один операнд равен х, то и результат всего выражения х" имеет смысл только в симуляции. Так же как 155ла3 не может иметь состояние "х", так не могут иметь состояние "х" и сигналы в Альтере.

    Пример семплера (со скидкой на то, что я не вериложил годы и не проверял)

    Код:
    reg [1:0] sample;
    always @(posedge clk) // все записи внутри этого блока происходят залпом параллельно по фронту clk
    begin
      sample[0] <= sample[1];             // переписали последний семпл в первый
      sample[1] <= metastable_input;  // сохранили текущее состояние в последний
    end
    
    wire stable_input <= sample[0] & sample[1];  // этот сигнал будет 1 когда два clk подряд на metastable_input будет 1
    Больше игр нет

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

  3. #2

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

    По умолчанию

    Цитата Сообщение от svofski Посмотреть сообщение
    RS-триггер можно симулировать защелкой, но не надо так делать. В физической Альтере нет RS-триггеров. Есть блоки в которых реализуется небольшая табличка истинности + D-триггер с асинхронным сбросом (на самом деле конечно сложнее, но это вполне по-моему убедительная модель). Вся комбинаторика синтезируется через таблицы, результаты фиксируются в регистрах по клоку.

    В дополнение к тому, что сказал Hunta - x бывает используется как состояние при сравнении и в case, тогда x -- это "наплевать". Но это не то же самое, что состояние x в симуляции. В симуляции x -- это заразная неопределенность, эквивалент NaN в плавающей точке. Фраза "Если хотя бы один операнд равен х, то и результат всего выражения х" имеет смысл только в симуляции. Так же как 155ла3 не может иметь состояние "х", так не могут иметь состояние "х" и сигналы в Альтере.
    ...
    То, что Альтера всё делает на ячейках/таблицах - я давно понял. Соответственно, я понимаю, что в Альтере нет физически (принимающих участие в генерации схемы) ни каких логических элементов или регистров, триггеров, и прочего в классическом понимании как в обычных микросхемах. Вся логика на ячейках памяти и таблицах истинности. Может только в интерфейсной части, но нас это на данный момент не интересует. Это всё мне понятно.

    RS-триггер, уменя в принципе и есть D-триггер со сбросом, взят из примеров.

    С "х" понятно... отловить метастабильность используя "х" не получится, а жаль, такая идея пропала

    Вообще идея и логика ПЛИС мне стала понятна практически сразу.
    Она мне напомнила электронный конструктор, который был у меня в детстве. Он состоял из маленьких пластиковых кубиков, на которых сверху был нарисован элемент (резюк, кондёр, транзистор, ...), а по бокам контакты.
    Собираешь эти кубика в коробке, получаешь схему.
    Идея такая-же как и в верилоге/ПЛИС.
    Есть "модули" у них есть входные/выходные параметры - боковые контакты кубиков, заполнил модули функциями, накидал модули, проследил, чтобы "контакты" совпадали - и получил "схему".
    И по идее, что там в ПЛИСе негенерировалось внутри кубиков (модулей) - до лампочки, главное, что-бы "функция" правильно была написано. Такие себе "чёрные ящики" - не имеющие отношения к реальным микросхемам, т.к. вся логика функций генерируется на таблицах истинности в ячейках памяти.
    Как-то так... с моей точки зрения.
    Может это и не очень правильное сравнение, но у меня именно такие ассоциации.

    Если вернуться к сканированию.
    Не видел технического описания Альтеры на русском языке, на буржуйском могу только общий смысл и то со словарём
    Мне интересно, есть ли у М9К ресурс циклов чтения/записи ?
    Уперся на сканере в ситуацию, что нужно ловить "момент сбоя", и видеть, что ему предшествовало, а он (момент) может наступить когда угодно.
    Соответственно, нужно делать как в обычных логгерах - начинать сканировать заранее, и закольцевать буфер записи, в момент наступления события - разрывать кольцо, и будем иметь семплы предшествующие интересующему событию - увидим ситуацию приведшую к сбою.
    Но боюсь, что постоянная запись в М9К, в ожидании события, может сожрать ресурс циклов чтения/записи.
    М9К - т.к. на борде нет внешней SRAM/SDRAM.
    Так-что вопрос о наличии ресурса М9К, для меня - актуален.
    Последний раз редактировалось KTSerg; 09.04.2022 в 07:51.

  4. #3

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

  5. #4

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

    По умолчанию

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

  6. #5

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

  7. #6

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

    По умолчанию

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

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

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

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

  8. #7
    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.

  9. #8

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

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

    По умолчанию

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


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

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

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

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

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

  11. #10

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

    По умолчанию

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

Страница 1 из 2 12 ПоследняяПоследняя

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

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

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

Ваши права

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