Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Последовательные интерфейсы и Avalon, вопросы по созданию и симуляции
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
misyachniy
Прицепил к проекту SD по SPI интерфейсу.
Использовал стандартный SPI в поставке Q7.2.
Но он имеет фиксированую частоту.
А карточка в свою очередь требует при инициализации 100..400Кбит.
Соответственно после инициализации приходится работать на низкой скорости, что не приемлемо.

Решил создать свой.
В начале сгенерил verilog файл для SPI Q7.2 с помощью SOPC Builder.
Потом переместил в отдельный каталог.
Переименовал названия портов в соответствии с соглашениями - SOPC импортирует без вопросов.
На закладке Interfaces в Component Editor назначил тактирования и прерывания.
Файл "_hw.tcl" успешно сгенерился и в проект устройство добавилось(SOPC)
В SOPC адрес, уровень прерывания, тактирование успешно присоединяется и генерится система.
Вот часть лога.

Код
Info: vovka_spi_0: Starting generation of variation wrapper.
Info: vovka_spi_0: Analyzing D:\!Vedekon\Video\Quartus\vovka_spi\hdl\vovka_spi.v to ensure matching directions and widths for all ports.
Info: vovka_spi_0: Finished generation of variation wrapper.
Info: SVIDEO: Generating QIP file.


В файле "QIP" прописываются корректные пути(пробелы не использую)

При компиляции полного проекта в Quartus оказывается SOPC сгенерил связи для экземпляра
Код
  vovka_spi_0 the_vovka_spi_0
    (
      .avs_s1_address         (vovka_spi_0_s1_address),
      .avs_s1_chipselect      (vovka_spi_0_s1_chipselect),
      .avs_s1_read            (vovka_spi_0_s1_read),
      .avs_s1_readdata        (vovka_spi_0_s1_readdata),
      .avs_s1_write           (vovka_spi_0_s1_write),
      .avs_s1_writedata       (vovka_spi_0_s1_writedata),
      .coe_MISO               (coe_MISO_to_the_vovka_spi_0),
      .cos_MOSI               (cos_MOSI_from_the_vovka_spi_0),
      .cos_SCLK               (cos_SCLK_from_the_vovka_spi_0),
      .cos_SS_n               (cos_SS_n_from_the_vovka_spi_0),
      .csi_clockreset_clk     (clk),
      .csi_clockreset_reset_n (vovka_spi_0_s1_reset_n),
      .ins_irq0_irq           (vovka_spi_0_s1_irq)
    );


А также указал имя файла для включения

Код
`include "vovka_spi_0.v"


Но сам файл не создал.

Я попробовал вручную подбросить файл(переименовав vovka_spi в vovka_spi_0 ).
Quartus проект собрал.
Проект после заливки не работает.

Не понятно также почему в SOPC Builder/Component Editor при работе в закладке Interfaces по этой закладке серые кубики и точки появляются(артефакты).

Такое впечетление, что этот модуль не дописан. То ли ошибка при инсталяции/распаковке какой нибудь dll произошла.

Сервис пак 3-ий стоит.

Перечитал документацию "SOPC Builder Component Development Walkthrough" и "Component Editor".
Не знаю как решать возникушую проблему?

Не понятно какой еще файл(ы) нужны?
Пробовал подсунуть подкорректированые "_sw.tcl" и соответствующие .h и .c - с наскоку не получилось :-(

Может есть ошибка и в verilog файле, но SOPC должен же корректно генерить систему?

Какую еще документацию почитать?
yura-w
Цитата(misyachniy @ Jul 29 2008, 16:14) *
Не понятно какой еще файл(ы) нужны?

думаю здесь найдете ответ
misyachniy
Поставил Q8.
Артефакты в редакторе компонента исчезли.
Проект SOPC корректно добавляет, но не работает.
По ходу компиляции в Q8 были выявлен ошибки внесенные мной в проект, которые Q7.2 не замечал.
Очевидно процесс моей корректировки проекта был похож на слона в посудной лавке ;-)
Я с самого начала пересоберу его. Надеюсь заработает.

Какая методика отладки отдельных модулей на шине Avalon?
Може уже ктото перерывал сайт Altera и нашел пошаговый подсказчик для начинающих и пример по отладке?
yura-w
Цитата(misyachniy @ Jul 31 2008, 09:38) *
Какая методика отладки отдельных модулей на шине Avalon?

самый простой путь, когда есть железо:
1. написать компонент, проверить его симулятором
2. в sopc создать "простую" систему и подключить свой компонент, с помошью SignalTap проверить работу (можно посмотреть работу avalon и компонента)
Stewart Little
Цитата(misyachniy @ Jul 31 2008, 09:38) *
Може уже ктото перерывал сайт Altera и нашел пошаговый подсказчик для начинающих и пример по отладке?

Очередное китайское объяснение smile.gif

Вся информация по ниосу лежит там :
http://www.altera.com/literature/lit-nio2.jsp

и там :
http://www.altera.com/literature/lit-sop.jsp

Про отладку можно посмотреть вот это :
AN 351: Simulating Nios II Embedded Processor Designs

и вот это :
AN 446: Debugging Nios II Systems with the SignalTap II Embedded Logic Analyzer
для Сигнал Тапа там есть пример (signal_tap_test software file)
misyachniy
Цитата(Stewart Little @ Jul 31 2008, 11:40) *
Очередное китайское объяснение smile.gif


Китайцам или индийцам легче ;-)
Их много, они могут handbook на 3000 страниц поделить между собой.
Один может модули писать и отлаживать, второй программы писать, третий систему собирать и тестировать.
Не говоря уже об отдельнои тестировщике и электронщике.

Signal tap на сколько я понял нужен, на конечном этапе в собраной системе в железе?
В начале нужно в МоделСиме гонять.

Нашел в закромах 6.1g поставил, присобил к нашим фмнансовым условиям.
При запуске говорит - "не приспоюился"
Выкачал с закромов сервис пак к нему.
Файл образа собрался контрольная сума сошлась. но после монтирования диск не открывается.
Качать с сайта Альтеры или чего делать?
Кроме поправки в генах? ;-)
Волощенко
Если я правильно понял, то Вы внедряете свой Custom peripherals, в данном случае контроллер SD с SPI интерфейсом.
Схожая проблема подымалась мною в http://electronix.ru/forum/index.php?showtopic=46550.
Работал в Q7.2 sp3, где внедрял свой периферийный модуль. Правда, без прерываний, там был полинг сигнала готовности. Все прошло и функционирует на железе. Описанных Вами симптом с артефактами в Q7.2 sp3 не наблюдал.
Посоветовал бы сделать что-то простое на Q7.2 sp3 в части Custom peripherals, а на его основе усложнять.
Литературы, как всегда, много не бывает smile.gif
http://www.altera.com/search?output=xml_no...m%20Peripherals
misyachniy
Обновил весь комплект ПО до 8.0.
После загрузки проекта в ModelSim не выполнялась загрузка всех файлов проекта(команда "s")
В "одолженом" модуле Видео контроллера ошибки типа:

Код
# ** Error: (vsim-3043) ../vga_controller_classic_0.v(123): Unresolved reference to 'LPM_NUMWORDS' in the_dcfifo.LPM_NUMWORDS.
#         Region: /test_bench/DUT/the_vga_controller_classic_0

Поменял буквы в verilog файле на нижний регистр, все зафурычило. :-)

Захотел выкачать полную документацию на ModelSim.
На сайте ModelSim предлагают SE и PE/LE какой из них более похож на Altera Edition?


Цитата(Волощенко @ Aug 2 2008, 19:48) *
Литературы, как всегда, много не бывает smile.gif


В том то и вопрос, что сложность среды проектирования и количество литературы растет как снежный ком. И ее становится слишком много.

БОльшая часть времени уходит на поиск информации че на ее изучение.
А работа в средах проектирования мне почему-то напоминает шаманство.
Тут галочку поставь, там укажи имя файла и тд.

Вчера ModelSim при перезагрузке проекта выдавал
Код
# Error! LPM_NUMWORDS must be less than or equal to 2**LPM_WIDTHU.
# Error! LPM_NUMWORDS must be less than or equal to 2**LPM_WIDTHU.


Не понятно к какому файлу проекта претензии?
Сегодня другой варнинг - понятно к какому модую вопросы.
Код
#         Region: /test_bench/DUT/the_spi_1
# ** Warning: (vsim-3015) ../vga_controller_classic_0.v(121): [PCDPC] - Port size (1 or 1) does not match connection size (10) for port 'wrusedw'.
#         Region: /test_bench/DUT/the_vga_controller_classic_0/the_dcfifo


Понятно, что разделение специалистов по все более узким областям проектирования и науки будет происходить и дальше.

Но у нас как то принято чтобы электронщик был и "Швец и жнец и на дуде игрец."
В резудьтате "Беда, коль пироги начнет печи сапожник, а сапоги тачать пирожник."
Kuzmi4
2 misyachniy - сталкивался я с dcfifo, правда ваяю на VHDL.

Внимательно смотреть надо в описание:
Касательно LPM_WIDTHU:
Цитата
LPM_WIDTHU - Width of rdusedw[] and wrusedw[] ports. Recommended value is Recommended value is CEIL(LOG2(LPM_NUMWORDS)). This parameter is available for VHDL only.


И LPM_NUMWORDS многострадальный:
Цитата
LPM_NUMWORDS - ..Number of words stored in memory, which is a power of 2.

А вообсче dcfifo - очень полезная вещь wink.gif

А вот на счёт шаманства и FPGA - позволю не согласится: знаете сколько действий нужно сделать , чтобы поднять вертолёт в воздух ?? - а ведь совсем не шаманство...

Просто это не Visual Studio от мелклсофта или C# - тут законы другие...
misyachniy
Нашел в интернете модуль I2C для Q7.2.
У меня версия 8.0.
Переименовал выводы для шины авалон создал компонент.
Чтение и запись регистра преддеителя работате в железе хорошо.
Но общение с памятью не корректно.
Получаю NACK при чтении сразу, при записи АСК выставляется на каждый байт(считыватся со статус регистра).

Пересмотрел несколько раз исходники. Перепробовал несколько вариантов обращения к регистрам - не хочет. :-(

AN351 предлагает весь процессор симулировать. Это долго.

Я так понимаю можно к модулю I2C можно прицепить тестбенч и просимулировть чтение запись по шине отдельно от процессора

Я раньше вручную "рисовал" для CPLD диаграмы.

Сейчас хочу научится как положено симулировать verilog файлы спомощью тестбенч .

Встречал ли кто тестбенч для Авалон и Апноту как симулировать?
Omen_13
Объединил и переименовал темы
Q7.2 (SOPC)Не хочет подключать "мое" устройство -> Последовательные интерфейсы и Avalon, вопросы по созданию и симуляции
С уважением, модератор
Kuzmi4
2 misyachniy - весь процессор симулить не обязательно. Так сказать нулевое приближение - это смотримс на спецификацию авалона и представляем как будет выглядеть транзакция со стороны шины к девайсу - потом моделируем её - в результате может повылазить много каких гадостей smile.gif Для особо придирчивых можно SignalTap подъюзать чтоб посмотреть как именно оно будет.
Кстати I2C не от SLS ли случайно ?
И пробовали в 7.2 запустить ?
misyachniy
Цитата(Kuzmi4 @ Oct 2 2008, 10:27) *
2 misyachniy - весь процессор симулить не обязательно. Так сказать нулевое приближение - это смотримс на спецификацию авалона и представляем как будет выглядеть транзакция со стороны шины к девайсу - потом моделируем её - в результате может повылазить много каких гадостей smile.gif Для особо придирчивых можно SignalTap подъюзать чтоб посмотреть как именно оно будет.
Кстати I2C не от SLS ли случайно ?
И пробовали в 7.2 запустить ?


Так я о том же ;-)
Я не умею симулировать в Modelsim. По этому желательна "рыба" с Avalon на Verilog и учебник для чайников.

I2C я выкачал с форума.
http://www.niosforum.com/pages/download.ph...ip&d_id=147

Q7.2 я не ставил.
Все равно нужно научится симулировать.
Можно I2C и на PIO использовать. Но это, по моему, не совсе правильное решение.
Kuzmi4
2 misyachniy - на счёт Modelsim - там учится пол дня делоФФ то. Один минус - воздействие самому ручками на HDL ваять.
С этой точки зрения симулятор в Quartus`е гораздо удобней - можно ручками задать в файле когда 0 когда 1... Плюс квартус задержки учитывает в железе, что иногда важно..
Касательно того, что вы там скачали - опенкоровский вариант вечно надо дорабатывать. Тут на фтп лежить от SLS - в принципе у них всё чётко работает - если не охото возиться - можете его взять wink.gif
Если охота - тогда надо ковырять опенкоресовский smile.gif
на счёт Q7.2 - тут квартуса нету, дома 7.2 стоит - могу посмотреть, только шкурку аки wrapper на авалон скиньте.
misyachniy
Вернулся к работе по симуляции.

Как выясниось модуль i2c от SLS передран с opencores.
На мой Q8.0 установился, но захотел обновлятся, но не обновился.
Так в систему не удалось пристроить.
Поменял названия сигналв шины в соответствии с соглашениями Q8.0 - все равно не работает в системе.
Из имеющихся дешифрованых кусков и примеров с opencores собрал систему для моделирования.
Авалон мастер, "мой" модуь и i2c slave.

Самое просое тактирование и сброс заработало.
Часть имен и ы
Когда попытался включить задачу(task) на запись по шине Авалон- не получилось правильно указать ссылку на модуль и его задачу.

По примеру SLS объявил и вызываю так

Код
avalon_master_model #(8, 32) u0 (
    .csi_clockreset_clk(csi_clockreset_clk),
    .csi_clockreset_reset(csi_clockreset_reset),
    ...
    .avs_s1_waitrequest_n(1'b0)  
  );

u0.wb_write(1, PRER_LO, 8'hfa);



Получаю ошибку:
Цитата
near '(': syntax error, unexpected '(', expecting "IDENTIFIER"


То есть неправильное применениие иерархии мени.
Посмотрел документацию на Modelsim примеры в интернете.
В локументации нету дополнительной информации, в примерах вызовы аналогичны.
Поэкспериментировал с именем. добавляя название модуля где описаныи задачи не помогает.

Где почитать об иерархических именах в Modelsim?
А то гугль не гуглится.

Прикладываю всю папку проекта.
misyachniy
Начал симулировать. :-)
Но почему-то не работатет такая конструкция

Код
    // wait for acknowledge from slave
         while(~avs_s1_waitrequest_n)    @(posedge csi_clockreset_clk);


В симуляторе видночто avs_s1_waitrequest_n на положительном фронте posedge csi_clockreset_clk принимает как единичное так и нулевое значение.
Kuzmi4
2 misyachniy - я не сильно хорошо знаю Verilog, но не могу понять что вы хотите реализовать... sad.gif
По рисунку видно что инвертируется сигнал avs_s1_waitrequest_n на каждом rising_edde, только не пойму откуда задержка ...
misyachniy
Цитата(Kuzmi4 @ Oct 10 2008, 14:13) *
2 misyachniy - я не сильно хорошо знаю Verilog, но не могу понять что вы хотите реализовать... sad.gif
По рисунку видно что инвертируется сигнал avs_s1_waitrequest_n на каждом rising_edde, только не пойму откуда задержка ...


Должна получится задержка на один такт

Код
    // generate acknowledge output signal
    always @(posedge wb_clk_i)
      wb_ack_o <= #1 wb_stb_i & ~wb_ack_o; // because timing is always honored


Но почему-то не генерится.
Kuzmi4
В качестве задержки на 1 такт могу порекоммендовать обычный D-триггер smile.gif
misyachniy
Посмотрел I2C от SLS.
Передрано с Opecores.
Научился симулировать в ModelSim устройства на шину Avalon.

Выкладываю исходники I2C через GPIO и Opencores.
Verilog + Modelsim + Soft.

Папки не "причесывал".
".c" ".h" файлы для работы в папке "software"

При разработке, Opencores показался менее гибким для восстановления работы шины после сбоя/коллизии.

Atmel 24C256-2.7V оказался капризнее Microchip 24LC256.

Если есть вопросы, пишите.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.