Jump to content

    

Aleх

Участник
  • Content Count

    98
  • Joined

  • Last visited

Everything posted by Aleх


  1. Привет! Поставил себе Quartus Prime Lite и ModelSim Altera Starter Edition. Ставил последние версии под линукс убунту, из коробки встало на ура. Квартус работает хорошо, а вот с моделсимом проблемы. Моделсим пытаюсь запустить из оболочки квартуса, для этого в настройках прописал путь к исполняемым файлам. Проект собран, есть тестбенч, все компилируется, т.е. все готово для запуска симуляции. Проблема выглядит так - когда запускаю симуляцию, немедленно вылезает окошко с отсутствием лицензии моделсима. Я искал файл лицензий, но похоже что у квартус-лайта его нет. Качал абсолютно точно - лайт и стартер едишн, ошибки быть не может. Сервер лицензий я искал, но не нашел (раньше ставились отдельно всяческие flexlm и т.д.) В общем, все выглядит так, что симулятор как бы отдельно, а квартус отдельно. Лиц ломать не хочу, мне нужна чистая среда. Вопрос - что делать, как чинить? Может, что докрутить надо в настройках?
  2. Вокруг асинхронных схем больше слухов и мистики, чем реального использования. Микропроцессоры делали и продолжают делать, но только в рамках исследований и диссертаций, т.е. их мало, и никому они не нужны по большому счету. Есть области микроэлектроники, где асинхронная логика очень близка к масспродакшн - к примеру, это контроллеры ШИМ для силовой электроники, где внутри вставлен асинхронный автомат. А есть перспективные области, где асинхра очень и очень востребована, но пока еще не мейнстрим - это криптомайнинг, нейросети, и прочие числодробилки, где нужно не просто потребление или производительность, а их оптимум, который, как известно, находтится при напряжении питания, равном порогу открытия транзисторов. Синхронные схемы при таком питании не работают. В общем, корабли бороздят ... )
  3. Отличный гайд, спасибо! По этому гайду удалось запустить моделсим отдельно, т.е. без квартуса. Из под квартуса по прежнему не работает, но этого и не нужно. Супер!
  4. Дело в том, что "шагов установки" как таковых просто нет, по кр. мере я не нашел ничего похожего на сайте Интела. Есть разрозненная информация на различных форумах, которая только отчасти похожа на проблемы непосредственно с ModelSim. И одной только установкой пакетов там не ограничиваются - нужно что то ковырять в исходниках и пересобирать, необходим откат на старые версии билиотек. По моему опыту, это чревато с проблемами при очередном апдейте системы, ковырять так далеко я не хочу. Убунта кстати 18.04, т.е. не самая новая. Если линканете гайд по "шагам установки", буду очень признателен. А пока повожусь с виртуалкой.
  5. Выбрал именно Modelsim-Altera. Поковырялся в консоли, обнаружил что lmdiag не работает. Оказалось, проблема известная - надо доустанавливать пакеты (lsb и еще по мелочи). Теперь lmdiag тоже запускается, и тоже говорит что нет лицензий. Далее, попытался пустить консольный vsim. Отругался, что не хватает библиотек ... доставил библиотеки и - получил fatal error. Усиленное гугленье показало, что это г-но мало того, что идет на убунте не новее 16, так еще и требует 32 битных либ. Все, финиш, это я уже не осилю, да и ломать систему не хочется - много всего полезного стоит и работает. Уроды, что сказать. Придется виртуалку ставить.
  6. Привет! Я абсолютно точно выбрал стартер едишн при установке. Хотел написать в саппорт на сайте Интела, но там есть чекбоксы только для стандарт и премиум. Лайт версии в саппорте нет )
  7. @KA3AKOB Я на прошлой странице привел ссылку на статьи Лемберского. Чем гадать, почитайте сначала, как другие асинхронные схемы на плис делают.
  8. Не очень понимаю, что именно нужно тс, но обычно асинхронные схемы требуют наличия в базисе RS защелки, и вот здесь то и возникает затык при использовании ПЛИС. Вроде бы эта проблема как-то решается в Зайлинксах - привел ссылку выше, но в тех ПЛИСах, с чем приходилось работать (Альтера преимущественно), RS защелок не было.
  9. Можно спросить у Igor Lemberski , он много лет занимается прототипированием асинхронных схем в ПЛИС. Мы как то общались на эту тему, он утверждал что у Зайлинксов есть подходящие чипы. Впрочем, Лемберский занимается классическими асинхронными схемами, а в указанной статье что то другое имеется ввиду, мне не понятное. Я бы не советовал эту статью читать, слишком старая - написана еще до разработок Варшавского, Сазерленда, Фанта и т.д.
  10. Два черных ящика можно сравнить только по интерфейсам. А два куска кода сравнить ... вообще это называется LEC - logical equivalence check, и для этой процедуры есть специальные тулы (conformal, formality и т.д.). На мой взгляд, в первом посте допущена только одна ошибка - в оригинале сброс асинхронный, а во втором куске кода уже синхронный. В остальном разве только читабельность страдает, как писали выше. А, и наверно tsr-orig это tsr-cmp, опечатка
  11. Привет! Пытаюсь разобраться, как работают спайковые нейросети. Как я понял, срабатывание нейрона - одиночный импульс, фиксированной ширины и амплитуды. Вопрос - что является информацией в таком случае: задержка от предыдущего выходного импульса, задержка срабатывания (от получения входного импульса до выдачи сигнала наружу), что то другое? Ответ найден, всем спасибо
  12. Теперь главное - не понижать частоту. Потому что если период будет больше или равен 22.724, посыпется холд. Такова плата за использование малтисайкла.
  13. Нетлист, как известно, это не sv, а verilog, причем флатованый с точки зрения параметров, дженерейтов и т.д. При конвертации sv->verilog так же флатуются все многомерные шины/интерфейсы sv, c этим ничего не сделаешь. Далее, касательно опций. Не скажу за симплифай (не работал с ним уже лет 15), но старший синтезатор синопсиса (равно как и аналогичный кэденса) имеет ключи, команды и опции, позволяющие делать следующее: 1. флатовать дизайн, начиная с любого уровня иерархии (ungroup) 2. запретить менять список портов конкретного модуля (no_boundary_optimisation) или модуль целиком (set_dont_touch , preserve) 3. запретить пропагировать константы (1 и 0) через логику и - опционально - через триггеры. Опция опасная, т.к. пропагирование констант часто помогает найти ошибку в коде, поскольку тул просто оптимизирует дизайн в ноль :-) Но сталкивался и с таким, когда пропагировать константы просто нельзя - они нужны для работы. 4. запретить пропагировать инверсии через триггеры 5. запретить удалять ненужные и дублирующие триггеры 6. набор правил для формирования имен иерархических модулей (naming conventions) в случае если есть параметры/дженерейты и т.д. и т.п. Это только из того, что вы упомянули в своем посте. Все это есть в старших синтезаторах, и, я уверен, есть и в младшем - симплифае. Надо только поискать в документации. Что касается сборки проекта по частям, он действительно может получиться неоптимальным. Но, никто ведь не запрещает после сборки еще раз натравить на него симплифай безо сяких ограничений, и добиться этой самой оптимальности. К сожалению, не видел, как выглядит нетлист после синплифай. После DC это нетлист на примитивах из generic библиотеки DC. А вот у кэденса (genus) есть опция выписывать не нетлист на примитивах, а полноценный верилог - конструкции assign, always и т.д.
  14. На мой взгляд, малтисайкл ни к чему здесь, а проблема - в фазах клока, поскольку, я так понял, с генератора тактирование подается и на ПЛИС, и на CY7C68013A, причем в ПЛИС явно клок задерживается больше. А лучше бы было наоборот, так что надо очень аккуратно задержать фазу приемного клока в CY7C68013A - пропустить через ПЛИС (взять клок с выхода), или скорректировать внешней RC. И еще, необходимо проанализировать возможности ПЛИС в выдаче сигнала pktend в интервале 0..14.6нс : если разница в репортах между сетап и холд окажется больше 14.6нс, то корректировки фазы недостаточно, и придется увеличивать период IFCLK. + Можно еще попробовать подвинуть фазу клока выходного триггера ptkend - вроде бы современные ПЛИС допускают небольшие манипуляции с деревом клока (на этапе мэппера). Но это лучше почитать в документации. И еще замечание. Задержку внешнего преобразователя неверно считать как 2.5нс одинаковой и для сетап и для холд. Т.е. по сетап наверно правильно, а вот по холду лучше брать более жесткое (меньшее) значение, скажем 1.5нс (если в даташите не указан разброс задержек) - так гарантированно не промахнетесь.
  15. Вопрос не понятен. Судя по вейвформам, переходные процессы (окно между hold и setup) сдвинулось на один период вправо, и данные пришли во втором такте, а не первом. Получилось что то около 3/4 периода сетап и около 1/4 периода холд (по скринам точнее не скажешь) - соотвествует требованиям задания констрейнтов set_output_delay. Итого, констрейнты, включая multicycle 2, выполнены, все в порядке. Другое дело, что судя по скрину данные (data required) должны придти в первом такте а не втором ... но тогда малтисайкл использовать нельзя!
  16. Я тоже долго путал, пока не обьяснили. Но если заглянуть в книжки, то там все наглядно написано. Не знаю как запостить сюда страницу, вот копипаста из Constraining Designs for Synthesis and Timing Analysis (жирным выделено важное). Сорри за стену текста, можете сами эту книжку посмотреть For the purpose of this section, we will assume that both the launching device and the capturing device are triggered by the same clock. The implication of different clock frequencies will be discussed in Sect. 12.4 . A clock waveform is depicted in Fig. 12.3 . Timing analysis will assume that the launching fl op will launch the data at edge A . For setup analysis, it will consider that the data will be captured at the edge B . So, setup relation is analyzed between edges A and B . Use of -setup switch causes the capturing edge for setup analysis to be moved further to the right – away from A to C , D, etc., depending upon the number of cycles specifi ed. Let us assume that the capturing edge for setup has been moved to edge D , through -setup switch. For the purpose of hold analysis, the timing analysis tool considers the immediately preceding edge at the capture fl op (when launch and capture clocks are the same). Thus, hold analysis will be considered using the edge C for capture. Use of -hold switch causes the capturing edge for hold analysis to be moved towards left, to either B or A – depending upon the number of cycles speci- fi ed. The general practice is to restore the hold check back to edge A . If the hold check is not brought back to edge A , there might be buffers inserted in the path to ensure some delay. These buffers will take up silicon area as well as power . We have assumed above, the setup edge was moved to 3 cycles (so that it reached edge D ). The hold edge automatically moved to edge C (the immediately preceding edge). Now, in order to bring it back, it has to be moved back by 2 cycles. This can be achieved through use of -hold switch. In order to move the hold check edge back to A , we have moved it by 2 cycles. It has now come back to the same edge as launch edge , i.e., at 0 th edge (with launch edge being considered Origin). It should be noted that we are now talking about two different numbers. A hold multiplier number 2 which specifi es the number of edges by which the hold edge needs to move towards left. This is the number that is speci- fi ed in the set_multicycle_path with -hold. And, another is number 0 , which speci- fi es the actual edge number, where the check is happening. These two numbers are often a source of confusion during conversation. When you are talking about hold edge – specially in the context of multi cycle path – make sure that all the people involved understand, whether the number being mentioned is the “hold multiplier ” the number by which the edge will move towards left, or the edge number, where the check will be performed. For the waveform shown in Fig. 12.3 (assuming setup number of 3), edge A corresponds to a hold multiplier number of 2 , edge B corre- sponds to a hold multiplier number of 1 , and edge C corresponds to a hold multiplier number of 0 , in the context of the set_multicycle_path defi nition. -setup switch specifi es the period to which (not “by which”) the setup capture edge will move to the right. Thus, a specifi cation of N means move to N th period. This is different from move by N cycles. The -hold switch on the other hand speci- fi es the period by which (not “to which”) the hold capture edge will move to the left. If setup edge was moved to N th edge, the hold edge is automatically moved to N–1 th edge. In order to restore it back to its original location, the hold check needs to be moved backwards by N–1 cycles, so that it goes back to “ 0 ” edge. Thus, -setup switch will move the capturing edge for setup. Simultaneously, it also moves the capturing edge for hold. After that, another set_multicycle_path might be needed with -hold switch to restore the hold check back to the original edges. Multi cycle path specifi cations are usually found in pairs of -setup and -hold . If the -hold specifi cation is not given, the hold edge remains where it had got moved due to setup edge movement.
  17. Это вполне обьяснимо. set_multycycle_path -setup сдвигает и сетап и холд вправо по оси времени на четное число тактов, а set_multycycle_path -hold сдвигает только холд, и только влево (т.е. в обратную сторону) по оси времени. Поэтому констрейнт set_multycycle_path -setup N образует окно, где переходной процесс может начаться в момент времени (T-1)*N (проверка холд, N- число тактов), и заканчивается в момент T*N (проверка сетап). а связка set_multycycle_path -setup N set_multycycle_path -hold [N-1] образует окно, где переходной процесс может начаться в момент времени 0 (проверка холд), и заканчивается в момент T*N (проверка сетап, N- число тактов). В первом случае (set_multycycle_path -setup N без ключа -hold) фиттер должен сделать так, чтобы самый длинный путь был не больше T*N, а короткий не короче (T-1)*N - и вот здесь то фиттер и начал спотыкаться. Почему? В эсике тул просто бы навставлял буферов и элементов задержки, а в ПЛИС такой фозможности нет и фиттер разводит те ресурсы что есть. Отсюда и большой рантайм. В вашей задаче ключ -hold конечно надо использовать.
  18. -from LaunchClk -through path_to_register/Q -to CaptureClk Раз регистр малтибит, то лучше set_multycycle_path -setup 2 использовать, а не фалзпас - так мэппер сильнее зажат, и постарается все регистры рядом разместить. Если же без разницы, то можно и set_false_path использовать - саммый расслабленный вариант для синтезатора и мэппера.
  19. Вместо ATPG - функциональные тесты, как и написал @honinbo. Конечно, покрытие низкое, но если чип с браком, то сыпется сразу куча мест. Память - самое уязвимое в чипе, ее проверять обязательно: вставляется MBIST, управляется через JTAG. Boundary scan - весьма желательно иметь, т.к. с пайкой косячат часто, особенно при ручном монтаже малых серий. Итого, мы экономили в основном на ATPG, ряд микросхем, что я делал, был без памятей, но почти везде был boundary scan. Поскольку с рекламациями тоже приходилось иметь дело, скажу следующее: boundary scan очень и очень себя оправдал, сами микросхемы браковались в основном по тестам памяти (сбой функционального теста при работающей памяти - редкость), но - скрывать не буду - было пару раз такое, что поступали рекламации по чипам, которые прошли отбраковку. Впрочем их могли и банально перегреть при ручном (де)монтаже, там история темная была. Другими словами, все зависит от конкретной ситуации: где то ATPG обязателен а где то достаточно и функциональных тестов. К примеру, некоторые продают не отдельные чипы, а собранные модули - там все значительно проще: микросхемы дополнительно тестируются в системе, покрытие очень высокое можно получить, да и периферия обычно заранее известна и не меняется. А если продавать не модули, а целые системы/приборы в сборе, то тестирование чипов на стороне разработчика и еще глубже получается. Как то так.
  20. Коллега имел ввиду именно задание тестов через скан, а не управление мбистом: > The ATPG tool does not test the internals of the RAM/ROM, although MacroTest (separately licensed but available in the ATPG tool) lets you create tests for small memories such as register files by converting a functional test sequence or algorithm into a sequence of scan tests.
  21. @MickeyMouse Так можно делать, но время тестирования памяти получится чудовищно большим. Представляете, сколько необходимо тестов памяти? Я как то заглянул в исходники такого теста и насчитал аж 83 пунка - бегущие единицы, 0xAAA-0x5555 и т.д. - по всем адресам. Если каждй тест пускать последовательными записями, работать будет оооочень медленно. Когда то на заре, я написал тест JTAG boundary scan, который дергая лапки микросхемы считывал содержимое NVRAM, NAND флеша, и в довесок еще и SPI памяти. Почувствовал себя крутым, но .. ни разу не пригодилось, слишком медленно работало :-) Это из той же серии - круто, но бестолково.
  22. @Dantist2k17 Флоп с разрешением имеет две схемы замещения - флоп с мультиплексором в обратной связи, и флоп с клок-гатором в цепи управления. Поэтому если не поддерживаются формулы в next_state, можете попробовать вставить формулу в clocked_on clocked_on : "CLK * EN"; а еще лучше, купите DC.
  23. @MickeyMouse Вы не все верно поняли. 1. ATPG это скан-цепи, вставляемые в синтезируемую логику. Блок SRAM, очевидно, не синтезируемая логика, а хард-айпи, скан цепями его не прошить. Что имели ввиду TSMC, я не знаю, надо читать их доки. 2. В чипе даже средних размеров делают не одну, а сотни скан цепей, поскольку иначе получим проблемы с покрытием и длинной цепей. Более того, используют алгоритмы сжатия, снижая количество цепей до 1-2 десятков. Очевидно, что через JTAG более одной последовательной цепочки дергать не получится, поэтому нужно выводить интерфейс на тестовые пины. Часто ATPG прошивают уже поверх вставленного JTAG. p.s. Много лет назад я участвовал в проектировании пары маленьких микросхем, у каждой была всего одна скан-цепь, и доступ к ней через JTAG. Изврат жуткий. Ведь к каждому сгенеренному вектору добавлялась инструкция житага, чтобыэтот вектор задвинуть, а в считанном векторе надо было вычесть несколько бит. К тому же, приходилось специальным образом донастраивать генератор, чтобы векторы задвигались внутренними сигналами тап-контроллера житаг, которые дергаются несколько иначе, чем принято в ATPG. В общем, так делать не надо.
  24. @MickeyMouse ATPG предназначено для проверки логики и флопов/латчей, а не памяти. И работает по другому принципу - тесты задаются не внутренним автоматом, а снаружи, с тестера. При этом, думаю, можно совместить управление MBIST со сканами: организовать для MBIST последовательный тестовый порт и подключить его к одной из цепочек. Тогда управлять MBIST можно будет задвигая/выгружая векторы с тестера. Но, я далеко не гуру в этом вопросе, лучше спросить у @topor_topor , он вроде часто чипы с DFT делает. С Ментором нет, не работал. Мне вообще чипы с DFT почти не попадались. Избыточно это: больше места, выше потребление, и т.д. - изделие проиграет конкурентам.
  25. DFT для памяти называется MBIST, это некая синтезируемая (soft-IP) тестовая структура, встраивемая в разрыв интерфейса памяти. Для управления использует собственный интерфейс, для которого еще нужен контроллер и тестовый порт, либо просто тестовые выводы микросхемы. У кэденса эта штука вставляется синтезатором (Genus), и есть еще отдельный тул у Ментора. Еще, можете этот MBIST написать сами: ничего сложного, по сути - просто автомат записи/чтения со сравнением результата и тестовым доступом к регустру команд и чтению статуса (результата теста). Итого, начните с изучения документации Генуса (он у Вас есть, если не путаю).