Перейти к содержанию
    

Эта корка адаптирована для использования под Qsys с шиной Avalon и Nios. Но можно ее использовать и в обычном RTL проекте. External - это то, что выбрасывается на порты SPI. SPI control port - это Avalon. По нему идет управление и обмен данными. Посмотрите карту регистров корки, там расписаны адреса внутренних регистров. Обмен по SPI происходит посредством чтения/записи по Avalon. Прерывание позволит вам узнать момент приёма очередной порции данных. Я использовал UART, данный SPI не пробовал, но думаю, что там все точно также. Если в вашем проекте Nios'a не будет, то вам нужно будет написать простенький Avalon Master, который будет управлять данной коркой (и другими Avalon MM корками, если они появятся далее)

А без avalon spi реализовать возможно?

Я не представляю о каком avalon мастере идет речь(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А без avalon spi реализовать возможно?

Да, написать самому.

Я не представляю о каком avalon мастере идет речь

Посмотрите спецификацию на шину Avalon, честное слово, там всё ж просто, это же не AXI4. Если бы был Nios, то функции мастера выполнялись бы им, но т.к. его судя по всему у Вас нет, управлять шиной прийдется вручную.

Удачи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, написать самому.

 

Посмотрите спецификацию на шину Avalon, честное слово, там всё ж просто, это же не AXI4. Если бы был Nios, то функции мастера выполнялись бы им, но т.к. его судя по всему у Вас нет, управлять шиной прийдется вручную.

Удачи.

Огромное спасибо за советы!

Всвязи с далеким пониманием как сделать мастер( а так же для чего он нужен и из чего должен состоять) управления шины Avalon, решил управление реализовать на NIOS для понимая и освоения программирования процессора, т.к он в перспективе потребуется.

Собрал я систему в QSYS: NIOS(+on-chip memory) -> Avalon FIFO (для перехода AvMM-AvST) ->NCO(AvST)

Пробую из NIOS загрузить код частоты в NCO, для последующего наблюдения квадратур в QuestaSim, а так же для заливки прошивки в ПЛИС.

Как мне вывести сигналы с NCO на пины ПЛИС, если ip nco требует, чтобы его выход был подключен к Avalon ST sink?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы можете вытащить сигналы из Qsys с помощью экспортирования (столбец Export в System Contents). После генерации Qsys компонента они появятся в Verilog/VHDL врапере в списке портов вместе с остальными внешними сигналами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Огромное спасибо за советы!

Всвязи с далеким пониманием как сделать мастер( а так же для чего он нужен и из чего должен состоять) управления шины Avalon, решил управление реализовать на NIOS для понимая и освоения программирования процессора, т.к он в перспективе потребуется.

Собрал я систему в QSYS: NIOS(+on-chip memory) -> Avalon FIFO (для перехода AvMM-AvST) ->NCO(AvST)

Пробую из NIOS загрузить код частоты в NCO, для последующего наблюдения квадратур в QuestaSim, а так же для заливки прошивки в ПЛИС.

Как мне вывести сигналы с NCO на пины ПЛИС, если ip nco требует, чтобы его выход был подключен к Avalon ST sink?

 

На начальном этапе можно еще SystemConsole использовать. Если в двух словах, то этот инструмент позволяет получать доступ к периферии внутри fpga через jtag.

Цепочка получается такой: SystemConsole (PC) -> USB-Blaster -> Jtag to Avalon Master преобразователь (есть модуль такой) -> периферия. Имея адреса модулей на шине Avalon можете читать и писать в них.

Применение System Console на начальных этапах позволяет не заморачиваться с ниосом или HPS (в случае SoC), а сразу начать отладку ваших блоков в ПЛИС.

 

http://www.altera.com/products/software/qu...ms-console.html

 

Изменено пользователем goodsoul

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы можете вытащить сигналы из Qsys с помощью экспортирования (столбец Export в System Contents). После генерации Qsys компонента они появятся в Verilog/VHDL врапере в списке портов вместе с остальными внешними сигналами.

Не понимаю, почему nco ip ругается на reset?

Я же его подключил:

post-83540-1423219926_thumb.jpg

 

На начальном этапе можно еще SystemConsole использовать. Если в двух словах, то этот инструмент позволяет получать доступ к периферии внутри fpga через jtag.

Цепочка получается такой: SystemConsole (PC) -> USB-Blaster -> Jtag to Avalon Master преобразователь (есть модуль такой) -> периферия. Имея адреса модулей на шине Avalon можете читать и писать в них.

Применение System Console на начальных этапах позволяет не заморачиваться с ниосом или HPS (в случае SoC), а сразу начать отладку ваших блоков в ПЛИС.

 

http://www.altera.com/products/software/qu...ms-console.html

 

Спасибо, буду иметь ввиду, сейчас уж начал заниматься nios, если будут проблемы буду обращаться к помощи консоли.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не понимаю, почему nco ip ругается на reset?

Формальная проблема. Вы экспортировали выходной Avalon-ST, если резет произойдет, то приёмник в другой системе ничего об этом не узнает и формально будет считаться, что транзакция на шине продолжается. Если вы не планируете постоянно рулить этим резетом, то можно не обращать внимание на этот ворнинг.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Продолжаю разбираться с программированием NIOS. Сейчас затруднение вызывает fifo.

FIFO в моем случае выполняет роль моста AvMM-slave - AvST Sourse. Читаю manuals ug_fifo и ug_1085, в последнем есть раздел software programming Model (стр. 16-7) в котором указаны функции для работы с фифо, такие как инициализация фифо, чтения статуса, запись в фифо, чтения из фифо и т.д.

Функций так много, что я запутался в каком порядке из применять.

К сожалению на просторах интернета не нашел примера как правильно инициализировать фифо для отправки одного 32-битного числа из NIOSа.

Может быть у кого-нибудь есть пример?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Идея следующая - из Nios выгружаю число в fifo, а из fifo выгружаю это число на внешние пины.

Соединяю все таким образом:

post-83540-1424344851_thumb.jpg

при это выход fifo вывожу наружу(выделено красным)

 

Код на Си:

#include "io.h"
#include "altera_avalon_fifo_regs.h"
#include "altera_avalon_fifo_util.h"
#include "system.h"
#include "sys/alt_irq.h"
#include <stdio.h>
#include <stdlib.h>
#define ALMOST_EMPTY 2
#define ALMOST_FULL FIFO_0_IN_CSR_FIFO_DEPTH-3

int main(){
int a, b, c, d;
//initializes the FIFO
a = altera_avalon_fifo_init(FIFO_0_IN_CSR_BASE,			//the base address of the FIFO control slave
						0,							//the value to write to the interruptenable register
						ALMOST_EMPTY,				//the value for the almost empty threshold (порог) level
						ALMOST_FULL);				//the value for the most full threshold  level

//write a, b into fifo

b = 0xffff;
c = altera_avalon_fifo_write_fifo(FIFO_0_IN_BASE, 			//the base address of the fifo write slave
							 FIFO_0_IN_CSR_BASE, 		//the base address of the fifo control slave
							 b  );						//value to write to address

//read a,b from fifo
d = altera_avalon_fifo_read_fifo(FIFO_0_IN_BASE, 			//the base address of the fifo read slave
								 FIFO_0_IN_CSR_BASE);		//the base address of the fifo control slave
return 0;
}

 

Вопрос: как выход fifo вывести наружу так, чтобы это было видно при моделировании?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скорее всего неправильно выразился: есть ли возможность выведенную наружу шину Avalon St промоделировать в ModelSim?

Уже неделю борюсь с эти, выслушаю любые советы.

Идея в выводе требуемого числа на внешние пины для моделирования. Для начала хочу вывести одно число через fifo, после подключить nco и вывести синус в modelsim. Fifo использую в качестве перехода Av-MM -> Av-ST.

Если уже ничего не получится, думаю двойной fifo сделать(Av-MM->Av-ST -->Av-St->Av-MM), а потом подключить PIO (тип Av-MM).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Также как ТС пытаюсь поднять ядро SPI. Почитал спецификацию Avalon и IP-переферию. Ниос использовать не хочу, пытаюсь написать свой мастер на шину. Как я понял необходим Memory-Mapped Master. Описал его сигналы, address, byteenable, read, readdata и т.п. Собрал в QSYS систему из своего мастера и IP-ядра SPI

post-78086-1432883781_thumb.png

и ...ничего не произошло… Пытаюсь выдавить хоть какой-то отклик, но чет совсем глухо.

Делаю следующее. В Register Map первый адрес адрес – адрес передатчика, выставляю на шину адреса «1», на шину данных число, на write «1», на byteenable «11» так как ширина шины на SPI 16 бит. Смотрю все это дело в ModelSim внутри IP SPI обсалютная тишина, ничего кроме входных сигналов не дрыгается.

post-78086-1432883883_thumb.png

post-78086-1432884183_thumb.png

Вопрос, что я делаю не так? Видимо упускаю, что-то важное…

 

Среда Quartus 14.1

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопрос, что я делаю не так? Видимо упускаю, что-то важное…

 

Единственная здравая мысль, приходящая в голову, что если вы не хотите использовать процессор, то шина авалон вам не особо нужна и проще написать за 30 минут свой собственный spi (или взять готовый) с более простым управлением.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Единственная здравая мысль, приходящая в голову, что если вы не хотите использовать процессор, то шина авалон вам не особо нужна и проще написать за 30 минут свой собственный spi (или взять готовый) с более простым управлением.

Тут такая интересная штука. SPI написал. А то чем я сейчас занимаюсь я подключу к своему slave и посмотрю, как он работает. Просто мне в дальнейшем надо будет использовать ADС, возможно другие IP ядра, а они все садятся на Avalon, вот я и решил попрактиковаться начав с SPI. Тут сама цель не SPI, а разобраться в целом, на примере SPI...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

?

 

Присмотрелся к картинкам.

reset - он у вас активным 0 сделан ведь?

byteena - он вам совсем не нужен. Если уж делать, то почему он стоит раным 3? для 32-разрядной шины он должен быть тогда уж 0xf. Но лучше убрать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Решил подключить Nios и в ModelSim посмотреть как он дергает шину, но возникла странная ошибка. "Description Resource Path Location Type make: *** [prog.elf] Error 1 prog C/C++ Problem".

Проект в QSYS выглядит как Nios + RAM + SPI. Собирается все без ошибок

post-78086-1433155980_thumb.png

 

С кодом особо не мудрил

#include "system.h"
#include "altera_avalon_spi_regs.h"

int main ()
{
        int spi = 0x5;
        IOWR_ALTERA_AVALON_SPI_TXDATA(SPI_0_BASE, spi);
        return 0;
}

При сборке появляется ошибка

post-78086-1433156095_thumb.png

 

С этой ошибкой я явно не одинок, обсуждалась и на нашем форуме и на заграничных, но однозначного ответа как исправить я не нашел. Демо от Altera заработала, добавил SPI тоже работает, добавил UART вылезла ошибка. Откатился на состояние без UART, но уже не помогло. Теперь и проект с 0 нормально не собирается.

Среда:

- Nios II 14.1 Software Build Tools for Eclipse

- Quartus II 14.1 (64-bit)

 

Прикрепляю папку с проектом

nio.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...