Jump to content

    

Reffum2

Участник
  • Content Count

    177
  • Joined

  • Last visited

Everything posted by Reffum2


  1. Да, Вы правильно поняли. Это "удлинитель" Ethernet.
  2. Да, именно так. Для MAX10 такого модуля IP нет. Есть Ethernet IP, но он принимает данные в формате MII.
  3. В моем случае данные приходят на ПЛИС по 2-м линиям LVDS: TX и RX. В таком же формате, в котором они приходят на SFP-модуль, например.
  4. Использую Altera MAX10. Quartus 16.1. Код программы NIOS записываю в UFM. Увидел непонятную мне вещь: секция .bss полностью записывается в UFM, видимо, чтобы потом скопировать ее в RAM, как и секцию .rwdata. То есть, во flash записано 4 кБ нулей. Ниже кусок из objdump. 0000ab40 - это адрес в UFM. Sections: Idx Name Size VMA LMA File off Algn 0 .entry 00000020 00008000 00008000 00001000 2**5 CONTENTS, ALLOC, LOAD, READONLY, CODE 1 .exceptions 00000160 00008020 00008020 00001020 2**2 CONTENTS, ALLOC, LOAD, READONLY, CODE 2 .text 00002808 00008180 00008180 00001180 2**2 CONTENTS, ALLOC, LOAD, READONLY, CODE 3 .rodata 00000094 0000a988 0000a988 00003988 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 4 .rwdata 00000124 00010000 0000aa1c 00004000 2**2 CONTENTS, ALLOC, LOAD, DATA, SMALL_DATA 5 .bss 000011f8 00010124 0000ab40 00004124 2**2 ALLOC, SMALL_DATA Скрипт компоновщика сгенерирован автоматом, я его не менял, вот кусок из него. onchip_memory2_0 - это RAM. .bss : { __bss_start = ABSOLUTE(.); PROVIDE (__sbss_start = ABSOLUTE(.)); PROVIDE (___sbss_start = ABSOLUTE(.)); *(.dynsbss) *(.sbss .sbss.* .gnu.linkonce.sb.*) *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) *(.scommon) PROVIDE (__sbss_end = ABSOLUTE(.)); PROVIDE (___sbss_end = ABSOLUTE(.)); *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) . = ALIGN(4); __bss_end = ABSOLUTE(.); } > onchip_memory2_0 Пробовал писать так: .bss (NOLOAD) : ... - никакого эффекта, ничего не меняется.
  5. Свой физический уровень я должен реализовать, так как в MAX10 нет готового IP для обмена по LVDS по протоколу ETHERNET. То, что есть, работает через MII. Расстояние до 0.5 м.
  6. Нужно сделать приемопередатчик ETHERNET 100BASE-X на MAX10. Данные ETHERNET приходят не по витой паре, а по 2-м линиям LVDS(RX/TX). Готового IP для MAX10 нет. Подскажите, как лучше это сделать? Подскажите стандарты 802.3, в которых описан формат MAC-фрейма и символы кодирования 8B/10B.
  7. Подскажите, пожалуйста, стандарты, в которых описано физическое кодирование ETHERNET 100BASE-X. Нужно реализовать приемопередатчик 100BASE-X на ПЛИС ALTERA MAX10. Сами Ethernet данные приходят по 2-м линиям LVDS. Я плохо знаю протоколы 802.3, не могу разобраться, где описан формат MAC-фрейма и кодирование символов 8B/10B.
  8. В nVidia? Как найти примеры nVidia? В официальной документации есть "Hello World"-примеры. Но из них непонятно, зачем нужно UVM. Хотелось бы найти как-раз работающий пример из реальной жизни, чтобы понять преимущества UVM-методологии.
  9. Где можно найти примеры применения UVM, OVM, VMM?
  10. Хочу разобраться с тем, что такое UVM. На официальном сайте скачивал примеры и документацию. Но не смог разобраться по ней. Я понял, что это некая методология тестирования, но не понял, в чем ее смысл. Прошу тех, кто пользуется UVM поделиться примерами, ссылками. Рассказать о UVM. Спасибо!
  11. На ПЛИС MAX 10 подается сигнал LVPECL. Он развязан по постоянному току, то есть на выходе LVPECL стоят конденсаторы. В руководстве сказано, что на вход необходимо подать смещение по постоянному току. Можно ли это смещение получить из простого делителя напряжений? Не приведет ли это к сильному рассогласованию волнового сопротивления? Напряжение банка I/O 2.5 В.
  12. Создается проект на XILINX VIRTEX-6. В нем также используется АЦП ADS42LB49. Данные идут в режиме DDR. Данные от АЦП в ПЛИС идут по 7 линиям в режиме DDR, то есть на каждой линии данных передается 1 бит на фронте, и 1 бит на спаде CLK. CLK также идет от АЦП. Скорость 250 MSPS. Я хочу спросить, как сделать правильно прием данных от АЦП в ПЛИС, и как затем передать эти данные от тактового домена с CLK АЦП в домен ПЛИС? Мне не понятны следующие вопросы: 1. Руководства XILINX говорит, что так как на такой большой скорости между линиями CLK и линиями данных возникает разброс по времени, лучше не захватывать данные АЦП по CLK АЦП, а подать CLK АЦП на PLL в ПЛИС, и сдвинуть выходной CLK PLL на правильную фазу. Эту фазу нужно подобрать динамически, так чтобы фронты CLK PLL приходились посередине бита данных от АЦП. Это описано, например, здесь http://www.elec.canterbury.ac.nz/intranet/...tes/xapp268.pdf. Однако, там рассматривают АЦП с 1 линией данных. А у ADS42LB49 линий 7. Если я правильно понимаю, мне нужно сформировать 7 CLK PLL, по 1 для каждой линии данных, и захватывать DDR данные по нему? 2. Как передать захваченные данные от домена с CLK PLL в тактовый домен, по которому работает логика ПЛИС? Если через FIFO, то по какому CLK записывать данные в это FIFO? Спасибо за ответы!
  13. Можно Вас попросить подробнее описать, как Вы это делали?
  14. Требуется передавать данные от одного устройства на несколько других. В оба направления. Передатчик и приемник - ПЛИС. Для последовательной передачи достаточно скорости 50-100 Мб/с. Устройства связаны кабелем или шлейфом и расстояние между ними до 0,5 м. В качестве физического протокола я выбрал LVDS. У меня возникли такие вопросы: 1. Можно ли передавать данные по обычному SPI. Т.е. использовать 3 линии SCK, MOSI, MISO(через LVDS)? Или это слишком высокая скорость? 2. Можно ли использовать синхронный или асинхронный UART на 50-100 Мб/с? 3. Какие еще варианты посоветуете? Я работал с SPI только на скоростях до 25 Мб/с и только через КМОП. Разумеется, есть быстрые последовательные протоколы(RapidIO, PCI-E, Aurora и др). Но в спецификациях на них указано что они разработаны для скоростей в 10 раз выше нужной мне, и для их использования нужна будет более дорогая ПЛИС на стороне приемника. И отлаживать их дольше. Еще хочу задать вопрос по протоколам. Мне известны протоколы для низких скоростей: RS-4.., CAN, SPI, I2C и др. И известны высокоскоростные: PCI-E, Ethernet. Существуют ли решения для скоростей именно 25-~ 200 Мб/с? МБ/с - это мегабит в секунду.
  15. Буду благодарен, если Вы покажете какой-нибудь пример. Или дадите ссылку на информацию, где это объяснено.
  16. Очевидно, нет, раз разработчики из XILINX его не используют. Но я без конечного автомата и Data Path не умею делать ничего сложнее счетчика. И поэтому и задал этот вопрос.
  17. Вопрос возможно, покажется непонятным. Он касается методики описания HDL-проекта на HDL-языке, неважно каком, Verilog или VHDL Мне известны только такие методы описания модуля на HDL: 1. Если это тривиальный модуль, такой как счетчик, мультиплексор и др., то он описывается по шаблону, который легко найти в руководстве по HDL от производителя ПЛИС или в Google. 2. Если это схема соединяющая другие модули, то здесь тоже не сложно. Определить сигналы, определить компоненты, соединить их. 3. Если это не тривиальная схема с последовательной логикой. То я составляю алгоритм ее работы, выделяю какие нужны состояния и регистры(Control path и Data path). Составляю диаграмму состояний и определяю какое следующее значение будет у регистров в Data path. Определяю, какие значения должны будут иметь выходы. Таким образом, если я пишу на VHDL у меня обычно 4 процесса: 2 последовательных, определяют что на каждом такте Clk регистры и состояние должны принимать следующее значение, и 2 процесса, описывающие следующее состояние и следующее значение регистров. И еще описание выходных сигналов. Однако, когда я просматриваю чужой код, в том числе и код Xilinx модулей как для симуляции, так и для синтеза, я вижу что там все сделано не так, как в п.3. Они применяют какую-то другую методологию описания последовательных схем. Часто там даже нет машины состояний. Зато, очень много коротких описаний процессов. Но логику, по которой все это описано я не понимаю. Если, кто-то ее знает, объясните, пожалуйста.
  18. Эти документы я видел. Но там очень общая информация. Например, "2300 - 2450 МГц подвижная, фиксированная, любительская, радиолокационная, 5.150, 5.282, 5.395" А можно узнать, конкретнее, кто использует эту область? Закреплена ли она за кем-то или ее можно свободно использовать? И какая должна быть максимальная мощность передатчика? И другую информацию.
  19. Заранее извиняюсь за дилетантский вопрос, но я не смог найти ответ сам. Меня интересует, где найти какие частоты кем используются в России и в других странах? Где это искать в Интернете или где-то еще? Например, кому выделены частоты 500 МГц, 5 ГГц? Или, какие частоты использует канал ОРТ, или кто-то еще?. Заранее спасибо за ответы.
  20. Привет. Я системный программист. Программирую FPGA. Но в устройстве биткоина понимаю слабо, так как мало разбирался. Но тоже было бы интересно разобраться как это работает во всех деталях.
  21. Я сам не пробовал отлаживать через SDK систему из нескольких микросхем в одной JTAG цепи. Но судя по документации "Embedded System Tool Reference Manual" в XMD при вызове команды connect можно ей передавать параметры JTAG. И в этом же документе указан параметр "devicenr <MicroBlaze device position>" и его описание "Position in the JTAG chain of the FPGA device containing the MicroBlaze processor. The device position number startsfrom 1." Вы пробовали указывать эти опции? Они не работают?
  22. Здравствуйте. Я, к сожалению, не работал с МК Миландр, деталей их устройства я не знаю. Но я программирую микроконтроллеры STM ARM ST32F4x и STM32F1x. И для них я я решал ту же задачу, записывал настройки во Flash память. Я опишу, как я делал это у себя. Flash память МК поделена на сектора разного размера(16, 32, 64 Кбайт) Стереть можно только сектор целиком. В Reference Manual не ясно написано, должна ли программа при записи во flash выполняться из SRAM или просто из другого Flash сектора. Я посмотрел примеры от ST, в них в SRAM ничего не записывалось и процедура стирания Flash была записана просто в другой Flash сектор. Я так и делаю у себя и это работает. То есть, если я стираю/записываю сектор 10, то программа может выполнятся из Flash, но не в секторе 10. Вот пример того, как я стираю/записываю flash у себя в STM32F4x /** * @brief Запись блока во flash * @dst Адрес назначения(куда копировать) * @src Адрес источника(откуда копировать) * @num Кол-во байт для копирования * @retval dst */ void* flash_memcpy(void* dst, void* src, int num) { int i; irq_disable(); FLASH_Unlock(); for(i = 0; i < num; i++) { FLASH_ProgramByte((uint32_t)(dst) + i, ((uint8_t*)src)[i]); FLASH_WaitForLastOperation(); } FLASH_Lock(); irq_enable(); return dst; } /** * @brief Стереть содержимое flash-памяти */ void flash_erase(void) { irq_disable(); FLASH_Unlock(); FLASH_EraseSector(FLASH_Sector_11, VoltageRange_3); FLASH_Lock(); irq_enable(); } Если же Вам все же нужно выполнять программу из SRAM, то в Keil проще всего воспользоваться функциональностью scatter/loader, например, как описано вот здесь. http://www.keil.com/support/docs/3723.htm
  23. Есть процессор SPARC. Он открытый, но я не пробовал его запускать. Но он от фирмы Sun, так что, думаю, проблем с ним нет.