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

Beby

Свой
  • Постов

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

  • Посещение

  • Победитель дней

    1

Весь контент Beby


  1. Как-то поручили мне протестировать DSL модем, разрабатываемый на фирме... на каких скоростях и при какой длине кабеля оно работает. Плановая длина около 1.5 км. Было два вида экспериментов, первая - на живом кабеле (благо в закромах нашлась катушечка... эдак метров с 600 10 парного кабелька). А вторая серия на различного вида самапальных эмуляторах... RC, RLC и т.п. Вторая серия показа, что нечего себе мозгу парить, и если есть возможность, то брать живой кабель (чистенький и со склада) и работать с ним. Лучше брать многопарный, и когда кажется, что всё работает хорошо, в соседнюю пару подавать сигналы с другого аналогичного макета.
  2. Загляните в 3 раздел Datasheet'а и Вы увидите, что все I/O Timing задаются для LVTTL25, а для остальных стандартов есть поправочная таблица (Input Timing Adjustments by IOSTANDARD и Output Timing Adjustments for IOB)... Поэтому, естественно, задержки в симуляторе зависят от того, какой стандарт прописан в ucf.
  3. Боюсь Вы опять немного недочитали... DLL у Spartan2 устойчиво работает только с 25МГц... (DS001.PDF - Spartan-II FPGA Family Data Sheet -> Switching Characteristics -> DLL Timing Parameters). Обратите особое внимание DLL - это полностью цифровой ФАПЧ, а значит, он вносит в систему существенный jitter. У Spartan2 этот параметр достаточно плохой, поэтому, если есть возможность, DLL лучше вообще не использовать. Не совсем так... DLL компенсирует задержку clock в BUFG и задержку распространения по ПЛИС по отношению к входному clock. При необходимости DLL может умножить входной clock на 2 (если использовать каскадно, то можно умножить и на 4, но jitter тогда тоже больше). Время распространения clock по специально выделенным для этого линиям - минимально, но главное на этой линии крайне малое SKEW (неодновременность прихода сигнала в различные участки ПЛИС). Обычно используют только выходную линию CLK0, или CLK2X. CLK180 может понадобиться только профессионалам в особых очень редких случаях. CLK90 (или CLK270) используются при необходимости выкроить дополнительный тактик между CLK0 и not(CLK0). Еще, CLK90 может использоваться в системах коррекции фазы входных данных, собранных на логике; но, как показала практика, даже для этого случаю лучше использовать CLK2X и not(CLK2X). DCM - это более новый блок для манипуляций с clock, он появляется со Spartan3. Для более детального исследования ПЛИС, Вы можете использовать FPGA Editor - всё, что он показывает - в ПЛИС есть. Также, Вы можете посмотресть этой полезной программой, как развёлся Ваш проет - иногда (особенно во время освоения нового кристала) видны большие ляпсусы.
  4. Хорошо, что Вы выложили фрагмент схемы - в нем обнаружена очень грубая ошибка: Meas_Pulses <= TConst_Rst and MHz_8; В ПЛИС ни в коем случае нельзя так получать новый clock. Проведите временное моделирование этого фрагмента схемы для случая: приходит очередной положительный фронт MHz_8, при котором TConst_Rst переходит в ноль... на выходе AND2 вы получите очень нехороший короткий тычёк... Для начинающих правило работы с CLK в ПЛИС простое: только один глобальный clock (других clock'ов вообще не должно быть). На примере Meas_Pulses: везде, куда пришел на CLK вход Meas_Pulses заводите MHz_8, а на CE вход этих триггеров при'and'иваейте TConst_Rst. Суть такая: на CE входе триггера устойчивое состояние должно быть только в момент прихода CLK (в остальное всемя - всё, что угодно - скачки, тычки и п.т.), а вот CLK всегда должен быть чистеньким и ровненьким. А FDC выдающий ofl - полный ужоссс... работать наверное сможет, но такие решения череваты (clk взят с выхода триггера - поэтому чистенький и стабильный; но вот хоть как-то обеспечить равную задержку при различной разводке Вам не удасться никак). Для имеющейся схемы Вам необходимо создать constraint для входного системного clock'а (MHz_8) и для каждого измеряемого clock'а (FREQ). Вообще то, все дочерни clock ISE сам найдет... но все они должны быть правильно получены (например, при помощи DLL или DCM), а не как у Вас при помощи логики. Необходимости в объединении в одну временную группу нет, если Вам хочется написать 6 временных constraints вместо одного. Величина jitter'а (дрожаний) - это параметр входного clock’а, уточняющий накладываемые требования к разводке (так сказать всё и сразу). На практике, при разводке PAR уменьшает заданный период CLK на величину jitter'а. Если правильно написать, то можно быстро и гибко исправлять/модернизировать Ваш проект. Да и другие смогут помочь Вам, отрехтовав часть HDL кода. И что немаловажно, Вам не потребуетс яв таком количестве использовать элементы VCC и GND.
  5. Выражу с вами категорическое несогласие ! Т.к. это утверждение подходит только для самой примитивной схемы частотомера с низкой точностью, а высокоточные методы измерения частоты требуют более изощренных решений, чем лобовое стробироваться глобальной частотой FPGA. Но, до тех пор пока нет схемы проекта - говорить неочем. Да кстати, забыл спросить об очень важном моменте: А какой сигнал подается на вход ПЛИС - синус или меандр ? (т.е. выполняется ли требование кристалла на минимальную скорость нарастания фронта ?)
  6. Constraint NET "CLK1" TNM_NET = "TN_CLK1"; означает, что линия "CLK1" входит во временную группу "TN_CLK1". Сразу несколько разных линий могут входить в одну временную группу. Например, в проекте имеется несколько однотипных Clock подаваемых на кристал через разные ножки ввода вывода, тогда их объединяют в одну временную группу (Timing Net). Constraint TIMESPEC "TS_CLK1" = PERIOD "TN_CLK1" 10.0 ns HIGH 50.00% INPUT_JITTER 50 ps; означает, что clock временной группы "TN_CLK1" имеет период 10.0 ns(можно было написать и 100 MHz), duty cycle = 50%, дрожание фронта 50 ps; для целей симуляции считать, что clock начинается с состояния логической единицы (HIGH). Вышеприведенные constraint'ы накладывают ограничения именно на разводку линий, и как следствие на взаимное расположение элементов... Но вопрос метестабильности, это совсем другое: суть такова у триггеров (да и у прочих элементов) есть некоторые требования к входным сигналам... например минимальное время, которое должны устойчиво стоять сигналы входов D, CE, RST, PRE до прихода фронта C. Если эти требования выполняются, то элемент работает нормально (гарантированно работает без сбоев). А вот если какой-нибудь из этих сигналов нарушит временные требования, то на выходе триггера на некоторое время получаться колебания, то '0', то '1' - это и называют метастабильностью... Как можно догадаться, если на один триггер приходят сигналы, тактируемые независимыми clock'ами, то рано или поздно обязательно нарушаться временные требования, и как следствие получим на выходе триггера высокочастотное др#чиво. Поэтому я настойчиво и интересуюсь, какие меры Вы приняли для подавления матастабильности... Если не жалко, то «проект в студию»: тогда есть шансы попробовать найти в нём ошибки. А то как-то голословно получается...
  7. А Вы моделируйте при большей входной частоте, так быстрее будет. Если будет правильно работать на 10МГц, то и на 1 МГц тоже всё будет хорошо... Можно и на большей "удобной" частоте промоделировать, которую вытянет Max3000 (25 МГц, 50 МГц, 100 МГц ??)
  8. Вы используете AHDL 7.3, а в нем тоже есть симулятор... собственно его и продают как среду проверки проектов. Но мне не удалось заставить симулятор AHDL 7.3 работать с несколькими SDF файлами одновременно при VHDL симуляции. А вот в ModelSim такое моделирование удалось сделать. Если быдете быть ModelSim, то берите только SE версию... в ней в единственной есть оптимизатор симуляции.
  9. Подозреваю, что у Вас не налодены временные constraint'ы на линии clock (TIMESPEC), о чем и сказал druzhin. Сейчас я работаю с ISE 9.2SP4. (последовательно прошел 5.1, 6.1, 7.3, 8.2, 9.2, описываю проеты на VHDL с XST неразрешимых проблем, кроме вышеозначенной, не возникало). По поводу синхронизаторов разовью мысль: у Вас работа происходит с несколькими регионами тактовых импульсов, и есть необходимость переходить с одного clock региона в другой. Вот вопрос, как вы сделали это тонкое место. Если для Вас это новый вопрос, обязательно прочитайте все обсуждения на этом форуме связанные с вопросом метастабильности триггеров.
  10. Глупйы вопров, но всё-таки необходимо уточнить: Вы об'constraint'нили все регионы clock'ов ? Как именно Вы синхронизируете Ваши регионы clock'а ? На тему Synplify... Работаю с XST - проблем не знаю, хотя конечно есть у него для Spartan2/2E ошибка опримизации логики младшего раздята счетчиков (если разрядность счетчика более 4), что приводит к использованию 2 лишних LUT на счетчик; но в остальном весьма неплохо работает... да еще и знает особенности своих же родных кристалов.
  11. Я использовал AREA_GROUP в ISE 7.1 - 9.2 но не для разбиений, а для повышения плотности размещения фрагментов (COMPRESSION = 1 - дабы "unrelated logic" укладывался в один Slice – повышалось быстродействие и уменьшалось количество межCLB соединительных линий) и изредка для размещения фрагмента в нужной мне зоне ПЛИС (RANGE). Из полезных мелочей, насколько я помню, добавилась независимая статистика в MAP с результатами для каждой группы (AREA_GROUP).
  12. В разделе Development Software появлялась тема - дублер текущей... но она была перенесена в другой раздел, загляните туда... Генератор для Modelsim SE 6.4c
  13. Проясните, пожалуйста, для какого PCI Вы собираетесь разрабатывать устройство. Для прояснения вашего вопроса Вам необходимо ознакомиться со спецификацией PCI. Если вы спрашиваете об обычном параллельном PCI, то идея такова: 1. Драйвер записывает во внутренний адрес своего устройства адрес памяти по которому это устройство должно произвести операцию. 2. Драйвер этого же устройства вписывает команду устройству начать пересылать данные. 3. Устройство выставляет запрос REQ (хочу порулить шиной), и получив GNT начинает само генерировать циклы передачи данных (Read/Write - без разницы). 4. По окончанию пересылки данных устройство выставляет прерывание. 5. Драйвер этого устройства убеждается, что все данные успешно добрались до адресата (очень важное место !!!) и только после этого сообщает программе вызвавшей драйвер об успешном завершении операции. Вы это хотели узнать или что-то другое ? P.S. Устройство не различает куда будет производиться запись (или чтение): в системное ОЗУ, в видео ОЗУ - устройство просто обращается к нужному адресу (тот который драйвер дал, а драйверу виднее куда/откуда, чего и сколько пересылать). А вот с PCI-E я не работал пока еще, поэтому подсказать как на нем всё надо делать.
  14. Предполагаю, что это направление черевато возникновением проблем долговременного плана: при деградации кристала во время длительного процесса эксплуатации в пределных условиях (или того хуже при многократных резких колебаниях температуры) возможно появлений сбоев, которых не наблюдалось в камере предельных...
  15. Мне пришлось изрядно порыться на закромах (этого сайтика) и нашел 3 версии ключегенерилок... а для ModelSim 6.2se удачно отработала только одна из них. Попробуйте порыться поосновательней. Кстати "правильно" и "неправильно" работающие генерилки имели одно и тоже название...
  16. Очень интересное замечание: когда я применял лекарство для ModelSim 6.2se, у меня возникла проблема - уж не помню чего именно писал ModelSim, но работать он не хотел. Выяснилось, что проблема была в следующем: у меня мамка (ASUS Striker II Formula - так сказать "забастовщик второго поколения - особо опытный и западлистый") на nForce 780i chipset'е с 2 встроенными сетевушками, Eth2 я отключил в BIOS, и работал с Eth1... Как позже выяснилось сетевой кабель был воткнут в Eth2 и сеть работала !!! А вот с Mac адресами чудеса были - ряд программ находило HostID = Eth2 MAC (через который работала сеть), а другие проги брали HostID = Eth1 MAC (включенный в BOIS). Вот как раз лекарство для ModelSim 6.2se брало HostID отличный от того, который проверял сам ModelSim. Самым любопытным оказалось, что: когда я перетнул сетевой кабель наместо (в Eth1), лекарство для ModelSim 6.2se все равно брало HostID = Eth2 MAC (отключенного в BIOS).
  17. Не. IO ножки XPLA3 работают в стандарте LVTTL - соответственно и пороги LVTTL. Из экспериментов на живой плате выяснилось, что подтягивается аж до 3.3В (питания), а фразу Weak Pullup я бы истолковал немного по иному: слаботочный Pullup. Half Latch старается дотянуть напряжение на ножке до 3.3В (питания), тока этой подтяжки однако хватает, чтобы в светодиоде Kingbright KP-2012EC проснулся красненький огонек (сланький, но четко различимый). Я перетягиваю через 3.3кОм, но мои устройства работают в условиях повышенных электромагнитных помех... а питания не ограничено, поэтому и подстраховываюсь "достаточно" большим током подтяжки: 1 мА. Именно, настоящего высокоимпедансного состояния у XPLA3 - нет, но ведь и понадобиться оно может только для работы с аналоговыми схемами... Поэтому рекомендую применять вообще FPGA (ну или на крайний случай CoolRunner II - кстати, может он Вам подойдет больше - он дешевле, жрет меньше и быстрее, правда в нем нет 5В толерантности и более чахлые цепи управления). Я предполагаю, что HalfLatch - вообще всегда включен, когда напряжения на IO ножке опускается ниже "устойчивого" верхнего значения логического нуля (0.8В ? или 0.9В ?), то HalfLatch - перестает травить ток. Дальше - больше, есть стойкое подозрение, что: pullup - в этой ПЛИС отсутствует как таковой (его функции выполняет все тот же Half Latch, только есть 2 режима работы оной схемы: чуть побольше току и чуть поменьше току), поэтому и нет как такового резистивного эквивалента, но и при устойчивом нуле на "подтянутой" ножке лишний ток не течет – тоже хорошо. Но, к сожалению, эти домыслы мне не удалось ни опровергнуть, ни подтвердить. CoolRunner ведь был разработан первоначально Philips... только выдавали его по ошибке за 5 Вольтовую ПЛИС, пока оные не начали выходить из строя. В общем, история очень мутная получилась; и Xilinx постарался забыть её как можно скорее, в конечном итоге обозвав это семейство ПЛИС XPLA3 (Xilinx PLA 3.3В) и постарался выкорчевать ссылки на всю старую документацию. Если кто знает эту историю полностью, пожалуйста, поделитесь.
  18. Вопрос совсем не глупый, а очень даже нужный - ибо начальные условия крайне важны для правильного функционирования устройств. Насколько я понял, Вам необходимо при старте платы иметь на некоторых ножках ПЛИС логические нули, а на других - единицы. Если так, то проблема разбивается на 2 составляющие. 1. После подачи питания, CPLD конфигурируется. При этом все ножки ввода/вывода у CoolRunner (XPLA3) имеют слабую подтяжку к '1' (если я ничего не путаю, то эквивалентный резистивный номинал PullUp где-то от 40кОм до 80кОм - хорошо перетягивается к логическому нулю 3.3кОм). 2. После успешного завершения конфигурации CPLD, ножки переходят в то состояние, которое Вы описали в Вашем проекте. Если Вы использует синтезатор XST, то начальные нзачения переменных (сигналов) будут правильно преобразованы в начальные состояния триггеров. (Т.е. так, как Вы предложили signal flag: std_logic := 0;, но еще необходимо в настройках Fitter'а выставить Default Powerup Value of Register - FPGA Equivalent). Правильность установки начальных значений триггеров Вы можете проверить по Fitter Report'у: 1. для HTML версии - раздел Logic колонка Reg Init State. 2. для TXT версии - раздел Summary of Mapped Logic колонка Reg Init State. Если Вы используете XPLA3 обязательно ознакомьтесь с механизмом HalfLatch, присутствующем в каждом выходе. Отключить его невозможно, поэтому приходиться учитывать его влияние.
  19. Есть вариант иметь 2 проекта: один - AHDL (как более удобный Design Entry), второй - Xilinx. А на компиляцию запускать из Xilinx ISE. Мне так удобнее работать. Может я чего не освоил (по работе с командной строкой), но при работе с 2 проектами мне легче работать с хитровыдуманными Constraint'ами... да и тут же (в ISE) можно менять параметры компиляции и сразу видеть результат. Но это на любителя.
  20. На ряде материнских плат (с chipset'ами nForce 2, 4U) наблюдалась одна и также проблема: на задней стенке мамки разъемы идут парами; при втыкании устройств в разъем (из пары, расположенный поближе к мамке) устройства работают нормально, а вот при втыкании и парный ему разъем (расположенный подальше от мамки) некоторые устройства (в основном те, что жрут побольше) перестают работать. В т.ч. этот эффект распространялся и на Platform USB Cable (stand alone). Использовались Win2000 SP4 RollUp1 и WinXP SP2 - результат идентичен. Попробуйте воткнуть Ваши кабели в USB разъемы не принадлежащие к одной паре. Кстати, если Вы используете удлинители USB, попробуйте от оных отказаться.
  21. Ну... т.к. DDR - это Double Data Rate, то при аккуратном подходе (в теории) можно получить удвоенную скорость передачи данных - посмотрите втруктуру IOB (Input/Output Block) для Spartan-3x. Теоретически можно заставить Spartan-3x получать по параллельной шине такой поток данных... но прийдется изрядно потрудиться. Тут я бы подошел с другой стороны проблемы: а какие электрические стандарты передачи данных Вы собираетесь использовать ??! Ведь АЦП он не ПЛИС - не может менять стандарт передачи сигнала.., то что в него заложили - то и есть: а соответственно ПЛИС надо выбирать поддерживающую данных стандарт передачи данных. Да и если прикинуть... 250Мгц*8бит (вроде меньше не серьезно, а существенно больше врятли будет), то получается где-то 2 ГБит/с - что Вы собираетесь делать с этим потоком данных ?!! Почему? Мне цена у них нравится. В чем могут быть проблемы? Для меня это заявление слышать странно..... ну что тут можно ответить, читайте DataSheet на семейства и сравнивайте (и не забудь заглянуть в раздел Switching Characteristics - там находиться информация о предельнодостижимых временных характеристиках работы ПЛИС). А еще см. ответ чуть ниже. ? Design Entry для САПР Xilinx до версии 5.x (назывались они Xilinx Foundation Series, если мне не изменяет пямять) делала ALDEC Inc. Начиная с версии 5.1 Design Entry для САПР Xilinx разрабатывается компанией изменил Xilinx, ну и название изменилось на Xilinx ISE (а также при этом переходе отпала поддержка старья XC4000, Spartan (первый), Spartan-XL; из FPGA остались только Spartan-2 (и новее) и все Virtex). Их прекращают выпускать? У Xilinx есть несколько стадий жизни продукта: New - Свеженький (наверное содержит ошибки), " " - просто производится, Not Recomended for New Design - не рекомендован для новых проектов (может в скорости попасть в следующую категорию, а может просто надо проталкивать на рынок более новое семейство), Under Obsolute - скоро будет снято с производства. Obsolute - снимается с производства. Т.к. Вы находитесь в группе "Свой", а с ПЛИС похоже не работали... то скачайте свеженький Xilinx ISE, возьмите самый мелкий Spartan-3E/3A и попробуйте сделать самый простой проект... очень много "странных" вопросов отвалиться у Вас сами собой.
  22. Со скоростью работы входных каскадов (входных буферов + входных триггеров). Для Spartan-3x можно назвать предварительную цифру в одну-две сотни мегагерц без использования DDR режима. Т.к. Вы не указали конкретное семейство ПЛИС, то точнее сказать не могу. Забудьте Spartan и Spartan-XL, как страшный сон. Начиная с Xilinx ISE (они начались с версии 5.1) эти семейства не поддерживаются. Spartan-2/2e уже не рекомендованы к применению в новых проектах (единственным серьезным плюсом по сравнению со Spartan-3x для Spartan-2 является 5В толерантность, а для Spartan-2e поддержка Xilinx LVPECL).
  23. К сожалению, телепаты, по прибытию из затяжного летнего отпуска, сразу же впали в зимнюю спячку. А по сему подробно опишите, что Вы хотите узнать, т.к. у Spartan, Spartan-XL, Spartan-2/2E и Spatran-3/3e/3A/3A-DSP встроенных АЦП НЕТ и не предвидятся.
  24. У Xilinx некоторое время назад слегка изменилась система поиска (на мой взгляд из плохой стала просто отвратительной), и для того, чтобы найти какой-либо XAPP, необходимо приписывать в конце расширение файла (.pdf). Т.е. поиск необходимо проводить было не XAPP467 (в таком случае будет найдено то, что на него ссылается), а XAPP467.PDF.
  25. Есть такой документ: XAPP467.pdf Using Embedded Multipliers in Spartan-3 FPGAs. Я думаю, что в нём Вы найдете ответы на все интересующие Вас вопросы, связанные с применением умножителей в Spartan-3. Но мне непонятно что именно Вы имели ввиду под термином "каскадирование умножителей", поэтому, если после прочтения xapp467.pdf у Вас останутся вопросы, уточните этот термин.
×
×
  • Создать...