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

Opex

Свой
  • Постов

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

  • Посещение

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


  1. Как найти правый максимум: сравниваем текущий элемент с центральным максимумом, если больше, то обновляем ЦМ, сбрасываем ПМ и запрещаем его обновление на А тактов. Если меньше, обновляем ПМ, если не запрещено. Для поиска левого максимума потребуется сдвиговый регстр / память на А элементов. На вход пишем ЦМ. Если текущий элемент больше ЦМ, то ЛМ заменяем из выхода, без сравнения, он всегда будет не меньше.
  2. Ну и пусть оно все сдвинется на одно слово, не вижу тут проблемы. Лежало в памяти N слов, N и осталось, адреса только увеличились на 1 у всех.
  3. А чтобы кэш лучше работал, увеличим его глубину! Постойте... Если серьезно, во время поиска может освободиться приемник, и тогда можно ошибочно взять элемент вне очереди. Кэш на один элемент хорошо сочетается с защитой от этого.
  4. Читаем первый элемент, если он не подходит, читаем второй, записываем на его место первый. Если второй не подходит, читаем третий, записываем на его место второй. Либо дойдем до элемента, который прочитаем, и не будем записывать, то есть удалим, или просто сдвинем все элементы на один адрес.
  5. Можно сразу сдвигать запись при поиске. Читаем, не подходит - пишем на место следующей, и т. д.
  6. Можно еще в конце пару лишних байт добавить, под контрольную сумму подобранных.
  7. Если шина адреса 32-разрядная, это миллион слейвов получается? Как тогда организуется доступ к гигабайту памяти?
  8. ['h0000:'h0fff] - это локальная адресация слейва, или глобальные адреса? Из примера совсем не понятно, зачем нужны регионы. У вас они, можно подумать, используются просто как дополнительные старшие адреса А если у слейва адреса ['h0000:'h7fff] ?
  9. Как-то противоречиво. Приведите, пожалуйста, конкретный пример.
  10. Зачем же эти сигналы передаются, если их использовать нельзя?
  11. 1. Это не "расширение адреса", перекрываться адресные пространства не должны. Они нужны для упрощения слейвов. Есть, например, модуль доступа к флешке, в настройках интерконнекта можно выставить адреса 0x0000 - 0x1000 как доступные для записи/чтения, 0x1000 - 0x2000 только для чтения, 0x2000 - 0x7000 запись/чтение, слейву уже в расшифрованном виде через AWREGION передается, можно записывать, или нет. 4КБ потому что это максимальный размер одной транзакции. 2. Как хочется, так и делается, это только подсказки. 3. Возможность объединить запись по разным адресам в одну. Например, запись байта по адресу 0x01 и байта по адресу 0x02 объединить в одну запись сразу двух байт. Поведение при записи по одному адресу зависит от остальных бит, может и каждую запись обязательно проводить, или вообще не проводить, все в кеше оставить. 4. Слейв ничего не обязан, как хочет, так и делает, это мастер обязан держать и адрес, и данные, пока их не примут. 5.
  12. У нас в обычном Цинке сделано так: сначала идет рабочая прошивка, затем аварийная. Какой-то встроенный загрузчик ищет волшебную комбинацию байтов, если находит, грузит прошивку. При обновлении, сначала стираются волшебные числа, записывается прошивка, если все записалось хорошо, записываются числа.
  13. Папка project_1/project_1.src управляется средой, поэтому при создании проекта из скрипта перезаписывается. Исходники можно перенести в другую папку, при создании файла write_prj.tcl будут ссылки на файлы в ней, руками править не нужно.
  14. У встроенного ширина шины между логикой и памятью поуже. Если хватает, лучше его использовать.
  15. Можете выставить температуру, потом включить печку, действия независимы. Одновременность не требуется. А выставить температуру, и ждать реакции от печки перед её включением - это и есть зависимость.
  16. Зависимости между каналами со стороны мастера как раз и не должно быть. А другая сторона уже решает, сделать простой прием с зависимыми каналами, или накрутить дополнительную логику и регистры для независимого приема.
  17. Еще можно так писать .BASE_ADDR({'h2000+i*16}[15:0])
  18. Эти атрибуты вообще можно удалить, все будет работать. Только разводка займет больше времени, и, возможно, будут хуже результаты по максимальной частоте и ресурсам.
  19. Оба ядра пытаются развестись в одни и те же блоки, поэтому и не разводятся. Нужно скопировать файл и поменять все имена блоков (* HBLKNM = "kcpsm6_sandr" *) => (* HBLKNM = "kcpsm6_2_sandr" *) и т.д.
  20. В цинке есть пара гигабитных маков, может, их лучше использовать?
  21. What doesn't kill chip makes it stronger? Тем более, они на том же заборе написаны. Не даны рабочие режимы? Лучше уж запросить, чем на авось надеяться.
  22. Да поддерживает он SystemVerilog, по крайней мере интерфейсы точно. Расширение у файлов надо sv делать, или в свойствах исходника где-то галочка есть, что SV использовать нужно, нет среды под рукой.
  23. А проект синтезируется? Если диф. буферы есть, то после синтеза пины точно должны объединиться. Быть может, ошибка где-то, или по другим причинам не может внутрь IP заглянуть.
  24. Сначала стандарт выбрать, пины сами объединятся. Или тоже заблокировано?
  25. generate можно за always вынести, смысл такой же останется. Через цикл так надо писать: Q[i] = &D[i*4+3 -: 4];
×
×
  • Создать...