Jump to content

    

Intekus

Свой
  • Content Count

    243
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Intekus

  • Rank
    Местный

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array
  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. Выбрать получилось, благодарю! Правда, потребовался вариант с несколькими ревизиями. А что по второму вопросу, на счёт записи особых регистров (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. Получается, что это решение отпадает. Его разработчики давно и плотно сидят на 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. То, что пришлось столкнуться с подходом со стороны поставщиков ТТ вида "Никакой документации подробнее рекламной мы не предоставляем. Хотите - пришлите детальное ТЗ, мы "за много денег" разработаем Вам систему и поставим. Но никакой ответственности и в этом случае на себя не берём: испытывать поставленное Вы будете уже сами." А такой подход нас не устраивает :) Так что если у кого-то есть документация или рекомендации по более открытым поставщикам - буду рад, если поделитесь. Понятно, благодарю, продолжим двигаться в этом направлении.
  7. А есть ли у кого-то опыт применния тепловых трубок в качестве нелинейного элемента теплопередачи? То есть примерно так: есть аппаратура в термокожухе, свазанная с наружным радиатором исключительно тепловыми трубками. Когда система работает под полной нагрузкой - тепло через небольшое сопротивление ТТ активно передаётся на мощный радиатор; в тоже время, если вся система выключена и остыла до -30 - её можно подогревать до рабочих +5 относительно небольшим нагревателем, т. к. пока тёплый конец ТТ не прогреется до +30 - испарение не начнётся, и тепло будет сбрасываться на радиатор медленно - через высокое (сответствующее теплопроводности конструкции) сопротивление ТТ вне рабочего режима.
  8. Благодарю Вас за столь подробные ответы! Жаль. По какой именно команде с интерфейса? Там только чтение, запись и обновление. "As is, понимаю". Тем более, что, по Вашим словам, на докуменирование и так потрачено много сил и времени. Но, ещё - в документации совсем ничего нет про теги команд. Они упомянуты в качестве входов - и всё. Внутри есть какой-то out-of-order при формировании конвейера? Как именно он работает? Про "ИСПОЛЬЗУЕМЫЕ" - очень ценное замечание. Нашёл даташит на него, но сходу разобраться тяжело. Что такое DMA - представление имею, но реализовывать не приходилось; по ощущению - не факт, что в актуальной разработке оно понадобится. А что вообще порекомендуете посмотреть по теме внешней динамической памяти и использования её в проектах без привязки к процессорным ядрам, шине и т. д.? И - то Altera; у Xilinx, судя по результатам поиска, термин "sgdma" используется только в контексте сетевых интерфейсов. Разобрался. Там сначала не уловил несколько другое - что при чтении оно срабатывает с задержкой в 2 такта. На нижней его половине - ещё понятно. На верхней - не совсем. Т. е., получается, что бурст рвётся быстрее и надёжнее не по приходу новой команды (PRECHARGE), а по сигналу запрета записи? Хорошо, что так; хоть что-то под SDR функционально богатое получилось. А какие переделки в нём были бы необходимы под DDR?
  9. Да, это я и имел в виду в ALARM! При ACK_MIN_DUR_IN = 1,4 и CLK_RATIO = 1 Ваше исходное $rtoi выдаст "1", а предложенный вариант "2", т. к. при преобразовании типа выполняется округление, а не усечение дробной части (по крайней мере, в xst - проверил). Предполагаю, что "0.5" вводилось как раз для реализации округления через $rtoi, так что Вам предстоит убрать его во всех подобных выражениях и, вообще, все их перепроверить и адаптировать при необходимости.
  10. Раз уж Вы забрели на тёмную территорию древних версий, делюсь тем, что есть :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'ы - смотря для чего используется). Вычисления везде практически "в лоб". За предложения упрощений и найденные ошибки буду благодарен - этот код до сих пор применяется.
  11. На рисунке на выходе - просто стробированный тактовый с "залипанием" сигнала его разрешения. Берущегося, исходно, в виде временнОй метки. Кроме того, фаза тактового подогнана ко времени прихода метки. Вам надо именно это? Если так - то, с учётом последнего ограничения выше, предложу, разве что, генерировать выходной тактовый в виде сигнала данных "быстрого" домена.
  12. Благодарю, альтеровский и Ваш контроллеры скачал. На Ваш прочитал документацию, сам код не смотрел. Вопросы по 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
  13. Приятно, что такое уже делали; жаль, что придётся "изобретать велосипед". И always_comb/_ff'ы заменить на обычные. А по остальным вопросам подскажете что-нибудь (особенно про документы)? И - я понимаю, что приятно, когда используют Вашу разработку - но, может есть контроллеры без SV? Какие-то предельные характеристики нам не нужны, скорее всего, нагрузка на память будет невысока.
  14. Загрузил. Рассматриваю - оно 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. Благодарю за ответы! Да, это именно то, что искал. А по поводу организации входного контроля микросхем в целом - поделится кто опытом?