altlogic
Свой-
Постов
222 -
Зарегистрирован
-
Посещение
Репутация
0 ОбычныйИнформация о altlogic
-
Звание
Местный
- День рождения 19.04.1986
Контакты
-
Сайт
Array
-
ICQ
Array
Информация
-
Город
Array
Посетители профиля
1 808 просмотров профиля
-
Active-HDL simulation
altlogic ответил Mad_kvmg тема в Среды разработки - обсуждаем САПРы
Добавлю от себя, что простое проставление галочек не помогло. Мне понадобилось в настройках Design / settings / acess to design object проставить галочку в одном месте, а именно: Enable Read/Write access for SLP accelerated nets (+w_nets), а затем в поле Unit(..) прописать: +m+cmos_camera где cmos_camera - это имя модуля содержащего симулируемый сигнал. инфо: http://www.aldec.com/resources/manuals/Act...DL/vsa00019.htm -
А вот на чем я накололся... Карта памяти регистров SG-DMA составлена не как у всех остальных периферийных устройств SOPC Builder. Между регистрамии SGDMA в карте памяти "дырки" по три слова. Не понятно засем это сделано, и не понятно, почему на карте памяти в документации не отражены зарезервированные регистры. Но я сам виноват - в таблице четко указано - смещение в 32-х битных словах.
-
1. Базовый адрес в SOPC-Builder и system.h сопадают, проверял уже. 2. Знаком, пользовался дефайнами. Нашел даже, как мне показалось баг, а именно в строке #define ALTERA_AVALON_SGDMA_CONTROL_DESC_POLL_FREQ_OFST (20) должно быть определено смещение 19. 3. А вот тут то и нашел ошибку. Неправильно использоал функцию IOWR/IORD. Смещение этой функци в байтах, а не в словах. Спасибо, Konst_777! Ваш код действительно работал, я увидел разницу со своим и нашел ошибку. Досадная ошибка...
-
Спасибо, буду иметь ввиду. Надо поковырять этот модуль, чтобы посмотреть прицнип управления.
-
Убийственный компонет SGDMA... Подключил в свой проект обычный DMA, как рекомендовал barabek. Остается сделать интерфейс Memory Mapped к своему модулю и в принципе от SGDMA тогда можно отказаться в моем проекте. Но вопрос останется открытым. Чем так может оличаться SGDMA от других IP-core, что не позволяет писать в свои регистры данные. Где у меня может быть ошибка?... Маскимальный размер транзакции DMA 2^32 байт, в то время как у SGDMA всего лишь 2^16. Изображение 640*480*3 байт будет передано за одну транзакцию DMA, а для передачи по SGDMA нужно делать несколько дескрипторов.
-
Здравствуйте! Простая по идее задача - хочу созадать свой компонент I2C для SOPC с возможностью конфигурирования его через внутренние регистры компонента (да хотя бы флаг RUN реализовать:) ). Как это сделать? Нашел на сайте Altera пример Memory Mapped Slave. В этом шаблоне у устройства задается использование 16 внутренних регистров. Но там мощный шаблон, на 700 сток кода. Я аж испугался:) А мне кажется можно это все сделать проще. Ведь всего лишь нужно вытянуть из SOPC информацию о том, по какому адресу он разместил внутренние регистры устройства, ну и сделать их программно доступными конечо с шины Avalon. Примеров других пока не разбирал. Но мне кажется моя задача должна встречаться у всех разработчиков периферии под процессор для FPGA. Товарищ показал код для Xilinx MicroBlaze в аналогичной ситуации. Там, как и в примере Altera в описании компонента применяется специальная нотация. Смотрел IP-core I2C от Terasic. Там, как я понял используется несколько отдельных регистров ввода-вывода, то есть устройство состоит из нескольких устройств на шине Авалон. Видимо это вообще самое простое решение. Но ведь как-то некрасиво?..
-
Здравствуйте! Решил подключить к Nios II IP-core Altera SG-DMA для переноса данных из устройства в память. Проблема заключается в том, чтот процессор не может изменить состояние регистров SGDMA. В регистре управления всегда одно и то же значение - 0x01. При этом состояние регистров PIO-Core процессор изменить может (зажигаю светодиоды). Проект выполняю в режимие дебага, Nios II SBT. Есть идеи? unsigned char rw[3]; int base, offset, data; printf("\nEnter command (Example: w 1)\n"); scanf("%1s %x", rw, &offset); base = SGDMA_0_BASE; if (rw[0] == 'w') { printf("Enter write data: "); scanf ("%x",&data); printf("\n"); printf("Generated IOWR(0x%x, 0x%x, 0x%x)...\n", base, offset, data); IOWR(base, offset, data ); printf ("Read at base 0x%x with offset 0x%x data 0x%x\n",base,offset, IORD(base, offset)); }
-
Опишу способ программного ввода данных с видеокамеры в NIOS. Необходимые компоненты SOPC Builder: Clocked Video Input (Video and Image Processing\IO\) On-Chip FIFO Memory (Memories and Memory Controllers\External Memory Interfaces\On-Chip\) Так как ширина шины камеры сотавляет обычно 10-12 бит, что меньше ширины шины данных NIOS, необходимо добавление адаптеров System->Insert Avalon-ST Adapters, после чего добавляются следующие адаптеры: Avalon-ST Channel Adapter (Bridges and Adapters\Streaming\) Avalon-ST Data Format Adapter (Bridges and Adapters\Streaming\) Streaming\Avalon-ST Timing Adapter (Bridges and Adapters\Streaming\) FIFO необходимо сконфигурировать в режим Avalon-ST sink to Avalon-MM read slave. В прграммном обеспечении созданной МПС необходимо также сконфигурировать созданный буфер FIFO при помощи On-Chip FIFO Memory API. Чтение данных из буфера, как я понял осуществляется функциями вида int altera_avalon_fifo_read_fifo(). К выходу FIFO в SOPC Builder в принципе можно цеплять обычный DMA Controller Core, как я понимаю для аппаратного захвата данных. Документация на On-Chip FIFO Memory Core приведена в главе 16 Embedded Peripherals IP User Guide. Документация на Clocked Video Input MegaCore Function в главе 10 Video and Image Processing Suite User Guide
-
На счет Avalon-ST. Оказывается, там ничего и писать то не надо. У Altera есть IP-Core Clocked Video Input, который позволяет ввести изображение с камеры в систему. Но ввод осуществляется в соответсвии с протоколом Avalon-ST Video Protocol. Каким образом затем вывести информацию с интерфейса Avalon-ST на интерфейс Avalon Memory Mapped я не понимаю. Ни одного примера не нашел. Как поток данных с Avalon-ST направить в память? Похоже нашел где искать ответ. Мне нужен On-Chip FIFO Memory Core. Данный модуль позволяет осуществлять обмен между Avalon-ST и Avalon-MM в обоих направлениях. Читаю документацию на него... Освоил. Не то. Данные с выхода этого буфера должен считывать программно NIOS. Естественно меня такое положение дел не устраивает. Мне нужна аппаратная запись данных с видеокамеры в память. Видимо это сможет сделать контроллер прямого доступа в память Scatter-Gather DMA Controller Core. Почитаю его документацию.
-
То есть вы предлагете выбросить из существующего проекта контоллер памяти, написанный на Verilog, и заменить его контроллером SOPC-Builder'а? Я боюсь, всплывут подводные камни по настройке контроллера и подгонке его под VGA-контроллер. Эти два блока тесно связаны между собой в сущесвтующем проекте. То есть всё-таки варинат с двумя контоллерами SDRAM имеет право на жизнь? Много сигналов. И не для всех понятно соответсвие шине Avalon... Но если это правильный путь, то тогда нужно идти им:)
-
Здравствуйте! Необходимо создать систему обработки видеоизображений с применением софт-процессора NIOS II. Задача такая: записать изображение с CMOS-камеры в оперативную память и произвести над ним некоторую обработку при помощи процессора. Аппаратное обеспечение: стенд DE2-115 (Cyclone 4), плата с камерой TRDB-D5M. Нашел пример от альтеры DE2_115_CAMERA, в котором реализовано на верилоге примерно следующая система: захват изображения->декодер->контроллер SDRAM->ТВ-деодекодер Подумал, что всего-то делов - подключить к этой системе NIOS и забрать данные из SDRAM. Не тут-то было:) Задачу решаю уже не первый день... Мои варианты решения задачи: 1. Решил отказаться от идеи расшаривания SDRAM. Решил писать картинку в SRAM, и расшарить её. От SDRAM отказался по следующим соображениям: не понимаю, может ли быть в одной системе два контроллера памяти - один у HDL, другой - у NIOS. Если такое возможно, то как будет происходить разделение шины между ними, и самое главное - какой из контроллеров будет заниматься регенерацией памяти. SRAM подключил через Avalon MM Tristate Bridge ( по инструкции http://naliwator.narod.ru/les/les_nios_sram_00.html). В Top-level дизайн проекта DE2_115_CAMERA добавил соответсвенно свою систему из сопц-билдера. Софт-процессор с памятью SRAM заработал. Когда я попытался подключить шину моста SRAM к декодеру изображения - ничего не получилось. От ошибки разделения пинов не смог избавиться. Точнее для шины данных ошибку смог побороть, а для шины адреса - нет(?). Пришёл к выводу, что таким образом Расшарить SRAM у меня не получится. Подключение HDL-дизайна к выводам FPGA (assign SRAM_ADDR[19:0] = rSRAM_ADDR[19:0];) приводит к описанной выше ошибке. 2. Создание в SOPC-Builder компонента на основе HDL описания всей камеры целиком. То есть создать такой компонент в который запихать всё - и блок захвата, и блоки обработки и контроллер SDRAM. Как управлять этим монстром - не понятно. Не ясно что делать с разнородными интерфейсами модуля - там и Conduit и Memory Mapped. Предлагаемый подход я нашёл в реализации "Nios II CRC Acceleration Example Design v2.2.0"(http://www.altera.com/support/examples/nios2/exm-crc-acceleration.html). Но там компонент попроще - всего лишь генератор CRC. 3. Создание в SOPC-Builder компонента на основе HDL модуля контроллера SDRAM. Придётся перенести SDRAM-контроллер с HDL в процессор. Возможно самый правильный подход. Пока не рассматривал. В итоге вопрос, как же обмениваться данными между HDL и NIOS так и повис в воздухе. Видел советы по использованию в подобных ситуациях SGDMA, DMA... Но мне не дает покоя мысль, что всё должно быть гораздо проще. Какой путь более правильный и менее трудозатратный в моем случае? Подскажите пожалуйста. top-level по первому варианту решения - в приложении. Ниже приведен отрывок топ-левела, где к выводам NIOS подключен HDL код инициализации SRAM памяти. ... nios u9( .clk_0 (CLOCK_50), .reset_n (reset_n), .bridge_2_sram_address (SRAM_ADDR), .bridge_2_sram_byteenablen ({SRAM_UB_N, SRAM_LB_N}), .bridge_2_sram_data (SRAM_DQ), .bridge_2_sram_writen (SRAM_WE_N), .in_port_to_the_sw (in_port_to_the_sw), .out_port_from_the_led (out_port_from_the_led), .rxd_to_the_uart (rxd_to_the_uart), .txd_from_the_uart (txd_from_the_uart) ); ... always@(posedge CLOCK_50 or negedge iRST) begin if(!iRST) begin writen_pixel <= 0; nDW <= 1'b1; end else begin if (writen_pixel < 400*300) begin nDW <= 1'b1; writen_pixel <= writen_pixel + 1; rSRAM_ADDR[19:0] <= writen_pixel; rSRAM_CE_N <= 1'b0; rSRAM_DQ[15:0] <= 16'h5555; rSRAM_LB_N <= 1'b0; rSRAM_OE_N <= 1'b0; rSRAM_UB_N <= 1'b1;//сташий байт не используется rSRAM_WE_N <= 1'b0; end else begin rSRAM_ADDR[19:0] <= 20'hZZZZZ; rSRAM_CE_N <= 1'bz; rSRAM_DQ[15:0] <= 16'hZZZZ; rSRAM_LB_N <= 1'bZ; rSRAM_OE_N <= 1'bZ; rSRAM_UB_N <= 1'bZ;//сташий байт не используется rSRAM_WE_N <= 1'bZ; nDW <= 1'b0; end end //else (nRST==1) end assign SRAM_DQ = rSRAM_DQ; assign SRAM_ADDR[19:0] = rSRAM_ADDR[19:0]; assign SRAM_CE_N = rSRAM_CE_N; assign SRAM_LB_N = rSRAM_LB_N; assign SRAM_OE_N = rSRAM_OE_N; assign SRAM_UB_N = rSRAM_UB_N; assign SRAM_WE_N = rSRAM_WE_N; ... camera.v
-
Работа с модулем ZG2100 ?
altlogic ответил algidim тема в Wireless/Optic
Здравствуйте! Тоже случайно наткнулся на эти модули. До этого очень долго искал модули с доступом к MAC-уровню WiFi. Скажите, как стоят дела с документацией на них? Вам удалось найти документацию на регистры модуля? -
Согласен. Первую плату перепаял, как мне показалось неправильно. Одна дорожка отслоилась, но тем не менее затем микросхема припаялась отлично. При перепайке второй платы техпроцесс поменял:))) Результат был плачевным, она умерла...
-
Это же ужас. Я ведь пишу практически всё на Си, сколько бы я искал эту ошибку... Как быстро вы установили, что ядро неверно выполняет инструкцию?
-
А какая у вас ревизия? В errata на UC3A3/A4 написано, что умножение для ревизии D не работает. Это ж что, целую ревизию на свалку? Жёстко:))) Multiply instructions do not work on RevD. All the multiply instructions do not work. Fix/Workaround Do not use the multiply instructions.