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

johan

Свой
  • Постов

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

  • Посещение

Репутация

0 Обычный

Информация о johan

  • Звание
    Частый гость
    Частый гость

Старые поля

  • LinkedIn
    Array

Контакты

  • Сайт
    Array
  • ICQ
    Array

Посетители профиля

2 207 просмотров профиля
  1. Всем привет! При переезде проекта с Stratix V на Arria 10 столкнулся с интересной и неприятной вещью в тех местах, где происходит чтение данных из блоков памяти M20K (и на выходе этой памяти не стоит регистр): тайминг стал хуже и эти пути мешают укладыванию по частоте. Хотя я ожидал обратных результатов: Arria 10 позиционируется как более продвинутый чип, чем Stratix V. Для демонстрации этой проблемы я сделал минипроект: https://github.com/johan92/s5_a10_ram_test В его основе лежит SIMPLE DUAL PORT RAM, где с одного порта происходит чтение данных, прибавление каких-то чисел, и записывание данных обратно в память (через другой порт). В обоих проектах стоит clk с периодом в 3 нс. Собрать проект можно через make в папках s5/a10. В конце cборки сформируется отчет вида s5/a10.clk.paths.rpt, где будут указаны пути, у которых худший тайминг в проекте. Эти отчеты при сборке можно найти тут (осторожно, много трафика): https://github.com/johan92/s5_a10_ram_test/.../master/reports Что мы видим (кроме того, что Arria проиграла в тайминге): начало худшего пути у Arria выглядит так: 6.360; 1.991; RR; uTco; 2 ; EC_X70_Y173_N3 ; ; g_ram_test_engine[0].ram_test_engine|mem|altsyncram_component|...|portbdataout[0] 6.957; 0.597; RR; IC ; 6 ; LABCELL_X71_Y174_N9; High Speed; g_ram_test_engine[0].ram_test_engine|Add1~13|datad А у Stratix так: 4.358; 0.000; ; uTco; 32; M20K_X205_Y2_N0; ; ram_test:g_ram_test_engine[0].ram_test_engine|mem:mem|altsyncram:altsyncram_component|...|ram_block1a0~PORT_B_WRITE_ENABLE_REG 4.423; 0.065; RF; CELL; 2 ; M20K_X205_Y2_N0; High Speed; g_ram_test_engine[0].ram_test_engine|mem|altsyncram_component|...|portbdataout[3] 4.885; 0.462; FF; IC ; 4 ; LABCELL_X204_Y2_N9; High Speed; g_ram_test_engine[0].ram_test_engine|Add1~13|dataa Две наносекунды (1.991) на чтении из памяти на мой взгляд это очень странно (по сравнению с тем, что у Stratix). Каких-то изменений в структуре блоков памяти я не нашел между Statrix V и Arria 10 в даташитах (которые бы объяснили, что здесь происходит), поэтому я и решил создать этот топик. Встречали ли вы что-то похожее в своих проектах под Arria 10? Может быть я что-то делаю не так? Заранее спасибо за идеи и предложения :) Quartus: Version 16.0.2 Build 222 07/20/2016 SJ Standard Edition P.S. Ставить триггер на выходе памяти - это хорошая идея, но меня здесь интересует физика вопроса и маркетинг, который говорит, что Ария во всём лучше Стратикса :)
  2. Всем привет! Мы ищем коллегу - хорошего FPGA разработчика для создания сетевых решений на базе 10G / 40G Ethernet с использованием современных чипов фирмы Intel (Altera) (Arria 10 и Stratix V). Мы - финансово-технологическая компания, специализирующаяся на алгоритмической торговле на глобальных финансовых рынках. Обязанности: Разработка IP-ядер для обработки сетевого трафика (IP, TCP, UDP и др.) Разработка IP-ядер для математических вычислений и хранения/обработки данных Верификация IP-ядер, отладка на реальном оборудовании Требования к кандидатам: Опыт разработки - не менее 2 лет Знание языков Verilog / SystemVerilog Понимание принципов оптимизации по времени, ресурсам, пропускной способности Опыт разработки высокоскоростных схем (от 100 MHz) Будут преимуществом: Опыт работы с интерфейсами 10G / 40G Ethernet, PCI Express Опыт работы с FPGA фирмы Intel (Altera) серий Stratix и Arria Опыт работы с Quartus II, Qsys, TimeQuest, ModelSim Теоретические и практические знания по сетевым протоколам (Ethernet, IP, TCP, UDP) и PCI Express Опыт реализации структур хранения данных (деревья, хэш-таблицы, списки и тд.) Опыт работы с внешней памятью (DDR3, DDR4) Навыки программирования на C/C++ Знание скриптовых/интерпретируемых языков для оптимизации процесса разработки Знание Linux на уровне уверенного пользователя Что мы предлагаем: Помощь в релокации кандидату и членам семьи в Берлин Гибкий график работы Регулярные выездные рабочие сессии в разных точках Европы Молодой коллектив выпускников ведущих вузов Оплачиваемые компанией занятия иностранным языком Мы хотим узнать Вас лучше, поэтому просим ответить на следующие вопросы: Ждем Ваше резюме, ответы на вопросы, как и встречные вопросы/предложения на: [email protected] (Можно на русском языке). Примечание: Немецкий язык для работы в нашем отделе не нужен. Достаточно русского и технического английского. Есть возможность релокации не в Берлин, а на Кипр. Все уточнения по условиям работы, вилке зп, количеству плюшек в день и пр. желательно спрашивать по указанному адресу - я просто помог разместить объявление на этом форуме. Конечно, можно спрашивать вопросы в этом топике, у меня в личке тут/на хабре/линкедине, но не уверен, что я на всё смогу ответить: в некоторых я некомпетентен, а некоторую информацию не готов разглашать. Надеюсь на Ваше понимание в этом вопросе.
  3. novartis, посмотрите всё-таки отчет о сборке. Вам нужен файл PROJECT_NAME.merge.rpt, там есть табличка: +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ ; Partition Merge Netlist Types Used ; +--------------------------------+----------------+-------------------+------------------------+---------------------------------------------------------------------------------------------------+ ; Partition Name ; Partition Type; Netlist Type Used; Netlist Type Requested; Partition Contents ; +--------------------------------+----------------+-------------------+------------------------+---------------------------------------------------------------------------------------------------+ Где и будет написано, что он использовал. Если там будет Source, вместо Post-Fit, то надо смотреть лог компиляции, он там говорит, почему выбрал Source, вместо Post-Fit. Один из кейсов, если не ошибаюсь, у разных патрициях, которые общаются между собой выставлена разная оптимизация на "границах", и из-за этого происходит лишний пересинтез.
  4. Коллега, а можете рассказать в двух словах, что это за чип (семейство), сколько там было ячеек занято, какие хоть частоты?
  5.  Есть еще следующий уровень "профессиональных железячников" (которые и под ASIC пишут). Они не используют always @( * ) / always_comb и if в языке Verilog/SystemVerilog. И это не шутка. Объясняют тоже стабильностью и одинаковостью моделирования и реализации в железе и т.п.. assign и тернарный оператор (? :) наше всё.
  6. Ну, зависит от сферы. Если брать направление измерительного ободрудования. то некоторые похожие девайсы делает Кометех. Если телекоммуникационное с примесью фильтрации/шифрования, то это НорсиТранс, НТЦ Протей, Элтех (правда, там вроде нет FPGA) + компании, которые напрямую или косвенно связаны с ФСБ, и о которых не так много информации в интернете. Если брать направление девкитов/плат для разработки, то это ЗАО "ИнСис", ЗАО "Алмаз-СП", Инмис (inmys.com). Если брать измерительное оборудование во всем мире,то сюда добавляются EXFO, Accedian, JDSU, Fluke.
  7. На правах человека, который точно знает, почему конкретна эта вакансия возникла, позволю себе немного оффтопа: 1. У ребят (НТЦ Метротек) много есть идей и задач, как продакшен, так и исследовательских. Если решать все задачи будет один человек, то конкуренты, у которых пять людей решат эти задачи быстрее (Капитан Очевидность). 2. Если зайти на сайт в раздел вакансии (http://metrotek.spb.ru/hiring.html), то там расположена фраза "Для толковых инженеров у нас всегда открыты вакансии". Она там висит уже лет пять (а то и больше). Можно предположить, что это всё из-за текучки людей, которая может происходить по всем понятным причинам. Если Вам это важно и интересно, то лучше всего спрашивать у ТС в личке или на собеседовании, возможно он ответит на этот вопрос. Как я понял des333 хочет, что бы разработчики просто присылали своё резюме, где написана ожидаемая заработная плата. Если ваша ожидаемая ЗП в Питере 10К$ на этой или похожей вакансии, то просто напишите об этом в резюме и присылайте. Вот и всё. На сколько мне известно, НТЦ Метротек - компания негосударственная, поэтому если из Вашего резюме будет ясно, как используя ваши знания контора сможет получать в месяц доход больший, чем ваша зарплата, то возможно и 10К$ будут Вам платить (ну, потому что это тупо выгодно). (Есть нюанс, конечно, что если остальные разработчики вдруг получают намного меньше, то возможно возникнет напряженность, но это уже дело менеджмента как разрулить эту проблему.) Если Вам не нравится манера подачи объявления без вилки зарплат, то зачем агрессировать? (Мне, например, это тоже не нравится: мне комфортнее в вакансии сразу видеть порядок цифр.) Мы все вроде люди взрослые, и если компания решила, что без вилки зарплат она лучше найдет сотрудника, чем с ней, значит ей виднее. Правы они или нет - покажет только время. Если не найдут, и конкуренты обойдут, ну, значит, были не правы :) Понятно, что из США можно писать всё что угодно и про 10K$ и про остальное, как бы подтрунивая над теми, кто живет в России, но вроде говорят, что совет надо давать тогда, когда его просят. Если des333 спросит на форуме: то тогда можете писать все свои советы. Тогда они будут уместны.
  8. Ну, некоторую работу можно сократить. Можно, например, начать с того, чтобы не делать полноценный VGA, а сделать чернобелый терминальный режим 80x25 (или 80x30). Это позволит вам выводить текст с использованием 80 * 25 * 8 (бит на символ) = 16000 бит, что легко умещается в блоки памяти в самой FPGA. Тогда получается вот такая схема: Т.е: 1. VGA контроллер отдает vsync/hsync и номер пикселя (x/y в 640x480), который сейчас надо выводить. 2. По номеру пикселя понимаем какой ряд и строчку надо выводить (char_x/char_y в 80x30), и сдвиг в этом символе. 3. Отправляем их на charbuffer, который нам выдает то, какой именно символ надо выводить. 4. Отправляем номер символа на font RAM, которая хранит все возможные символы (типа, алфавит). 5. По сдвигу в символе (см. п.2) и той информации, что хранится в font RAM понимаем, нам надо выводить пустоту или закрашивать пиксель (если у нас чернобелый режим). 6. Выводит это на экран. Параллельно с этим всем конвеером сигналы vsync/hsync задерживаются на нужное количество тактов, для того что бы это всё было выровнено. Хотя скорее всего правильнее тащить эти сигналы (vsync/hsync) через конвеер, для того, чтобы точно не было расхождения, если вы добавите где-то задержку в конвеере, но не учтете это в другом месте. Подобную схему я делал когда делал тетрис (исходный код) для вывода строчек "Score, Lines, Level, New Game". Процессор занимается только тем, что пишет в charbuffer те символы, которые он хочет чтобы были на экране через Avalon-MM или AXI. Тем самым вы сможете писать "hello world from MIPSfpga" на экране :) P.S. Скорее всего в интернете где-то есть готовые С-библиотеки, которые производят всю нудную работу по переносу строк, сдвигам для такого терминала и пр.
  9. Кстати, Альтера использует SV-интерфейсы в своем коде (например, в автосгенерированных исходниках после OpenCL), но без модпортов. Например, тыц и тыц.
  10. Перечитал Ваше первое сообщение более внимательно, и понял, что вопрос с двойной буферизацией был лишним - я его задал на автомате. Про тайминги вы всё-таки ответьте, потому что лучше было бы, если бы они укладывались ;) Ммм, а почему бы не узнать какая задержка между координатами и получением цвета? Например, просимулировать в ModelSim'e? MIPSfpga можно симулировать или там зашифрованный код? Если нельзя, то почему бы не глянуть эту задержку в SignalTap'e? Увидев эту задержку Вы сможете сделать вывод, может ли она приводить к такой картинке или нет. Как я понял, у вас плата DE0-CV, и судя по даташиту у нее четырехбитных VGA. 640 * 480 * ( 3 (RGB) * 4 (bits) ) = 3686400, что многовато, а, следовательно, если мы хотим такое изображение выводить, то нам нужно использовать внешнюю память. На этой плате стоит внешняя 64MB SDRAM, чего должно нам хватить с лихвой. Я бы сделал так: 1. Использую какую-то готовую корку от Альтеры (уверен, что в примерах к этой плате она идет, названия сейчас не скажу), которая позволяет писать/читать через интерфейс Avalon-MM в эту память. 2. Подключаю эту память к MIPSfpga, делаю какие-то функции/макросы которые позволяют писать/читать в эту память (т.е. просто чтение по какому-то оффсету). 3. Беру готовые альтеровские IP-ядра Frame Reader и Clocked Output из Altera VIP. Подключаю в систему. 4. Смотрю драйвер для Altera Frame Reader, портирую оттуда функции altvipfb_start_hw и altvipfb_disable_hw. 5. Настраиваю через Avalon-MM (csr) Altera Frame Reader, чтобы он начал читать например с нулевого адреса внешней памяти. 6. Через Avalon-MM с помощью функций, разработанных в п.2 пишу нужные мне цвета в нужных пикселях (адресах). Они отобразятся на экране. В таком подходе вы используете готовые компоненты, однако по ресурсам (FPGA) это будет дорогое удовольствие :) Двойной буферизации в таком варианте нет, и если у вас будет картинка быстро динамически менятся, то эти эффекты возможно будут видны. Я примерно всё это проделывал, когда поднимал VGA на плате с Cyclone V SoC в linux'e (т.е. делал линуксовый фреймбуфер), и там этих эффектов не заметил, хотя выводил и GUI (window manager). UPD: Схему приложил в аттаче. Стрелки идут от мастера к слейву.
  11. Поэтому вы решили стать еще одним инженером? СЗОТ, но почему нельзя просто нанять гуру (который вы хотите, чтобы Вас обучал) к себе и у него консультироваться по техническим вопросам? Недоверие, что человек может в любой момент уйти + кража идей? Дак это решается хорошим и правильно составленным контрактом.
  12. Уложился ли проект по таймингам? Делаете-ли какую-то двойную буферизацию?
  13. Ну, мы же не знаем какая плата у ТС, какие требования по ресурсам/частоте/времени на разработку :) Если под руками Stratix/Arria и задача большие массивы обрабатывать, то OpenCL/HLS - почему бы и нет?
  14. Всем привет. В проекте для анализа некоторых Avalon-MM шин решил применить Bus Analyzer Toolkit. Отметил те интерфейсы (штук пять, причем в нескольких клоковых доменах), которые хочу смотреть в Qsys (как по инструкции), пересобрал, перешил FPGA. Подключился через JTAG и зашел в System Console. System Console распознала прошивку, но в анализаторе шины никаких сигналов не видно (там где Name и Status). (см. скриншот в аттаче). Нажатие "старт" к особому успеху не приводит - ничего не меняется (каких-нибудь графиков и пр.) Судя по отчёту фиттера модули для накопления статистики по интерфейсу создались. Я понимаю, что эта фича вроде бы бета и может не сильно стабильно работать на больших проектах, но хотелось бы на нее посмотреть :) Было ли у кого-то похожее? Может это какая-то известная проблема и есть простой workaround? Версия: Quartus Prime Version 15.1.1 Build 189 (без патчей) Заранее спасибо! :)
  15. В ресурсах на офсайте de1-soc есть архив с Linux Ubuntu Desktop. Для поднятия фрейбуфера вам надо: - правильно соединить в QSYS модули Frame Reader и Clocked Output из Altera VIP - прописать в DTB (назначив правильный адрес в системе) hps_0_h2f: bridge@0xc0000000 { compatible = "altr,bridge-1.0", "simple-bus"; reg = < 0xc0000000 0x20000000 >; #address-cells = < 1 >; #size-cells = < 1 >; ranges = <0x00000000 0xc0000000 0x00000080 >; alt_vip_vfr_1: vip2@0x0 { compatible = "ALTR,vip-frame-reader-13.0", "ALTR,vip-frame-reader-9.1"; reg = < 0x00000000 0x00000080 >; max-width = < 800 >; /* MAX_IMAGE_WIDTH type NUMBER */ max-height = < 600 >; /* MAX_IMAGE_HEIGHT type NUMBER */ mem-word-width = < 128 >; bits-per-color = < 8 >; }; }; - правильно всё подключить к пинам VGA - использовать драйвер https://github.com/altera-opensource/linux-...bdev/altvipfb.c - после прошивки FPGA, загрузки с правильным DTB и загрузки драйвера вы увидите что-то типа: [ 66.424283] altvipfb c0000000.vip2: fb0: altvipfb frame buffer device at 0x2c000000+0x12c000 И появится /dev/fb0.
×
×
  • Создать...