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

 
 
> NIOSII нестандартная загрузка
ZioN
сообщение May 4 2010, 18:36
Сообщение #1





Группа: Участник
Сообщений: 8
Регистрация: 2-05-10
Пользователь №: 57 019



Добрый день! Сразу скажу что системы на кристалле не строил, по этому вопросы могут быть глупыми, не судите строго smile.gif

Есть плата собственного изготовления, на которой находится микроконтроллер с аппаратным USB интерфейсом (используется как средство конфигурирования fpga PS-mode, и как средство коммуникации компьютера и fpga), собственно fpga EP1C3, 1-Mbit (128K x 8) Static RAM и др. элементы.

Программу для Ниоса хочу разместить во внешней памяти, внутреннюю память использовать для кэша инструкций и данных процессора, загружать программу в SRAM будут через модуль написанный на верилоге когда процессор будет находится в режиме сброса.

1. Как правильно получить бинарник программы, и как правильно ее загрузить (частями по 8бит, или по 32бита), "прочитав" Alternative Nios II Boot Methods, я так понял что бинарник можно получить с помощью конвертора который есть на сайте make_flash_image_script.sh (*.elf -> *.elf.flash.bin), или это не то что мне нужно?

Прикрепленное изображение


Reset Vector и Exception Vector установлены на начало SRAM, я так понимаю этот бинарник можно загружать в начало памяти?

2. Использую "краденый" Quartus 9.0 скаченный с торрентов, полноценно ли ядро Ниоса построенное в этом квартусе? smile.gif (то пробегали тут страшилки на форуме про лицензию)

Ну и на всякий случай общая картина:

Прикрепленное изображение
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ZioN
сообщение May 14 2010, 15:18
Сообщение #2





Группа: Участник
Сообщений: 8
Регистрация: 2-05-10
Пользователь №: 57 019



Добрый день, появились еще вопросы.

"Модуль" для загрузки программы Nios`а во внешнюю память сделал (пока процессор находится в сброшенном состоянии), теперь вот пытаюсь сделать модуль для SRAM (128K x 8) на Tristate bridge

Signals:
Прикрепленное изображение


Interfaces:
Прикрепленное изображение


Сам модуль:
Код
module new_component (
        input  wire        clk,            //       clock.clk
        input  wire        reset_n,        //            .reset_n
        input  wire [16:0] ats_s0_address, //          s0.address
        input  wire        ats_s0_read_n,  //            .read_n
        inout  wire [7:0]  ats_s0_data,    //            .data
        input  wire        ats_s0_write_n, //            .write_n
        output wire [16:0] HRW_Addr,       // conduit_end.export
        inout  wire [7:0]  HRW_Data,       //            .export
        output wire        HRW_nOE,        //            .export
        output wire        HRW_nWE         //            .export
    );
    
    assign HRW_Addr = ats_s0_address;
    assign HRW_Data = ats_s0_data;
    assign HRW_nOE = ats_s0_read_n;
    assign HRW_nWE = ats_s0_write_n;

endmodule



Сам процессор получился с такими вх./вых. параметрами:
Цитата
module mySoC (
// 1) global signals:
clk_0,
new_component_0_s0_data,
reset_n,

// the_new_component_0
HRW_Addr_from_the_new_component_0,
HRW_Data_to_and_from_the_new_component_0,
HRW_nOE_from_the_new_component_0,
HRW_nWE_from_the_new_component_0,

// the_pio_0
out_port_from_the_pio_0,

// the_spi_0
MISO_to_the_spi_0,
MOSI_from_the_spi_0,
SCLK_from_the_spi_0,
SS_n_from_the_spi_0,

// the_spi_1
MISO_to_the_spi_1,
MOSI_from_the_spi_1,
SCLK_from_the_spi_1,
SS_n_from_the_spi_1
);


Вот не могу понять что это за new_component_0_s0_data и для чего она здесь (как с ней работать)?
Да и правильно я вообще делаю, либо опять не так понял суть?
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение May 14 2010, 23:00
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(ZioN @ May 14 2010, 22:18) *
Да и правильно я вообще делаю, либо опять не так понял суть?

в исходном посте вы писали, что модуль будет зашивать память во время, когда процессор сброшен, а тут он у вас уже в SOPC`е объявился. у меня есть большие сомнения, что шина Avalon будет работать во время сброса. как я понимаю, модуль должен быть внешним по отношению к SOPC + мультиплексор.
Go to the top of the page
 
+Quote Post
ZioN
сообщение May 15 2010, 02:31
Сообщение #4





Группа: Участник
Сообщений: 8
Регистрация: 2-05-10
Пользователь №: 57 019



Цитата(vadimuzzz @ May 15 2010, 02:00) *
в исходном посте вы писали, что модуль будет зашивать память во время, когда процессор сброшен, а тут он у вас уже в SOPC`е объявился. у меня есть большие сомнения, что шина Avalon будет работать во время сброса. как я понимаю, модуль должен быть внешним по отношению к SOPC + мультиплексор.


К плису подключен микроконтроллер, который собственное его конфигурирует, и передает в него данные ("пакетами" 63 байта + 1 байт команда = 64).

При передаче организован командный режим, т.е. по команде от контроллера, процессор запускается. (Есть команда последовательной загрузки в память с инкрементированием адреса).

Загрузка орагнизована таким образом, шина Авалона для связи "загручика" и памяти не используется, немного основного кода

Код
module TopLevelModule (
                    OSC_40,        //    Clock 40 MHz
                    TransIO,           //      Output test 16bit port                  
                    iuC,                  //      Шина для приема данных 8bit
                    iouC,                //      Вход тактирования шины
                    SRAM_Addr,
                    SRAM_Data,
                    SRAM_nOE,
                    SRAM_nWE
                );


input              OSC_40;
output     [15:0]   TransIO;
input      [7:0]  iuC;
input             iouC;

wire              processor_reset;

output  [16:0]  SRAM_Addr;
inout   [7:0]   SRAM_Data;
output             SRAM_nOE;
output             SRAM_nWE;

wire   [16:0]   mSRAM_Addr;
wire   [7:0]    mSRAM_Data;
wire            mSRAM_nOE;
wire            mSRAM_nWE;

wire  [16:0]    cpuSRAM_Addr;
wire  [7:0]     cpuSRAM_Data;
wire            cpuSRAM_nOE;
wire            cpuSRAM_nWE;

assign    SRAM_Addr = (processor_reset ? cpuSRAM_Addr : mSRAM_Addr);
assign    SRAM_Data = (processor_reset ? cpuSRAM_Data : mSRAM_Data);
assign    SRAM_nOE = (processor_reset ? cpuSRAM_nOE : mSRAM_nOE);
assign    SRAM_nWE = (processor_reset ? cpuSRAM_nWE : mSRAM_nWE);



mySoC   u2 (
            .clk_0(OSC_40), .reset_n(processor_reset),
            
            .out_port_from_the_pio_0(TransIO[15:8]),
            
            .new_component_0_s0_data(cpuSRAM_Data),
            
            .HRW_Addr_from_the_new_component_0(cpuSRAM_Addr),
            .HRW_nOE_from_the_new_component_0(cpuSRAM_nOE),
            .HRW_nWE_from_the_new_component_0(cpuSRAM_nWE)
            );
            
Bootloader u3 (
               .OSC_40(OSC_40), .iuC(iuC), .iouC(iouC), .processor_reset(processor_reset),
               .TransIO(TransIO[7:0]),
               .SRAM_Addr(mSRAM_Addr),
               .SRAM_Data(mSRAM_Data),
               .SRAM_nOE(mSRAM_nOE),
               .SRAM_nWE(mSRAM_nWE)
             );

endmodule


Сбросом процессора Ниос управляет модуль Bootloader там находится этот регистр с начальным состоянием = 1'b0

Пробовал загружать во внешнюю память программу (модуль загрузки, проверил как мог дома, вроде как все загружается правильно, проверял текущий адрес мультиметром smile.gif , ни лог. анализатора, ни осциллографа нет, симулятором так и не успел научится пользоваться времени в обрез sad.gif диплом.., попробую еще помучатся в Университете если дома не получится )

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

В память SRAM загружаю простенькую программу (в адрес начиная с 0, по байтам, последовательно), которая "мигает" портом вывода, скомпилировал ее, преобразовал elf в flash формат (как уже выше писалось), преобразовал flash в бинарный формат своей программой на ПК, которая передает данные для конфигруации ПЛИС, и осуществляет связь с ПЛИС - загружает данные в SRAM. И командой запускал процессор.

Код
#include "altera_avalon_pio_regs.h"
#include "system.h"

int main()
{
    int i;
    while(1)
    {
        IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE,0xff);
        for (i=0;i<20000000;i++);
        IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE,0x00);
        for (i=0;i<20000000;i++);
    }
}


Думал уже может тут где-то ошибся, потом пересобрав процессор на On-chip memory RAM (с инициализацией памяти), установил вектора на нее и загрузив его в ПЛИС убедился что программа работает, подключенный светодиод мигал (командный режим запуска процессора работает, сброс с процессора убирается)

Замтелил еще вот что, при настройке Tri-state bridge:
Прикрепленное изображение


Оставлял так и генерировал процессор, потом ставил галочки везде и генерировал процестор, но на выходе получалось одно и тоже:
Код
module mySoC (
               // 1) global signals:
                clk_0,
                new_component_0_s0_data,
                reset_n,

               // the_pio_0
                out_port_from_the_pio_0,

               // the_spi_0
                MISO_to_the_spi_0,
                MOSI_from_the_spi_0,
                SCLK_from_the_spi_0,
                SS_n_from_the_spi_0,

               // the_spi_1
                MISO_to_the_spi_1,
                MOSI_from_the_spi_1,
                SCLK_from_the_spi_1,
                SS_n_from_the_spi_1
             );


Я так понимаю с new_component_0_s0_data должен был появится и *_adress, *_noe, *_nwe или я не прав, sopc builder издевается? (в хендбуках искал, так и ничего не понял)

Смотрел и тут на форуме посты и ссылку которую Вы давали посмотреть по подключению внешней памяти ( http://www.alteraforum.com/forum/showthread.php?t=6255 ), как правильно нужно создавать модуль для внешней памяти?

Сообщение отредактировал ZioN - May 15 2010, 02:50
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение May 15 2010, 13:58
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(ZioN @ May 15 2010, 09:31) *
Я так понимаю с new_component_0_s0_data должен был появится и *_adress, *_noe, *_nwe или я не прав, sopc builder издевается? (в хендбуках искал, так и ничего не понял)

ЕМНИП, тип интерфейса д.б. "Avalon Memory Mapped Tristate Slave", квартуса под рукой нет.
Go to the top of the page
 
+Quote Post
ZioN
сообщение May 15 2010, 16:10
Сообщение #6





Группа: Участник
Сообщений: 8
Регистрация: 2-05-10
Пользователь №: 57 019



Цитата(vadimuzzz @ May 15 2010, 16:58) *
ЕМНИП, тип интерфейса д.б. "Avalon Memory Mapped Tristate Slave", квартуса под рукой нет.


Эм, не совсем понял, для памяти я создаю новый компонент, выбираю из шаблонов "Add Typical Avalon-MM Tristate Slave", правда потом в SoPC Builder`е не могу отредактировать свой компонент (если билдер закрыть и обратно открыть) может стоит поставить другой версии квартус?


Прикрепленное изображение


Сообщение отредактировал ZioN - May 15 2010, 16:44
Go to the top of the page
 
+Quote Post



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

 


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


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