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

Intekus

Свой
  • Постов

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

  • Посещение

Репутация

0 Обычный

Информация о Intekus

  • Звание
    Местный
    Местный

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array
  1. WSL не пробовал. а) WSL - это от 10-ки и дальше, а хочется сборки под Windows 7. б) Как понял, WSL - это опять-таки с компилятором от Студии. ЗЫ: может, кто-то посоветует некую статью / цикл статей по теме самостоятельной сборки софта из исходников (и не только под *nix-системами)?
  2. Здравствуйте! Возможно, вопрос ближе к подфоруму "Документация" (а по сути он вообще программистский) - в таком случае прошу перенести его туда. Есть опыт использования Doxygen для C/C++ кода, решил применить его и для Verilog. Но в основной версии Doxygen поддержки Verilog (в отличие от VHDL) нет. Есть патч, и даже есть форк Doxygen, где этот патч уже интегрирован: doxygen-verilog (https://github.com/avelure/doxygen-verilog). Но выложен только в виде исходников. Самостоятельная сборка софта - относительно новая для меня область, и, видимо, неких базовых знаний в этой сфере мне не хватает. Поэтому прошу помощи, и возможно, некоторые вопросы ниже окажутся некорректными. На машине нет Visual Studio, и ставить её только ради этого не хочется, поэтому выбрал собирать проект в MinGW. На другой машине, на которой предполагается экспериментировать со сборками, установлена Windows 7, поэтому от MSYS2 отказался: современные её версии требуют Windows от 8.1. Мои действия: Загрузил исходники doxygen-verilog, Cmake, MinGW-w64, unxutils (в соответствии с попавшейся на глаза статьёй https://doxygen.netserv.ru/rukovodstvo/instalyatsiya/kompilirovanie-iz-iskhodnikov-v-windows.html; официальную https://www.doxygen.nl/manual/install.html увидел только позже), libiconv, python. Ко всему могу предоставить ссылки, откуда грузил; не привожу сразу, чтоб не перегружать ими пост. QT грузить не стал, т. к. из опций CMake-файла подумал (видимо, ошибочно), что можно отказаться от пересборки фронтэнда Doxygen. Всё установил, прописал всё необходимое в переменную PATH (где это не сделалось автоматически) Разархивировал исходники doxygen-verilog, создал каталог build, вошёл в него, ввожу "cmake -G "MinGW Makefiles" .." Ругается на на то, что не может найти пакет Iconv (и на несовпадение имени этого пакета, но с этим вопрос решил). Нашёл жалобы на похожую ошибку: не найден ICONV. https://github.com/doxygen/doxygen/issues/6248 и https://github.com/doxygen/doxygen/issues/6786 . Честно говоря, разобрался их в сути не очень, но комментирование строк 129-133 в FindIconv.cmake и дублирование строк if(NOT ICONV_DIR) set(ICONV_DIR "${CMAKE_SOURCE_DIR}/winbuild") endif() в CMakeLists.txt из ветки "if (WIN32 AND NOT MINGW)" в ветку "if (MINGW)" вопрос решили. Теперь CMake успешно отрабатывает, но при запуске последующего make на одной из машин идёт серия ошибок abnormal program termination C:\Users\User\AppData\Local\Temp\make94602.sh: fork failed: no error [1] А на другой машине (уже с Windows 10) - серии ошибок вида qtools\qcstring.cpp:346:24: error: cast from 'char*' to 'long int' loses precision [-fpermissive] 346 | result.resize( (int)((long)to - (long)result.data()) + 1 ); | ^~~~~~~~" Собственно, вопрос, что мне следует делать дальше? На той машине, где пишет об ошибках QT - загружать QT (нашёл по этому поводу https://habr.com/ru/articles/709064/)? А что делать там, где "fork failed: no error"? Может, следовало попробовать другую среду сборки - старые версии MSYS2, например? Или Cygwin (а как в нём правильно выбрать на этапе установки, какие пакеты ставить)? Или всё-таки Visual Studio, не очень новую версию, ещё не требующую активации через аккаунт? Или поставить виртуалку с какой-то версией Linux и пересобрать там (а точно ли получится версия для Windows или как это задать)?
  3. Посмотрел генерируемый iMpact файл mcs - по-моему, там расположена вся необходимая информация, так что дополнительных записей в некие регистры, о которых я спрашивал ранее, не нужно. Возник следующий вопрос, отчасти по теме дистанционного обновления прошивок. В "Virtex-5 FPGA Configuration User Guide" (ug191.pdf) на стр. 153 внизу встретилась фраза "Fallback is disabled if AES is enabled and for Slave SelectMAP mode." Верно ли я понял, что загрузка в аварийную прошивку в случае ошибки при загрузке основной (механизм "Fallback MultiBoot") недоступна в варианте конфигурации Slave SelectMAP (даже для нешифрованных прошивок)? Т. е., если конфигурирование сделано по схеме Slave SelectMAP, то, чтоб воспользоваться загрузкой в аварийную прошивку при сбое, необходимо выбрать другую схему конфигурирования (а значит - и физически переделать печатную плату)?
  4. Выбрать получилось, благодарю! Правда, потребовался вариант с несколькими ревизиями. А что по второму вопросу, на счёт записи особых регистров (USERCODE, например)? Есть они в Platform Flash XL? И возник ещё один вопрос: при выбранном варианте iMpact запрашивает начальные адреса ревизий; их лучше указать ровно по границам четвертей, чтоб иметь возможность выбирать нужную ревизию исключительно двумя старшими битами адреса - верно?
  5. Возникла задача, похожая на сформулированную автором темы. А именно: заливать в Xilinx Plastform Flash XL прошивку для Virtex 5, действуя из самой ПЛИС через штатные ноги связи со флэш (подключение в режиме slave SelectMAP). JTAG при этом доступен только до ПЛИС, но не до флэш. Посему, вопросы: 1) Как вообще сгенерировать mсs-файл для Platform Flash XL? В Impact 14.7 всё так, как описано в UG161, список доступных устройств заканчивается xcf32, xcf128 там просто нет. 2) В UG161 (Xilinx Platform Flash PROM User Guide) описано множество специальных регистров во флэш, которые нужно записывать при записи в неё прошивки. А в DS617 (на саму Platform Flash XL) они не упоминаются. Нужно ли что-то кроме самой прошивки записывать в исходно чистую флэш, чтоб с неё загрузиться? С тем, использовать ли Microblaze + LogiCORE IP XPS Multi-channel External Memory Controller или же изобретать велосипеды на КА - ещё предстоит разбираться.
  6. Получается, что это решение отпадает. Его разработчики давно и плотно сидят на 11.6, на машинах, на которые они ставят, по болшьей часли либо не программируют ПЛИСы, либо используют Altera, ByteBlaster'ы для которых, видимо, не конфликтуют. Поговорить попробуем. А что посоветуете из средств анализа изменений в системе (как понимаю, в первую очередь - реестра) в ходе установки программ? Похоже, откатывать триал - представляется самым жиззнеспособным решением.
  7. Здравствуйте! На машине (Win7 64) был установлен Xilinx ISE 14.4 с комплектными драйверами Xilinx Platform Cable USB II. Они основаны на WinDriver v10.21. На ту же машину потребовалось поставить специфический заказной софт, использующий WinDriver v11.6. Идущий с ним в комплекте - оказался пробной версией (предупреждение об этом выдавалось на другой машине, с WinXP, на которой устанавливался тот же софт). Месяц истёк. Заказной софт продолжает успешно использовать WinDriver, а вот iMPACT - больше не видит кабель, жалуясь в логе на отсутствие работающей лицензии на WinDriver. 1) Можно ли где-то достать нетриальную "бинарную" (т. е. позволяющую запуск использующих их драйверов устройств, а не их разработку) версию WinDriver 11.6 (или новее)? Как я понял, необходимый комплект состоит из windrvr6.inf и windrvr6.sys, которые ставятся при помощи wdreg.exe, а также библиотеки вида wdapi1021.dll. 2) Чем могут отличаться способы использования WinDriver в этих случаях? Коллеги подсказали, что что-то может быть различно в самих основанных на WinDriver драйверах - в вызовах каких-то инициализирующих функций. 3) Если пункт 1) невыполним - возможно, WinDriver 11.6 или более поздний используется в какой-то новой версии драйверов Xilinx Platform Cable USB II? Как их загрузить? Бегло поглядев сайт Xilinx, чего-то подобного я не нашёл; сложилось впечатление, что необходимо ставить Vivado Lab Edition - а его, как минимум, нет для 32-разрядных систем (а починить хотелось бы помимо упомянутой и машину на WinXP). 4) Если и это не подходит - можно ли как-то "объяснить" iMpact использовать WinDriver v10.21, если он установлен одновременно с 11.6? 5) Какие ещё способы решения возникшей задачи существуют? "Снять" чем-то систему, раз в месяц откатывать изменения и переустанавливать триал? Посмотреть 11.6 и более поздние нетриалы в закромах?
  8. То, что пришлось столкнуться с подходом со стороны поставщиков ТТ вида "Никакой документации подробнее рекламной мы не предоставляем. Хотите - пришлите детальное ТЗ, мы "за много денег" разработаем Вам систему и поставим. Но никакой ответственности и в этом случае на себя не берём: испытывать поставленное Вы будете уже сами." А такой подход нас не устраивает :) Так что если у кого-то есть документация или рекомендации по более открытым поставщикам - буду рад, если поделитесь. Понятно, благодарю, продолжим двигаться в этом направлении.
  9. А есть ли у кого-то опыт применния тепловых трубок в качестве нелинейного элемента теплопередачи? То есть примерно так: есть аппаратура в термокожухе, свазанная с наружным радиатором исключительно тепловыми трубками. Когда система работает под полной нагрузкой - тепло через небольшое сопротивление ТТ активно передаётся на мощный радиатор; в тоже время, если вся система выключена и остыла до -30 - её можно подогревать до рабочих +5 относительно небольшим нагревателем, т. к. пока тёплый конец ТТ не прогреется до +30 - испарение не начнётся, и тепло будет сбрасываться на радиатор медленно - через высокое (сответствующее теплопроводности конструкции) сопротивление ТТ вне рабочего режима.
  10. Благодарю Вас за столь подробные ответы! Жаль. По какой именно команде с интерфейса? Там только чтение, запись и обновление. "As is, понимаю". Тем более, что, по Вашим словам, на докуменирование и так потрачено много сил и времени. Но, ещё - в документации совсем ничего нет про теги команд. Они упомянуты в качестве входов - и всё. Внутри есть какой-то out-of-order при формировании конвейера? Как именно он работает? Про "ИСПОЛЬЗУЕМЫЕ" - очень ценное замечание. Нашёл даташит на него, но сходу разобраться тяжело. Что такое DMA - представление имею, но реализовывать не приходилось; по ощущению - не факт, что в актуальной разработке оно понадобится. А что вообще порекомендуете посмотреть по теме внешней динамической памяти и использования её в проектах без привязки к процессорным ядрам, шине и т. д.? И - то Altera; у Xilinx, судя по результатам поиска, термин "sgdma" используется только в контексте сетевых интерфейсов. Разобрался. Там сначала не уловил несколько другое - что при чтении оно срабатывает с задержкой в 2 такта. На нижней его половине - ещё понятно. На верхней - не совсем. Т. е., получается, что бурст рвётся быстрее и надёжнее не по приходу новой команды (PRECHARGE), а по сигналу запрета записи? Хорошо, что так; хоть что-то под SDR функционально богатое получилось. А какие переделки в нём были бы необходимы под DDR?
  11. Да, это я и имел в виду в ALARM! При ACK_MIN_DUR_IN = 1,4 и CLK_RATIO = 1 Ваше исходное $rtoi выдаст "1", а предложенный вариант "2", т. к. при преобразовании типа выполняется округление, а не усечение дробной части (по крайней мере, в xst - проверил). Предполагаю, что "0.5" вводилось как раз для реализации округления через $rtoi, так что Вам предстоит убрать его во всех подобных выражениях и, вообще, все их перепроверить и адаптировать при необходимости.
  12. Раз уж Вы забрели на тёмную территорию древних версий, делюсь тем, что есть :santa2: Более того, если функции двоичного логарифма используются для определения разрядности портов (а так чаще всего и бывает) - то там когда-то вылезала проблема, что iSim (или xst - не помню точно) не понимали, что функция - константная (т. е. может быть вычислена на этапе синтеза) и ругались, что переменную разрядность порта не допускают. Поэтому был рождён наиболее "дубовый" вариант - через макросы. Вопреки громоздкости (по идее) получающегося после подстановок кода - проблем не наблюдал. Выкладываю общеполезные, которые нашёл. Теоретически, там могут быть ошибки, но, вроде, всё работает. `define ISDEF(N) (^(N) >= 0 === 1'b1 || ^(N) < 0 === 1'b1) //"IS DEFined", is an //integer strictly defined; Xilinx warnings about "===" in synthesable //code - include in supression rules. //Why so complicated - I forgot :) `define TZER(N) (!`ISDEF(N) || (N) <= 0) ? 'hx : \ (~|((N)&'h7fff_ffff)?31:(~|((N)&'h3fff_ffff)?30: \ (~|((N)&'h1fff_ffff)?29:(~|((N)&'hfff_ffff)?28: \ (~|((N)&'h7ff_ffff)?27:(~|((N)&'h3ff_ffff)?26:(~|((N)&'h1ff_ffff)?25:(~|((N)&'hff_ffff)?24: \ (~|((N)&'h7f_ffff)?23:(~|((N)&'h3f_ffff)?22:(~|((N)&'h1f_ffff)?21:(~|((N)&'hf_ffff)?20: \ (~|((N)&'h7_ffff)?19:(~|((N)&'h3_ffff)?18:(~|((N)&'h1_ffff)?17:(~|((N)&'hffff)?16: \ (~|((N)&'h7fff)?15:(~|((N)&'h3fff)?14:(~|((N)&'h1fff)?13:(~|((N)&'hfff)?12: \ (~|((N)&'h7ff)?11:(~|((N)&'h3ff)?10:(~|((N)&'h1ff)?9:(~|((N)&'hff)?8: \ (~|((N)&'h7f)?7:(~|((N)&'h3f)?6:(~|((N)&'h1f)?5:(~|((N)&'hf)?4: \ (~|((N)&'h7)?3:(~|((N)&'h3)?2: \ (~N&'h1))))))))))))))))))))))))))))))) //"Trailong ZERoes". ONLY FOR ARGUMENTS <= 32 BITS! //Maximum 2's power divider of a number. Both for synthesis and simulation; bit //selection is not used since N could be an expression. `define CLOG2_CORE(N) \ ((N)&'h8000_0000 ?32:((N)&'h4000_0000 ?31:((N)&'h2000_0000 ?30:((N)&'h1000_0000 ?29: \ ((N)&'h800_0000 ?28:((N)&'h400_0000 ?27:((N)&'h200_0000 ?26:((N)&'h100_0000 ?25: \ ((N)&'h80_0000 ?24:((N)&'h40_0000 ?23:((N)&'h20_0000 ?22:((N)&'h10_0000 ?21: \ ((N)&'h8_0000 ?20:((N)&'h4_0000 ?19:((N)&'h2_0000 ?18:((N)&'h1_0000 ?17: \ ((N)&'h8000 ?16:((N)&'h4000 ?15:((N)&'h2000 ?14:((N)&'h1000 ?13: \ ((N)&'h800 ?12:((N)&'h400 ?11:((N)&'h200 ?10:((N)&'h100 ?9: \ ((N)&'h80 ?8:((N)&'h40 ?7:((N)&'h20 ?6:((N)&'h10 ?5: \ ((N)&'h8 ?4:((N)&'h4 ?3:((N)&'h2 ?2: \ ((N)&'h1)))))))))))))))))))))))))))))))) //"Core Ceil(LOG2(N+1))" for correctly defined //values (<= 32 bits). Both for synthesis and not; bit selection is not //used since N could be an expression. `define HZ2NS(F) (1.0e9 / (F)) //Convert frequency [Hz] to delay in [ns]. `define ABS(X) ((X >= 0) ? (X) : (-X)) //ABSolute value of X. `define CLOG2(N) ((!`ISDEF(N) || (N) <= 0) ? 'hx : `CLOG2_CORE((N)-1)) //"Ceil(LOG2(N))" //ONLY FOR ARGUMENTS <= 32 BITS! Ceil (nearest greater or equal integer) of //binary logarithm. `define WIDINPAR(W) ((W) >= 1 ? (W) : ((W) == 0 ? 1'b1 : 1'bx)) //"WIDth INdex from a //PARameter" ONLY FOR ARGUMENTS <= 32 BITS! High index of a bus from given //parameter, to avoid index "-1". //Ex.: bus with width W: "[widinpar(W)-1:0];" `define WIDC(N) (`ISDEF(N) && (N) == 0 ? 1 : `CLOG2((N) + 1)) //"WIDth Computation" //ONLY FOR ARGUMENTS <= 32 BITS! High index of a bus out of it's maximum //value (from 0). //Ex.: bus for holding numbers in range [0..N]: "wire [`WIDCF(N)-1:0] bus;" //Precision width of parameters: "localparam [`WIDCF(<expr>)-1:0] N = <expr>;" `define WIDCN(N) (`ISDEF(N) && ((N) == 0 || (N) == 1) ? 1 : `CLOG2(N)) //"WIDth Computation from N" //ONLY FOR ARGUMENTS <= 32 BITS! High index of a bus out of number of it's //different values. Handy for computation of high index of a bus. //Ex.: coder with N inputs output: "output [`WIDCFN(N)-1:0] out;"; //N-words RAM adress input: "input [`WIDCFN(N)-1:0] adr;" `define URAND(MIN, MAX) ((MAX) < (MIN) ? 1'bx : (((MAX) == (MIN)) ? (MIN) : \ (MIN + {$random} % ((MAX) - (MIN)))) ) //Form an unsigned random value in the range [MIN..MAX-1]; //"{}" makes unsigned. `define POS_FMOD(A, B) A - B * ($rtoi((A + 0.0) / B) + $signed(A < 0)) //Positive fraction //modulo. Only for POSITIVE dividers!!! `define ISHEXD(L) (`ISDEF(L) && ((L) >= "A" && (L) <= "F" || (L) >= "a" && (L) <= "f" || \ (L) >= "0" && (L) <= "9")) //IS byte a HEX Digit. x- and z- //bits are treated correctly. `define ISHEXDX(L) (`ISHEXD(L) || \ `ISDEF(L) && ((L) == "X" || (L) == "x")) //IS byte a HEX Digit or X/x. `define IS_DEC_INT_DIG(L) ((L) >= "0" && (L) <= "9") //Is a byte a valid decimal //integer digit. `define HEXD2DEC(L) (!`ISHEXD(L) ? \ 0 : \ ((L) >= "a" ? (L) - "a" + 10 : \ ((L) >= "A" ? (L) - "A" + 10 : \ (L) - "0"))) //Convert //HEXadecimal Digit to decimal number, on all incorrect inputs returns 0. Макросы сделаны так, что подставлять в них можно не только просто аргументы, но и выражения - точно как в функции. Аргументы везде взяты в скобки во избежание нарушения порядка операций. В основанных на двоичном логарифме - ограничение 32 бита на разрядность входа, будьте с этим аккуратны, когда вычисляется, например, разрядность счётчиков для задержек с очень большим ограничивающим сверху значением и т. д. А отсутствие $rtoi обходится использованием преобразования типа, выполняемым по умолчанию. В случае сложных выражений - приходится вводить временные переменные (или временные localparam'ы - смотря для чего используется). Вычисления везде практически "в лоб". За предложения упрощений и найденные ошибки буду благодарен - этот код до сих пор применяется.
  13. На рисунке на выходе - просто стробированный тактовый с "залипанием" сигнала его разрешения. Берущегося, исходно, в виде временнОй метки. Кроме того, фаза тактового подогнана ко времени прихода метки. Вам надо именно это? Если так - то, с учётом последнего ограничения выше, предложу, разве что, генерировать выходной тактовый в виде сигнала данных "быстрого" домена.
  14. Благодарю, альтеровский и Ваш контроллеры скачал. На Ваш прочитал документацию, сам код не смотрел. Вопросы по HSSDRC (aka "Что не ясно детально изучившему один даташит новичку в теме SDRAM из мануала на Ваше ядро" B) : Есть ли возможность работать с пакетами на всю страницу (continuous bursts)? Включён или выключен по умолчанию автопредзаряд после операции? Можно ли изменить это значение для конкретной операции (включить - чтоб увеличить пропускную способность, выключить - чтоб обрабатывать операции меньшей, чем обычно, длины данных)? (Pxtv) Поддерживаются ли режимы самостоятельного предзаряда, снижения потребления, глубокого отключения питания и приостановки тактового? Как именно выполняется автообновление? В коде видел что-то на тему слабого и сильного его вариантов. А ещё в проектах подобного вида - выкладываемых для всех - очень хотелось бы видеть хотя бы крупноблочную схему внутреннего устройства со всеми названиями портов. "Вместо тысячи слов". С одного сеанса разглядывания уже очень много что становится про модуль понятным. И вопросы по SDRAM в целом и по приложенному даташиту: Каков обычный сценарий использования DRAM вместе с ПЛИС для обработки сигнала типа видеоданных - когда для каждого элемента необходимо сделать несколько чтений и записей (чаще всего, по заранее известным адресам - но могут они быть и вычислимыми)? Просто "вылизывание" схемы адресации и последовательности обращений / буферизация входных данных в пакеты / организация некого кэша на основе blockRAM в ПЛИС / что-то ещё? Возможна ли (предполагаю, что нет) такая схема работы, при которой чередуются чтение из строки одного банка и запись в строку другого банка при том, что обе строки открываются только в начале всего процесса и закрываются в конце? А чередование чтения и записи из разных ячеек одной и той же строки одного и того же банка? Если выполняется регулярный доступ ко всем строкам со включённым предзарядом - обязателен ли всё равно Auto Refresh с указанным периодом? Почему при прерывании чтения страницы или просто долгого пакета записью, после подачи в течение 2 тактов сигнала DQM на шине не возникает дочитываемых данных, "сталкивающихся" с данными для записи (такт T4, рис. 19, стр. 50)? Что пойдёт неправильно, если не подавать запрещающего сигнала на DQM в ситуации с рис. 30 (переход от записи к предзаряду, стр. 59)? ЗЫ: Приложенный даташит я в общих чертах для себя перевёл-законспектировал (без картинок). Имеет смысл выкладывать? MT48H32M16LF_y67m_512mb_mobile_sdram_ait_aat.pdf
  15. Приятно, что такое уже делали; жаль, что придётся "изобретать велосипед". И always_comb/_ff'ы заменить на обычные. А по остальным вопросам подскажете что-нибудь (особенно про документы)? И - я понимаю, что приятно, когда используют Вашу разработку - но, может есть контроллеры без SV? Какие-то предельные характеристики нам не нужны, скорее всего, нагрузка на память будет невысока.
×
×
  • Создать...