реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> SOPC builder + AVALON, Подключения "своего" устройства к шине авалон
Alezi
сообщение Sep 27 2008, 11:20
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 8-07-08
Из: Хабаровск
Пользователь №: 38 795



Приветствую!
Тружусь над подключением своего устройства к шине авалон, но пока безрезультатно.(( Идея заключается в разработке и подключении контроллера памяти (SRAM) к софт процессору NIOSII с последующим управлением чтением/записью)) Может кто занимался подобными вещами?
Вопрос в следующем:
1) как в файле проекта (пишу контроллер на VHDL) сделать привязку к авалон, надо ли?
2) подключать пробовал (SOPC builder->create new component) через Avalon-MM, стоит ли через Avalon-Tristate Bridge?
Спецификацию по шине авалон штудирую))
Пока делал через Avalon-MM Slave, настраивал шины данных, адреса и управления. В итоге при написании программы управления в NIOS EDS и RUN AS возникает проблема, не может загрузить данные в процессор, в итоге ставит процессор в ожидание.
Go to the top of the page
 
+Quote Post
Omen_13
сообщение Sep 27 2008, 19:00
Сообщение #2


Силовик-затейник
****

Группа: Модераторы
Сообщений: 766
Регистрация: 18-02-07
Из: Столица солнечного Башкортостана
Пользователь №: 25 467



Поиском по форуму смотрели?
http://electronix.ru/forum/index.php?showtopic=52395
http://electronix.ru/forum/index.php?showtopic=51307
http://electronix.ru/forum/index.php?showtopic=51502
http://electronix.ru/forum/index.php?showtopic=50851
http://electronix.ru/forum/index.php?showtopic=51068
http://electronix.ru/forum/index.php?showtopic=50052
http://electronix.ru/forum/index.php?showtopic=50720
http://electronix.ru/forum/index.php?showtopic=50719
http://electronix.ru/forum/index.php?showtopic=30790


--------------------
"Вперёд на мины, ордена потом!"
"инжинер/разработчик создает нечто, в отличии от многих других профессий. В этом есть сходность с художниками или музыкантами"(с)CodeWarrior1241
Go to the top of the page
 
+Quote Post
Alezi
сообщение Sep 28 2008, 03:09
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 8-07-08
Из: Хабаровск
Пользователь №: 38 795



Просмотрел все ссылки, но решения так и не нашел.
help.gif
Go to the top of the page
 
+Quote Post
Postoroniy_V
сообщение Sep 28 2008, 09:33
Сообщение #4


МедвеД Инженер I
****

Группа: Свой
Сообщений: 816
Регистрация: 21-10-04
Пользователь №: 951



Цитата(Alezi @ Sep 28 2008, 12:09) *
Просмотрел все ссылки, но решения так и не нашел.
help.gif

а так искали?
http://www.altera.com/literature/hb/qts/qt...oss=sopc%20sram
глава
Off-Chip SRAM
and Flash
Memory


--------------------
Cogito ergo sum
Go to the top of the page
 
+Quote Post
Alezi
сообщение Sep 28 2008, 12:25
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 8-07-08
Из: Хабаровск
Пользователь №: 38 795



За ссылку конечно спасибо, я уже смотрел. Дело в том, что там приведена реализация по шаблону. В моем случае создается свой контроллер. Не могу понять как производится привязка контроллера именно к авалону (Avalon-MM), а может быть лучше через Avalon-Tristate. Хотелось бы посмотреть примеры такой или подобной реализации, что называется "от и до", сам пока не соображу...
Go to the top of the page
 
+Quote Post
Postoroniy_V
сообщение Sep 28 2008, 13:16
Сообщение #6


МедвеД Инженер I
****

Группа: Свой
Сообщений: 816
Регистрация: 21-10-04
Пользователь №: 951



Цитата(Alezi @ Sep 28 2008, 21:25) *
За ссылку конечно спасибо, я уже смотрел. Дело в том, что там приведена реализация по шаблону. В моем случае создается свой контроллер. Не могу понять как производится привязка контроллера именно к авалону (Avalon-MM), а может быть лучше через Avalon-Tristate. Хотелось бы посмотреть примеры такой или подобной реализации, что называется "от и до", сам пока не соображу...

в случае с offchip SRAM я не совсем понимаю смысла лепить свой контроллер, когда sopc это сделает за вас. и по ссылки как раз и есть объяснение как привязываться.
в чем уникальность "своего" контроллера?


--------------------
Cogito ergo sum
Go to the top of the page
 
+Quote Post
Alezi
сообщение Sep 29 2008, 02:14
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 8-07-08
Из: Хабаровск
Пользователь №: 38 795



Смысл сией затеи научится работать ручками... smile.gif
Дальнейшая работа будет много сложней, плануруется подключение кодера JPEG 2000 AD202. Поэтому хочется разобраться во всех тонкостях Avalona... smile.gif
Go to the top of the page
 
+Quote Post
Postoroniy_V
сообщение Sep 29 2008, 05:25
Сообщение #8


МедвеД Инженер I
****

Группа: Свой
Сообщений: 816
Регистрация: 21-10-04
Пользователь №: 951



Цитата(Alezi @ Sep 29 2008, 11:14) *
Смысл сией затеи научится работать ручками... smile.gif
Дальнейшая работа будет много сложней, плануруется подключение кодера JPEG 2000 AD202. Поэтому хочется разобраться во всех тонкостях Avalona... smile.gif

сей агрегат адв202 как раз и подключали так как я вам сказал smile.gif


--------------------
Cogito ergo sum
Go to the top of the page
 
+Quote Post
Stewart Little
сообщение Sep 29 2008, 06:36
Сообщение #9


Лентяй
******

Группа: Свой
Сообщений: 2 203
Регистрация: 11-10-04
Из: Санкт-Петербург
Пользователь №: 843



Цитата(Alezi @ Sep 29 2008, 06:14) *
Смысл сией затеи научится работать ручками... smile.gif

Блок подключения внешнего статического ОЗУ (не поворачивается язык назвать его контроллером) для этого мало годится, так как прост как грабли. Использовать для него шаблон гораздо удобнее, т.к. при этом будет проще с адресацией разобраться smile.gif
Ну а если очень хочется врукопашную, то так :

Код
library ieee;
use ieee.std_logic_1164.all;

entity async_sram_256kx32 is
port( ats_address        : in std_logic_vector(17 downto 0);
      ats_read_n         : in std_logic;
      ats_write_n        : in std_logic;
      ats_chipselect_n   : in std_logic;
      ats_byteenable_n   : in std_logic_vector(3 downto 0);
      ats_data           : inout std_logic_vector(31 downto 0);

      cos_addr           : out std_logic_vector(17 downto 0);
      cos_read_n         : out std_logic;
      cos_write_n        : out std_logic;
      cos_chipselect_n   : out std_logic;
      cos_byteenable_n   : out std_logic_vector(3 downto 0)
     );
end async_sram_256kx32;

architecture rtl of async_sram_256kx32 is

begin
  cos_addr <= ats_address;
  cos_read_n <= ats_read_n;
  cos_write_n <= ats_write_n;
  cos_chipselect_n <= ats_chipselect_n;
  cos_byteenable_n <= ats_byteenable_n;

end rtl;


Для работы с авалоном самое главное - изучить его спецификацию smile.gif :
Avalon Interface Specifications

Сообщение отредактировал Omen_13 - Sep 29 2008, 16:00


--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
Go to the top of the page
 
+Quote Post
Alezi
сообщение Sep 29 2008, 22:34
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 8-07-08
Из: Хабаровск
Пользователь №: 38 795



Цитата(Postoroniy_V @ Sep 29 2008, 09:25) *
сей агрегат адв202 как раз и подключали так как я вам сказал smile.gif

Хотелось бы поинтересоваться результатами, успешно? Может подкините идейку по подключению... smile.gif
Буду благодарен! Заранее спасибо! smile.gif

Цитата(Stewart Little @ Sep 29 2008, 10:36) *
Блок подключения внешнего статического ОЗУ (не поворачивается язык назвать его контроллером) для этого мало годится, так как прост как грабли. Использовать для него шаблон гораздо удобнее, т.к. при этом будет проще с адресацией разобраться smile.gif
Ну а если очень хочется врукопашную, то так :

Код
architecture rtl of async_sram_256kx32 is

begin
  cos_addr <= ats_address;
  cos_read_n <= ats_read_n;
  cos_write_n <= ats_write_n;
  cos_chipselect_n <= ats_chipselect_n;
  cos_byteenable_n <= ats_byteenable_n;

end rtl;


Извинияюсь Уважаемый, но в приведенном примере не нашел передачи данных с выхода Авалона на выхоы ПЛИС. С тем же успехом можно было в SOPC билдере создать систему и передавать все сигналы через I/O PIO.
Как я понимаю "Блок подключения внешнего статического ОЗУ " должен формировать временную диаграмму чтения/записи, что равносильно системе с I/O PIO с использование написанных в NIOS IDE функции доступа к внешней памяти (чтения/записи), за исключением меньшего быстродействия в последнем случае.
Кстати последний вариант был мною успешно реализован. Осталось сделать это первым способом. smile.gif
Go to the top of the page
 
+Quote Post
Postoroniy_V
сообщение Sep 30 2008, 00:09
Сообщение #11


МедвеД Инженер I
****

Группа: Свой
Сообщений: 816
Регистрация: 21-10-04
Пользователь №: 951



Цитата(Alezi @ Sep 30 2008, 07:34) *
Хотелось бы поинтересоваться результатами, успешно? Может подкините идейку по подключению... smile.gif
Буду благодарен! Заранее спасибо! smile.gif
Извинияюсь Уважаемый, но в приведенном примере не нашел передачи данных с выхода Авалона на выхоы ПЛИС. С тем же успехом можно было в SOPC билдере создать систему и передавать все сигналы через I/O PIO.

успешно! smile.gif
цепляете её как срам, и не забудьте цепануть ready к wait_request(названия на адв не помню, помню что есть там такой сигнал). вот и всё.
А про PIO конечно хорошо говорите...только "успех не тот же" smile.gif
то что не нашли передачи данных это конечно..страно 07.gif
вам Stewart Little всё описал уже...осталось шаблон только в сопц билдеру отдать
пробовали???..думаю что нет smile.gif
Цитата
Как я понимаю "Блок подключения внешнего статического ОЗУ " должен формировать временную диаграмму чтения/записи, что равносильно системе с I/O PIO с использование написанных в NIOS IDE функции доступа к внешней памяти (чтения/записи), за исключением меньшего быстродействия в последнем случае.

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


--------------------
Cogito ergo sum
Go to the top of the page
 
+Quote Post
Stewart Little
сообщение Sep 30 2008, 08:33
Сообщение #12


Лентяй
******

Группа: Свой
Сообщений: 2 203
Регистрация: 11-10-04
Из: Санкт-Петербург
Пользователь №: 843



Цитата(Alezi @ Sep 30 2008, 02:34) *
Извинияюсь Уважаемый, но в приведенном примере не нашел передачи данных с выхода Авалона на выхоы ПЛИС. С тем же успехом можно было в SOPC билдере создать систему и передавать все сигналы через I/O PIO.

Взаимно извиняюсь, но Вы спецификацию авалона до конца дочитали? А доку на SOPC Builder посмотрели? Про стандартные префиксы ats (avalon tristate slave) и cos (conduit output start)???
В моем примере сигналы с префиксом cos - это и есть выход из FPGA во внешний мир.

Цитата(Alezi @ Sep 30 2008, 02:34) *
Как я понимаю "Блок подключения внешнего статического ОЗУ " должен формировать временную диаграмму чтения/записи, что равносильно системе с I/O PIO с использование написанных в NIOS IDE функции доступа к внешней памяти (чтения/записи), за исключением меньшего быстродействия в последнем случае.

Не совсем правильно. Тут, как говорится, "все украдено до нас" (с).
"Временную диаграмму" формирует Avalon с Avalon-MM Tristate Interface, а Вам нужно только его сигналы наружу вытащить. Задача тривильная.
И еще, насчет "системы с I/O PIO". SOPC Builder'у еще нужно объяснить, что этот компонент должен рассматриваться как память. При использовании шаблонов это делается автоматически (точнее говоря, установкой нужной галки в компонент едиторе). В противном случае нужно врукопашную подкручивать компонентный tcl-файл.


--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
Go to the top of the page
 
+Quote Post
Alezi
сообщение Oct 2 2008, 01:46
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 8-07-08
Из: Хабаровск
Пользователь №: 38 795



Цитата(Stewart Little @ Sep 30 2008, 12:33) *
Взаимно извиняюсь, но Вы спецификацию авалона до конца дочитали? А доку на SOPC Builder посмотрели? Про стандартные префиксы ats (avalon tristate slave) и cos (conduit output start)???
В моем примере сигналы с префиксом cos - это и есть выход из FPGA во внешний мир.
Не совсем правильно. Тут, как говорится, "все украдено до нас" (с).
"Временную диаграмму" формирует Avalon с Avalon-MM Tristate Interface, а Вам нужно только его сигналы наружу вытащить. Задача тривильная.

Сколько хватило терпения переводить спецификацию читал...)) Про то, какие имеются со стороны авалона и внешнего устройства сигналы прочел. Для себя решил следующее: раз я обращаюсь к одному внешнему устройству, то вариант использовать Avalon-MM Tristate Interface отпадает по причине избыточности (дополнителный Tristate мост). Буду обращаться непосредственно к шине Авалона, на которой тоже можно формировать временную диаграмму чтения/записи.

Цитата(Stewart Little @ Sep 30 2008, 12:33) *
И еще, насчет "системы с I/O PIO". SOPC Builder'у еще нужно объяснить, что этот компонент должен рассматриваться как память.

Не понимаю, что надо "объяснять"? Прописываются функции записи и чтения, которые на выходе (PIO) будут формировать временную диаграмму.
Go to the top of the page
 
+Quote Post
Stewart Little
сообщение Oct 5 2008, 09:16
Сообщение #14


Лентяй
******

Группа: Свой
Сообщений: 2 203
Регистрация: 11-10-04
Из: Санкт-Петербург
Пользователь №: 843



Цитата(Alezi @ Oct 2 2008, 05:46) *
Сколько хватило терпения переводить спецификацию читал...))

Видимо, терпения хватило не надолго smile.gif
У авалона две однонаправленных шины данных - одна на запись, другая на чтение. А у стандартной внешней памяти шина двунаправленная. Так что тристейт все равно необходим. SOPC Builder тем и хорош, что всю рутину по организации шин берет на себя. Вы уверены, что сделаете компактнее, чем он ???

Цитата(Alezi @ Oct 2 2008, 05:46) *
Не понимаю, что надо "объяснять"? Прописываются функции записи и чтения, которые на выходе (PIO) будут формировать временную диаграмму.

Временная диаграмма - это еще не все, что нужно для счастья. Кроме этого нужно, чтобы и процессор, и компилятор понимали, что в этом диапазоне адресов находится именно память - в которой можно размещать различные сегменты (кода, данных, стек), и куда можно назначить вектор сброса и перехода по исключению.


--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
Go to the top of the page
 
+Quote Post
Alezi
сообщение Oct 7 2008, 23:25
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 8-07-08
Из: Хабаровск
Пользователь №: 38 795



Цитата(Stewart Little @ Oct 5 2008, 13:16) *
У авалона две однонаправленных шины данных - одна на запись, другая на чтение. А у стандартной внешней памяти шина двунаправленная. Так что тристейт все равно необходим.

В последнем утверждении я с вами не согласен, необходимости в тристейте нет! Из документации к Авалону явно видно , что в основном он используется когда требуется подключить несколько устройств, которые будут использовать одну шину адреса/данных. В моем случае идет подключение напрямую к шине по интерфейсу Avalon-MM Slave. Программный код "блока подключения внешней памяти" в моем примере выгляит так:
Код
module    SRAM
    (
    //    Host Data
    oDATA,iDATA,iADDR,
    iWE_N,iOE_N,
    iCE_N,iCLK,
    //    SRAM
    SRAM_DQ,
    SRAM_ADDR,
    SRAM_WE_N,
    SRAM_CE_N,
    SRAM_OE_N
    );
//    Host Side
input    [7:0]    iDATA;
output    [7:0]    oDATA;
input    [5:0]    iADDR;
input            iWE_N,iOE_N;
input            iCE_N,iCLK;

//    SRAM Side
inout    [7:0]    SRAM_DQ;
output    [5:0]    SRAM_ADDR;
output            SRAM_WE_N,
                SRAM_CE_N,
                SRAM_OE_N;

assign    SRAM_DQ     =    SRAM_WE_N ? 8'hzz : iDATA;
assign    oDATA        =    SRAM_DQ;
assign    SRAM_ADDR    =    iADDR;
assign    SRAM_WE_N    =    iWE_N;
assign    SRAM_OE_N    =    iOE_N;
assign    SRAM_CE_N    =    iCE_N;

endmodule


А в NIOS обращение выглядит как:
Код
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"

unsigned char* ptr_byte;
unsigned char a;

int main (void)
{    
     ptr_byte = (unsigned char*)SRAM_INST_BASE;
    while(1)
    {
    IOWR(VYHOD_BASE,0,1);  // использую для синхронизации оциллографа
            
    *ptr_byte = 0x55; //процесс записи

    IOWR(VYHOD_BASE,0,0);// использую для синхронизации оциллографа

    a = *ptr_byte; //процесс чтения

     };
return 0;
}


Непонятен только один вопрос, в процессе чтения на осцллографе наблюдаю 4 сигнала chipselect (идут подряд), причем идет изменение адресов. Такое чувство, что шина данных считается 32 разрядной, хотя указатель *ptr_byte обозначен как unsigned char. При изменении разрядности шины данных с 8 до 16 таких сигналов становится 2! 05.gif
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 5th July 2025 - 11:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01526 секунд с 7
ELECTRONIX ©2004-2016