Перейти к содержанию
    

nice_vladi

Свой
  • Постов

    383
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные nice_vladi


  1. У vsim есть ключик -G для переопределения всех параметров с таким именем в исходника, либо ключик -g, который перреопределяет параметр с таким именем в модуле верхнего уровня

  2. 2 hours ago, turnip said:

    Во-первых по цене кусается. Во-вторых не хочу привязываться к конкретной плате\производителю чтобы можно было собирать из доступных на рынке продуктов.

    Цена вполне гуманна для готовой платы с СнК на борту.

    Вы в любом случае будете привязаны к железу. К stm32, к разъемам HDMI/VGA, производителю ПЛИС и т.д.... Можно попробовать отвзятаться от железа и производителя в каких-то пределах, но это точно не про ПЛИС. Везде и всегда вы обязаны будете пользоваться софтом производителя для компиляции, прошивки и отладки. Разве что для симуляции есть open-source решения, да и то, они пока оставляют желать лучшего.

    При использовании СнК у вас есть ПЛИС на которой вы вольны творить всё, что угодно, в т.ч. процессор и есть настоящий процессор, который может взять на себя роль всех остальных устройств на вашей картинке.

    Ну, либо берет кучу stm32 и упражняетесь. Результат не гарантируется) Тем более, если вы хотите +- скоростные интерфейсы между всеми устройствами системы.

    ЗЫ. В таких темах регулярно появлялся @iosifkи доступно разъяснял разницу между нацеленностью на результат и нацеленностью на процесс.

  3. Вообще, т.н. hardware in the loop имеет место быть. Например:

    https://inspirehep.net/files/06c877a9ec568472aac84923dd0056a3

    Правда затраты времени на организацию всего этого и написания тестов... Разве что для проектов с очень длительным сроком жизни. Что бы время, потраченное на организацию тестов и стенда равномерно размазалось на много лет:biggrin:

  4. 55 minutes ago, Александр77 said:

    Прошу помочь с пониманием сути проблемы и главное с ее решением.

    Мне кажется RTFM:

    https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/hb/cfg/cfg_cf51001.pdf

    https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/hb/cfg/cfg_ch11_vol2.pdf

    Ну и с осциллом смотреть, что там на конфигурационных ногах творится. Тем более, они у вас заведены на резисторы - можно удобно ткнуться щупами. Или даже распаять проводки и на многоканальном осцилле смотреть прям как в мануале - параллельно) Ну и JTAG тоже посмотреть, форму импульсов особенно.

  5. UPD:

    Есть обновление. Итак:

    1. В настройках IP core снял чекпоинт SGMII PHY mode. Т.е. физика включается в режиме MAC.

    После этого IP core начало корректно показывать status_vector.

    2. Процессор начал правильно определять скорость, состояние линка.

    Но при включении линукса с отключенным кабелем всё равно надо перезагружать интерфейс. Однако, при перепрошивке всё работает нормально. В общем, всё заработало почти так, как требуется.

  6. Всем здравствуйте,


    Поднимаем ZynqMP. Плата ZCU102 rev 1.1. Нужно подключить один из трансиверов SFP коробки к процессору через EMIO. С этим особых проблем не возникло, использовали мануалы от Xilinx. Поднялся трансивер, поднялся интерфейс в процессоре.

    Есть следующие ограничения:

    1. Интерфейс работает только в режиме 1G, поэтому процессору нужно каждый раз это указывать. Команда из мануала от Xilinx:

    ethtool -s eth0 speed 1000 duplex full autoneg off

    Т.о. автосогласование не работает. В том числе после переподключения кабеля, нужно заново пинать процессор делая вкл/выкл автосогласование.

    2. Следует из (1) при перепрошивке ПЛИС нужно опять пинать процессор.

    Всё это очень неудобно для разработки. Может быть, кто-то сталкивался и знает, как научить linux понимать автосогласование через EMIO?

     

    Что сделано:

    IP ядро PCS/PMA 1G/2.5G в режиме SGMII, Autonegotiation включено. Режим физики SGMII PHY mode. На процессор заведены MDIO и an_interrupt.

    status_vector IP ядра почему-то всегда показывает скорость 00 (10 Мб), вне зависимости от состояния подключенного линка. an_interrupt поднят в 1, процессор, почему-то, его не сбрасывает. Это то, что увидел chipscope.

    Процессор видит физику по MDIO и может читать/писать регистры IP core.

     

    ЗЫ. Добавленные патчи:

    0001-net-xilinx_phy-Add-flag-to-reset-after-clock-enable.patch

    0002-net-macb-Handle-phy-reset-for-PCS-PMA-IP.patch

  7. 8 hours ago, AlexRayne said:

    Если ктото ведает достойный UI для гита - подскажите?

    Мне нравится Sublime Merge. Использую вместе с редактором Sublime Text. У них друг в друга интеграция есть - оч удобно

  8. Итак, закончил упраженения с новой вивадой. Была установлена 2020.2. В ней создан проект с block design, ip. Всё это помещено в git. Опытным путем выяснил, что для корректной сборки проекта достаточно оставить в нём .xci файлы. В реузльтате получил вот такой gitignore:

    netlist/*.cache
    netlist/*.hw
    netlist/*.gen
    netlist/*.runs
    netlist/*.sim
    netlist/.Xil
    netlist/*.ip_user_files
    netlist/*.srcs/sources*/bd/**
    !netlist/*.srcs/sources*/bd/**/*.xci
    netlist/*.srcs/sources*/ip/**
    !netlist/*.srcs/sources*/ip/**/*.xci
    
    .ioplanning
    *.jou
    *.log
    
    sim/**/work
    sim/**/*.ini

    Единственное, что стало хуже - после выгрузки чистого проекта из git, Vivado оооочень долго его открывает. Последующие запуски - нормально.

  9. 12 minutes ago, fguy said:

    В 2021.1 оставил папку srcs, файл с проектом xpr и сое файл от фира - проект открылся без ошибок

    ...

    В 2021.1 в отличии от 2020.2 в новый формат проект можно перевести при конвертации из предыдущих версий вивад

    Что за праздник такой?) Поставлю качаться!

  10. 21 minutes ago, fguy said:

    Начиная с вивады 2020.2 она хранит весь проект в папке <имя проекта>.srcs без мусора, образующегося при синтезе и далее (он вынесен наконец то в отдельную папку). Так что хранить можно ее в гит полностью + сам файл проекта. Такой вариант позволяет сразу открыть проект в первозданном виде без затрат времени на восстановлении из скриптов - у него только один недостаток - это новые версии вивады с кучей других косяков

    Как в 2020.2 пробовал. Без папок .gen и .ip_user_file проект не разворачивается - сыпет ошибки. Возможно, я где-то ошибся... Не подскажете полный алгоритм, даже если звучит очень просто?

    43 minutes ago, RobFPGA said:

    Но  тут проблема может быть в том что это не может гарантировать целостность проекта и результат  сильно зависит от стиля и организации в работе  с проектом.   

    Да, проблема. Хочется однозначно и железно всегда складывать в гит определенный набор файлов, который обеспечит развертывание проекта "с чистого листа". Пока, как писал выше, приходится складывать огромное количество файлов. Особенно при наличии нескольких крупных IP cores.

    Лирика: в Quartus я точно знал, что сложу .qsys, .qsf, .sdc файлы, и при разворачивании проектов получу полностью готовое окружение. В vivado могу только мечтать и придумывать костыли.

  11. 34 minutes ago, dxp said:

    А bd разве не представляет собой ординарный tcl скрипт (простите мою серость, как-то до сих пор удавалось обходиться без bd, но есть желание и эту технологию подтянуть)? У нас и IP тоже хранятся под гитом как tcl, который и является исходником. Ну, это как вариант. Сейчас перешли на более продвинутый путь, когда и tcl для корки генерируется из параметров для оной, хранимых в более удобном (YAML) формате (вот этот файл и идёт под контроль, а тот же tcl для корки - это продукт генерации).

    БД можно сохранить в .tcl. Но потом это нужно как-то развернуть и добавить в проект сам .bd и еще кучу файлов, которые будут сгенерированы после его синтеза. Я пока на этом месте застрял)

  12. Апну тему. Пытаюсь изменить привычки и начать работать со скриптами, вместо складывания в гит кучи файлов вивады. Столкнулся с несколькими непонятностями:

    1. Как правильно добавлять и описывать block design в проекте? С учетом того, что всё хочется делать в скриптах, раз уж взялся. Кстати, ни один внешний фреймворк или мануал не учитывает bd файлы, насколько я вижу.

    2. Что с автоматизацией? Имею в виду, нет никакого желания перед коммитом делать write_*_tcl, потом разбираться, куда сложились эти файлы и т.д. В общем, как минимизировать ручной труд при использовании вивады со скриптами?

     

  13. 1 minute ago, Maverick_ said:

    Это я сделал в первую очередь...

    Тогда не знаю, гадать можно долго. Я бы просто пересоздал проект с самого начала, если уж совсем затычная ситуация.

  14. 26 minutes ago, Maverick_ said:

    может подскажете в чем проблема?

    PS Ошибки не понимаю - не знаю как их исправить...

     

    Попробуйте зайти в настройки проекта и ручками удалите ненужны .ip/.qsys и остальные файлы.

    ЗЫ. Project -> Add/Remove files in project -> выделяете ненужные -> Remove -> (!важно)OK

  15. 18 minutes ago, RobFPGA said:

    При такой "каше" первым  делом надо  пересматривать  структуру  дизайна, а не латать "тришкин кафтан" заплатками.

    +++

    Пока дизайн не очень большой и сложный, я бы перетряхнул всё с чистого листа. Изначально задавшись ограничениями:

    - на передельную частоту: скажем, 200 МГц, хотя и это для циклона5 не сильно комфортно

    - на концепцию использования тактовой частоты: только положительный фронт, одна тактовая в проекте, в случае необходимости понижения - использовать clock enable

    Ну и как следует отсимулять всё это.

    7 hours ago, Мур said:

    Имею право разделять RAM на две независимые(200 и 100) парадигмы, где одна обслуживает скоростную шину, другая в сервисе SPI

    Тогда соблюдайте парадигму: для 200 все сигналы формируйте на 200, для 100 - все сигналы на 100.

    7 hours ago, Мур said:

    Отрицательный фронт(раньше в IP его можно было выбирать) взят опытным путем, поскольку с прямым он тормозит в TQ в два раза!

    Нужно понимать, как он соотносится с остальными сигналами в дизайне. Да и слепо верить TQ не стоит. Он показывает только то, о чем вы просите. Где-то у @des00 были годные статьи на эту тему.

    7 hours ago, Мур said:

    Комбинаторика перед регистром - это нормально, тем более она есть быстрый мультиплексор(и регистр на выходе!)

    Зацепился взглядом за то, что вы входной сигнал (с пина) протащили через логику и только потом щелкнули в регистр. С учетом того, что у вас 100+ МГц в дизайне, я бы не стал так делать.

    7 hours ago, Мур said:

    С wt_s  не смотрел, поскольку в TQ его нет. Но за это спасибо! Буду внимательнее...  (Порт В  там как раз 200МГц!)  Так что все тут верно..

    Он есть, просто был очень глубоко в списке слаков. По умолчанию TQ показывает только первые 200 худших путей.

     

    ЗЫ. Либо, если "и так сойдёт" и не нужно будет всё это развивать и поддерживать, просто забить на все предупреждения TQ. Мб и не имеет смысл тратить время на перетряхивание проекта о котором больше вы никогда не вспомните...

  16. 13 hours ago, Мур said:

    Тоже решил заглянуть, проходя мимо. Развернул проект - не нашел слаков, связанных со счетчиками. Только куча addr_mem_b[...], связанных с разными тактовыми доменами и т.д.

    А зачем на 200МГц по отрицательному фронту какие-то данные перекладывать? Там такая анархия творится... Мне кажется, дело не столько в счетчиках, сколько в этом. Перейдите в единый тактовый домен, уберите работу по заднему фронту тактовой.

    ЗЫ.

    Во всех RAM на порт А подана тактовая 100 МГц, а addr_mem_b защёлкивается на 200 МГц.

    mem0: RAM2P
    	PORT map	(
    		address_a		=>		addr_mem_b,
    		address_b		=>		adr_b,		--BUS
    		clock_a			=>		clk100_s,
    		clock_b			=>		nlk200_s,--clk200_s,	--clk200_s,	--BUS
    		data_a			=>		DATAspi_b,
    		data_b			=>		dat_b,		--BUS		
    		wren_a			=>		wsw0_s,
    		wren_b			=>		ww0_s,		--BUS
    		q_a		 		=>		rim0_b,	
    		q_b				=>		bus0_bus			--BUS
    	);
    ...
      ...
      aaa: process (clk200_s)
    begin
    	if clk200_s'event and clk200_s = '0' then
    			addr_mem20t_b	<= addr_mem200_b;--тут конвейер по адресу
    			addr_mem2tt_b	<= addr_mem20t_b;
    			addr_mem_b	  	<= addr_mem2tt_b;
    			
    	end if;
    end process aaa;

    Тоже самое с "address_b => adr_b,        --BUS". Входной сигнал через комбинаторику засовывается в порты RAM на 200 МГц.

    Тоже самое с сигналом wt_s - формируется на 200 МГц, используется для записи в порт RAM, работающий на 100 МГц

  17.   

    15 hours ago, TheMad said:

    Сие мне неизвестно, но не может быть больше 5 МГц. А ещё судя по длительности импульса и потреблению, а также по тому что во встроенных АЦП в процах признаком хорошего тона является выкидывание парочки первых результатов можно предположить что тактовая АЦП находится в пределах 0.5-1.5 МГц.

    А на картинке импульса с конденсатора какая цена деления по оси Х?

    Объясню: тоже видел спектрометр на детекторе мощности. Примерно такая же схема, немного больше рассыпухи. Так вот, в нём импульс приходил на АЦП с частотой 1 МГц. И из-за маленькой длины импульса АЦП не всегда "попадало" на импульс. Период тактовой АЦП 1/1е6 = 1 мкс. Если пик импульса, приходящего на АЦП короче периода тактовой АЦП, то АЦП просто физически не может его всегда правильно оцифровывать, оно не видит пик.

    В вашем случае, для тактовой АЦП 500 кГц (худший случай) длина импульса должна быть не менее 2 мкс.

  18. Здравствуйте,

    Если аналоговый тракт в порядке - надо грешить на цифру.

    Осциллограмы импульса - это входной импульс? Или тот, который уже на входе АЦП?

    Какая тактовая у АЦП?

  19. Уже не первую вакансию вижу, где одновременно с требованием опыта работы 3+ лет предъявляют требования к оценкам в дипломе. Всегда думал, что при наличии релевантного опыта работы по специальности в диплом универа вообще никто никогда не смотрит. Это прям требование работодателя? Либо какая-то формальность от вашей фирмы?

×
×
  • Создать...