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

Golikov

Свой
  • Постов

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

  • Посещение

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


  1. Если частоты равны то... в большинстве процов есть настройки. как долго держится строб внизу, вверху, как долго стоят данные и так далее... Задаете эти настройки так чтобы на каждое состояние приходилось не менее 2 клоков ПЛИС. Ну а дальше все просто по каждому клоку смотрите состояние стробов, и ищете переходы (по переходам работайте, это как будто асинхронный режим но на едином клоке ПЛИС), если строб в каждом своем состоянии будет не менее 2 клоков ПЛИС, то вы их гарантированно найдете. Ну а далее, конкретизируйте, как вам и посоветовали, что вы хотите сделать, и вам ответят менее туманно:)
  2. Немножко поясню, что я хотел сказать про входы в воздухе. Представим себе два двунаправленных буфера соединенных между собой. Так вот когда оба буфера переведены в 3 состояние, получается что вход каждого буфера висит в водухе. Т.е напряжение на затворах полевиков, стоящих на входе может стать равным половине напряжения питания, что является наихудшим случаем. При этом ток потребления, например, для дискретной логики 74HC, 74HCT может увеличиться на 2-3 порядка, если судить по даташитам фирмы Philips. Я думаю это соответствует и для ПЛИС. Насколько я понимаю бешенные токи потребления некоторых FPGA до конфигурации объясняется именно этим. Кстати, такая проблема для дискретной логики уже неоднокрано обсуждалось на форуме. Для этого и придумали bus-hold :) . ну наверное мне это не грозит, на шине у меня всегда есть ДСПешник, который мастер и шину туды суды тягает, в третьем состоянии у меня только слайвы. Про логику интересный факт, если честно такое пока не встречали...
  3. СПАСИБО ВСЕМ! Оказалось сделать не универсальный блок лучше, так как такую логику изначально закладывал схемотехник, и проблема женерика сама собой отвалилась. (diman)Про шину в Z состоянии, в спартане 3е точно есть три стайт буферы, и 2 схемы на них сейчас прекрасно работают. Схема состоит из нескольких блоков в каждый входит данные и адрес, и шину данных каждый блок включает либо на выход либо в 3 состояние давая работать другим блокам. Проблем нет. А так написанная программа очень хорошо понятна и удобно масштабируется. Блоки добавляю, выкидываю все супер. (wild)Я вчера когда писал сообщение вспоминал что есть какие-то еще буквы, спасибо H и L это именно то что я хотел услышать. Про подтяжку в железе, это наверное про тип выхода, когда пины задаешь, но это было понятно, а вот как сделать тристейт буфер подтянутый к земле в плис, это был вопрос... но теперь понятно спасибо. (seven7)Про объяснения синтезатору... я не очень силен в тонкостях языка пока, потому если честно не очень понял что делает приведенный код. Но к счастью синтезатор сейчас меня понял как надо и я пока, если вас это не обидит, не буду разбираться в вашем описании. (diman)Про входы в воздухе..., в воздухе никто и не весит, 3 состояние нужно для устранения конфликтов с внешним устройством. Но согласитесь не всегда на схемах разумно ставить подтягивающие резисторы, потому что в том случае если вы держите подтянутую шину то через резистор течет ток, а если шина 32 бита да и не одна, можно и процессор перенапрячь... (во всяком случае я так понял схемотехника, а ему я в этих вопросах больше доверяю чем себе:)))) Про кейз и женерик. Я подумал вчера что логично, наверное, не давать работать кейзу с женериком, женерик может смениться, а это все таки не сигналы, и как развести кейз таблицу синтезатору... но сегодня когда писал что за ошибку дает синтезатор, обнаружил что ошибки больше нет, а есть только варнинг... Может быть потому что добавил значение адреса по умолчанию. К счастью на текущий момент вопрос кейза остро не стоит, так как блок перестал быть универсальным. В любом случае кейз заменяеться на иф...ифелсе, а они то уж нормально должны работать, наверное%)... А если стандарт говорит что кейз и женерик не совместимы, я склонен ему верить (стандарту) Огромное всем спасибо за потраченное на обсуждение темы время. П.С. писав эту тему на русском языке, у меня вдруг возникла мысль. А переведение шины в "третье" состояние, не является ли исторической ошибкой. То есть возможно имелось ввиду переведение шины в Z, состояние, которое на русском выглядит как З[Зе] состояние, именно букву "Зе" может и приняли за цифру три? Вот что мне подумалось...:)
  4. У Altera, такая возможность обзывается bus-hold. Это уже обсуждалось, вот, здесь, например, http://electronix.ru/forum/index.php?showt...&hl=pull-up не совсем то! это если шина выходит наружу. А меня интересует как это реализовать внутри ПЛИС, то есть если внутри ПЛИС блоки все висят на одной шине, и когда не выбраны отпускают ее в Z, но вот хочется чтобы когда все ее в Z отпустили она была бы в нуле. Про instantiation. если я правильно понял сделать еще один блок который следит за шиной, и если все устройства ее отпустили делает шину нулевой, а если кто то держит то наружу выпускает то что на шине? Глобально это имелось ввиду? или я совсем ничего не понял... почему кейз не ест, ну наверное вот почему ADRES_WIDTH - определен в пакедже. generic (constant SDAC_ADR : std_logic_vector ((ADRES_WIDTH-1) downto 0) :=(others=>'0')); case ADR is when SDAC_ADR =>TimeOutAfterCS<="0000"; when others => Null; end case; Line 139. Choice SDAC_ADR is not a locally static expression. причем вот сейчас это пишу и это просто варнинг, а вчера это был еррор... Странно может устал вчера и не так что то понял, но смысл такой. Наверное через кейз можно.
  5. Здрасте. Пробовал воспользоваться поиском, ни к чему хорошему это не привело. Вопроса 2. Первый Можно ли описать такую вещ? Шину надо отпускать в 3 состояние (или high impedance не уверен что это одно и тоже) но при этом подтянуть ее к земле. В смысле чтобы если ее никто не дергает она ноль, но если кто ее дергает, конфликтов нет. Можно ли это сделать внутри ПЛИС? Это аналог того, что с наружи резюком к земле шинку подтянуть ну или к питанию. Если можно то лучше пример. Второй Я как то его поднимал, и ответы меня устроили, но сейчас чуть другая ситуация. На плате 9 одинаковых ЦАП, хочется написать один интерфейсный модуль, а потом его размножить. Для этого надо писать модуль с возможностью задачи адреса (даже адресов). Как я понимаю это надо делать через Женерик или через внешнюю шину на которую константой задать адрес. Но вот беда, все что написано в женерике или передается снаружи не является статиком, и в кейз это запихать нельзя. На кейзе построен внутренний дешифратор адреса, каждый блок имеет несколько адресов. Я решил проблему описав кейз через иф и елсиф, но как то это криво. Как решают проблему профессионалы? Я имею ввиду как делаются по уму модули с меняемыми адресными пространствами? Пакедж не подойдет, потому что надо уметь создавать копии модулей с разными адресами. И как бы подпункт этого вопроса, я потом все написанные модули объединяю в графике, мне так как то удобно, но вот вопрос, как нарисованному модулю задать параметры женерика? Есть ли какие методы, я вроде все обтыкал не нашел. Ну вот и все, надеюсь вопросы не вызовут бурю негодования по поводу их несерьезности, заранее спасибо. Все это для Ксалинксов и среды ИСЕ 7.1, и VHDL, но ради эрудиции хотелось бы и про другие плис-среды услышать.
  6. а CRC32 - 16 - И прочие, или я глупость сказал? Хотя я может уже забыл что такое хеш...
  7. Бешенные непроизводительные затраты! Биг ендиан и лов-ендиан - естественно относиться к специфическим единицам информации, которые без спец оговорок уже давно считаются байтами, и к битам применять эти термины без спец указания не логично, для битов лучше использовать МСБ и ЛСБ. Неважно как эти термины придумали в начале, важно как их сейчас воспримут. И я вам могу точно сказать что из 100 опрошенных 95 скажут что лов ендиан это младший байт в конце, именно байт а не бит. И только потом при долгом разговоре про юниты признаю, что может речь идти и про слова и про биты, но укажут что лучше про биты говорить ЛСБ. Другие 5 ответов из 100 я оставляю на «понятия не имею что это значит» и на ответы таких как вы знатоков истории. Более интересно зачем для доказательства возможности нестандартного использования термина выяснять его происхождение, кода смысл термина можно самому придумать, все равно же нестандартно используете:))) Про то стоит ли вращать константы: - Если как сказано в примере есть список констант советских в справочнике, а их надо перевернуть, то надо делать функцию, это лучше. Пишешь в описании константы из справочника ГБДР-2334-34ТРамПамПам, а функцию называешь СправочникКонверт. - Если просто функцией залеплять дырки от ошибочно забитых констант - это недопустимо, лучше потратить время на перенабивку констант, чем потом искать какие константы надо перевернуть, какие нет, какие ошибочно перевернули, а какие забыли. - Третье использование функции для формирования битового реверсивного адреса для БПФ. Тоже весьма законно, чем плодить непонятные массивы констант адресов, которые не позволять масштабировать код. Теперь насчет ТЗ. Спор пустой, пишем код, суем в железо, смотрим если лампочки загораются наоборот все молодцы, если нет, то не молодцы. Рассуждения о том, что старшее левое или правое, и как что вращать безсмысленен. Это вопрос веры, я бы всегда считал старшим бит со старшим номером, но это не значит что в написании (3 downto 0), и наоборот от 0 до 3 он будет занимать всегда левую позицию. Так что надо вбить А (3 то 0) Б(3 то 0), присвоить Б А(0 то 3) и проверить чему стало равно Б, этот тест законный и я думаю он даст результат как на синтезе. Но без проверки в железе теоретические изыскания бесполезны. Временные диаграммы симулятора показывают что поворот получился, если в какой то среде не получается то в ней и надо городить огород. Возможность задания от 3 до 0 и от 0 до 3 я думаю не спроста дана.... Насчет другого отдела программирования. У меня такой вопрос, а как вы себя позиционируете на работе? Написатель Верилог кода под микросхему такой-то серии на такой-то среде? А еще у вас тогда должны быть люди под разные среды и разные микросхемы и под разные языки. Как то уж слишком узко специализируетесь. У меня позиция программист, значит все что пишется то мое. Единственное разделение есть на железное и софтовое программирование. То есть под компьютеры или прибор. Да и то весьма условно, потому что все железячники у нас свободно пишут под PC. Программист это не тот кто С знает, это тот кто алгоритмически мыслит. А значит не важно какой язык, ВХДЛ, Верилог, Паскаль, Фортран, С, С++... Потому аргумент "языка не знаю писать не буду, лучше сделаю кривой код на ВХДЛ" считаю перекрывающим по вреду пользу от столь узкого разделения на специальности. Ну это так на самом деле пустые эмоции... Резюме такое: В обсуждении предложено 3 варианта переворота. Человек делающий реальную прошивку берет и реализует тот что ему больше нравиться, далее он проверяет работу преобразования на тестовых примерах, соответствующих его задачам, и если оно не работает, реализует другие варианты. А заочно обсуждать и мериться в теоретических познаниях я думаю непродуктивно. И только вечер субботы оправдывает столь длинный пост%)... П.С. я никого не хочу обидеть, просто высказываю свое мнение, коротая время перед ужином. Чего и вам желаю, приятного вечера, дня и успехов в работе;)...
  8. Ну надо на самом деле задачу уточнять, тут же не задача сжатия как я понимаю... Хотя кто знает, с флотами в ПЛИС работать реально неудобно, но можно же и ДСП поставить, на то они и нужны... какой нить простенький ТМС да-да!!! TI & XILINX - вот наша религия! :a14: да тот же 672х при своих 250MГц планарном корпусе и цене выглядит очень привлекательно. да и в сети больше вейвлетного можно на Си найти нежели на HDL. . ЗЫ: хотя не уловил нити: с чего это вдруг речь зашла о плавучке?! теже DM64x - целочисленные, но их позиционируют на работу с видеоконтентом. если речь заходить о сжатии, то лучше использовать вейвлет 7/9, а они на дробных коэффициентах, и лучше не фиксед поинт а флоат, для результата лучше, тем более есть процы позволяющие. Но это вейвлеты, а раньше все про БПФ думали (правда теперь БПФ и для вейвлетов применяют), но думали про целочисленные БПФ, от того и целочисленные серии. Но это не суть, и в сжатии и в других задачах можно найти и другие вейвлеты, получше 7/9 и по хуже. От задачи зависит...
  9. Передам совет смехотехнику:)...плата ПЛИС 2 слойная у нас, и насколько я знаю рисовалась по старкиту и даташиту. Ну будем проверять...
  10. Ну надо на самом деле задачу уточнять, тут же не задача сжатия как я понимаю... Хотя кто знает, с флотами в ПЛИС работать реально неудобно, но можно же и ДСП поставить, на то они и нужны... какой нить простенький ТМС
  11. Оно может в конкретной ситуации не использоваться, матлаб часто что то делает на всякий случай. А вообще по моему тут явно формируется сумма и сигнал переполнения/переноса, в данном случае как и сказал на всякий случай, чтобы разработчикам матлаба не писать 2 разных блока и не думать когда какой применять, лепят один во всех случаях подходящий... а ресайз кстати ресайзить с учетом знака? если нет то это может быть просто избавления от отрицательных чисел:)?... Честно не знаю как ресайз работает.
  12. А что тут смеяться... Пока других проблем с прибором хватает, доделываем программки и интерфейсы, но проблема загрузки все острее и острее встает, потому что работа движется к финалу и тут хорошо бы чтобы ПЛИС грузилась со 100% вероятностью. А это не происходит, наверное что то очень простое и глупое сделали, но вопрос что?! Кто какие причины знает нестабильной загрузки?
  13. Никто не мешает пойти по пути ЖПЕГОВ, разбить изображение на подобласти, поставить специализированные ДСП, для расчета сверток с фильтрами, у них есть спец генераторы адреса, и они БПФ делают очень быстро! Далее можно распараллелить работу по каналам, то есть сделать 3 идентичных блока и каждый фигачит свой канал. Все вопрос цены устройства, а не геморроя. Просто быстрая цифровая обработка сигнала – весьма простая на мой взгляд задача, нет мучений с ЦАП и АЦП, нет измерительных схем, калибровки, прочей байды что создает основной геморрой. Что вы не найдете алгоритм цветного вейвлет преобразования, да еще реализуемого в плис это я вам даю 95% вероятности. 5 процентов на его изобретение в ближайшее время;)... Хотя насколько мне известно никто такой задачей не занят, даже чисто двумерное вейвлет преобразование, никому не интересно, все делают последовательный проходы горизонтальные и вертикальные. Кстати почитайте обзор Рабани и какого то чувака из кодака ЖПЕГ2000, там показано как делать вейвлет преобразование без увеличения объема данных, и кстати достаточно быстро получается... Специально для устройств с малой памятью.
  14. пока со стар китом игрался не замечал... просто генератор такой был, удобно... Генератор на плате единый, все остальные схемы тактуются через плис. Не очень понял про запрет внутренних генераторов, и пины,... это как?
  15. У нас планировали на 50МГц, работать, а спартан 3е схему пред обработки не вытянул, теперь на 25 работаем:)... Примерно такие могут быть трудности:). Опять же шумы и прочая фигня, АЦП вещ неспокойная... Но это у нас получилось, а вот спартан зараза пускается через раз, и что ему не нравиться понять не могу... Как будто не грузиться, никаких синтезаторов клока внутри настраиваемых не используем, сразу на ногу клока 100МГц, а из 10 включений, 3-4 схема молчит, на управление не реагирует, может кто такое видел?! Ресета то у ФПГА нет, как ее на бут проверить, как ей подсказать что давно пора загрузиться то уже!?
  16. 9/7 или 5/3 это длины синтезирующих (ну анализирующих соответственно) фильтров верхних и нижних частот. Вейвлет преобразование ничто иное (в таком представлении), как фильтрация двумя фильтрами с прореживанием. Проблема только одна это работа с плавающей точкой, но если использовать фильтры 5/3 от JPEG2000, то можно сделать преобразование целое в целое. Алгоритм реализуется элементарно, естественно для обработки цветных изображений надо обработать каждую компоненту. Фильтрация – это свертка, а уж как сделана свертка можно взять и из Альтеры, творчески осмыслить и доделать, тут я согласен Maksya вы уже товарищ ленитесь... фильтры 5/3 синтезирующие Highpass (-1 -2 6 -2 -1)/8 Lowpass (1 2 1)/2 анализирующие Highpass (-1 2 -1)/2 Lowpass (-1 2 6 2 -1)/8
  17. Большое спасибо что не пожалели времени на ответ. Приболел, до мануала не долезть. Я на самом деле ищу черную кошку в темной комнате, почему то в устройстве ПЛИС не всегда стартует, и мы пока не можем понять чем это вызвано, вот и цепляюсь за любую мелочь Питание в порядке, все ножки ей отпускаем при старте, что ей может не нравиться? Спартан 3е в тку144
  18. идея ясна, но как то уж через одно место ... а если они в ноль не устанавливаются?... Как эта задача детерминированно и по уму решается?
  19. А тогда у меня такой вопрос VHDL ... signal AA : std_logic :='1'; ... Сигнал AA после синтеза в начале работы не будет равен 1? Это я к высказыванию о том что "он не синтезирует значения сигналов, установленные по умолчанию!". Как же тогда быть? Делать всем блокам ресет и дергать его в начале работы? Сигналы можно проинциализироват в железе при старте без ресета? Или все они будут всегда нулями.
  20. да я бы ваще забил бы на сброс... Если вы в память что то записали, то оно там и лежит, а если ничего не писали то зачем его оттуда читать? Начальную установку памяти можно сделать, чтобы когда проект запускался она была нулевой (что то тут говорили про то что это в настройках можно сделать, хотя может я глупость говорю, пока не разбирался). А если надо время от времени сбрасывать память в нули, то самое простое сделать процедурку, которая по всем адресам пробегает и нолики пихает, хотя если честно с трудом могу себе представить чтобы память надо было нулить в середине работы...
  21. Хеширование, поиск по ОЗУ, сравнение, счётчики, инициализаторы... как я уже говорил ОЗУ на базе 2-х блоков 20 и 14 разрядных данных по 16384 адресов в каждом (играют роль ассоциативного массива в системе), за один такт никак не получится это реализовать, но доделывать логику в след. такте никто не запрещает, я сейчас работаю как раз над реализацией этой идеи, посмотрим что выйдет :) Я может ошибаюсь но по моему вашу задачу можно разбить на много элементарных, и конвейеризовать их... Хотя надо детальнее в алгоритме разбираться, конечно, для таких заявлений%)... Удачи вам.
  22. 1024 - это 10 бит. для округления в большую сторону прибавьте младшую единичку, и двигайте обратно, будет округление в большую сторону. 100+1=101, сдвигаем на бит влево, получаем 10. 101+1=110, сдвигаем на бит влево, получаем 11 округление в большую сторону.
  23. ну один и тот же триггер по 2 фронтам щелкать это конечно не очень хорошо... а 2 триггера друг за другом стоящие вполне... А по заданию 2 друг за другом можно, потому и говорил что нет разницы между по 2 фронтам и по одному фронту двойной частоты на счет удивления, не удивили, просто хотелось прояснить, если такая вещь то конвейер вам и вправду не поможет это точно, разгоняйте клок. Можно попробовать распараллелить алгоритм, работать на меньшем клоке, но в параллель... насчет почему нельзя конвейеризовать, берем мой пример допустим Б0 уже есть. берем А1, считаем Б1=А1/Б0, допустим результат имеем через 2 такта. на следующем такте получаем А2, для расчета Б2, нам необходим Б1, но оно будет только через такт, тут можно поставить накопитель Сохраним А2, А3, и в этот момент у нас готов Б1 и мы можем считать Б2, но у нас уже сохранено А3, и через 2 такта появления Б2, которое нам необходимо для Б3 пройдет еще 2 такта и мы вынуждены уже сохранить А4, А5, и так далее, с каждым вычисленным очередным Б, у нас накапливается еще 2 А сверху уже накопленных, и такая ситуация не разрешиться до тех пор пока не прекратиться поток А. А если он большой конвейер переполниться... Вот почему нельзя. Насчет в параллель 2 варианта , я думаю Вычислять надо обязательно в параллель, а то зачем же брать плис, но клок надо поднять по частоте, чтобы оба варианта вычислялись условно за 1 такт.
  24. да я просто выразил свое мнение:)... посты можно игнорировать, чтобы не тратить свое время и зарплату... что раздражаться то, это также как обижаться на дождь или ветер... у меня принцип есть, - разбираться в проблеме глубоко, но я знаю пару разработчиков, неплохих кстати, которые очень доверяют чужому опыту, и им зачастую нужен просто ответ как сделать, и идти дальше, а не разбираться в тонкостях вопроса настолько, чтобы потом его можно было много раз в разных вариантах повторить, вот потому и предлагал либо игнорировать, либо писать по делу, а не писать дурацкие обучающие посты про жизнь, чем я сейчас и занимаюсь... удачного вечера!
  25. Про частоту, естественно обрабатывать по восходящему и падающему фронту частоты 50 МГц, это абсолютно тоже самое что работать по одному восходящему частоты 100 МГц. Это простая физика смысла частоты (нормально завернул :)). Теперь далее в ксалинксах (да и других) есть блоки ПЛЛ которые умножают частоту на 2, или всегда на счетчике можно поделить частоту, поэтому всегда можно сделать так, что в системе будет быстрый и медленный клок, и вы всегда сможете сделать за 1 такт одного клока несколько тактов другого. Предложения идея с 2 клоками, настолько же работоспособна, насколько она очевидна, если частоты хватит, то работать будет! но надо понимать что физически ни чего не меняется, работая с 2 частотами удобнее, но по скорости также, заставив схему работать по 2 фронтам у вас просто упадет частота вашего клока в 2 раза, что по сути будет тоже самое что сделать поделенный клок для захвата данных. Далее надо подобрать правильную микруху, которая позволит тянуть необходимую вам частоту. На счет конвейера, я попробую привести пример алгоритма не конвейеризуемого и конвейеризуемого, и вы скажите на какой более похож ваш. A0..N -входные данные B0..N -выходные B(n)=A(n)/B(n-1); - если эта операция несколько тактов. Данную задачу нельзя конвейеризовать, потому что Бн нельзя вычислить до вычисления Б(н-1), а он вычисляется несколько тактов. И каждое новое а(н) удлиняет конвейер, на длину вычислений, и конвейер скоро переполниться. а вот задача B(n)=A(n)/A(n+k); - эта операция тоже несколько тактов. ее можно конвейеризовать. Длина конвейера ровна числу тактов обработки+k на запасание следующих к значения А, и темп поступления данных равен темпу вывода. Так вот по описанию, ваша задача больше похоже на 2 вариант, потому вам все и предлагают ее конвейеризовать. Хотя может это просто сложность понимания математической идеи изложенной вами.
×
×
  • Создать...