Jump to content

    

Sefo

Свой
  • Content Count

    421
  • Joined

  • Last visited

Community Reputation

0 Обычный

1 Follower

About Sefo

  • Rank
    Местный
  • Birthday 10/20/1975

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Recent Profile Visitors

2225 profile views
  1. Если вы внешний тактовый сигнал в плисах напрямую заводите на тактовые входы регистров, то самый простой (минимум изменений) способ это "привязать" выходные сигналы к спаду, а входные к фронту тактового сигнала. Т.е. на передающей стороне состояние меняется по спаду, а на приемной стороне защелкивание производится по фронту. Но нужно учесть, что если изменятся условия подключения плат между собой и к генератору тактового сигнала, то и ситуация может поменяться на противоположную. Тогда рабочим может оказаться ваш текущий вариант. Опишите подробнее клоковое дерево всей вашей системы, тогда проще будет подсказать решение.
  2. Для работы с последовательностью состояний можно использовать Sequence Property. Начните с просмотра разделов 16.7-16.9 и 16.13 IEEE Standard for SystemVerilog. Хотя глава 16 посвящена Assertions, то что касается Sequence Property применимо и для Coverage - в главах по Assertions иногда даже в примерах разбираются одновременно assert property и cover property. Вообще, для вашего запроса я бы порекомендовал повесить на шину монитор, который бы классифицировал все, что на ней происходит и записывал в массив из n элементов по принципу FIFO. Состояние этого массива через каждые n транзакций можно использовать для расчета покрытия последовательностей команд. Можно также считать покрытие по состоянию массива после каждой транзакции - тогда получится скользящее окно (применимо оно к вашему случаю или нет решать Вам). Классификация существенно сокращает количество возможных комбинаций - редко когда действительно необходимо, чтобы, скажем, адрес "пробежал" абсолютно по всем возможным значениям. Например, адреса можно классифицировать относительно предыдущей транзакции как {EQUAL, NEAR, FAR}. Ваш монитор обнаружив очередную транзакцию анализирует ее относительно предыдущей и сохраняет для расчета покрытия ее классификацию. Код команды сохраняется как есть, а вместо адреса сохраняется только его классификация. Как только в массиве набралось заданное количество транзакций вызываете sample() для вашей covergroup. Чтобы все это корректно работало Вам нужно продумать классификацию происходящего на шине и правильно описать covergroup.
  3. Я не даром написал "...и, в частности, UVM". Раздел верификации я начну с простых вещей. UVM на третье - кому не надо/не интересно может пропустить. Если вообще никому не надо, то не стану разбирать вовсе. Верно подмечено - дело в цели. Цель - исключительно познакомить слушателей с UVM и разобраться с основными элементами инфраструктуры. Не более того. Именно для этой цели, я считаю, самым подходящим является самый простой сценарий. Как Вы написали "плюнуть а, дождаться результата, проверить с b". Для начала (а курс для начинающих) достаточно, как в известном анекдоте, просто знать как расшифровывается аббревиатура UVM, какого цвета учебник, ну и может быть понимать чем sequence отличается от sequencer :). Еще один важный, на мой взгляд, нюанс. К моменту верификации слушатели уже будут знать БПФ вдоль и поперек и это позволит сосредоточиться целиком на особенностях верификации. Если взять что-то другое то необходимо будет сначала разобраться с тем как это работает, а потом еще по ходу отвлекаться на то, чтобы понять (или объяснить) почему в этой точке у этого модуля вот именно такие диаграммы. Замечу, что БПФ это только на 50% математика (бабочка, да умножитель). Остальные 50% это управление - откуда данные взять, какие коэффициенты подать, куда результат сложить, куда и когда подавать управляющие сигналы чтобы все пришло в нужное место в нужном такте и т.д. На отладку управления всегда уходить больше времени т.к. если там есть ошибки, то их сложнее локализовать. Вырожденные случаи не в счет.
  4. Давайте заменим БПФ на банальный коммутатор, на банальный UART или I2C или что-то еще. Что меняется? Объясните, пожалуйста, за счет чего происходит превращение микроскопа в молоток?
  5. Вокруг модуля БПФ. Данные в модуль надо через какой-то интерфейс загрузить, а результаты выгрузить. Для БПФ данные не обязательно читать из файла - их легко сгенирировать на лету. Даже нет необходимости выполнять проверочное БПФ - можно сгенерировать вход с заранее известным спектром. UVM всегда имеет одинаковую инфраструктуру вокруг тестируемого модуля и в этом смысле нет разницы что именно будет тестируемым модулем: БПФ, коммутатор или что-то еще. UVM как пиво - первый раз всегда не нравится :) Сначала кажется, что все очень сложно и перегружено, но потом мнение меняется. Что именно берется в качестве тестируемого модуля, на мой взгляд, ситуацию не меняет и первичное "отторжение" UVM неизбежно. Впрочем, я не настаиваю. Если знакомство с UVM никому не интересно - вычеркну.
  6. Вообще, UVM полезная штука и много где приминим. Если рассматривать мелкие модули БПФ, то там может и нет смысла применять UVM, но если брать модуль БПФ целиком, то UVM вполне пригоден. Я считаю, что современный инженер, все же, должен иметь представление о UVM и хотя бы раз его опробовать. Я не предполагаю углубляться в UVM, но просто продемонстрировать его, чтобы слушатели получили о UVM представление. Я с удовольствием, но я не представляю как это организовать технически. Мне нужно видеть аудиторию и иметь обратную связь непосредственно во время лекции. Если кто-то сможет взять на себя решение этого вопроса я буду ему очень благодарен. Математический аппарат входит в то, что я назвал теоретические основы преобразования Фурье. :) Я планирую поговорить с ЛЭТИ и Политехом. Может там выделят аудиторию. Видеозапись делать можно. Да.
  7. Хочу прочитать курс лекций для тех кто начинает осваивать HLD, ПЛИС и ЦОС в Санкт-Петербурге. Думаю назначить цену в 200 руб за 90 минутную лекцию с одного слушателя. Краткий план следующий. Начать с теоретических основ преобразования Фурье. Рассмотреть математические и радиотехнические особенности, способы реализации. Разобрать вопросы связанные с использованием чисел с фиксированной точкой и реализацией вычислений. Потом взяться за основы SystemVerilog и вообще основы описания "железа" на языках HDL. Затем на примере реализации БПФ изучить SV углубленно. Далее займемся верификацией и, в частности, UVM. Завершить курс синтезом проекта для какой-нибудь из отладочных плат c ПЛИС фирмы Altera/Xilinx и научиться работать с программными продуктами Altera/Xilinx. Хочу оценить с помощью опроса есть ли нынче у начинающих инженеров потребность в таком курсе. Всем спасибо!
  8. Попробуйте удалить Байт Бластер из системы следующим образом: 1) отключите все байт бластеры 2) переведите Device Manager в режим отображения абсолютно всех устройств, в том числе и отключенных как это описано на странице Microsoft http://support.microsoft.com/kb/315539/EN-US 3) удалите драйвера Бластеров, при этом винда должна спросить не хотите ли удалить файлы драйвера с диска - соглашайтесь :) - удалится не оригинал, а копия, которую винда сохраняет в своих "недрах" (образец диалогового окна, к сожалению, сейчас привести не могу) 4а) обновите состояние Device Manager и если драйвер остался, то повторите п. 3 (если в системе было установлено несколько версий драйвера, то при выполнении п. 3 удаляется только последняя и ее подменяет предыдущая версия, поэтому нужно проделать несколько итераций до полного удаления драйверов с диска) 4б) подключите бластер и если винда автоматом поставит драйвер, то повторите п. 3 (значит не все версии драйвера удалились. Для уверенности, что драйвера беруться из "недр" винды, а не из каталога Квартуса можно переименоват каталог Квартуса с драйверами на время чистки) P.S. Пока писал ситуация изменилась, но надеюсь эта инструкция все равно кому-нибудь пригодится :)
  9. Лучше всего начать с теоретической части, чтобы понять что вообще такое БПФ. Например почитайте 6 и 10 главы из книжки Рабинера Л. и Гоулда Б. "Теория и применение цифровой обработки сигналов". В интернете ее легко найти. Важное замечание: там есть примеры аппаратной реализации БПФ, так вот их лучше пропустить т.к. для ПЛИС это адаптировать совершенно нецелесообразно. Сразу могу сказать, что какой-то особой специфики у ПЛИС для БПФ нет. Самая главная специфика ПЛИС в том, что можно нагенерировать параллельно работающих вычислителей столько в ПЛИС влезет. БПФ хорошо параллелизуется. Бабочка, это всего лишь базовый элемент из которого строится БПФ. Только 2-х и 4-х точечная бабочка вычисляется исключительно с помощью сложения и вычитания. Все остальные уже требуют умножителей. Выходы бабочки всегда подключены умножителям, которые умножают данные с бабочки на доворачивающие множители. Так что, если нужно вычислить БПФ с количеством точек не равным 2 или 4, то без умножителей вы не обойдетесь. DSP блоки позволяют повысить тактовую частоту т.к. умножитель на логических ячейках работает медленнее, чем умножитель в DSP. Некоторые вопросы реализации довольно подробно обсуждались в этой теме: Реализация БПФ на ПЛИС. Но читать ее лучше после Рабинера и Гоулда. До амплитуд еще далеко. Вы получаете проекции вектора на оси комплексной плоскости. чтобы получить амплитуду нужно вычислить квадратный корень из суммы квадратов этих проекций: sqrt( Re(Xn)^2 + Im(Xn)^2) Этот квадратный корень есть хорошая такая ложка дегтя в бочке с медом при реализации БПФ на ПЛИС в том случае, если нельзя обойтись просто суммами квадратов для анализа учитывая, что корень квадратный функция монотонная.
  10. Кому интересно - в прицепе плагин для подсветки синтаксиса в Visual Studio 2012 - 2013. Кроме подсветки синтаксиса ничего больше не делает. Пользоваться можно свободно, разумеется, на свой страх и риск :) Плагин автоматически активируется при открытии в Visual Studio файлов со следующими расширениями: *.v, *.sv, *.svi, *.sva, *.svh Многострочные комментарии (с началом "/*" на одной строке и концом "*/" на другой) не поддерживаются - как комментарий будет помечена только первая строка. Еще выделяется несколько ключевых слов UVM. Если найдете ошибки, пишите - исправлю. Если нужно, чтобы плагин загружался для других расширений, пишите - добавлю. Кому интересна подсветка UVM, присылайте список (по одному слову в строке) - добавлю. Для архива MD5 - 11074f8f1b7b84baf00fbdf7d56c9e7d, SHA256 - cf742e9d394ab303a13f0347cec3877b9721a4b80fdb685ba7c5ac86191dea7a SV_Keyword_Highlight.rar
  11. Увы, не поможет. Если проблемы с таймингом, то защититься невозможно - ошибки совершенно непредсказуемы в общем случае. А если и предсказуемы, то практически не поправимы. Ничего кроме устранения проблем с таймингом путем изменения Place & Route, дизайна (например, введение pipeline) или понижения тактовой частоты не поможет. 1) Автомат может оказаться не в том состоянии в самом начале - если не используется сигнал сброса и нет указаний синтезатору обеспечить строго определенное состояние триггеров этого автомата 2) Автомат может оказаться не в том состоянии если он неправильно описан. Все, что находится внутри case и влияет на состояние автомата, в конечном счете, преобразуется в некую комбинаторную логику. Выходом этой логики является значение следующего состояния автомата, которое защелкивается регистрами. Входами для этой логики являются: текущее значение состояния автомата + все сигналы, которые определяют направление перехода (управляющие сигналы). В общем случае, на выходе этой логики может появиться любая комбинация нулей и единиц. Если есть ошибки в описании автомата или "соседняя" логика формирования управляющих сигналов работает с ошибкой, то автомат может попасть как просто в неправильное состояние (т.е. определенное, но не то в которое он должен бы был перейти) так и в неопределенное (в вашем примере State получит, скажем значение 11). Если автомат попал в неопределенное состояние, то дальнейшие переходы будут определяться этой самой комбинаторной логикой, поэтому не зная что там точно насинтезировалось осмысленно предсказать поведение не удасться. "Чтобы продать что-нибудь ненужное, сначала надо купить что-нибудь ненужное, а у нас денег нет" :). Чтобы исправить ошибку ее надо сначала найти. Если ее найти и исправить, то код "восстановления" будет только лишнее место занимать т.к. ничего восстанавливать не потребуется т.к. ошибки не будет. Условия эксплуатации и воздействия, которые должен выдерживать прибор должны быть заранее определены. В рамках этих условий и воздействий нужно обеспечить надежность, стабильность и т.д. и методы обеспечения подбираются под эти условия и воздействия. Когда эти условия и воздейтвия будут выходить за допустимые рамки, то ваш автомат будет далеко не единственным местом сбоя. Подозреваю, что default следовал после всех возможных состояний. В этом случае экономии быть и не должно - доп. состояние требует доп. логики. Вы попробуйте объединить default с каким-нибудь "нейтральным" состоянием, типа IDLE. Вот тогда объем логики должен уменьшится.
  12. А это потому, что конструкция SV, а Вы компилируете ваш файл как Verilog (что, в принципе, соответствует его расширению). :smile3046: Поменяйте настройки компиляции так, чтобы StatisticModule_v3_00.v ISE компилировал как SystemVerilog и будет Вам счастье. :) Дело в том, что конструкция должна быть именно size'( expression ) - т.е. последние скобки обязательны. Если size тоже выражение, то и его придется заключить в скобки.
  13. Конструкция легальная. В ISE не пробовал, а Квартус не жалуется - правда желаемый результат выдает только с последними 2-мя вариантами. Покажите тестовый код и сообщение об ошибке - может действительно где-нибудь ошибка случайно вышла...