Jump to content

    

Recommended Posts

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

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

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

Share this post


Link to post
Share on other sites
А без avalon spi реализовать возможно?

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

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

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

Удачи.

Share this post


Link to post
Share on other sites
Да, написать самому.

 

Посмотрите спецификацию на шину 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?

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Огромное спасибо за советы!

Всвязи с далеким пониманием как сделать мастер( а так же для чего он нужен и из чего должен состоять) управления шины 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

 

Edited by goodsoul

Share this post


Link to post
Share on other sites
Вы можете вытащить сигналы из 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, если будут проблемы буду обращаться к помощи консоли.

Share this post


Link to post
Share on other sites
Не понимаю, почему nco ip ругается на reset?

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

Share this post


Link to post
Share on other sites

Идея следующая - из 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 вывести наружу так, чтобы это было видно при моделировании?

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

Также как ТС пытаюсь поднять ядро 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

 

Share this post


Link to post
Share on other sites
Вопрос, что я делаю не так? Видимо упускаю, что-то важное…

 

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

Share this post


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

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

Share this post


Link to post
Share on other sites
?

 

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

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

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

Share this post


Link to post
Share on other sites

Решил подключить 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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this