Jump to content

    

altlogic

Свой
  • Content Count

    222
  • Joined

  • Last visited

Community Reputation

0 Обычный

About altlogic

  • Rank
    Местный
  • Birthday 04/19/1986

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Recent Profile Visitors

1525 profile views
  1. Добавлю от себя, что простое проставление галочек не помогло. Мне понадобилось в настройках 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
  2. А вот на чем я накололся... Карта памяти регистров SG-DMA составлена не как у всех остальных периферийных устройств SOPC Builder. Между регистрамии SGDMA в карте памяти "дырки" по три слова. Не понятно засем это сделано, и не понятно, почему на карте памяти в документации не отражены зарезервированные регистры. Но я сам виноват - в таблице четко указано - смещение в 32-х битных словах.
  3. 1. Базовый адрес в SOPC-Builder и system.h сопадают, проверял уже. 2. Знаком, пользовался дефайнами. Нашел даже, как мне показалось баг, а именно в строке #define ALTERA_AVALON_SGDMA_CONTROL_DESC_POLL_FREQ_OFST (20) должно быть определено смещение 19. 3. А вот тут то и нашел ошибку. Неправильно использоал функцию IOWR/IORD. Смещение этой функци в байтах, а не в словах. Спасибо, Konst_777! Ваш код действительно работал, я увидел разницу со своим и нашел ошибку. Досадная ошибка...
  4. Спасибо, буду иметь ввиду. Надо поковырять этот модуль, чтобы посмотреть прицнип управления.
  5. Убийственный компонет SGDMA... Подключил в свой проект обычный DMA, как рекомендовал barabek. Остается сделать интерфейс Memory Mapped к своему модулю и в принципе от SGDMA тогда можно отказаться в моем проекте. Но вопрос останется открытым. Чем так может оличаться SGDMA от других IP-core, что не позволяет писать в свои регистры данные. Где у меня может быть ошибка?... Маскимальный размер транзакции DMA 2^32 байт, в то время как у SGDMA всего лишь 2^16. Изображение 640*480*3 байт будет передано за одну транзакцию DMA, а для передачи по SGDMA нужно делать несколько дескрипторов.
  6. Здравствуйте! Простая по идее задача - хочу созадать свой компонент I2C для SOPC с возможностью конфигурирования его через внутренние регистры компонента (да хотя бы флаг RUN реализовать:) ). Как это сделать? Нашел на сайте Altera пример Memory Mapped Slave. В этом шаблоне у устройства задается использование 16 внутренних регистров. Но там мощный шаблон, на 700 сток кода. Я аж испугался:) А мне кажется можно это все сделать проще. Ведь всего лишь нужно вытянуть из SOPC информацию о том, по какому адресу он разместил внутренние регистры устройства, ну и сделать их программно доступными конечо с шины Avalon. Примеров других пока не разбирал. Но мне кажется моя задача должна встречаться у всех разработчиков периферии под процессор для FPGA. Товарищ показал код для Xilinx MicroBlaze в аналогичной ситуации. Там, как и в примере Altera в описании компонента применяется специальная нотация. Смотрел IP-core I2C от Terasic. Там, как я понял используется несколько отдельных регистров ввода-вывода, то есть устройство состоит из нескольких устройств на шине Авалон. Видимо это вообще самое простое решение. Но ведь как-то некрасиво?..
  7. Здравствуйте! Решил подключить к 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)); }
  8. Опишу способ программного ввода данных с видеокамеры в 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
  9. На счет 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. Почитаю его документацию.
  10. То есть вы предлагете выбросить из существующего проекта контоллер памяти, написанный на Verilog, и заменить его контроллером SOPC-Builder'а? Я боюсь, всплывут подводные камни по настройке контроллера и подгонке его под VGA-контроллер. Эти два блока тесно связаны между собой в сущесвтующем проекте. То есть всё-таки варинат с двумя контоллерами SDRAM имеет право на жизнь? Много сигналов. И не для всех понятно соответсвие шине Avalon... Но если это правильный путь, то тогда нужно идти им:)
  11. Здравствуйте! Необходимо создать систему обработки видеоизображений с применением софт-процессора 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
  12. Здравствуйте! Тоже случайно наткнулся на эти модули. До этого очень долго искал модули с доступом к MAC-уровню WiFi. Скажите, как стоят дела с документацией на них? Вам удалось найти документацию на регистры модуля?
  13. Согласен. Первую плату перепаял, как мне показалось неправильно. Одна дорожка отслоилась, но тем не менее затем микросхема припаялась отлично. При перепайке второй платы техпроцесс поменял:))) Результат был плачевным, она умерла...
  14. Это же ужас. Я ведь пишу практически всё на Си, сколько бы я искал эту ошибку... Как быстро вы установили, что ядро неверно выполняет инструкцию?
  15. А какая у вас ревизия? В 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.