Jump to content

    

Strob

Участник
  • Content Count

    133
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Strob

  • Rank
    Частый гость

Recent Profile Visitors

1377 profile views
  1. Мне кажется как раз направление задано ошибочно. Попробуйте отключить кэширование. Я не большой спец в этих вопросах, но как альтернативу, попробуйте не использовать xil_in32, а читать и писать явно по указателю. В этой функции используется волатильная переменная. Возможно это приводит к кэширование.
  2. И все же это не так. MCS - это особый случай, прибитый гвоздями вариант, в котором как разработчики поставили адреса, так и будет. Возможно ограничения и есть, но точно не 0х8000_0000. На этот адрес автоматом обычно DDR встает, если есть в проекте.
  3. Не читал все, если повторю чьи-то слова, пардон. А в симуляторе точно повторено поведение железного мастера? Сравнение с осциллографом было сделано? Многое может пойти не так.
  4. Уже писал выше, на другой плате не работал другой канал. Аналогичные симптомы. Но канал другой. Проблему кажется удалось устранить. Она была не в пайке. По какой-то причине кратковременные пропадания клока приводили к залипанию корки. После исправления клоков все заработало как должно. Спасибо всем за советы.
  5. Вот и я сижу, и не понимаю что не так... Не знаете, есть ли возможность понять, на какие шары смотреть в первую очередь, если по разводке локализовать регион кристалла с проблемным узлом? Есть ли тут связь? Может быть есть какое-то ограничение по нагрузочной способности у глобал буфера? Также тут на форуме кажется было сообщение что при большой загрузке кристалла вивада трюки выкидывает. Хотя может быть мне просто кажется...
  6. На входах/выходах все хорошо. Сигнал внутри кристалла прослеживается вплоть до корки. Но на выходе корки ни валида, ни данных.
  7. Проверил, перестал работать ещё один канал. Попробую проверить, хотя пока не знаю как это можно сделать.... или сразу в печь нести... Спасибо.
  8. Спасибо, поставил разводить. Завтра проверю. Корки идентично подключены. На самом деле они входят в состав модуля, который собственно и размножен в проекте. В модуле перед ними есть другие модули, с их выхода всё идёт как надо. Сегодня была ещё одна странность, на другой плате, при той же прошивке аналогичная проблема в другом канале. А канал неработающий на первой плате работает. Все это при комнатной температуре.
  9. Добрый день коллеги. Помогите советом. Есть IP фильтра(Xilinx, Vivado, FIR Compiler), возможна ли ситуация, при которой данная корка разводится с учетом иных ограничений таймингов, нежели те, что указаны в файле констрэйнов на проект? Немного комментариев... В проекте вставлено несколько инстансов данной корки. Большинство работает как и задумано, а одна нет. На вход к ней приходят данные и строб(смотрел через ILA), а на выходе никогда ничего не появляется(также, по ILA). Подключение у всех идентичное(с точностью до разных источников данных). Работают от одного клока. Провалов по таймингам нет, хотя запас скромный, 0.06нс.
  10. При такой постановке вопроса (ищем именно язык) кажется нет ничего. А так, "catapult c" и "hls".
  11. Наверное стоит обратить внимание на внезапно асинхронный счётчик..
  12. Код из первого поста вроде должен работать, если case поместить в else условия сброса.
  13. Возможно так? mem <= (data'High downto data'Low=> data, others => "00000000000000000000000000000000"); Дико извиняюсь за оффтоп, однако меня просто сводит с ума одна проблема. Не буду тему создавать отдельно... в подобной функции вивада выдает варнинг на каждый проход цикла, ругается на то что ожидает unsigned. Все. Больше инфы не дает. Можно конечно игнорить их, но рука как то не поднимается отправить в игнор 999+ варнингов. Пробовал разные преобразования типов, не помогает. вот код ----- ----- ----- constant hi_angle_width : integer := angle_width / 2; --ширина шины адреса памяти грубых углов constant low_angle_width : integer := angle_width - (angle_width / 2); --ширина шины адреса памяти точных углов constant real_to_integer_transform_coeff : real := (2 ** real(sin_cos_width - 1)) - 1.0; --коэффициент преобразования синуса углов в целочисленное представление constant worst_angle_resolution : real := (2.0 * MATH_PI) / (2 ** real(hi_angle_width)); --величина (в радианах) младшего разряда грубого угла constant fine_angle_resolution : real := worst_angle_resolution / (2 ** real(low_angle_width)); --величина (в радианах) младшего разряда точного угла ----- ----- ----- type hi_angle_rom is array ((2 ** hi_angle_width) - 1 downto 0) of signed(sin_cos_width - 1 downto 0); type low_angle_rom is array ((2 ** low_angle_width) - 1 downto 0) of signed(sin_cos_width - 1 downto 0); --Инициализация памяти синусов грубых углов function init_hi_sin_rom return hi_angle_rom is variable tmp : hi_angle_rom := (others => (others => '0')); begin for addr_pos in 0 to (2 ** hi_angle_width) - 1 loop tmp(addr_pos) := to_signed(integer(real_to_integer_transform_coeff * sin(real(addr_pos) * worst_angle_resolution)), sin_cos_width); end loop; return tmp; end init_hi_sin_rom; ---- ---- ---- sin_cos_width к natural преобразовывал. Не помогло. Раньше вроде не было такого. Гугление решения как то не дало. Я что-то упускаю может быть...
  14. На х32 и х64 ситуация аналогичная? Возможно проблема схожа с открытием проекта в impact(там тоже закрывается). Хотя решения ее я так и не нашел. Но если оно есть, может быть универсальным.