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

    

Использовать програмную память.

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

Вопрос можно ли использовать эту память для записи своей информации и если да как получить доступ к этим пинам?

 

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

Вопрос как знать где заканчивается програма? Где начинается свободное место куда можно писать?

 

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

post-71075-1517308646_thumb.png

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

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


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

2 Jenya7

Вам понадобится альтеровская EPCS корка - там кажется и разбор с лапами был. Точне не вспомню - посмотрите в "EPCS Device Controller Core" документации детали.

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


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

Вам понадобится альтеровская EPCS корка - там кажется и разбор с лапами был. Точне не вспомню - посмотрите в "EPCS Device Controller Core" документации детали.

они хотят чтоб я Nios включил в проект. это невозможно. проект уже написан, отлажен и работает.

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


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

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

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


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

Можно воспользоваться ASMI-контроллером (ALTASMI_PARALLEL) - не придется тогда на SPI наворачивать протокол обмена с EPCS.

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


Ссылка на сообщение
Поделиться на другие сайты
Подозреваю, что там 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

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

 

Можно воспользоваться ASMI-контроллером (ALTASMI_PARALLEL) - не придется тогда на SPI наворачивать протокол обмена с EPCS.

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

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

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


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

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

 

 

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

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


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

 

 

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

спасибо. подключил ALTASMI_PARALLEL к проекту. осталось разобраться как им пользоваться. а как узнать куда я могу писать? где свободное место?

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


Ссылка на сообщение
Поделиться на другие сайты
У меня FPGA (EP3C25F324I7N) подключен к памяти EPCS16SI8N в которую прописывает програму (файл jic или pof).

Вопрос можно ли использовать эту память для записи своей информации и если да как получить доступ к этим пинам?

 

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

Вопрос как знать где заканчивается програма? Где начинается свободное место куда можно писать?

Для своей инфы использовать конечно можно.

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

 

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

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


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

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

 

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

а. да. rpd это же raw data по идее размер rpd это размер занимаемой памяти.

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


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

Мегавизард сгенерировал такой код

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?

и вообще там кучу всяких пинов можно подключить, вопрос они нужны или нет?

post-71075-1517419021_thumb.png

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

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация