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

 
 
 
Reply to this topicStart new topic
> Использовать програмную память.
Jenya7
сообщение Jan 30 2018, 10:37
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 677
Регистрация: 29-03-12
Пользователь №: 71 075



У меня FPGA (EP3C25F324I7N) подключен к памяти EPCS16SI8N в которую прописывает програму (файл jic или pof).
Вопрос можно ли использовать эту память для записи своей информации и если да как получить доступ к этим пинам?

Как я понимаю нужно создать SPI компонент и замапить эти пины. И потом обращаться к памяти как обычно.
Вопрос как знать где заканчивается програма? Где начинается свободное место куда можно писать?

Пытаюсь определить эти пины через Pin Planner. nCS (PIN_H5) - его вообще там нет. Другие видны но в поле Direction стоит Unknown и при попытке редактирования выскакивает - This is a read-only item.

Сообщение отредактировал Jenya7 - Jan 30 2018, 13:03
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Jan 30 2018, 14:55
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 292
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 Jenya7
Вам понадобится альтеровская EPCS корка - там кажется и разбор с лапами был. Точне не вспомню - посмотрите в "EPCS Device Controller Core" документации детали.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jan 31 2018, 06:46
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 677
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(Kuzmi4 @ Jan 30 2018, 20:55) *
2 Jenya7
Вам понадобится альтеровская EPCS корка - там кажется и разбор с лапами был. Точне не вспомню - посмотрите в "EPCS Device Controller Core" документации детали.

они хотят чтоб я Nios включил в проект. это невозможно. проект уже написан, отлажен и работает.
Go to the top of the page
 
+Quote Post
AVR
сообщение Jan 31 2018, 07:11
Сообщение #4


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 303
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(Jenya7 @ Jan 31 2018, 09:46) *
они хотят чтоб я Nios включил в проект. это невозможно. проект уже написан, отлажен и работает.

Подозреваю, что там SPI (по аналогии с Xilinx, там после загрузки ПЛИС эти выводы становились доступны пользователю), а значит можно и без ниоса, только на логике такое будет не так чтобы сложно, но придется повозиться.


--------------------
Go to the top of the page
 
+Quote Post
doom13
сообщение Jan 31 2018, 07:16
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 400
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(Jenya7 @ Jan 31 2018, 09:46) *
они хотят чтоб я Nios включил в проект. это невозможно. проект уже написан, отлажен и работает.

Можно воспользоваться ASMI-контроллером (ALTASMI_PARALLEL) - не придется тогда на SPI наворачивать протокол обмена с EPCS.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jan 31 2018, 07:20
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1 677
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(AVR @ Jan 31 2018, 13:11) *
Подозреваю, что там SPI (по аналогии с Xilinx, там после загрузки ПЛИС эти выводы становились доступны пользователю), а значит можно и без ниоса, только на логике такое будет не так чтобы сложно, но придется повозиться.

я делаю как написано
Цитата
On the Dual-purpose pins page (Assignments > Devices > Device and Pin
Options), ensure that the following pins are assigned to the respective values:
■ Data[0] = Use as regular I/O
■ Data[1] = Use as regularr I/O
■ DCLK = Use as regular I/O
■ FLASH_nCE/nCS0 = Use as regular I/O

но все равно доступа к пинам нет.

Цитата(doom13 @ Jan 31 2018, 13:16) *
Можно воспользоваться ASMI-контроллером (ALTASMI_PARALLEL) - не придется тогда на SPI наворачивать протокол обмена с EPCS.

не вижу такой опции. а как его подключить к проекту? у меня пины то спиаевские подключены к памяти. ааа...да выглядит неплохо.

Сообщение отредактировал Jenya7 - Jan 31 2018, 07:25
Go to the top of the page
 
+Quote Post
doom13
сообщение Jan 31 2018, 07:38
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 400
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(Jenya7 @ Jan 31 2018, 10:20) *
не вижу такой опции. а как его подключить к проекту? у меня пины то спиаевские подключены к памяти. ааа...да выглядит неплохо.

У Вас "конфигурационные" ноги к памяти подключены, ядро само к ним подключится после добавления в прект.


Для Вас доступна будет только шина общения с ASMI (да, гляньте на значение галочки Disable dedicated AS interface, но для доступа к конф. ножкам она не нужна).
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jan 31 2018, 07:51
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1 677
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(doom13 @ Jan 31 2018, 13:38) *
У Вас "конфигурационные" ноги к памяти подключены, ядро само к ним подключится после добавления в прект.


Для Вас доступна будет только шина общения с ASMI (да, гляньте на значение галочки Disable dedicated AS interface, но для доступа к конф. ножкам она не нужна).

спасибо. подключил ALTASMI_PARALLEL к проекту. осталось разобраться как им пользоваться. а как узнать куда я могу писать? где свободное место?
Go to the top of the page
 
+Quote Post
doom13
сообщение Jan 31 2018, 07:54
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 400
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(Jenya7 @ Jan 30 2018, 13:37) *
У меня FPGA (EP3C25F324I7N) подключен к памяти EPCS16SI8N в которую прописывает програму (файл jic или pof).
Вопрос можно ли использовать эту память для записи своей информации и если да как получить доступ к этим пинам?

Как я понимаю нужно создать SPI компонент и замапить эти пины. И потом обращаться к памяти как обычно.
Вопрос как знать где заканчивается програма? Где начинается свободное место куда можно писать?

Для своей инфы использовать конечно можно.
Размер прошивки - либо в доке на Ваш девайс, либо размер rpd-файла (когда jic выгоняете можно поставить галку, чтоб rpd сформировало, это и есть прошивка, если удалённым загрузчиком грузить, только опции компрессии уберите, чтоб увидеть максимальный размер бинарника).

Да, уже не помню, возможно для 3-го Циклона надо на размер rbf-файла смотреть.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jan 31 2018, 08:01
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 1 677
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(doom13 @ Jan 31 2018, 13:54) *
Для своей инфы использовать конечно можно.
Размер прошивки - либо в доке на Ваш девайс, либо размер rpd-файла (когда jic выгоняете можно поставить галку, чтоб rpd сформировало, это и есть прошивка, если удалённым загрузчиком грузить, только опции компрессии уберите, чтоб увидеть максимальный размер бинарника).

Да, уже не помню, возможно для 3-го Циклона надо на размер rbf-файла смотреть.

а. да. rpd это же raw data по идее размер rpd это размер занимаемой памяти.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jan 31 2018, 11:34
Сообщение #11


Профессионал
*****

Группа: Участник
Сообщений: 1 677
Регистрация: 29-03-12
Пользователь №: 71 075



Мегавизард сгенерировал такой код
Код
LIBRARY ieee;
USE ieee.std_logic_1164.all;

LIBRARY altera_mf;
USE altera_mf.all;

ENTITY EPCS_CONT IS
    PORT
    (
        addr        : IN STD_LOGIC_VECTOR (23 DOWNTO 0);
        clkin        : IN STD_LOGIC;
        datain        : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
        rden        : IN STD_LOGIC;
        read        : IN STD_LOGIC;
        write        : IN STD_LOGIC;
        busy        : OUT STD_LOGIC;
        data_valid        : OUT STD_LOGIC;
        dataout        : OUT STD_LOGIC_VECTOR (7 DOWNTO 0);
        illegal_write        : OUT STD_LOGIC
    );
END EPCS_CONT;


ARCHITECTURE SYN OF epcs_cont IS

    SIGNAL sub_wire0    : STD_LOGIC;
    SIGNAL sub_wire1    : STD_LOGIC;
    SIGNAL sub_wire2    : STD_LOGIC;
    SIGNAL sub_wire3    : STD_LOGIC_VECTOR (7 DOWNTO 0);



    COMPONENT altasmi_parallel
    GENERIC (
        data_width        : STRING;
        epcs_type        : STRING;
        intended_device_family        : STRING;
        lpm_hint        : STRING;
        lpm_type        : STRING;
        page_size        : NATURAL;
        port_bulk_erase        : STRING;
        port_fast_read        : STRING;
        port_illegal_erase        : STRING;
        port_illegal_write        : STRING;
        port_rdid_out        : STRING;
        port_read_address        : STRING;
        port_read_rdid        : STRING;
        port_read_sid        : STRING;
        port_read_status        : STRING;
        port_sector_erase        : STRING;
        port_sector_protect        : STRING;
        port_shift_bytes        : STRING;
        port_wren        : STRING;
        port_write        : STRING;
        use_eab        : STRING
    );
    PORT (
            illegal_write    : OUT STD_LOGIC;
            read    : IN STD_LOGIC;
            addr    : IN STD_LOGIC_VECTOR (23 DOWNTO 0);
            busy    : OUT STD_LOGIC;
            clkin    : IN STD_LOGIC;
            data_valid    : OUT STD_LOGIC;
            datain    : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
            rden    : IN STD_LOGIC;
            write    : IN STD_LOGIC;
            dataout    : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)
    );
    END COMPONENT;

BEGIN
    illegal_write    <= sub_wire0;
    busy    <= sub_wire1;
    data_valid    <= sub_wire2;
    dataout    <= sub_wire3(7 DOWNTO 0);

    ALTASMI_PARALLEL_component : ALTASMI_PARALLEL
    GENERIC MAP (
        data_width => "STANDARD",
        epcs_type => "EPCS16",
        intended_device_family => "Cyclone III",
        lpm_hint => "UNUSED",
        lpm_type => "altasmi_parallel",
        page_size => 256,
        port_bulk_erase => "PORT_UNUSED",
        port_fast_read => "PORT_UNUSED",
        port_illegal_erase => "PORT_UNUSED",
        port_illegal_write => "PORT_USED",
        port_rdid_out => "PORT_UNUSED",
        port_read_address => "PORT_UNUSED",
        port_read_rdid => "PORT_UNUSED",
        port_read_sid => "PORT_UNUSED",
        port_read_status => "PORT_UNUSED",
        port_sector_erase => "PORT_UNUSED",
        port_sector_protect => "PORT_UNUSED",
        port_shift_bytes => "PORT_UNUSED",
        port_wren => "PORT_UNUSED",
        port_write => "PORT_USED",
        use_eab => "ON"
    )
    PORT MAP (
        read => read,
        addr => addr,
        clkin => clkin,
        datain => datain,
        rden => rden,
        write => write,
        illegal_write => sub_wire0,
        busy => sub_wire1,
        data_valid => sub_wire2,
        dataout => sub_wire3
    );

END SYN;

Подключаю в свой проект
Код
component EPCS_CONT is
    port
    (
        addr        : IN STD_LOGIC_VECTOR (23 DOWNTO 0);
        clkin        : IN STD_LOGIC;
        datain        : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
        rden        : IN STD_LOGIC;
        read        : IN STD_LOGIC;
        shift_bytes        : IN STD_LOGIC;
        write        : IN STD_LOGIC;
        busy        : OUT STD_LOGIC;
        data_valid        : OUT STD_LOGIC;
        dataout        : OUT STD_LOGIC_VECTOR (7 DOWNTO 0);
        illegal_write        : OUT STD_LOGIC
    );
end component;

signal addr_sig   : STD_LOGIC_VECTOR (23 DOWNTO 0);
signal datain_sig : STD_LOGIC_VECTOR (7 DOWNTO 0);
signal rden_sig   : STD_LOGIC;
signal read_sig   : STD_LOGIC;
signal shift_bytes_sig : STD_LOGIC;
signal write_sig  : STD_LOGIC;
signal busy_sig   : STD_LOGIC;
signal data_valid_sig : STD_LOGIC;
signal dataout_sig : STD_LOGIC_VECTOR (7 DOWNTO 0);
signal illegal_write_sig : STD_LOGIC;

U_EPCS_CONT : EPCS_CONT port map (
        addr     => addr_sig,
        clkin     => CLK_30MHZ,
        datain     => datain_sig,
        rden     => rden_sig,
        read     => read_sig,
        shift_bytes     => shift_bytes_sig,
        write     => write_sig,
        busy     => busy_sig,
        data_valid     => data_valid_sig,
        dataout     => dataout_sig,
        illegal_write     => illegal_write_sig
    );


При компиляции получаю ошибку
Error (12152): Can't elaborate user hierarchy "EPCS_CONT:U_EPCS_CONT|altasmi_parallel:ALTASMI_PARALLEL_component"

Нашел проблему - должно быть page_size => 1 в Single byte write режиме.
А что лучше использовать Single byte write или Page write?
и вообще там кучу всяких пинов можно подключить, вопрос они нужны или нет?

Сообщение отредактировал Jenya7 - Jan 31 2018, 17:17
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2018 - 04:36
Рейтинг@Mail.ru


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