Reffum2
Участник-
Постов
177 -
Зарегистрирован
-
Посещение
Весь контент Reffum2
-
Да, Вы правильно поняли. Это "удлинитель" Ethernet.
-
Да, именно так. Для MAX10 такого модуля IP нет. Есть Ethernet IP, но он принимает данные в формате MII.
-
В моем случае данные приходят на ПЛИС по 2-м линиям LVDS: TX и RX. В таком же формате, в котором они приходят на SFP-модуль, например.
-
В onchip_memory2_0. Это область RAM.
-
Использую 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) : ... - никакого эффекта, ничего не меняется.
-
Свой физический уровень я должен реализовать, так как в MAX10 нет готового IP для обмена по LVDS по протоколу ETHERNET. То, что есть, работает через MII. Расстояние до 0.5 м.
-
Да. Именно так. Спасибо.
-
ETHERNET 100BASE-X на MAX10
Reffum2 опубликовал тема в Работаем с ПЛИС, области применения, выбор
Нужно сделать приемопередатчик ETHERNET 100BASE-X на MAX10. Данные ETHERNET приходят не по витой паре, а по 2-м линиям LVDS(RX/TX). Готового IP для MAX10 нет. Подскажите, как лучше это сделать? Подскажите стандарты 802.3, в которых описан формат MAC-фрейма и символы кодирования 8B/10B. -
Подскажите, пожалуйста, стандарты, в которых описано физическое кодирование ETHERNET 100BASE-X. Нужно реализовать приемопередатчик 100BASE-X на ПЛИС ALTERA MAX10. Сами Ethernet данные приходят по 2-м линиям LVDS. Я плохо знаю протоколы 802.3, не могу разобраться, где описан формат MAC-фрейма и кодирование символов 8B/10B.
-
Что такое UVM?
Reffum2 ответил Reffum2 тема в Методы и средства верификации ПЛИС/ASIC
В nVidia? Как найти примеры nVidia? В официальной документации есть "Hello World"-примеры. Но из них непонятно, зачем нужно UVM. Хотелось бы найти как-раз работающий пример из реальной жизни, чтобы понять преимущества UVM-методологии. -
Что такое UVM?
Reffum2 ответил Reffum2 тема в Методы и средства верификации ПЛИС/ASIC
Где можно найти примеры применения UVM, OVM, VMM? -
Что такое UVM?
Reffum2 опубликовал тема в Методы и средства верификации ПЛИС/ASIC
Хочу разобраться с тем, что такое UVM. На официальном сайте скачивал примеры и документацию. Но не смог разобраться по ней. Я понял, что это некая методология тестирования, но не понял, в чем ее смысл. Прошу тех, кто пользуется UVM поделиться примерами, ссылками. Рассказать о UVM. Спасибо! -
Подключение входа LVPECL
Reffum2 опубликовал тема в Интерфейсы
На ПЛИС MAX 10 подается сигнал LVPECL. Он развязан по постоянному току, то есть на выходе LVPECL стоят конденсаторы. В руководстве сказано, что на вход необходимо подать смещение по постоянному току. Можно ли это смещение получить из простого делителя напряжений? Не приведет ли это к сильному рассогласованию волнового сопротивления? Напряжение банка I/O 2.5 В. -
Прием данных от АЦП в ПЛИС
Reffum2 опубликовал тема в Работаем с ПЛИС, области применения, выбор
Создается проект на 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? Спасибо за ответы! -
Можно Вас попросить подробнее описать, как Вы это делали?
-
Требуется передавать данные от одного устройства на несколько других. В оба направления. Передатчик и приемник - ПЛИС. Для последовательной передачи достаточно скорости 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 Мб/с? МБ/с - это мегабит в секунду.
-
Буду благодарен, если Вы покажете какой-нибудь пример. Или дадите ссылку на информацию, где это объяснено.
-
Очевидно, нет, раз разработчики из XILINX его не используют. Но я без конечного автомата и Data Path не умею делать ничего сложнее счетчика. И поэтому и задал этот вопрос.
-
Вопрос возможно, покажется непонятным. Он касается методики описания HDL-проекта на HDL-языке, неважно каком, Verilog или VHDL Мне известны только такие методы описания модуля на HDL: 1. Если это тривиальный модуль, такой как счетчик, мультиплексор и др., то он описывается по шаблону, который легко найти в руководстве по HDL от производителя ПЛИС или в Google. 2. Если это схема соединяющая другие модули, то здесь тоже не сложно. Определить сигналы, определить компоненты, соединить их. 3. Если это не тривиальная схема с последовательной логикой. То я составляю алгоритм ее работы, выделяю какие нужны состояния и регистры(Control path и Data path). Составляю диаграмму состояний и определяю какое следующее значение будет у регистров в Data path. Определяю, какие значения должны будут иметь выходы. Таким образом, если я пишу на VHDL у меня обычно 4 процесса: 2 последовательных, определяют что на каждом такте Clk регистры и состояние должны принимать следующее значение, и 2 процесса, описывающие следующее состояние и следующее значение регистров. И еще описание выходных сигналов. Однако, когда я просматриваю чужой код, в том числе и код Xilinx модулей как для симуляции, так и для синтеза, я вижу что там все сделано не так, как в п.3. Они применяют какую-то другую методологию описания последовательных схем. Часто там даже нет машины состояний. Зато, очень много коротких описаний процессов. Но логику, по которой все это описано я не понимаю. Если, кто-то ее знает, объясните, пожалуйста.
-
Эти документы я видел. Но там очень общая информация. Например, "2300 - 2450 МГц подвижная, фиксированная, любительская, радиолокационная, 5.150, 5.282, 5.395" А можно узнать, конкретнее, кто использует эту область? Закреплена ли она за кем-то или ее можно свободно использовать? И какая должна быть максимальная мощность передатчика? И другую информацию.
-
Где найти распределение радиочастот?
Reffum2 опубликовал тема в Вопросы аналоговой техники
Заранее извиняюсь за дилетантский вопрос, но я не смог найти ответ сам. Меня интересует, где найти какие частоты кем используются в России и в других странах? Где это искать в Интернете или где-то еще? Например, кому выделены частоты 500 МГц, 5 ГГц? Или, какие частоты использует канал ОРТ, или кто-то еще?. Заранее спасибо за ответы. -
Привет. Я системный программист. Программирую FPGA. Но в устройстве биткоина понимаю слабо, так как мало разбирался. Но тоже было бы интересно разобраться как это работает во всех деталях.
-
Я сам не пробовал отлаживать через 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." Вы пробовали указывать эти опции? Они не работают?
-
как записать параметр во Flash МК?
Reffum2 ответил NikP тема в ARM, 32bit
Здравствуйте. Я, к сожалению, не работал с МК Миландр, деталей их устройства я не знаю. Но я программирую микроконтроллеры 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 -
Есть процессор SPARC. Он открытый, но я не пробовал его запускать. Но он от фирмы Sun, так что, думаю, проблем с ним нет.