Jump to content

    

Intekus

Свой
  • Content Count

    244
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Intekus

  • Rank
    Местный

Контакты

  • Сайт
    http://
  • ICQ
    475588956

Информация

  • Город
    Москва
  1. Посмотрел генерируемый 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, то, чтоб воспользоваться загрузкой в аварийную прошивку при сбое, необходимо выбрать другую схему конфигурирования (а значит - и физически переделать печатную плату)?
  2. Цитата(Andrew Su @ Jul 12 2017, 17:15) Добрый день. Надеюсь по картинке понятно, как выбрать xcf128. Или для SPI Flash Выбрать получилось, благодарю! Правда, потребовался вариант с несколькими ревизиями. А что по второму вопросу, на счёт записи особых регистров (USERCODE, например)? Есть они в Platform Flash XL? И возник ещё один вопрос: при выбранном варианте iMpact запрашивает начальные адреса ревизий; их лучше указать ровно по границам четвертей, чтоб иметь возможность выбирать нужную ревизию исключительно двумя старшими битами адреса - верно?
  3. Возникла задача, похожая на сформулированную автором темы. А именно: заливать в 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 или же изобретать велосипеды на КА - ещё предстоит разбираться.
  4. Цитата(Alex77 @ Jan 27 2017, 16:36) В крайней версии вивады 2016.4 виндривер 10.2.1 Получается, что это решение отпадает. Цитата(Alex77 @ Jan 27 2017, 16:36) А не судьба убрать 11 версию и использовать 10 для "специфический заказной софт" ? Его разработчики давно и плотно сидят на 11.6, на машинах, на которые они ставят, по болшьей часли либо не программируют ПЛИСы, либо используют Altera, ByteBlaster'ы для которых, видимо, не конфликтуют. Поговорить попробуем. А что посоветуете из средств анализа изменений в системе (как понимаю, в первую очередь - реестра) в ходе установки программ? Похоже, откатывать триал - представляется самым жиззнеспособным решением.
  5. Здравствуйте! На машине (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 и более поздние нетриалы в закромах?
  6. Цитата(ZodiaC @ Jun 18 2016, 23:35) Ну а что, собственно, Вас смущает? То, что пришлось столкнуться с подходом со стороны поставщиков ТТ вида "Никакой документации подробнее рекламной мы не предоставляем. Хотите - пришлите детальное ТЗ, мы "за много денег" разработаем Вам систему и поставим. Но никакой ответственности и в этом случае на себя не берём: испытывать поставленное Вы будете уже сами." А такой подход нас не устраивает Так что если у кого-то есть документация или рекомендации по более открытым поставщикам - буду рад, если поделитесь. Цитата(ZodiaC @ Jun 18 2016, 23:35) Вполне реализуемо... Вам весь блок нужно подогреть или конкретные элементы? Если подогревать весь блок - то мощность может понадобиться довольно большая... Хотя не видя конструкцию сложно что-либо утверждать. Понятно, благодарю, продолжим двигаться в этом направлении.
  7. А есть ли у кого-то опыт применния тепловых трубок в качестве нелинейного элемента теплопередачи? То есть примерно так: есть аппаратура в термокожухе, свазанная с наружным радиатором исключительно тепловыми трубками. Когда система работает под полной нагрузкой - тепло через небольшое сопротивление ТТ активно передаётся на мощный радиатор; в тоже время, если вся система выключена и остыла до -30 - её можно подогревать до рабочих +5 относительно небольшим нагревателем, т. к. пока тёплый конец ТТ не прогреется до +30 - испарение не начнётся, и тепло будет сбрасываться на радиатор медленно - через высокое (сответствующее теплопроводности конструкции) сопротивление ТТ вне рабочего режима.
  8. Благодарю Вас за столь подробные ответы! Цитата(des00 @ Mar 19 2016, 11:21) Учтите, что автоматического определения перехода на другую страницу нет. Это нужно делать принудительно.Жаль. Цитата(des00 @ Mar 19 2016, 11:21) Банки закрываются принудительно либо по команде с интерфейса, либо автоматически по таймерам авторефреша (если они не были отключены). По какой именно команде с интерфейса? Там только чтение, запись и обновление. Цитата(des00 @ Mar 19 2016, 11:21) Это опенсорс "As is, понимаю". Тем более, что, по Вашим словам, на докуменирование и так потрачено много сил и времени. Но, ещё - в документации совсем ничего нет про теги команд. Они упомянуты в качестве входов - и всё. Внутри есть какой-то out-of-order при формировании конвейера? Как именно он работает? Цитата(des00 @ Mar 19 2016, 11:21) Если вы пробегаете все свои ИСПОЛЬЗУЕМЫЕ ряды, за время рефреша (64мc), то можно жить без него. Про "ИСПОЛЬЗУЕМЫЕ" - очень ценное замечание. Цитата(des00 @ Mar 19 2016, 11:21) программируемый SGDMA Нашёл даташит на него, но сходу разобраться тяжело. Что такое DMA - представление имею, но реализовывать не приходилось; по ощущению - не факт, что в актуальной разработке оно понадобится. А что вообще порекомендуете посмотреть по теме внешней динамической памяти и использования её в проектах без привязки к процессорным ядрам, шине и т. д.? И - то Altera; у Xilinx, судя по результатам поиска, термин "sgdma" используется только в контексте сетевых интерфейсов. Цитата(des00 @ Mar 19 2016, 11:21) Как бы для этого маска и ставиться. Что бы не было на шине данных коллизий (кстати обратите внимание на BTA - Bus Turn Around, там тоже есть потеря пропускной способности) Разобрался. Там сначала не уловил несколько другое - что при чтении оно срабатывает с задержкой в 2 такта. Цитата(des00 @ Mar 19 2016, 11:21) На этом рисунке вы принудительно рвете бурст. Например у вас бурст стоит 4ре, а вам нужно записать одно слово. Без маски, вы затрете "чужие" ячейки На нижней его половине - ещё понятно. На верхней - не совсем. Т. е., получается, что бурст рвётся быстрее и надёжнее не по приходу новой команды (PRECHARGE), а по сигналу запрета записи? Цитата(des00 @ Mar 19 2016, 11:21) ЗЫ. Причина, по которой я не делал continuous bursts, он есть только у SDRAM. У DDR памяти этого режима нет. В свое время планировал этот контроллер запилить под DDRы Хорошо, что так; хоть что-то под SDR функционально богатое получилось. А какие переделки в нём были бы необходимы под DDR?
  9. Цитата(Timmy @ Mar 21 2016, 09:45) Попробуйте localparam integer ACK_MIN_DUR_OUT = ACK_MIN_DUR_IN * CLK_RATIO + 0.5; Да, это я и имел в виду в Цитата(Intekus @ Mar 19 2016, 18:22) А отсутствие $rtoi обходится использованием преобразования типа, выполняемым по умолчанию. В случае сложных выражений - приходится вводить временные переменные (или временные localparam'ы - смотря для чего используется). ALARM! При ACK_MIN_DUR_IN = 1,4 и CLK_RATIO = 1 Ваше исходное $rtoi выдаст "1", а предложенный вариант "2", т. к. при преобразовании типа выполняется округление, а не усечение дробной части (по крайней мере, в xst - проверил). Предполагаю, что "0.5" вводилось как раз для реализации округления через $rtoi, так что Вам предстоит убрать его во всех подобных выражениях и, вообще, все их перепроверить и адаптировать при необходимости.
  10. Раз уж Вы забрели на тёмную территорию древних версий, делюсь тем, что есть Более того, если функции двоичного логарифма используются для определения разрядности портов (а так чаще всего и бывает) - то там когда-то вылезала проблема, что iSim (или xst - не помню точно) не понимали, что функция - константная (т. е. может быть вычислена на этапе синтеза) и ругались, что переменную разрядность порта не допускают. Поэтому был рождён наиболее "дубовый" вариант - через макросы. Вопреки громоздкости (по идее) получающегося после подстановок кода - проблем не наблюдал. Выкладываю общеполезные, которые нашёл. Теоретически, там могут быть ошибки, но, вроде, всё работает. CODE`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, A - B * ($rtoi((A + 0.0) / + $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'ы - смотря для чего используется). Вычисления везде практически "в лоб". За предложения упрощений и найденные ошибки буду благодарен - этот код до сих пор применяется.
  11. Цитата(dak @ Mar 16 2016, 01:57) Я нарисовал временную диаграмму того,что я собственно хочу. На рисунке на выходе - просто стробированный тактовый с "залипанием" сигнала его разрешения. Берущегося, исходно, в виде временнОй метки. Кроме того, фаза тактового подогнана ко времени прихода метки. Вам надо именно это? Если так - то, с учётом последнего ограничения выше, предложу, разве что, генерировать выходной тактовый в виде сигнала данных "быстрого" домена.
  12. Благодарю, альтеровский и Ваш контроллеры скачал. На Ваш прочитал документацию, сам код не смотрел. Вопросы по HSSDRC (aka "Что не ясно детально изучившему один даташит новичку в теме SDRAM из мануала на Ваше ядро" : Есть ли возможность работать с пакетами на всю страницу (continuous bursts)?Включён или выключен по умолчанию автопредзаряд после операции? Можно ли изменить это значение для конкретной операции (включить - чтоб увеличить пропускную способность, выключить - чтоб обрабатывать операции меньшей, чем обычно, длины данных)? (Pxtv)Поддерживаются ли режимы самостоятельного предзаряда, снижения потребления, глубокого отключения питания и приостановки тактового?Как именно выполняется автообновление? В коде видел что-то на тему слабого и сильного его вариантов.А ещё в проектах подобного вида - выкладываемых для всех - очень хотелось бы видеть хотя бы крупноблочную схему внутреннего устройства со всеми названиями портов. "Вместо тысячи слов". С одного сеанса разглядывания уже очень много что становится про модуль понятным. И вопросы по SDRAM в целом и по приложенному даташиту: Каков обычный сценарий использования DRAM вместе с ПЛИС для обработки сигнала типа видеоданных - когда для каждого элемента необходимо сделать несколько чтений и записей (чаще всего, по заранее известным адресам - но могут они быть и вычислимыми)? Просто "вылизывание" схемы адресации и последовательности обращений / буферизация входных данных в пакеты / организация некого кэша на основе blockRAM в ПЛИС / что-то ещё?Возможна ли (предполагаю, что нет) такая схема работы, при которой чередуются чтение из строки одного банка и запись в строку другого банка при том, что обе строки открываются только в начале всего процесса и закрываются в конце? А чередование чтения и записи из разных ячеек одной и той же строки одного и того же банка?Если выполняется регулярный доступ ко всем строкам со включённым предзарядом - обязателен ли всё равно Auto Refresh с указанным периодом?Почему при прерывании чтения страницы или просто долгого пакета записью, после подачи в течение 2 тактов сигнала DQM на шине не возникает дочитываемых данных, "сталкивающихся" с данными для записи (такт T4, рис. 19, стр. 50)?Что пойдёт неправильно, если не подавать запрещающего сигнала на DQM в ситуации с рис. 30 (переход от записи к предзаряду, стр. 59)? ЗЫ: Приложенный даташит я в общих чертах для себя перевёл-законспектировал (без картинок). Имеет смысл выкладывать?
  13. Цитата(des00 @ Mar 16 2016, 12:50) Случаи переписывания на чистый верилог этого контроллера мне известны. Приятно, что такое уже делали; жаль, что придётся "изобретать велосипед". Цитата(des00 @ Mar 16 2016, 12:50) (в основном только типы поменять logic на reg/wire, типы убрать на объявления и массивы из интерфейсов убрать) И always_comb/_ff'ы заменить на обычные. А по остальным вопросам подскажете что-нибудь (особенно про документы)? И - я понимаю, что приятно, когда используют Вашу разработку - но, может есть контроллеры без SV? Какие-то предельные характеристики нам не нужны, скорее всего, нагрузка на память будет невысока.
  14. Цитата(des00 @ Feb 10 2016, 17:53) в мануале там все написано. я на него пару месяцев потратил И до кучи там есть моделька памяти от микрона + тестбенч Загрузил. Рассматриваю - оно SVшное. У нас средой ISE14, он SV на синтез не знает (просиулить сможем). Что посоветуете? Рискнуть попробовать допилить синтезируемую часть кода на чистый Verilog? Или поискать другие ядра? Другие контроллеры видел на Opencores, а также у Xilinx - предлагают пару вариантов от партнёров, а также Multi-Port Memory Controller (MPMC) из EDK. Можно ли MPMC из EDK пристыковать в проект ISE? В CoreGen есть MIG - но он нам не подойдёт, так как не поддерживает SDR (только DDR). Что посоветуете почитать по заданию временнЫх ограничений при работе с внешней памятью? По "SDR SDRAM Application note" на сайте Xilinx ничего подходящего не нашёл.
  15. Благодарю за ответы! Цитата(krux @ Mar 1 2016, 22:39) про систему тестирования - вы случайно не про них? http://www.sovtest.ru/equipment/ft-17hf/ Да, это именно то, что искал. А по поводу организации входного контроля микросхем в целом - поделится кто опытом?